Provide more debugging information for controllers

This commit is contained in:
Iwan Timmer
2017-06-19 22:13:35 +02:00
parent 0e4820e3a8
commit c23d95f83c
7 changed files with 25 additions and 15 deletions

View File

@@ -397,7 +397,7 @@ static int evdev_handle(int fd) {
return LOOP_OK; return LOOP_OK;
} }
void evdev_create(const char* device, struct mapping* mappings) { void evdev_create(const char* device, struct mapping* mappings, bool verbose) {
int fd = open(device, O_RDONLY|O_NONBLOCK); int fd = open(device, O_RDONLY|O_NONBLOCK);
if (fd <= 0) { if (fd <= 0) {
fprintf(stderr, "Failed to open device %s\n", device); fprintf(stderr, "Failed to open device %s\n", device);
@@ -419,14 +419,21 @@ void evdev_create(const char* device, struct mapping* mappings) {
for (int i = 0; i < 16; i++) for (int i = 0; i < 16; i++)
buf += sprintf(buf, "%02x", ((unsigned char*) guid)[i]); buf += sprintf(buf, "%02x", ((unsigned char*) guid)[i]);
while (mappings != NULL && strncmp(str_guid, mappings->guid, 32) != 0) while (mappings != NULL) {
if (strncmp(str_guid, mappings->guid, 32) == 0) {
if (verbose)
printf("Detected %s (%s) on %s\n", mappings->name, str_guid, device);
break;
}
mappings = mappings->next; mappings = mappings->next;
}
bool is_keyboard = libevdev_has_event_code(evdev, EV_KEY, KEY_Q); bool is_keyboard = libevdev_has_event_code(evdev, EV_KEY, KEY_Q);
bool is_mouse = libevdev_has_event_type(evdev, EV_REL) || libevdev_has_event_code(evdev, EV_KEY, BTN_LEFT); bool is_mouse = libevdev_has_event_type(evdev, EV_REL) || libevdev_has_event_code(evdev, EV_KEY, BTN_LEFT);
if (mappings == NULL && !(is_keyboard || is_mouse)) if (mappings == NULL && !(is_keyboard || is_mouse))
fprintf(stderr, "No mapping available for %s\n", device); fprintf(stderr, "No mapping available for %s (%s)\n", device, str_guid);
int dev = numDevices; int dev = numDevices;
numDevices++; numDevices++;

View File

@@ -19,7 +19,7 @@
#include "mapping.h" #include "mapping.h"
void evdev_create(const char* device, struct mapping* mappings); void evdev_create(const char* device, struct mapping* mappings, bool verbose);
void evdev_loop(); void evdev_loop();
void evdev_init(); void evdev_init();

View File

@@ -21,16 +21,18 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdbool.h>
#include <string.h> #include <string.h>
struct mapping* mapping_load(char* fileName) { struct mapping* mapping_load(char* fileName, bool verbose) {
struct mapping* mappings = NULL; struct mapping* mappings = NULL;
struct mapping* map = NULL; struct mapping* map = NULL;
FILE* fd = fopen(fileName, "r"); FILE* fd = fopen(fileName, "r");
if (fd == NULL) { if (fd == NULL) {
fprintf(stderr, "Can't open mapping file: %s\n", fileName); fprintf(stderr, "Can't open mapping file: %s\n", fileName);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} } else if (verbose)
printf("Loading mappingfile %s\n", fileName);
char *line = NULL; char *line = NULL;
size_t len = 0; size_t len = 0;

View File

@@ -47,4 +47,4 @@ struct mapping {
struct mapping* next; struct mapping* next;
}; };
struct mapping* mapping_load(char* fileName); struct mapping* mapping_load(char* fileName, bool verbose);

View File

@@ -31,7 +31,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <poll.h> #include <poll.h>
static bool autoadd; static bool autoadd, debug;
static struct mapping* defaultMappings; static struct mapping* defaultMappings;
static struct udev *udev; static struct udev *udev;
@@ -46,7 +46,7 @@ static int udev_handle(int fd) {
const char *devnode = udev_device_get_devnode(dev); const char *devnode = udev_device_get_devnode(dev);
int id; int id;
if (devnode != NULL && sscanf(devnode, "/dev/input/event%d", &id) == 1) { if (devnode != NULL && sscanf(devnode, "/dev/input/event%d", &id) == 1) {
evdev_create(devnode, defaultMappings); evdev_create(devnode, defaultMappings, debug);
} }
} }
udev_device_unref(dev); udev_device_unref(dev);
@@ -54,8 +54,9 @@ static int udev_handle(int fd) {
return LOOP_OK; return LOOP_OK;
} }
void udev_init(bool autoload, struct mapping* mappings) { void udev_init(bool autoload, struct mapping* mappings, bool verbose) {
udev = udev_new(); udev = udev_new();
debug = verbose;
if (!udev) { if (!udev) {
fprintf(stderr, "Can't create udev\n"); fprintf(stderr, "Can't create udev\n");
exit(1); exit(1);
@@ -75,7 +76,7 @@ void udev_init(bool autoload, struct mapping* mappings) {
const char *devnode = udev_device_get_devnode(dev); const char *devnode = udev_device_get_devnode(dev);
int id; int id;
if (devnode != NULL && sscanf(devnode, "/dev/input/event%d", &id) == 1) { if (devnode != NULL && sscanf(devnode, "/dev/input/event%d", &id) == 1) {
evdev_create(devnode, mappings); evdev_create(devnode, mappings, verbose);
} }
udev_device_unref(dev); udev_device_unref(dev);
} }

View File

@@ -19,5 +19,5 @@
#include "mapping.h" #include "mapping.h"
void udev_init(bool autoload, struct mapping* mappings); void udev_init(bool autoload, struct mapping* mappings, bool verbose);
void evdev_destroy(); void evdev_destroy();

View File

@@ -256,16 +256,16 @@ int main(int argc, char* argv[]) {
fprintf(stderr, "Please specify mapping file as default mapping could not be found.\n"); fprintf(stderr, "Please specify mapping file as default mapping could not be found.\n");
exit(-1); exit(-1);
} }
struct mapping* mappings = mapping_load(config.mapping); struct mapping* mappings = mapping_load(config.mapping, config.debug_level > 0);
for (int i=0;i<config.inputsCount;i++) { for (int i=0;i<config.inputsCount;i++) {
if (config.debug_level > 0) if (config.debug_level > 0)
printf("Add input %s...\n", config.inputs[i]); printf("Add input %s...\n", config.inputs[i]);
evdev_create(config.inputs[i], mappings); evdev_create(config.inputs[i], mappings, config.debug_level > 0);
} }
udev_init(!inputAdded, mappings); udev_init(!inputAdded, mappings, config.debug_level > 0);
evdev_init(); evdev_init();
#ifdef HAVE_LIBCEC #ifdef HAVE_LIBCEC
cec_init(); cec_init();