forked from mirrors/qmk_userspace
		
	Return USB HID GET_REPORT requests (#14814)
Co-authored-by: Sergey Vlasov <sigprof@gmail.com> Co-authored-by: Nick Brassel <nick@tzarc.org>
This commit is contained in:
		
					parent
					
						
							
								dd93b17e96
							
						
					
				
			
			
				commit
				
					
						a23333eb58
					
				
			
		
					 1 changed files with 46 additions and 15 deletions
				
			
		| 
						 | 
					@ -76,12 +76,24 @@ static void keyboard_idle_timer_cb(void *arg);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
report_keyboard_t keyboard_report_sent = {{0}};
 | 
					report_keyboard_t keyboard_report_sent = {{0}};
 | 
				
			||||||
#ifdef MOUSE_ENABLE
 | 
					report_mouse_t mouse_report_sent = {0};
 | 
				
			||||||
report_mouse_t mouse_report_blank = {0};
 | 
					
 | 
				
			||||||
#endif /* MOUSE_ENABLE */
 | 
					union {
 | 
				
			||||||
 | 
					    uint8_t report_id;
 | 
				
			||||||
 | 
					    report_keyboard_t keyboard;
 | 
				
			||||||
#ifdef EXTRAKEY_ENABLE
 | 
					#ifdef EXTRAKEY_ENABLE
 | 
				
			||||||
uint8_t extra_report_blank[3] = {0};
 | 
					    report_extra_t extra;
 | 
				
			||||||
#endif /* EXTRAKEY_ENABLE */
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef MOUSE_ENABLE
 | 
				
			||||||
 | 
					    report_mouse_t mouse;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef DIGITIZER_ENABLE
 | 
				
			||||||
 | 
					    report_digitizer_t digitizer;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef JOYSTICK_ENABLE
 | 
				
			||||||
 | 
					    joystick_report_t joystick;
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					} universal_report_blank = {0};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* ---------------------------------------------------------
 | 
					/* ---------------------------------------------------------
 | 
				
			||||||
 *            Descriptors and USB driver objects
 | 
					 *            Descriptors and USB driver objects
 | 
				
			||||||
| 
						 | 
					@ -616,20 +628,38 @@ static bool usb_request_hook_cb(USBDriver *usbp) {
 | 
				
			||||||
                switch (usbp->setup[1]) { /* bRequest */
 | 
					                switch (usbp->setup[1]) { /* bRequest */
 | 
				
			||||||
                    case HID_GET_REPORT:
 | 
					                    case HID_GET_REPORT:
 | 
				
			||||||
                        switch (usbp->setup[4]) { /* LSB(wIndex) (check MSB==0?) */
 | 
					                        switch (usbp->setup[4]) { /* LSB(wIndex) (check MSB==0?) */
 | 
				
			||||||
 | 
					#ifndef KEYBOARD_SHARED_EP
 | 
				
			||||||
                            case KEYBOARD_INTERFACE:
 | 
					                            case KEYBOARD_INTERFACE:
 | 
				
			||||||
                                usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, sizeof(keyboard_report_sent), NULL);
 | 
					                                usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, KEYBOARD_REPORT_SIZE, NULL);
 | 
				
			||||||
                                return TRUE;
 | 
					 | 
				
			||||||
                                break;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP)
 | 
					 | 
				
			||||||
                            case MOUSE_INTERFACE:
 | 
					 | 
				
			||||||
                                usbSetupTransfer(usbp, (uint8_t *)&mouse_report_blank, sizeof(mouse_report_blank), NULL);
 | 
					 | 
				
			||||||
                                return TRUE;
 | 
					                                return TRUE;
 | 
				
			||||||
                                break;
 | 
					                                break;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					#if defined(MOUSE_ENABLE) && !defined(MOUSE_SHARED_EP)
 | 
				
			||||||
 | 
					                            case MOUSE_INTERFACE:
 | 
				
			||||||
 | 
					                                usbSetupTransfer(usbp, (uint8_t *)&mouse_report_sent, sizeof(mouse_report_sent), NULL);
 | 
				
			||||||
 | 
					                                return TRUE;
 | 
				
			||||||
 | 
					                                break;    
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					#ifdef SHARED_EP_ENABLE
 | 
				
			||||||
 | 
					                            case SHARED_INTERFACE:
 | 
				
			||||||
 | 
					#   ifdef KEYBOARD_SHARED_EP
 | 
				
			||||||
 | 
					                                if (usbp->setup[2] == REPORT_ID_KEYBOARD) {
 | 
				
			||||||
 | 
					                                    usbSetupTransfer(usbp, (uint8_t *)&keyboard_report_sent, KEYBOARD_REPORT_SIZE, NULL);
 | 
				
			||||||
 | 
					                                    return TRUE;
 | 
				
			||||||
 | 
					                                    break;
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					#   endif
 | 
				
			||||||
 | 
					#   ifdef MOUSE_SHARED_EP
 | 
				
			||||||
 | 
					                                if (usbp->setup[2] == REPORT_ID_MOUSE) {
 | 
				
			||||||
 | 
					                                    usbSetupTransfer(usbp, (uint8_t *)&mouse_report_sent, sizeof(mouse_report_sent), NULL);
 | 
				
			||||||
 | 
					                                    return TRUE;
 | 
				
			||||||
 | 
					                                    break;                       
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					#   endif
 | 
				
			||||||
 | 
					#endif /* SHARED_EP_ENABLE */
 | 
				
			||||||
                            default:
 | 
					                            default:
 | 
				
			||||||
                                usbSetupTransfer(usbp, NULL, 0, NULL);
 | 
					                                universal_report_blank.report_id = usbp->setup[2];
 | 
				
			||||||
 | 
					                                usbSetupTransfer(usbp, (uint8_t *)&universal_report_blank, usbp->setup[6], NULL);
 | 
				
			||||||
                                return TRUE;
 | 
					                                return TRUE;
 | 
				
			||||||
                                break;
 | 
					                                break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
| 
						 | 
					@ -922,6 +952,7 @@ void send_mouse(report_mouse_t *report) {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    usbStartTransmitI(&USB_DRIVER, MOUSE_IN_EPNUM, (uint8_t *)report, sizeof(report_mouse_t));
 | 
					    usbStartTransmitI(&USB_DRIVER, MOUSE_IN_EPNUM, (uint8_t *)report, sizeof(report_mouse_t));
 | 
				
			||||||
 | 
					    mouse_report_sent = *report;
 | 
				
			||||||
    osalSysUnlock();
 | 
					    osalSysUnlock();
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue