From 3967682b691563ae0e2362bc6d9c49b31e1f5e2c Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Thu, 22 Jun 2023 16:37:21 -0700 Subject: [PATCH] Added Bluetooth HID report descriptors for Xbox One controllers with newer firmware These descriptors were obtained from Linux /dev/hidraw --- ...08_firmware_5_13_hid_report_descriptor.bin | Bin 0 -> 283 bytes ...08_firmware_5_13_hid_report_descriptor.txt | 220 ++++++++++++++++++ ...08_firmware_5_17_hid_report_descriptor.bin | Bin 0 -> 283 bytes ...08_firmware_5_17_hid_report_descriptor.txt | 220 ++++++++++++++++++ ...14_firmware_5_17_hid_report_descriptor.bin | Bin 0 -> 283 bytes ...14_firmware_5_17_hid_report_descriptor.txt | 220 ++++++++++++++++++ 6 files changed, 660 insertions(+) create mode 100644 xboxone/xboxone_model_1708_firmware_5_13_hid_report_descriptor.bin create mode 100644 xboxone/xboxone_model_1708_firmware_5_13_hid_report_descriptor.txt create mode 100644 xboxone/xboxone_model_1708_firmware_5_17_hid_report_descriptor.bin create mode 100644 xboxone/xboxone_model_1708_firmware_5_17_hid_report_descriptor.txt create mode 100644 xboxone/xboxone_model_1914_firmware_5_17_hid_report_descriptor.bin create mode 100644 xboxone/xboxone_model_1914_firmware_5_17_hid_report_descriptor.txt diff --git a/xboxone/xboxone_model_1708_firmware_5_13_hid_report_descriptor.bin b/xboxone/xboxone_model_1708_firmware_5_13_hid_report_descriptor.bin new file mode 100644 index 0000000000000000000000000000000000000000..a3698b5254a7dbf743b93f11c408637ef341c08c GIT binary patch literal 283 zcmZvWp$@_@5QgvC4R#A*2r7_>L2y7aL2x9XF?$0xjj6*->;Wbk^c0>an1JUR*D^5@ zOw)ef{eRC#@@p)Sum)PwM!~Xe0gTX-LNtzUDfy+optpiWD-G(f5DH?@1A~QR@%k^2 zb_(MlfzuxIDQJ(!5B9X-1dfma$7zPEhzV*mQCEzvcoaUt3jPs0F?1rLc`0i_cNgQr l>bsA Host) +//-------------------------------------------------------------------------------- + +typedef struct +{ + uint8_t reportId; // Report ID = 0x01 (1) + // Collection: CA:GamePad CP:Pointer + uint16_t GD_GamePadPointerX; // Usage 0x00010030: X, Value = 0 to 65535 + uint16_t GD_GamePadPointerY; // Usage 0x00010031: Y, Value = 0 to 65535 + uint16_t GD_GamePadPointerZ; // Usage 0x00010032: Z, Value = 0 to 65535 + uint16_t GD_GamePadPointerRz; // Usage 0x00010035: Rz, Value = 0 to 65535 + // Collection: CA:GamePad + uint16_t SIM_GamePadBrake : 10; // Usage 0x000200C5: Brake, Value = 0 to 1023 + uint8_t : 6; // Pad + uint16_t SIM_GamePadAccelerator : 10; // Usage 0x000200C4: Accelerator, Value = 0 to 1023 + uint8_t : 6; // Pad + uint8_t GD_GamePadHatSwitch : 4; // Usage 0x00010039: Hat switch, Value = 1 to 8, Physical = (Value - 1) x 45 in degrees + uint8_t : 4; // Pad + uint8_t BTN_GamePadButton1 : 1; // Usage 0x00090001: Button 1 Primary/trigger, Value = 0 to 1 + uint8_t BTN_GamePadButton2 : 1; // Usage 0x00090002: Button 2 Secondary, Value = 0 to 1 + uint8_t BTN_GamePadButton3 : 1; // Usage 0x00090003: Button 3 Tertiary, Value = 0 to 1 + uint8_t BTN_GamePadButton4 : 1; // Usage 0x00090004: Button 4, Value = 0 to 1 + uint8_t BTN_GamePadButton5 : 1; // Usage 0x00090005: Button 5, Value = 0 to 1 + uint8_t BTN_GamePadButton6 : 1; // Usage 0x00090006: Button 6, Value = 0 to 1 + uint8_t BTN_GamePadButton7 : 1; // Usage 0x00090007: Button 7, Value = 0 to 1 + uint8_t BTN_GamePadButton8 : 1; // Usage 0x00090008: Button 8, Value = 0 to 1 + uint8_t BTN_GamePadButton9 : 1; // Usage 0x00090009: Button 9, Value = 0 to 1 + uint8_t BTN_GamePadButton10 : 1; // Usage 0x0009000A: Button 10, Value = 0 to 1 + uint8_t BTN_GamePadButton11 : 1; // Usage 0x0009000B: Button 11, Value = 0 to 1 + uint8_t BTN_GamePadButton12 : 1; // Usage 0x0009000C: Button 12, Value = 0 to 1 + uint8_t BTN_GamePadButton13 : 1; // Usage 0x0009000D: Button 13, Value = 0 to 1 + uint8_t BTN_GamePadButton14 : 1; // Usage 0x0009000E: Button 14, Value = 0 to 1 + uint8_t BTN_GamePadButton15 : 1; // Usage 0x0009000F: Button 15, Value = 0 to 1 + uint8_t : 1; // Pad + uint8_t CD_GamePadRecord : 1; // Usage 0x000C00B2: Record, Value = 0 to 1 + uint8_t : 7; // Pad +} inputReport01_t; + + +//-------------------------------------------------------------------------------- +// Physical Interface Device Page outputReport 03 (Device <-- Host) +//-------------------------------------------------------------------------------- + +typedef struct +{ + uint8_t reportId; // Report ID = 0x03 (3) + // Collection: CA:GamePad CL:SetEffectReport + uint8_t PID_GamePadSetEffectReportDcEnableActuators : 4; // Usage 0x000F0097: DC Enable Actuators, Value = 0 to 1 + uint8_t : 4; // Pad + uint8_t PID_GamePadSetEffectReportMagnitude[4]; // Usage 0x000F0070: Magnitude, Value = 0 to 100 + uint8_t PID_GamePadSetEffectReportDuration; // Usage 0x000F0050: Duration, Value = 0 to 255, Physical = Value in 10⁻² s units + uint8_t PID_GamePadSetEffectReportStartDelay; // Usage 0x000F00A7: Start Delay, Value = 0 to 255, Physical = Value in 10⁻² s units + uint8_t PID_GamePadSetEffectReportLoopCount; // Usage 0x000F007C: Loop Count, Value = 0 to 255 +} outputReport03_t; + +#pragma pack(pop) diff --git a/xboxone/xboxone_model_1708_firmware_5_17_hid_report_descriptor.bin b/xboxone/xboxone_model_1708_firmware_5_17_hid_report_descriptor.bin new file mode 100644 index 0000000000000000000000000000000000000000..a3698b5254a7dbf743b93f11c408637ef341c08c GIT binary patch literal 283 zcmZvWp$@_@5QgvC4R#A*2r7_>L2y7aL2x9XF?$0xjj6*->;Wbk^c0>an1JUR*D^5@ zOw)ef{eRC#@@p)Sum)PwM!~Xe0gTX-LNtzUDfy+optpiWD-G(f5DH?@1A~QR@%k^2 zb_(MlfzuxIDQJ(!5B9X-1dfma$7zPEhzV*mQCEzvcoaUt3jPs0F?1rLc`0i_cNgQr l>bsA Host) +//-------------------------------------------------------------------------------- + +typedef struct +{ + uint8_t reportId; // Report ID = 0x01 (1) + // Collection: CA:GamePad CP:Pointer + uint16_t GD_GamePadPointerX; // Usage 0x00010030: X, Value = 0 to 65535 + uint16_t GD_GamePadPointerY; // Usage 0x00010031: Y, Value = 0 to 65535 + uint16_t GD_GamePadPointerZ; // Usage 0x00010032: Z, Value = 0 to 65535 + uint16_t GD_GamePadPointerRz; // Usage 0x00010035: Rz, Value = 0 to 65535 + // Collection: CA:GamePad + uint16_t SIM_GamePadBrake : 10; // Usage 0x000200C5: Brake, Value = 0 to 1023 + uint8_t : 6; // Pad + uint16_t SIM_GamePadAccelerator : 10; // Usage 0x000200C4: Accelerator, Value = 0 to 1023 + uint8_t : 6; // Pad + uint8_t GD_GamePadHatSwitch : 4; // Usage 0x00010039: Hat switch, Value = 1 to 8, Physical = (Value - 1) x 45 in degrees + uint8_t : 4; // Pad + uint8_t BTN_GamePadButton1 : 1; // Usage 0x00090001: Button 1 Primary/trigger, Value = 0 to 1 + uint8_t BTN_GamePadButton2 : 1; // Usage 0x00090002: Button 2 Secondary, Value = 0 to 1 + uint8_t BTN_GamePadButton3 : 1; // Usage 0x00090003: Button 3 Tertiary, Value = 0 to 1 + uint8_t BTN_GamePadButton4 : 1; // Usage 0x00090004: Button 4, Value = 0 to 1 + uint8_t BTN_GamePadButton5 : 1; // Usage 0x00090005: Button 5, Value = 0 to 1 + uint8_t BTN_GamePadButton6 : 1; // Usage 0x00090006: Button 6, Value = 0 to 1 + uint8_t BTN_GamePadButton7 : 1; // Usage 0x00090007: Button 7, Value = 0 to 1 + uint8_t BTN_GamePadButton8 : 1; // Usage 0x00090008: Button 8, Value = 0 to 1 + uint8_t BTN_GamePadButton9 : 1; // Usage 0x00090009: Button 9, Value = 0 to 1 + uint8_t BTN_GamePadButton10 : 1; // Usage 0x0009000A: Button 10, Value = 0 to 1 + uint8_t BTN_GamePadButton11 : 1; // Usage 0x0009000B: Button 11, Value = 0 to 1 + uint8_t BTN_GamePadButton12 : 1; // Usage 0x0009000C: Button 12, Value = 0 to 1 + uint8_t BTN_GamePadButton13 : 1; // Usage 0x0009000D: Button 13, Value = 0 to 1 + uint8_t BTN_GamePadButton14 : 1; // Usage 0x0009000E: Button 14, Value = 0 to 1 + uint8_t BTN_GamePadButton15 : 1; // Usage 0x0009000F: Button 15, Value = 0 to 1 + uint8_t : 1; // Pad + uint8_t CD_GamePadRecord : 1; // Usage 0x000C00B2: Record, Value = 0 to 1 + uint8_t : 7; // Pad +} inputReport01_t; + + +//-------------------------------------------------------------------------------- +// Physical Interface Device Page outputReport 03 (Device <-- Host) +//-------------------------------------------------------------------------------- + +typedef struct +{ + uint8_t reportId; // Report ID = 0x03 (3) + // Collection: CA:GamePad CL:SetEffectReport + uint8_t PID_GamePadSetEffectReportDcEnableActuators : 4; // Usage 0x000F0097: DC Enable Actuators, Value = 0 to 1 + uint8_t : 4; // Pad + uint8_t PID_GamePadSetEffectReportMagnitude[4]; // Usage 0x000F0070: Magnitude, Value = 0 to 100 + uint8_t PID_GamePadSetEffectReportDuration; // Usage 0x000F0050: Duration, Value = 0 to 255, Physical = Value in 10⁻² s units + uint8_t PID_GamePadSetEffectReportStartDelay; // Usage 0x000F00A7: Start Delay, Value = 0 to 255, Physical = Value in 10⁻² s units + uint8_t PID_GamePadSetEffectReportLoopCount; // Usage 0x000F007C: Loop Count, Value = 0 to 255 +} outputReport03_t; + +#pragma pack(pop) diff --git a/xboxone/xboxone_model_1914_firmware_5_17_hid_report_descriptor.bin b/xboxone/xboxone_model_1914_firmware_5_17_hid_report_descriptor.bin new file mode 100644 index 0000000000000000000000000000000000000000..a3698b5254a7dbf743b93f11c408637ef341c08c GIT binary patch literal 283 zcmZvWp$@_@5QgvC4R#A*2r7_>L2y7aL2x9XF?$0xjj6*->;Wbk^c0>an1JUR*D^5@ zOw)ef{eRC#@@p)Sum)PwM!~Xe0gTX-LNtzUDfy+optpiWD-G(f5DH?@1A~QR@%k^2 zb_(MlfzuxIDQJ(!5B9X-1dfma$7zPEhzV*mQCEzvcoaUt3jPs0F?1rLc`0i_cNgQr l>bsA Host) +//-------------------------------------------------------------------------------- + +typedef struct +{ + uint8_t reportId; // Report ID = 0x01 (1) + // Collection: CA:GamePad CP:Pointer + uint16_t GD_GamePadPointerX; // Usage 0x00010030: X, Value = 0 to 65535 + uint16_t GD_GamePadPointerY; // Usage 0x00010031: Y, Value = 0 to 65535 + uint16_t GD_GamePadPointerZ; // Usage 0x00010032: Z, Value = 0 to 65535 + uint16_t GD_GamePadPointerRz; // Usage 0x00010035: Rz, Value = 0 to 65535 + // Collection: CA:GamePad + uint16_t SIM_GamePadBrake : 10; // Usage 0x000200C5: Brake, Value = 0 to 1023 + uint8_t : 6; // Pad + uint16_t SIM_GamePadAccelerator : 10; // Usage 0x000200C4: Accelerator, Value = 0 to 1023 + uint8_t : 6; // Pad + uint8_t GD_GamePadHatSwitch : 4; // Usage 0x00010039: Hat switch, Value = 1 to 8, Physical = (Value - 1) x 45 in degrees + uint8_t : 4; // Pad + uint8_t BTN_GamePadButton1 : 1; // Usage 0x00090001: Button 1 Primary/trigger, Value = 0 to 1 + uint8_t BTN_GamePadButton2 : 1; // Usage 0x00090002: Button 2 Secondary, Value = 0 to 1 + uint8_t BTN_GamePadButton3 : 1; // Usage 0x00090003: Button 3 Tertiary, Value = 0 to 1 + uint8_t BTN_GamePadButton4 : 1; // Usage 0x00090004: Button 4, Value = 0 to 1 + uint8_t BTN_GamePadButton5 : 1; // Usage 0x00090005: Button 5, Value = 0 to 1 + uint8_t BTN_GamePadButton6 : 1; // Usage 0x00090006: Button 6, Value = 0 to 1 + uint8_t BTN_GamePadButton7 : 1; // Usage 0x00090007: Button 7, Value = 0 to 1 + uint8_t BTN_GamePadButton8 : 1; // Usage 0x00090008: Button 8, Value = 0 to 1 + uint8_t BTN_GamePadButton9 : 1; // Usage 0x00090009: Button 9, Value = 0 to 1 + uint8_t BTN_GamePadButton10 : 1; // Usage 0x0009000A: Button 10, Value = 0 to 1 + uint8_t BTN_GamePadButton11 : 1; // Usage 0x0009000B: Button 11, Value = 0 to 1 + uint8_t BTN_GamePadButton12 : 1; // Usage 0x0009000C: Button 12, Value = 0 to 1 + uint8_t BTN_GamePadButton13 : 1; // Usage 0x0009000D: Button 13, Value = 0 to 1 + uint8_t BTN_GamePadButton14 : 1; // Usage 0x0009000E: Button 14, Value = 0 to 1 + uint8_t BTN_GamePadButton15 : 1; // Usage 0x0009000F: Button 15, Value = 0 to 1 + uint8_t : 1; // Pad + uint8_t CD_GamePadRecord : 1; // Usage 0x000C00B2: Record, Value = 0 to 1 + uint8_t : 7; // Pad +} inputReport01_t; + + +//-------------------------------------------------------------------------------- +// Physical Interface Device Page outputReport 03 (Device <-- Host) +//-------------------------------------------------------------------------------- + +typedef struct +{ + uint8_t reportId; // Report ID = 0x03 (3) + // Collection: CA:GamePad CL:SetEffectReport + uint8_t PID_GamePadSetEffectReportDcEnableActuators : 4; // Usage 0x000F0097: DC Enable Actuators, Value = 0 to 1 + uint8_t : 4; // Pad + uint8_t PID_GamePadSetEffectReportMagnitude[4]; // Usage 0x000F0070: Magnitude, Value = 0 to 100 + uint8_t PID_GamePadSetEffectReportDuration; // Usage 0x000F0050: Duration, Value = 0 to 255, Physical = Value in 10⁻² s units + uint8_t PID_GamePadSetEffectReportStartDelay; // Usage 0x000F00A7: Start Delay, Value = 0 to 255, Physical = Value in 10⁻² s units + uint8_t PID_GamePadSetEffectReportLoopCount; // Usage 0x000F007C: Loop Count, Value = 0 to 255 +} outputReport03_t; + +#pragma pack(pop)