From 26b95c0953b8024d487897bf2aaaf1a8836f23a7 Mon Sep 17 00:00:00 2001 From: Nathanael Sensfelder Date: Wed, 2 Sep 2015 15:55:11 +0200 Subject: relabsd is no longer limited to 6DOF devices. --- src/relabsd_device.c | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) (limited to 'src/relabsd_device.c') diff --git a/src/relabsd_device.c b/src/relabsd_device.c index ced74d8..eb4da8b 100644 --- a/src/relabsd_device.c +++ b/src/relabsd_device.c @@ -22,22 +22,29 @@ #define RELABSD_UINPUT_OPEN_MANAGED LIBEVDEV_UINPUT_OPEN_MANAGED #endif -static void replace_rel_axis +static void replace_rel_axes ( struct relabsd_device * const dev, - const struct relabsd_config * const config, - struct input_absinfo * const absinfo, - unsigned int rel_code + const struct relabsd_config * const config ) { - enum relabsd_axis rad_code; - unsigned int abs_code; + int i; + struct input_absinfo absinfo; + unsigned int abs_code, rel_code; - rad_code = relabsd_axis_convert_evdev_rel(rel_code, &abs_code); + for (i = RELABSD_VALID_AXES_COUNT; i --> 0;) + { + if (config->axis[i].enabled) + { + rel_code = relabsd_axis_to_rel((enum relabsd_axis) i); + abs_code = relabsd_axis_to_abs((enum relabsd_axis) i); + + relabsd_config_get_absinfo(config, (enum relabsd_axis) i, &absinfo); + libevdev_disable_event_code(dev->dev, EV_REL, rel_code); + libevdev_enable_event_code(dev->dev, EV_ABS, abs_code, &absinfo); + } + } - relabsd_config_get_absinfo(config, rad_code, absinfo); - libevdev_disable_event_code(dev->dev, EV_REL, rel_code); - libevdev_enable_event_code(dev->dev, EV_ABS, abs_code, absinfo); } int relabsd_device_create @@ -46,7 +53,6 @@ int relabsd_device_create const struct relabsd_config * const config ) { - struct input_absinfo absinfo; int fd; fd = open(config->input_file, O_RDONLY); @@ -63,10 +69,7 @@ int relabsd_device_create return -1; } - if - ( - libevdev_new_from_fd(fd, &(dev->dev)) < 0 - ) + if (libevdev_new_from_fd(fd, &(dev->dev)) < 0) { _FATAL ( @@ -84,12 +87,7 @@ int relabsd_device_create libevdev_enable_event_type(dev->dev, EV_ABS); - replace_rel_axis(dev, config, &absinfo, REL_X); - replace_rel_axis(dev, config, &absinfo, REL_Y); - replace_rel_axis(dev, config, &absinfo, REL_Z); - replace_rel_axis(dev, config, &absinfo, REL_RX); - replace_rel_axis(dev, config, &absinfo, REL_RY); - replace_rel_axis(dev, config, &absinfo, REL_RZ); + replace_rel_axes(dev, config); if ( -- cgit v1.2.3-70-g09d2