/// Report descriptor for the Deck mouse device (/dev/hidraw0 on Deck)
pub const MOUSE_DESCRIPTOR: [u8; 65] = [
    0x05, 0x01, // Usage Page (Generic Desktop)
    0x09, 0x02, // Usage (Mouse)
    0xa1, 0x01, // Collection (Application)
    0x09, 0x01, //  Usage (Pointer)
    0xa1, 0x00, //  Collection (Physical)
    0x05, 0x09, //   Usage Page (Button)
    0x19, 0x01, //   Usage Minimum (1)
    0x29, 0x02, //   Usage Maximum (2)
    0x15, 0x00, //   Logical Minimum (0)
    0x25, 0x01, //   Logical Maximum (1)
    0x75, 0x01, //   Report Size (1)
    0x95, 0x02, //   Report Count (2)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x75, 0x06, //   Report Size (6)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x01, //   Input (Cnst,Arr,Abs)
    0x05, 0x01, //   Usage Page (Generic Desktop)
    0x09, 0x30, //   Usage (X)
    0x09, 0x31, //   Usage (Y)
    0x15, 0x81, //   Logical Minimum (-127)
    0x25, 0x7f, //   Logical Maximum (127)
    0x75, 0x08, //   Report Size (8)
    0x95, 0x02, //   Report Count (2)
    0x81, 0x06, //   Input (Data,Var,Rel)
    0x95, 0x01, //   Report Count (1)
    0x09, 0x38, //   Usage (Wheel)
    0x81, 0x06, //   Input (Data,Var,Rel)
    0x05, 0x0c, //   Usage Page (Consumer Devices)
    0x0a, 0x38, 0x02, //   Usage (AC Pan)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x06, //   Input (Data,Var,Rel)
    0xc0, //  End Collection
    0xc0, // End Collection
];

/// Report descriptor for the Deck keyboard device (/dev/hidraw1 on Deck)
pub const KEYBOARD_DESCRIPTOR: [u8; 39] = [
    0x05, 0x01, // Usage Page (Generic Desktop)
    0x09, 0x06, // Usage (Keyboard)
    0xa1, 0x01, // Collection (Application)
    0x05, 0x07, //  Usage Page (Keyboard)
    0x19, 0xe0, //  Usage Minimum (224)
    0x29, 0xe7, //  Usage Maximum (231)
    0x15, 0x00, //  Logical Minimum (0)
    0x25, 0x01, //  Logical Maximum (1)
    0x75, 0x01, //  Report Size (1)
    0x95, 0x08, //  Report Count (8)
    0x81, 0x02, //  Input (Data,Var,Abs)
    0x81, 0x01, //  Input (Cnst,Arr,Abs)
    0x19, 0x00, //  Usage Minimum (0)
    0x29, 0x65, //  Usage Maximum (101)
    0x15, 0x00, //  Logical Minimum (0)
    0x25, 0x65, //  Logical Maximum (101)
    0x75, 0x08, //  Report Size (8)
    0x95, 0x06, //  Report Count (6)
    0x81, 0x00, //  Input (Data,Arr,Abs)
    0xc0, // End Collection
];

/// Valve Software Steam Controller
/// Report descriptor for the Deck Controller device (/dev/hidraw3 on Deck)
pub const CONTROLLER_DESCRIPTOR: [u8; 38] = [
    0x06, 0xff, 0xff, // Usage Page (Vendor Usage Page 0xffff)
    0x09, 0x01, // Usage (Vendor Usage 0x01)
    0xa1, 0x01, // Collection (Application)
    0x09, 0x02, //  Usage (Vendor Usage 0x02)
    0x09, 0x03, //  Usage (Vendor Usage 0x03)
    0x15, 0x00, //  Logical Minimum (0)
    0x26, 0xff, 0x00, //  Logical Maximum (255)
    0x75, 0x08, //  Report Size (8)
    0x95, 0x40, //  Report Count (64)
    0x81, 0x02, //  Input (Data,Var,Abs)
    0x09, 0x06, //  Usage (Vendor Usage 0x06)
    0x09, 0x07, //  Usage (Vendor Usage 0x07)
    0x15, 0x00, //  Logical Minimum (0)
    0x26, 0xff, 0x00, //  Logical Maximum (255)
    0x75, 0x08, //  Report Size (8)
    0x95, 0x40, //  Report Count (64)
    0xb1, 0x02, //  Feature (Data,Var,Abs)
    0xc0, // End Collection
];

