Add Support for USB programmable buttons (#12950)
This commit is contained in:
		
							parent
							
								
									1a68feb842
								
							
						
					
					
						commit
						83988597f4
					
				
					 22 changed files with 436 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -142,7 +142,8 @@ static void    send_keyboard(report_keyboard_t *report);
 | 
			
		|||
static void    send_mouse(report_mouse_t *report);
 | 
			
		||||
static void    send_system(uint16_t data);
 | 
			
		||||
static void    send_consumer(uint16_t data);
 | 
			
		||||
host_driver_t  lufa_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer};
 | 
			
		||||
static void    send_programmable_button(uint32_t data);
 | 
			
		||||
host_driver_t  lufa_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer, send_programmable_button};
 | 
			
		||||
 | 
			
		||||
#ifdef VIRTSER_ENABLE
 | 
			
		||||
// clang-format off
 | 
			
		||||
| 
						 | 
				
			
			@ -760,27 +761,31 @@ static void send_mouse(report_mouse_t *report) {
 | 
			
		|||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \brief Send Extra
 | 
			
		||||
 *
 | 
			
		||||
 * FIXME: Needs doc
 | 
			
		||||
 */
 | 
			
		||||
#ifdef EXTRAKEY_ENABLE
 | 
			
		||||
static void send_extra(uint8_t report_id, uint16_t data) {
 | 
			
		||||
static void send_report(void *report, size_t size) {
 | 
			
		||||
    uint8_t timeout = 255;
 | 
			
		||||
 | 
			
		||||
    if (USB_DeviceState != DEVICE_STATE_Configured) return;
 | 
			
		||||
 | 
			
		||||
    static report_extra_t r;
 | 
			
		||||
    r = (report_extra_t){.report_id = report_id, .usage = data};
 | 
			
		||||
    Endpoint_SelectEndpoint(SHARED_IN_EPNUM);
 | 
			
		||||
 | 
			
		||||
    /* Check if write ready for a polling interval around 10ms */
 | 
			
		||||
    while (timeout-- && !Endpoint_IsReadWriteAllowed()) _delay_us(40);
 | 
			
		||||
    if (!Endpoint_IsReadWriteAllowed()) return;
 | 
			
		||||
 | 
			
		||||
    Endpoint_Write_Stream_LE(&r, sizeof(report_extra_t), NULL);
 | 
			
		||||
    Endpoint_Write_Stream_LE(report, size, NULL);
 | 
			
		||||
    Endpoint_ClearIN();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \brief Send Extra
 | 
			
		||||
 *
 | 
			
		||||
 * FIXME: Needs doc
 | 
			
		||||
 */
 | 
			
		||||
#ifdef EXTRAKEY_ENABLE
 | 
			
		||||
static void send_extra(uint8_t report_id, uint16_t data) {
 | 
			
		||||
    static report_extra_t r;
 | 
			
		||||
    r = (report_extra_t){.report_id = report_id, .usage = data};
 | 
			
		||||
    send_report(&r, sizeof(r));
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
/** \brief Send System
 | 
			
		||||
| 
						 | 
				
			
			@ -822,6 +827,14 @@ static void send_consumer(uint16_t data) {
 | 
			
		|||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void send_programmable_button(uint32_t data) {
 | 
			
		||||
#ifdef PROGRAMMABLE_BUTTON_ENABLE
 | 
			
		||||
    static report_programmable_button_t r;
 | 
			
		||||
    r = (report_programmable_button_t){.report_id = REPORT_ID_PROGRAMMABLE_BUTTON, .usage = data};
 | 
			
		||||
    send_report(&r, sizeof(r));
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/*******************************************************************************
 | 
			
		||||
 * sendchar
 | 
			
		||||
 ******************************************************************************/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue