From 43ea7c79785e4ea3518b2d122b6e47891ab478d9 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Tue, 7 Jan 2020 17:30:40 +0100 Subject: Adds compatibility test. --- include/relabsd/compatibility_test.h | 10 +++ include/relabsd/device/physical_device.h | 5 ++ include/relabsd/device/virtual_device.h | 11 ++++ include/relabsd/device/virtual_device_types.h | 1 + src/compatibility_test.c | 93 +++++++++++++++++++++++++++ src/config/parameters/parameters.c | 71 +++++++++++++++----- src/device/physical/physical_device.c | 8 +++ src/device/virtual/virtual_device.c | 56 +++++++++------- src/main.c | 3 +- src/server/conversion_main_loop.c | 19 +++++- src/server/server.c | 5 +- 11 files changed, 239 insertions(+), 43 deletions(-) create mode 100644 include/relabsd/compatibility_test.h create mode 100644 src/compatibility_test.c diff --git a/include/relabsd/compatibility_test.h b/include/relabsd/compatibility_test.h new file mode 100644 index 0000000..b81d767 --- /dev/null +++ b/include/relabsd/compatibility_test.h @@ -0,0 +1,10 @@ +#pragma once + +#include + +int relabsd_compatibility_test_main +( + const int argc, + const char * const argv [const static argc], + struct relabsd_parameters parameters [const restrict static 1] +); diff --git a/include/relabsd/device/physical_device.h b/include/relabsd/device/physical_device.h index 33ff18a..babf911 100644 --- a/include/relabsd/device/physical_device.h +++ b/include/relabsd/device/physical_device.h @@ -45,3 +45,8 @@ int relabsd_physical_device_get_file_descriptor ( const struct relabsd_physical_device device [const restrict static 1] ); + +struct libevdev * relabsd_physical_device_get_libevdev +( + struct relabsd_physical_device device [const restrict static 1] +); diff --git a/include/relabsd/device/virtual_device.h b/include/relabsd/device/virtual_device.h index fffb2a3..f4ffeca 100644 --- a/include/relabsd/device/virtual_device.h +++ b/include/relabsd/device/virtual_device.h @@ -54,3 +54,14 @@ void relabsd_virtual_device_set_axes_to_zero struct relabsd_parameters parameters [const restrict static 1], const struct relabsd_virtual_device device [const restrict static 1] ); + +void relabsd_virtual_device_set_has_already_timed_out +( + const int val, + struct relabsd_virtual_device device [const restrict static 1] +); + +int relabsd_virtual_device_has_already_timed_out +( + const struct relabsd_virtual_device device [const restrict static 1] +); diff --git a/include/relabsd/device/virtual_device_types.h b/include/relabsd/device/virtual_device_types.h index 7c0c05a..304f537 100644 --- a/include/relabsd/device/virtual_device_types.h +++ b/include/relabsd/device/virtual_device_types.h @@ -18,6 +18,7 @@ struct relabsd_virtual_device { + int already_timed_out; struct libevdev * libevdev; struct libevdev_uinput * uinput_device; }; diff --git a/src/compatibility_test.c b/src/compatibility_test.c new file mode 100644 index 0000000..1741e07 --- /dev/null +++ b/src/compatibility_test.c @@ -0,0 +1,93 @@ +/**** POSIX *******************************************************************/ +#include + +/**** LIBEVDEV ****************************************************************/ +#include + +/**** RELABSD *****************************************************************/ +#include + +#include + +#include +#include + +/******************************************************************************/ +/**** LOCAL FUNCTIONS *********************************************************/ +/******************************************************************************/ +static int test_for_axis_and_print_info +( + const struct libevdev * const restrict libevdev +) +{ + int i, device_has_rel; + unsigned int rel_code; + + device_has_rel = 0; + + for (i = 0; i < RELABSD_AXIS_VALID_AXES_COUNT; ++i) + { + rel_code = relabsd_axis_name_to_evdev_rel((enum relabsd_axis_name) i); + + if (libevdev_has_event_code(libevdev, EV_REL, rel_code)) + { + printf + ( + "Relative axis: %s\n", + relabsd_axis_name_to_string((enum relabsd_axis_name) i) + ); + + device_has_rel = 1; + } + } + + return device_has_rel; +} + +/******************************************************************************/ +/**** EXPORTED FUNCTIONS ******************************************************/ +/******************************************************************************/ +int relabsd_compatibility_test_main +( + const int argc, + const char * const argv [const static argc], + struct relabsd_parameters parameters [const restrict static 1] +) +{ + struct relabsd_physical_device device; + int is_compatible; + struct libevdev * libevdev; + + if (relabsd_parameters_parse_options(argc, argv, parameters) < 0) + { + return -1; + } + + if + ( + relabsd_physical_device_open + ( + relabsd_parameters_get_physical_device_file_name(parameters), + &device + ) + < 0 + ) + { + return -1; + } + + libevdev = relabsd_physical_device_get_libevdev(&device); + is_compatible = test_for_axis_and_print_info (libevdev); + + if (!is_compatible) + { + return 0; + } + + if (relabsd_parameters_are_compatible_with(libevdev, parameters)) + { + return 2; + } + + return 1; +} diff --git a/src/config/parameters/parameters.c b/src/config/parameters/parameters.c index eb06c42..0e98016 100644 --- a/src/config/parameters/parameters.c +++ b/src/config/parameters/parameters.c @@ -148,6 +148,32 @@ int relabsd_parameters_parse_execution_mode parameters->physical_device_file_name = argv[2]; parameters->read_argc = 2; } + else if (argc == 3) + { + parameters->mode = RELABSD_PARAMETERS_SERVER_MODE; + parameters->communication_node_name = (char *) NULL; + parameters->physical_device_file_name = argv[1]; + parameters->read_argc = 2; + + if (relabsd_parameters_parse_config_file(argv[2], parameters) < 0) + { + return -1; + } + } + else if (argc == 4) + { + parameters->mode = RELABSD_PARAMETERS_SERVER_MODE; + parameters->communication_node_name = (char *) NULL; + parameters->physical_device_file_name = argv[1]; + + if (relabsd_parameters_parse_config_file(argv[2], parameters) < 0) + { + return -1; + } + + parameters->device_name = argv[3]; + parameters->read_argc = 3; + } else { relabsd_parameters_print_usage(argv[0]); @@ -377,25 +403,27 @@ void relabsd_parameters_print_usage (const char exec [const restrict static 1]) { printf ( - "USAGE: %s [