diff options
Diffstat (limited to 'rcm-server-udev.c')
-rw-r--r-- | rcm-server-udev.c | 137 |
1 files changed, 68 insertions, 69 deletions
diff --git a/rcm-server-udev.c b/rcm-server-udev.c index 77fb403..fec809d 100644 --- a/rcm-server-udev.c +++ b/rcm-server-udev.c @@ -16,57 +16,57 @@ #include "rcm-server-udev.h" void -device_free(struct device *device) +rc_device_free(struct rc_device *rcdev) { - if (!device) + if (!rcdev) return; - list_del(&device->list); - lirc_close(device); - evdev_close(device); + list_del(&rcdev->list); + lirc_close(rcdev); + evdev_close(rcdev); - free(device->path); - free(device->input_name); - free(device->driver_name); - free(device->keymap_name); - free(device->dev_name); + free(rcdev->path); + free(rcdev->input_name); + free(rcdev->driver_name); + free(rcdev->keymap_name); + free(rcdev->dev_name); - while (!list_empty(&device->keymaps)) { - struct keymap *keymap = list_first_entry(&device->keymaps, typeof(*keymap), list); + while (!list_empty(&rcdev->keymaps)) { + struct keymap *keymap = list_first_entry(&rcdev->keymaps, typeof(*keymap), list); list_del(&keymap->list); free(keymap->name); free(keymap); } - free(device); + free(rcdev); } static void -device_remove(struct manager *mgr, struct udev_device *udev) +udev_device_remove(struct manager *mgr, struct udev_device *udev) { const char *name; - struct device *device; + struct rc_device *rcdev; name = udev_device_get_sysname(udev); printf("Asked to remove device %s\n", name); - list_for_each_entry(device, &mgr->devices, list) { - if (strcmp(device->name, name)) + list_for_each_entry(rcdev, &mgr->rc_devs, list) { + if (strcmp(rcdev->name, name)) continue; - sd_bus_emit_object_removed(mgr->bus, device->path); - device_free(device); - mgr->num_devices--; + sd_bus_emit_object_removed(mgr->bus, rcdev->path); + rc_device_free(rcdev); + mgr->num_rc_devs--; break; } } static void -device_add(struct manager *mgr, struct udev_device *udev) +udev_device_add(struct manager *mgr, struct udev_device *udev) { const char *name; const char *str; char *path; - struct device *device; + struct rc_device *rcdev; struct udev_enumerate *enumerate; struct udev_list_entry *devices, *dev_list_entry; int r; @@ -77,29 +77,28 @@ device_add(struct manager *mgr, struct udev_device *udev) return; } - device = malloc(sizeof(*device)); - if (!device) { + rcdev = malloc(sizeof(*rcdev)); + if (!rcdev) { fprintf(stderr, "malloc failed: %m\n"); free(path); return; } - list_init(&device->keymaps); - device->mgr = mgr; - device->path = path; - device->name = device->path + strlen("/org/gnome/RemoteControlManager/"); - device->evdev_fd = -1; - device->lirc_fd = -1; - device->error = NULL; - device->input_name = NULL; - device->driver_name = NULL; - device->keymap_name = NULL; - device->dev_name = NULL; - - if (keymaps_load(device) < 0) { + list_init(&rcdev->keymaps); + rcdev->mgr = mgr; + rcdev->path = path; + rcdev->name = rcdev->path + strlen("/org/gnome/RemoteControlManager/"); + rcdev->evdev_fd = -1; + rcdev->lirc_fd = -1; + rcdev->error = NULL; + rcdev->input_name = NULL; + rcdev->driver_name = NULL; + rcdev->keymap_name = NULL; + rcdev->dev_name = NULL; + + if (keymaps_load(rcdev) < 0) { fprintf(stderr, "failed to load keymaps: %m\n"); - free(path); - free(device); + rc_device_free(rcdev); return; } @@ -141,18 +140,18 @@ device_add(struct manager *mgr, struct udev_device *udev) } if (!strcmp(subsys, "input")) { - r = evdev_setup(device, devnode); + r = evdev_setup(rcdev, devnode); if (r < 0) { printf("Failed to setup evdev: %s\n", devnode); - device->error = "Error: Failed to setup evdev"; + rcdev->error = "Error: Failed to setup evdev"; goto next; } } else if (!strcmp(subsys, "lirc")) { - r = lirc_setup(device, devnode); + r = lirc_setup(rcdev, devnode); if (r < 0) { printf("Failed to setup lirc: %s\n", devnode); - device->error = "Error: Failed to setup lirc"; + rcdev->error = "Error: Failed to setup lirc"; goto next; } @@ -175,11 +174,11 @@ next: for (token = strtok(tmp, "\n"); token; token = strtok(NULL, "\n")) { if (!strncmp(token, "DRV_NAME=", strlen("DRV_NAME="))) - device->driver_name = strdup(token + strlen("DRV_NAME=")); + rcdev->driver_name = strdup(token + strlen("DRV_NAME=")); else if (!strncmp(token, "NAME=", strlen("NAME="))) - device->keymap_name = strdup(token + strlen("NAME=")); + rcdev->keymap_name = strdup(token + strlen("NAME=")); else if (!strncmp(token, "DEVNAME=", strlen("DEVNAME="))) - device->dev_name = strdup(token + strlen("DEVNAME=")); + rcdev->dev_name = strdup(token + strlen("DEVNAME=")); else if (!strncmp(token, "MAJOR=", strlen("MAJOR="))) continue; else if (!strncmp(token, "MINOR=", strlen("MINOR="))) @@ -195,19 +194,19 @@ next: printf("\tSubsystem : %s\n", udev_device_get_subsystem(udev)); printf("\tDevtype : %s\n", udev_device_get_devtype(udev)); printf("\tAction : %s\n", udev_device_get_action(udev)); - printf("\tName : %s\n", device->name); - printf("\tInput name: %s\n", device->input_name); - printf("\tDriver : %s\n", device->driver_name); - printf("\tKernel map: %s\n", device->keymap_name); - printf("\tDev name : %s\n", device->dev_name); - printf("\tevdev fd : %i\n", device->evdev_fd); - printf("\tLIRC fd : %i\n", device->lirc_fd); - printf("\tDBUS path : %s\n", device->path); + printf("\tName : %s\n", rcdev->name); + printf("\tInput name: %s\n", rcdev->input_name); + printf("\tDriver : %s\n", rcdev->driver_name); + printf("\tKernel map: %s\n", rcdev->keymap_name); + printf("\tDev name : %s\n", rcdev->dev_name); + printf("\tevdev fd : %i\n", rcdev->evdev_fd); + printf("\tLIRC fd : %i\n", rcdev->lirc_fd); + printf("\tDBUS path : %s\n", rcdev->path); printf("\tProtocols : %s\n", udev_device_get_sysattr_value(udev, "protocols")); - list_add(&device->list, &mgr->devices); - mgr->num_devices++; + list_add(&rcdev->list, &mgr->rc_devs); + mgr->num_rc_devs++; sd_bus_emit_object_added(mgr->bus, path); } @@ -216,7 +215,7 @@ static int udev_read(sd_event_source *s, int fd, uint32_t revents, void *userdata) { struct manager *mgr = userdata; - struct udev_device *dev; + struct udev_device *udev_dev; if (revents & EPOLLHUP) { fprintf(stderr, "udev connection closed!\n"); @@ -228,13 +227,13 @@ udev_read(sd_event_source *s, int fd, uint32_t revents, void *userdata) return 0; } - while ((dev = udev_monitor_receive_device(mgr->udev_mon))) { - printf("Read device: %s\n", udev_device_get_syspath(dev)); - if (!strcmp(udev_device_get_action(dev), "add")) - device_add(mgr, dev); - else if (!strcmp(udev_device_get_action(dev), "remove")) - device_remove(mgr, dev); - udev_device_unref(dev); + while ((udev_dev = udev_monitor_receive_device(mgr->udev_mon))) { + printf("Read device: %s\n", udev_device_get_syspath(udev_dev)); + if (!strcmp(udev_device_get_action(udev_dev), "add")) + udev_device_add(mgr, udev_dev); + else if (!strcmp(udev_device_get_action(udev_dev), "remove")) + udev_device_remove(mgr, udev_dev); + udev_device_unref(udev_dev); } return 1; @@ -245,7 +244,7 @@ udev_setup(struct manager *mgr) { struct udev_enumerate *enumerate; struct udev_list_entry *devices, *dev_list_entry; - struct udev_device *dev; + struct udev_device *udev_dev; mgr->udev = udev_new(); if (!mgr->udev) @@ -269,15 +268,15 @@ udev_setup(struct manager *mgr) continue; } - dev = udev_device_new_from_syspath(mgr->udev, path); - if (!dev) { + udev_dev = udev_device_new_from_syspath(mgr->udev, path); + if (!udev_dev) { printf("Failed to create udev device\n"); continue; } - device_add(mgr, dev); + udev_device_add(mgr, udev_dev); - udev_device_unref(dev); + udev_device_unref(udev_dev); } udev_enumerate_unref(enumerate); |