/// FTS3528:00 2808:1015
/// Report descriptor for the Deck touchscreen (/dev/hidraw2 on Deck)
#[allow(dead_code)]
pub const TOUCHSCREEN_DESCRIPTOR: [u8; 543] = [
    0x05, 0x0d, // Usage Page (Digitizers)
    0x09, 0x04, // Usage (Touch Screen)
    0xa1, 0x01, // Collection (Application)
    0x85, 0x01, //  Report ID (1)
    0x09, 0x22, //  Usage (Finger)
    0xa1, 0x02, //  Collection (Logical)
    0x09, 0x42, //   Usage (Tip Switch)
    0x15, 0x00, //   Logical Minimum (0)
    0x25, 0x01, //   Logical Maximum (1)
    0x75, 0x01, //   Report Size (1)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x03, //   Input (Cnst,Var,Abs)
    0x95, 0x06, //   Report Count (6)
    0x81, 0x03, //   Input (Cnst,Var,Abs)
    0x75, 0x08, //   Report Size (8)
    0x09, 0x51, //   Usage (Contact Id)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x05, 0x01, //   Usage Page (Generic Desktop)
    0x26, 0x20, 0x03, //   Logical Maximum (800)
    0x75, 0x10, //   Report Size (16)
    0x55, 0x0e, //   Unit Exponent (-2)
    0x65, 0x11, //   Unit (SILinear: cm)
    0x09, 0x30, //   Usage (X)
    0x35, 0x00, //   Physical Minimum (0)
    0x46, 0x0b, 0x0a, //   Physical Maximum (2571)
    0x95, 0x02, //   Report Count (2)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x35, 0x01, //   Physical Minimum (1)
    0x35, 0x00, //   Physical Minimum (0)
    0x46, 0xaa, 0x05, //   Physical Maximum (1450)
    0x26, 0x00, 0x05, //   Logical Maximum (1280)
    0x09, 0x31, //   Usage (Y)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x35, 0x01, //   Physical Minimum (1)
    0x35, 0x00, //   Physical Minimum (0)
    0x05, 0x0d, //   Usage Page (Digitizers)
    0x26, 0xff, 0x00, //   Logical Maximum (255)
    0x46, 0xff, 0x00, //   Physical Maximum (255)
    0x95, 0x01, //   Report Count (1)
    0x09, 0x48, //   Usage (Width)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x09, 0x49, //   Usage (Height)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0xc0, //  End Collection
    0x09, 0x22, //  Usage (Finger)
    0xa1, 0x02, //  Collection (Logical)
    0x09, 0x42, //   Usage (Tip Switch)
    0x15, 0x00, //   Logical Minimum (0)
    0x25, 0x01, //   Logical Maximum (1)
    0x75, 0x01, //   Report Size (1)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x03, //   Input (Cnst,Var,Abs)
    0x95, 0x06, //   Report Count (6)
    0x81, 0x03, //   Input (Cnst,Var,Abs)
    0x75, 0x08, //   Report Size (8)
    0x09, 0x51, //   Usage (Contact Id)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x05, 0x01, //   Usage Page (Generic Desktop)
    0x26, 0x20, 0x03, //   Logical Maximum (800)
    0x75, 0x10, //   Report Size (16)
    0x55, 0x0e, //   Unit Exponent (-2)
    0x65, 0x11, //   Unit (SILinear: cm)
    0x09, 0x30, //   Usage (X)
    0x35, 0x00, //   Physical Minimum (0)
    0x46, 0x0b, 0x0a, //   Physical Maximum (2571)
    0x95, 0x02, //   Report Count (2)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x35, 0x01, //   Physical Minimum (1)
    0x35, 0x00, //   Physical Minimum (0)
    0x46, 0xaa, 0x05, //   Physical Maximum (1450)
    0x26, 0x00, 0x05, //   Logical Maximum (1280)
    0x09, 0x31, //   Usage (Y)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x35, 0x01, //   Physical Minimum (1)
    0x35, 0x00, //   Physical Minimum (0)
    0x05, 0x0d, //   Usage Page (Digitizers)
    0x26, 0xff, 0x00, //   Logical Maximum (255)
    0x46, 0xff, 0x00, //   Physical Maximum (255)
    0x95, 0x01, //   Report Count (1)
    0x09, 0x48, //   Usage (Width)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x09, 0x49, //   Usage (Height)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0xc0, //  End Collection
    0x09, 0x22, //  Usage (Finger)
    0xa1, 0x02, //  Collection (Logical)
    0x09, 0x42, //   Usage (Tip Switch)
    0x15, 0x00, //   Logical Minimum (0)
    0x25, 0x01, //   Logical Maximum (1)
    0x75, 0x01, //   Report Size (1)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x03, //   Input (Cnst,Var,Abs)
    0x95, 0x06, //   Report Count (6)
    0x81, 0x03, //   Input (Cnst,Var,Abs)
    0x75, 0x08, //   Report Size (8)
    0x09, 0x51, //   Usage (Contact Id)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x05, 0x01, //   Usage Page (Generic Desktop)
    0x26, 0x20, 0x03, //   Logical Maximum (800)
    0x75, 0x10, //   Report Size (16)
    0x55, 0x0e, //   Unit Exponent (-2)
    0x65, 0x11, //   Unit (SILinear: cm)
    0x09, 0x30, //   Usage (X)
    0x35, 0x00, //   Physical Minimum (0)
    0x46, 0x0b, 0x0a, //   Physical Maximum (2571)
    0x95, 0x02, //   Report Count (2)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x35, 0x01, //   Physical Minimum (1)
    0x35, 0x00, //   Physical Minimum (0)
    0x46, 0xaa, 0x05, //   Physical Maximum (1450)
    0x26, 0x00, 0x05, //   Logical Maximum (1280)
    0x09, 0x31, //   Usage (Y)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x35, 0x01, //   Physical Minimum (1)
    0x35, 0x00, //   Physical Minimum (0)
    0x05, 0x0d, //   Usage Page (Digitizers)
    0x26, 0xff, 0x00, //   Logical Maximum (255)
    0x46, 0xff, 0x00, //   Physical Maximum (255)
    0x95, 0x01, //   Report Count (1)
    0x09, 0x48, //   Usage (Width)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x09, 0x49, //   Usage (Height)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0xc0, //  End Collection
    0x09, 0x22, //  Usage (Finger)
    0xa1, 0x02, //  Collection (Logical)
    0x09, 0x42, //   Usage (Tip Switch)
    0x15, 0x00, //   Logical Minimum (0)
    0x25, 0x01, //   Logical Maximum (1)
    0x75, 0x01, //   Report Size (1)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x03, //   Input (Cnst,Var,Abs)
    0x95, 0x06, //   Report Count (6)
    0x81, 0x03, //   Input (Cnst,Var,Abs)
    0x75, 0x08, //   Report Size (8)
    0x09, 0x51, //   Usage (Contact Id)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x05, 0x01, //   Usage Page (Generic Desktop)
    0x26, 0x20, 0x03, //   Logical Maximum (800)
    0x75, 0x10, //   Report Size (16)
    0x55, 0x0e, //   Unit Exponent (-2)
    0x65, 0x11, //   Unit (SILinear: cm)
    0x09, 0x30, //   Usage (X)
    0x35, 0x00, //   Physical Minimum (0)
    0x46, 0x0b, 0x0a, //   Physical Maximum (2571)
    0x95, 0x02, //   Report Count (2)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x35, 0x01, //   Physical Minimum (1)
    0x35, 0x00, //   Physical Minimum (0)
    0x46, 0xaa, 0x05, //   Physical Maximum (1450)
    0x26, 0x00, 0x05, //   Logical Maximum (1280)
    0x09, 0x31, //   Usage (Y)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x35, 0x01, //   Physical Minimum (1)
    0x35, 0x00, //   Physical Minimum (0)
    0x05, 0x0d, //   Usage Page (Digitizers)
    0x26, 0xff, 0x00, //   Logical Maximum (255)
    0x46, 0xff, 0x00, //   Physical Maximum (255)
    0x95, 0x01, //   Report Count (1)
    0x09, 0x48, //   Usage (Width)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x09, 0x49, //   Usage (Height)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0xc0, //  End Collection
    0x05, 0x0d, //  Usage Page (Digitizers)
    0x27, 0xff, 0xff, 0x00, 0x00, //  Logical Maximum (65535)
    0x75, 0x10, //  Report Size (16)
    0x95, 0x01, //  Report Count (1)
    0x09, 0x56, //  Usage (Scan Time)
    0x81, 0x02, //  Input (Data,Var,Abs)
    0x09, 0x54, //  Usage (Contact Count)
    0x25, 0x10, //  Logical Maximum (16)
    0x95, 0x01, //  Report Count (1)
    0x75, 0x08, //  Report Size (8)
    0x81, 0x02, //  Input (Data,Var,Abs)
    0x85, 0x02, //  Report ID (2)
    0x09, 0x55, //  Usage (Contact Max)
    0x95, 0x01, //  Report Count (1)
    0x25, 0x0a, //  Logical Maximum (10)
    0xb1, 0x02, //  Feature (Data,Var,Abs)
    0x06, 0x00, 0xff, //  Usage Page (Vendor Defined Page 1)
    0x09, 0xc5, //  Usage (Vendor Usage 0xc5)
    0x85, 0x05, //  Report ID (5)
    0x15, 0x00, //  Logical Minimum (0)
    0x26, 0xff, 0x00, //  Logical Maximum (255)
    0x75, 0x08, //  Report Size (8)
    0x96, 0x00, 0x01, //  Report Count (256)
    0xb1, 0x02, //  Feature (Data,Var,Abs)
    0xc0, // End Collection
    0x06, 0x00, 0xff, // Usage Page (Vendor Defined Page 1)
    0x09, 0x01, // Usage (Vendor Usage 1)
    0xa1, 0x01, // Collection (Application)
    0x15, 0x00, //  Logical Minimum (0)
    0x26, 0xff, 0x00, //  Logical Maximum (255)
    0x75, 0x08, //  Report Size (8)
    0x85, 0x06, //  Report ID (6)
    0x95, 0x3f, //  Report Count (63)
    0x09, 0x01, //  Usage (Vendor Usage 1)
    0x81, 0x02, //  Input (Data,Var,Abs)
    0x09, 0x01, //  Usage (Vendor Usage 1)
    0x91, 0x02, //  Output (Data,Var,Abs)
    0xc0, // End Collection
    0x05, 0x0d, // Usage Page (Digitizers)
    0x09, 0x00, // Usage (Undefined)
    0xa1, 0x01, // Collection (Application)
    0x85, 0x07, //  Report ID (7)
    0x09, 0x20, //  Usage (Stylus)
    0xa1, 0x02, //  Collection (Logical)
    0x09, 0x42, //   Usage (Tip Switch)
    0x09, 0x44, //   Usage (Barrel Switch)
    0x09, 0x45, //   Usage (Eraser)
    0x15, 0x00, //   Logical Minimum (0)
    0x25, 0x01, //   Logical Maximum (1)
    0x75, 0x01, //   Report Size (1)
    0x95, 0x03, //   Report Count (3)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x03, //   Input (Cnst,Var,Abs)
    0x09, 0x32, //   Usage (In Range)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x95, 0x03, //   Report Count (3)
    0x81, 0x03, //   Input (Cnst,Var,Abs)
    0x05, 0x01, //   Usage Page (Generic Desktop)
    0x55, 0x0e, //   Unit Exponent (-2)
    0x65, 0x11, //   Unit (SILinear: cm)
    0x35, 0x00, //   Physical Minimum (0)
    0x75, 0x10, //   Report Size (16)
    0x95, 0x02, //   Report Count (2)
    0x46, 0x7c, 0x0b, //   Physical Maximum (2940)
    0x26, 0xff, 0x0f, //   Logical Maximum (4095)
    0x09, 0x30, //   Usage (X)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x46, 0x7c, 0x06, //   Physical Maximum (1660)
    0x26, 0xff, 0x0f, //   Logical Maximum (4095)
    0x09, 0x31, //   Usage (Y)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0x05, 0x0d, //   Usage Page (Digitizers)
    0x09, 0x30, //   Usage (Tip Pressure)
    0x15, 0x01, //   Logical Minimum (1)
    0x26, 0xff, 0x00, //   Logical Maximum (255)
    0x75, 0x08, //   Report Size (8)
    0x95, 0x01, //   Report Count (1)
    0x81, 0x02, //   Input (Data,Var,Abs)
    0xc0, //  End Collection
    0xc0, // End Collection
];
