Incorporates patches and changes to HID reporting
There are some patches provided by @a-chol incorporated on this commit,
and also some changes I made to the HID Report structure.
The most interesting is the one dealing with number of buttons: Linux
doesn't seem to care, but Windows requires the HID structure to be byte
aligned (that's in the spec). So if one declares 8/16/32... buttons they
should not have any issues, but this is what happens when you have 9
buttons:
```
 bits |0|1|2|3|4|5|6|7|
      |*|*|*|*|*|*|*|*| axis 0 (report size 8)
      |*|*|*|*|*|*|*|*| ...
      |*|*|*|*|*|*|*|*|
      |*|*|*|*|*|*|*|*|
      |*|*|*|*|*|*|*|*|
      |*|*|*|*|*|*|*|*|
      |*|*|*|*|*|*|*|*| axis 6
      |*|*|*|*|*|*|*|*| first 8 buttons (report size 1)
      |*| | | | | | | | last of 9 buttons, not aligned
```
So for that I added a conditonal that will add a number of reports with
size 1 to make sure it aligns to the next multiple of 8. Those reports
send dummy inputs that don't do anything aside from aligning the data.
Tested on Linux, Windows 10 and Street Fighter (where the joystick is
recognized as direct-input)
			
			
This commit is contained in:
		
							parent
							
								
									3cf7611139
								
							
						
					
					
						commit
						ee43b338ea
					
				
					 2 changed files with 13 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -493,6 +493,10 @@ void EVENT_USB_Device_ConfigurationChanged(void) {
 | 
			
		|||
    ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_OUT_EPADDR, EP_TYPE_BULK, CDC_EPSIZE, ENDPOINT_BANK_SINGLE);
 | 
			
		||||
    ConfigSuccess &= Endpoint_ConfigureEndpoint(CDC_IN_EPADDR, EP_TYPE_BULK, CDC_EPSIZE, ENDPOINT_BANK_SINGLE);
 | 
			
		||||
#endif
 | 
			
		||||
#ifdef JOYSTICK_ENABLE
 | 
			
		||||
    ConfigSuccess &= ENDPOINT_CONFIG(JOYSTICK_IN_EPNUM, EP_TYPE_INTERRUPT, ENDPOINT_DIR_IN,
 | 
			
		||||
                                     JOYSTICK_EPSIZE, ENDPOINT_BANK_SINGLE);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* FIXME: Expose this table in the docs somehow
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -284,9 +284,8 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =
 | 
			
		|||
    HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
 | 
			
		||||
    HID_RI_USAGE(8, 0x04), /* Joystick */
 | 
			
		||||
    HID_RI_COLLECTION(8, 0x01), /* Application */
 | 
			
		||||
        HID_RI_USAGE(8, 0x01), /* Pointer */
 | 
			
		||||
        HID_RI_COLLECTION(8, 0x00), /* Physical */
 | 
			
		||||
 | 
			
		||||
						HID_RI_USAGE_PAGE(8, 0x01), /* Generic Desktop */
 | 
			
		||||
            #if JOYSTICK_AXES_COUNT >= 1 
 | 
			
		||||
                HID_RI_USAGE(8, 0x30),     //     USAGE (X)
 | 
			
		||||
            #endif
 | 
			
		||||
| 
						 | 
				
			
			@ -309,7 +308,7 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =
 | 
			
		|||
            HID_RI_LOGICAL_MAXIMUM(8, 127),
 | 
			
		||||
            HID_RI_REPORT_COUNT(8, JOYSTICK_AXES_COUNT),
 | 
			
		||||
            HID_RI_REPORT_SIZE(8, 0x08),
 | 
			
		||||
            HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_RELATIVE),
 | 
			
		||||
            HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
 | 
			
		||||
 | 
			
		||||
            HID_RI_USAGE_PAGE(8, 0x09), /* Button */
 | 
			
		||||
            HID_RI_USAGE_MINIMUM(8, 0x01),  /* Button 1 */
 | 
			
		||||
| 
						 | 
				
			
			@ -320,6 +319,11 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM JoystickReport[] =
 | 
			
		|||
            HID_RI_REPORT_SIZE(8, 0x01),
 | 
			
		||||
            HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
 | 
			
		||||
 | 
			
		||||
						#if (JOYSTICK_BUTTON_COUNT % 8) != 0
 | 
			
		||||
						HID_RI_REPORT_SIZE(8, 0x01),
 | 
			
		||||
						HID_RI_REPORT_COUNT(8, 8 - (JOYSTICK_BUTTON_COUNT % 8)),
 | 
			
		||||
						HID_RI_INPUT(8, HID_IOF_CONSTANT),
 | 
			
		||||
						#endif
 | 
			
		||||
        HID_RI_END_COLLECTION(0),
 | 
			
		||||
    HID_RI_END_COLLECTION(0),
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue