@@ -225,6 +225,14 @@ void do_screen_switch(device_t *state, int direction) {
225225 switch_virtual_desktop (state , output , output -> screen_index + 1 , direction );
226226}
227227
228+ inline void extract_value (bool uses_id , int32_t * dst , report_val_t * src , uint8_t * raw_report , int len ) {
229+ /* If HID Report ID is used, the report is prefixed by the report ID so we have to move by 1 byte */
230+ if (uses_id && (* raw_report ++ != src -> report_id ))
231+ return ;
232+
233+ * dst = get_report_value (raw_report , len , src );
234+ }
235+
228236void extract_report_values (uint8_t * raw_report , int len , device_t * state , mouse_values_t * values , hid_interface_t * iface ) {
229237 /* Interpret values depending on the current protocol used. */
230238 if (iface -> protocol == HID_PROTOCOL_BOOT ) {
@@ -237,34 +245,14 @@ void extract_report_values(uint8_t *raw_report, int len, device_t *state, mouse_
237245 values -> buttons = mouse_report -> buttons ;
238246 return ;
239247 }
240-
241- /* If HID Report ID is used, the report is prefixed by the report ID so we have to move by 1 byte */
242- if (iface -> uses_report_id ) {
243- uint8_t report_id = raw_report [0 ];
244- raw_report ++ ;
245- if (report_id == iface -> mouse .move_x .report_id )
246- values -> move_x = get_report_value (raw_report , len , & iface -> mouse .move_x );
247-
248- if (report_id == iface -> mouse .move_y .report_id )
249- values -> move_y = get_report_value (raw_report , len , & iface -> mouse .move_y );
250-
251- if (report_id == iface -> mouse .wheel .report_id )
252- values -> wheel = get_report_value (raw_report , len , & iface -> mouse .wheel );
253-
254- if (report_id == iface -> mouse .pan .report_id )
255- values -> pan = get_report_value (raw_report , len , & iface -> mouse .pan );
256-
257- if (report_id == iface -> mouse .buttons .report_id )
258- values -> buttons = get_report_value (raw_report , len , & iface -> mouse .buttons );
259- else
260- values -> buttons = state -> mouse_buttons ;
261- } else {
262- values -> move_x = get_report_value (raw_report , len , & iface -> mouse .move_x );
263- values -> move_y = get_report_value (raw_report , len , & iface -> mouse .move_y );
264- values -> wheel = get_report_value (raw_report , len , & iface -> mouse .wheel );
265- values -> pan = get_report_value (raw_report , len , & iface -> mouse .pan );
266- values -> buttons = get_report_value (raw_report , len , & iface -> mouse .buttons );
267- }
248+ mouse_t * mouse = & iface -> mouse ;
249+ bool uses_id = iface -> uses_report_id ;
250+
251+ extract_value (uses_id , & values -> move_x , & mouse -> move_x , raw_report , len );
252+ extract_value (uses_id , & values -> move_y , & mouse -> move_y , raw_report , len );
253+ extract_value (uses_id , & values -> wheel , & mouse -> wheel , raw_report , len );
254+ extract_value (uses_id , & values -> pan , & mouse -> pan , raw_report , len );
255+ extract_value (uses_id , & values -> buttons , & mouse -> buttons , raw_report , len );
268256}
269257
270258mouse_report_t create_mouse_report (device_t * state , mouse_values_t * values ) {
0 commit comments