mirror of
				https://github.com/mfulz/qmk_firmware.git
				synced 2025-10-30 21:02:32 +01:00 
			
		
		
		
	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
					
				| @ -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 | ||||||
| @ -114,7 +126,7 @@ static const USBDescriptor *usb_get_descriptor_cb(USBDriver *usbp, uint8_t dtype | |||||||
|     uint16_t             wValue  = ((uint16_t)dtype << 8) | dindex; |     uint16_t             wValue  = ((uint16_t)dtype << 8) | dindex; | ||||||
|     uint16_t             wLength = ((uint16_t)usbp->setup[7] << 8) | usbp->setup[6]; |     uint16_t             wLength = ((uint16_t)usbp->setup[7] << 8) | usbp->setup[6]; | ||||||
|     desc.ud_string               = NULL; |     desc.ud_string               = NULL; | ||||||
|     desc.ud_size                 = get_usb_descriptor(wValue, wIndex, wLength, (const void **const) & desc.ud_string); |     desc.ud_size                 = get_usb_descriptor(wValue, wIndex, wLength, (const void **const)&desc.ud_string); | ||||||
|     if (desc.ud_string == NULL) |     if (desc.ud_string == NULL) | ||||||
|         return NULL; |         return NULL; | ||||||
|     else |     else | ||||||
| @ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Jack Humbert
						Jack Humbert