~ruther/qmk_firmware

645359e5d06758172fe3b6c22ad62641af56b4ad — Ryan 3 years ago 178b70f
Joystick: Simplify report descriptor and clean up error messages (#16926)

2 files changed, 27 insertions(+), 24 deletions(-)

M quantum/joystick.h
M tmk_core/protocol/usb_descriptor.c
M quantum/joystick.h => quantum/joystick.h +8 -0
@@ 5,10 5,18 @@

#ifndef JOYSTICK_BUTTON_COUNT
#    define JOYSTICK_BUTTON_COUNT 8
#elif JOYSTICK_BUTTON_COUNT > 32
#    error Joystick feature only supports up to 32 buttons
#endif

#ifndef JOYSTICK_AXES_COUNT
#    define JOYSTICK_AXES_COUNT 4
#elif JOYSTICK_AXES_COUNT > 6
#    error Joystick feature only supports up to 6 axes
#endif

#if JOYSTICK_AXES_COUNT == 0 && JOYSTICK_BUTTON_COUNT == 0
#    error Joystick feature requires at least one axis or button
#endif

#ifndef JOYSTICK_AXES_RESOLUTION

M tmk_core/protocol/usb_descriptor.c => tmk_core/protocol/usb_descriptor.c +19 -24
@@ 347,49 347,44 @@ const USB_Descriptor_HIDReport_Datatype_t PROGMEM ConsoleReport[] = {
#endif

#ifdef JOYSTICK_ENABLE
#    if JOYSTICK_AXES_COUNT == 0 && JOYSTICK_BUTTON_COUNT == 0
#        error Need at least one axis or button for joystick
#    endif
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_COLLECTION(8, 0x00),     // Physical
    HID_RI_USAGE_PAGE(8, 0x01),     // Generic Desktop
    HID_RI_USAGE(8, 0x04),          // Joystick
    HID_RI_COLLECTION(8, 0x01),     // Application
        HID_RI_COLLECTION(8, 0x00), // Physical
#    if JOYSTICK_AXES_COUNT > 0
            HID_RI_USAGE_PAGE(8, 0x01), // Generic Desktop
#    if JOYSTICK_AXES_COUNT >= 1
            HID_RI_USAGE(8, 0x30),      // X
#    endif
#    if JOYSTICK_AXES_COUNT >= 2
#        if JOYSTICK_AXES_COUNT > 1
            HID_RI_USAGE(8, 0x31),      // Y
#    endif
#    if JOYSTICK_AXES_COUNT >= 3
#        endif
#        if JOYSTICK_AXES_COUNT > 2
            HID_RI_USAGE(8, 0x32),      // Z
#    endif
#    if JOYSTICK_AXES_COUNT >= 4
#        endif
#        if JOYSTICK_AXES_COUNT > 3
            HID_RI_USAGE(8, 0x33),      // Rx
#    endif
#    if JOYSTICK_AXES_COUNT >= 5
#        endif
#        if JOYSTICK_AXES_COUNT > 4
            HID_RI_USAGE(8, 0x34),      // Ry
#    endif
#    if JOYSTICK_AXES_COUNT >= 6
#        endif
#        if JOYSTICK_AXES_COUNT > 5
            HID_RI_USAGE(8, 0x35),      // Rz
#    endif
#    if JOYSTICK_AXES_COUNT >= 1
     # if JOYSTICK_AXES_RESOLUTION == 8
#        endif
#        if JOYSTICK_AXES_RESOLUTION == 8
            HID_RI_LOGICAL_MINIMUM(8, -JOYSTICK_RESOLUTION),
            HID_RI_LOGICAL_MAXIMUM(8, JOYSTICK_RESOLUTION),
            HID_RI_REPORT_COUNT(8, JOYSTICK_AXES_COUNT),
            HID_RI_REPORT_SIZE(8, 0x08),
     # else
#        else
            HID_RI_LOGICAL_MINIMUM(16, -JOYSTICK_RESOLUTION),
            HID_RI_LOGICAL_MAXIMUM(16, JOYSTICK_RESOLUTION),
            HID_RI_REPORT_COUNT(8, JOYSTICK_AXES_COUNT),
            HID_RI_REPORT_SIZE(8, 0x10),
     # endif
#        endif
            HID_RI_INPUT(8, HID_IOF_DATA | HID_IOF_VARIABLE | HID_IOF_ABSOLUTE),
#    endif

#    if JOYSTICK_BUTTON_COUNT >= 1
#    if JOYSTICK_BUTTON_COUNT > 0
            HID_RI_USAGE_PAGE(8, 0x09), // Button
            HID_RI_USAGE_MINIMUM(8, 0x01),
            HID_RI_USAGE_MAXIMUM(8, JOYSTICK_BUTTON_COUNT),