/** * DualSense Access Controller HID Report Maps * * Byte-level layout for USB and Bluetooth input/output reports. * Cross-referenced with titania C library (access_input_msg, access_output_msg) * and confirmed by physical testing. */ /** * USB Input Report 0x01 (64 bytes) / BT Input Report 0x31 (78 bytes) * * The Access input report has two regions: * - Shared header (bytes 0–15): DualSense-compatible mapped output * - Access-specific (bytes 16–55): raw buttons, raw stick, expansion ports, battery, profile * * BT offset: USB byte N → BT byte N+1 (one header byte, NOT +2 like DualSense) */ export declare const AccessInput: { /** BT 0x31 has 1 header byte after report ID (DualSense has 2) */ readonly BT_OFFSET: 1; readonly REPORT_ID: 0; /** Profile-mapped left stick X (0x80 center). May be unused depending on profile. */ readonly MAPPED_STICK_LX: 1; /** Profile-mapped left stick Y (0x80 center). May be unused depending on profile. */ readonly MAPPED_STICK_LY: 2; /** Profile-mapped right stick X (0x80 center). May be unused depending on profile. */ readonly MAPPED_STICK_RX: 3; /** Profile-mapped right stick Y (0x80 center). May be unused depending on profile. */ readonly MAPPED_STICK_RY: 4; /** Mapped L2 trigger (0x00–0xFF) */ readonly MAPPED_L2: 5; /** Mapped R2 trigger (0x00–0xFF) */ readonly MAPPED_R2: 6; /** Sequence counter (increments each report) */ readonly SEQ_COUNTER: 7; /** Lower nibble: hat direction (0-7 = N/NE/E/SE/S/SW/W/NW, 8 = null). Upper nibble: buttons. */ readonly HAT_BUTTONS: 8; /** Mapped buttons byte 2 */ readonly BUTTONS_2: 9; /** Mapped buttons byte 3 + vendor bits */ readonly BUTTONS_3: 10; /** Vendor byte (static) */ readonly VENDOR: 11; /** Firmware timestamp (uint32 LE, bytes 12–15) */ readonly TIMESTAMP: 12; /** Raw button byte 1: bits 0–7 = b1–b8 (physical buttons, profile-independent) */ readonly RAW_BUTTONS_1: 16; /** Raw button byte 2: bit 0 = center, bit 1 = stick click, bit 2 = PS, bit 3 = profile */ readonly RAW_BUTTONS_2: 17; /** Raw stick Y before profile mapping (0x80 center, 0xFF = up) */ readonly RAW_STICK_Y: 18; /** Raw stick X before profile mapping (0x80 center, 0xFF = right) */ readonly RAW_STICK_X: 19; /** Expansion port 1 X axis */ readonly E1_X: 20; /** Expansion port 1 Y axis */ readonly E1_Y: 21; /** Expansion port 2 X axis */ readonly E2_X: 22; /** Expansion port 2 Y axis */ readonly E2_Y: 23; /** Expansion port 3 X axis */ readonly E3_X: 24; /** Expansion port 3 Y axis */ readonly E3_Y: 25; /** Expansion port 4 X axis */ readonly E4_X: 26; /** Expansion port 4 Y axis */ readonly E4_Y: 27; /** Battery: lower nibble = level (0–10), upper nibble = charge status */ readonly BATTERY: 37; /** Profile ID (bits 0–2, values 1–3) + profile switching disabled (bit 3) */ readonly PROFILE: 40; /** Expansion port types: E3 (lower nibble), E4 (upper nibble) */ readonly PORT_TYPES_E3_E4: 41; /** Post-profile virtual left stick X (0x80 center) */ readonly VIRTUAL_STICK_1_X: 43; /** Post-profile virtual left stick Y (0x80 center) */ readonly VIRTUAL_STICK_1_Y: 44; /** Post-profile virtual right stick X (0x80 center) */ readonly VIRTUAL_STICK_2_X: 47; /** Post-profile virtual right stick Y (0x80 center) */ readonly VIRTUAL_STICK_2_Y: 48; /** Expansion port types: E1 (lower nibble), E2 (upper nibble) */ readonly PORT_TYPES_E1_E2: 49; }; /** Raw button bit masks for AccessInput.RAW_BUTTONS_1 */ export declare const AccessButton1: { readonly B1: 1; readonly B2: 2; readonly B3: 4; readonly B4: 8; readonly B5: 16; readonly B6: 32; readonly B7: 64; readonly B8: 128; }; /** Raw button bit masks for AccessInput.RAW_BUTTONS_2 */ export declare const AccessButton2: { readonly CENTER: 1; readonly STICK: 2; readonly PS: 4; readonly PROFILE: 8; }; /** Expansion port device types (4-bit nibble values) */ export declare enum AccessPortType { Disconnected = 0, Button = 1, Trigger = 2, Stick = 3 } /** * USB Output Report 0x02 (32 bytes) / BT Output Report 0x31 (78 bytes) * * BT offset: USB byte N → BT byte N+1 * BT requires: report ID 0x31 at byte 0, constant 0x02 at byte 1, CRC32 at bytes 74–77 */ export declare const AccessOutput: { /** BT output constant byte value at BT[1] */ readonly BT_CONSTANT: 2; /** Report ID: 0x02 for USB, 0x31 for BT */ readonly REPORT_ID_USB: 2; readonly REPORT_ID_BT: 49; /** Mutator flags (scope A). Controls which subsystems are updated. */ readonly MUTATOR: 1; /** Scope B flags. Required for lightbar over BT (bit 2). */ readonly SCOPE_B: 2; /** LED effect mode. Not required in normal reports (animation dismiss handles init). */ readonly LED_EFFECT: 3; /** LED brightness (0x00 = high, 0x01 = medium, 0x02 = low). Affects status/profile LED brightness over BT. */ readonly LED_BRIGHTNESS: 4; /** Player indicator pattern (0–4). Requires mutator bit 4. */ readonly PLAYER_INDICATOR: 5; /** Lightbar Red (0x00–0xFF). Requires mutator bit 2 + scope B bit 2 over BT. */ readonly LIGHTBAR_R: 6; /** Lightbar Green (0x00–0xFF) */ readonly LIGHTBAR_G: 7; /** Lightbar Blue (0x00–0xFF) */ readonly LIGHTBAR_B: 8; /** Control field. Requires mutator bit 5. */ readonly CONTROL: 9; /** Control2 field (2 bytes). Requires mutator bit 6. */ readonly CONTROL2: 10; /** LED flags 1: bit 0 = profile enable, bit 1 = profile mute, bit 4 = status LED command enable */ readonly LED_FLAGS_1: 12; /** LED flags 2 / Profile LED mode: 0=off, 1=on, 2=fade, 3=sweep */ readonly LED_FLAGS_2: 13; /** Status LED value: 0=off, 1=on. Also requires LED_FLAGS_1 bit 4. */ readonly STATUS_LED: 23; /** USB output report size (including report ID) */ readonly USB_SIZE: 32; /** BT output report size (including report ID and CRC) */ readonly BT_SIZE: 78; /** BT CRC position (bytes 74–77, little-endian) */ readonly BT_CRC_OFFSET: 74; }; /** Output mutator flag bits (AccessOutput.MUTATOR byte) */ export declare const AccessMutator: { /** Profile LEDs + Status LED (LED flags bytes 12–13, status LED byte 23) */ readonly STATUS_LED: 1; /** Profile indicator LED (titania naming, overlaps with STATUS_LED) */ readonly PROFILE_LED: 2; /** Lightbar RGB (bytes 6–8) + Player indicator (byte 5). Over BT, also needs SCOPE_B_LED. */ readonly LED: 4; /** Reset all LEDs to default */ readonly RESET_LED: 8; /** Player indicator LED (byte 5) */ readonly PLAYER_INDICATOR_LED: 16; /** Control field (byte 9) */ readonly CONTROL: 32; /** Control2 field (bytes 10–11) */ readonly CONTROL2: 64; /** Combined: all LED subsystems */ readonly ALL_LEDS: 21; }; /** Scope B flag bits (AccessOutput.SCOPE_B byte) — needed for BT output */ export declare const AccessScopeB: { /** Required for lightbar RGB over BT (both this AND AccessMutator.LED must be set) */ readonly LED: 4; }; /** LED flags 1 bit definitions (AccessOutput.LED_FLAGS_1 byte) */ export declare const AccessLedFlags1: { /** Enable profile LEDs */ readonly PROFILE_ENABLE: 1; /** Mute/disable profile LEDs (overrides PROFILE_ENABLE) */ readonly PROFILE_MUTE: 2; /** Enable status LED command (must be set for status LED on OR off) */ readonly STATUS_LED_ENABLE: 16; /** Common: profile on + status LED command enabled */ readonly PROFILE_AND_STATUS: 17; }; //# sourceMappingURL=access_hid.d.ts.map