summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-01-09 02:29:59 +0100
committerNathanael Sensfelder <SpamShield0@MultiAgentSystems.org>2020-01-09 02:29:59 +0100
commit87a86b9a599de35d09da7d954ba662091accc90b (patch)
treeaa9ceaafce612bc622a7a8fcfed34ab74226245c /src/device
parentc7c834e9944c94de3d07f21ce2d2d3f18a03b3b2 (diff)
Adds all the new functionalities.daemon
Some TODOs and slight coding style inconsistencies remaining, though...
Diffstat (limited to 'src/device')
-rw-r--r--src/device/axis/axis.c19
-rw-r--r--src/device/virtual/virtual_device.c93
2 files changed, 88 insertions, 24 deletions
diff --git a/src/device/axis/axis.c b/src/device/axis/axis.c
index 5fe313e..e854e37 100644
--- a/src/device/axis/axis.c
+++ b/src/device/axis/axis.c
@@ -24,7 +24,7 @@ void relabsd_axis_initialize
void relabsd_axis_to_absinfo
(
- struct relabsd_axis axis [const restrict static 1],
+ const struct relabsd_axis axis [const restrict static 1],
struct input_absinfo absinfo [const restrict static 1]
)
{
@@ -51,3 +51,20 @@ int relabsd_axis_is_enabled
{
return axis->is_enabled;
}
+
+int relabsd_axis_attributes_are_dirty
+(
+ const struct relabsd_axis axis [const restrict static 1]
+)
+{
+ return axis->attributes_were_modified;
+}
+
+void relabsd_axis_set_attributes_are_dirty
+(
+ const int val,
+ struct relabsd_axis axis [const restrict static 1]
+)
+{
+ axis->attributes_were_modified = val;
+}
diff --git a/src/device/virtual/virtual_device.c b/src/device/virtual/virtual_device.c
index bd73743..d4be1b8 100644
--- a/src/device/virtual/virtual_device.c
+++ b/src/device/virtual/virtual_device.c
@@ -39,31 +39,21 @@ static void replace_rel_axes
if (relabsd_axis_is_enabled(axis))
{
- struct input_absinfo absinfo;
-
- relabsd_axis_to_absinfo(axis, &absinfo);
-
- /* TODO: report failure? 0 on success, -1 otherwise, no cause given. */
- (void) libevdev_disable_event_code
+ (void) relabsd_virtual_device_update_axis_absinfo
(
- device->libevdev,
- EV_REL,
- relabsd_axis_name_to_evdev_rel(axis_name)
- );
-
- (void) libevdev_enable_event_code
- (
- device->libevdev,
- EV_ABS,
- relabsd_axis_name_to_evdev_abs(axis_name),
- &absinfo
+ axis_name,
+ axis,
+ device
);
}
}
-
}
-static int rename_device
+
+/******************************************************************************/
+/**** EXPORTED FUNCTIONS ******************************************************/
+/******************************************************************************/
+int relabsd_virtual_device_rename
(
const struct relabsd_parameters parameters [const restrict static 1],
const struct relabsd_virtual_device device [const restrict static 1]
@@ -146,9 +136,36 @@ static int rename_device
return 0;
}
-/******************************************************************************/
-/**** EXPORTED FUNCTIONS ******************************************************/
-/******************************************************************************/
+int relabsd_virtual_device_update_axis_absinfo
+(
+ const enum relabsd_axis_name axis_name,
+ const struct relabsd_axis axis [const restrict static 1],
+ const struct relabsd_virtual_device device [const restrict static 1]
+)
+{
+ struct input_absinfo absinfo;
+
+ relabsd_axis_to_absinfo(axis, &absinfo);
+
+ /* TODO: report failure? 0 on success, -1 otherwise, no cause given. */
+ (void) libevdev_disable_event_code
+ (
+ device->libevdev,
+ EV_REL,
+ relabsd_axis_name_to_evdev_rel(axis_name)
+ );
+
+ (void) libevdev_enable_event_code
+ (
+ device->libevdev,
+ EV_ABS,
+ relabsd_axis_name_to_evdev_abs(axis_name),
+ &absinfo
+ );
+
+ return 0;
+}
+
int relabsd_virtual_device_create_from
(
struct relabsd_parameters parameters [const restrict static 1],
@@ -202,7 +219,7 @@ int relabsd_virtual_device_create_from
device->libevdev = physical_device_libevdev;
/* Not exactly fatal, is it? */
- (void) rename_device(parameters, device);
+ (void) relabsd_virtual_device_rename(parameters, device);
libevdev_enable_event_type(physical_device_libevdev, EV_ABS);
@@ -244,6 +261,36 @@ int relabsd_virtual_device_create_from
return 0;
}
+int relabsd_virtual_device_recreate
+(
+ struct relabsd_virtual_device device [const restrict static 1]
+)
+{
+ int err;
+ RELABSD_S_DEBUG(RELABSD_DEBUG_PROGRAM_FLOW, "Recreating virtual device...");
+
+ libevdev_uinput_destroy(device->uinput_device);
+
+ err =
+ libevdev_uinput_create_from_device
+ (
+ (device->libevdev),
+ /* See top of the file. */
+ LIBEVDEV_UINPUT_OPEN_MANAGED,
+ &(device->uinput_device)
+ );
+
+ if (err != 0)
+ {
+ RELABSD_FATAL("Could not recreate uinput device: %s.", strerror(-err));
+
+ return -1;
+ }
+
+ RELABSD_S_DEBUG(RELABSD_DEBUG_PROGRAM_FLOW, "Recreated virtual device.");
+ return 0;
+}
+
void relabsd_virtual_device_destroy
(
const struct relabsd_virtual_device device [const restrict static 1]