spark input device handling: add function for reopening

This commit is contained in:
martii
2012-09-18 16:25:35 +02:00
parent 586ff9d657
commit 53e9396bc1

View File

@@ -37,8 +37,8 @@ typedef struct {
const char *name;
const char *desc;
int fd;
int major;
int minor;
unsigned int major;
unsigned int minor;
time_t next_discovery;
} input_device_t;
@@ -59,7 +59,7 @@ static input_device_t input_device[] = {
static int number_of_input_devices = 0;
static int do_mknod(int i, char *d_name) {
static void do_mknod(int i, char *d_name) {
char name[255];
int dev = -1;
// I've no idea how the event device number is actually calculated. Just loop. --martii
@@ -152,6 +152,26 @@ static void open_input_devices(void) {
}
}
static void reopen_input_devices(void) {
create_input_devices();
time_t now = time(NULL);
for (int i = 0; i < number_of_input_devices; i++) {
input_device[i].next_discovery = now + 60;
int fd = open(input_device[i].name, O_RDWR | O_NONBLOCK);
if (fd > -1) {
if (input_device[i].fd > -1) {
dup2(fd, input_device[i].fd);
close (fd);
} else {
input_device[i].fd = fd;
}
} else if (input_device[i].fd > -1) {
close (input_device[i].fd);
input_device[i].fd = -1;
}
}
}
static void close_input_devices(void) {
for (int i = 0; i < number_of_input_devices; i++)
if (input_device[i].fd > -1) {
@@ -267,6 +287,10 @@ void init_td_api()
start_inmux_thread();
#endif
}
#ifdef MARTII
else
reopen_input_devices();
#endif
initialized = true;
lt_info("%s end\n", __FUNCTION__);
}