| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/device/physical/physical_device.c | 36 | ||||
| -rw-r--r-- | src/server/conversion_main_loop.c | 35 | 
2 files changed, 43 insertions, 28 deletions
diff --git a/src/device/physical/physical_device.c b/src/device/physical/physical_device.c index cf74b3c..797c734 100644 --- a/src/device/physical/physical_device.c +++ b/src/device/physical/physical_device.c @@ -148,14 +148,13 @@ int relabsd_physical_device_read                  * through them in order.                  * TODO: add an option to allow users to drop events when late.                  */ -               device->is_late ? +               (device->is_late == 1) ?                 LIBEVDEV_READ_FLAG_SYNC                 : LIBEVDEV_READ_FLAG_NORMAL              )              /* "The fd is not in O_NONBLOCK and a read may block." */              | LIBEVDEV_READ_FLAG_BLOCKING -         ) -         , +         ),           &event        ); @@ -166,7 +165,7 @@ int relabsd_physical_device_read           RELABSD_DEBUG           (              RELABSD_DEBUG_REAL_EVENTS, -            "Valid event received: {type = %s; code = %s; value = %d}.", +            "SUCCESS Valid event received: {type = %s; code = %s; value = %d}.",               libevdev_event_type_get_name(event.type),               libevdev_event_code_get_name(event.type, event.code),               event.value @@ -176,7 +175,9 @@ int relabsd_physical_device_read           *input_code = event.code;           *input_value = event.value; -         return 0; +         device->is_late = 0; + +         return 1;        /* Code indicating that we are late. */        case LIBEVDEV_READ_STATUS_SYNC: @@ -187,21 +188,26 @@ int relabsd_physical_device_read            * so we don't actually have any input event in hand.            */ -         /* FIXME: Really make sure this cannot recurse a second time. */ -         return -            relabsd_physical_device_read -            ( -               device, -               input_type, -               input_code, -               input_value -            ); +         *input_type = event.type; +         *input_code = event.code; +         *input_value = event.value; + +         RELABSD_DEBUG +         ( +            RELABSD_DEBUG_REAL_EVENTS, +            "SYNC Valid event received: {type = %s; code = %s; value = %d}.", +             libevdev_event_type_get_name(event.type), +             libevdev_event_code_get_name(event.type, event.code), +             event.value +         ); + +         return 1;        /* No event to read. */        case -EAGAIN:           device->is_late = 0; -         return -1; +         return 0;        default:           RELABSD_FATAL diff --git a/src/server/conversion_main_loop.c b/src/server/conversion_main_loop.c index 5a0dc7d..174ff26 100644 --- a/src/server/conversion_main_loop.c +++ b/src/server/conversion_main_loop.c @@ -17,27 +17,33 @@  /******************************************************************************/  /**** LOCAL FUNCTIONS *********************************************************/  /******************************************************************************/ -static void convert_input + +/* + * Returned values: + * -1 -> error. + * 0 -> No more events available. + * 1 -> Maybe more events available. + */ +static int convert_input  (     struct relabsd_server server [const restrict static 1]  )  {     unsigned int input_type, input_code; -   int value; +   int value, return_code; -   if -   ( +   return_code =        relabsd_physical_device_read        (           &(server->physical_device),           &input_type,           &input_code,           &value -      ) -      < 0 -   ) +      ); + +   if (return_code <= 0)     { -      return; +      return 0;     }     if (input_type == EV_REL) @@ -52,7 +58,7 @@ static void convert_input        if (axis_name == RELABSD_UNKNOWN)        { -         return; +         return return_code;        }        axis = relabsd_parameters_get_axis(axis_name, &(server->parameters)); @@ -83,7 +89,7 @@ static void convert_input        {           case -1:              /* Doesn't want the event to be transmitted. */ -            return; +            return return_code;           case 1:              (void) relabsd_virtual_device_write_evdev_event @@ -99,7 +105,7 @@ static void convert_input                 0,                 &(server->virtual_device)              ); -            return; +            return return_code;           case 0:              (void) relabsd_virtual_device_write_evdev_event @@ -109,7 +115,7 @@ static void convert_input                 input_code,                 value              ); -            return; +            return return_code;        }     }     else @@ -123,6 +129,8 @@ static void convert_input           value        );     } + +   return return_code;  }  static void reset_axes @@ -266,7 +274,8 @@ int relabsd_server_conversion_loop              )              {                 pthread_mutex_lock(&(server->mutex)); -               convert_input(server); +               /* convert all events in the libevdev buffer. */ +               while (convert_input(server) > 0);                 pthread_mutex_unlock(&(server->mutex));              }  | 


