dualsense-ts
Version:
A natural interface for your DualSense controller, with Typescript
123 lines (112 loc) • 2.88 kB
text/typescript
export const enum LedOptions {
Off = 0x0,
PlayerLedBrightness = 0x1,
Uninterruptible = 0x2,
Both = 3, // 0x01 | 0x02
}
export const enum PulseOptions {
Off = 0x0,
FadeBlue = 0x1,
FadeOut = 0x2,
}
export const enum Brightness {
High = 0x0,
Medium = 0x1,
Low = 0x2,
}
export const enum PlayerID {
Player1 = 4,
Player2 = 10,
Player3 = 21,
Player4 = 27,
All = 31,
}
export const enum TriggerMode {
/** No resistance */
Off = 0x0,
/** Continuous resistance */
Rigid = 0x1,
Pulse = 0x2,
Calibration = 0xfc,
rigid_A = 33, // 0x1 | 0x20
rigid_B = 5, // 0x1 | 0x04
rigid_AB = 37, // 0x1 | 0x20 | 0x04
pulse_A = 34, // 0x2 | 0x20
pulse_B = 6, // 0x2 | 0x04
pulse_AB = 38, // 0x2 | 0x20 | 0x04
}
export const enum CommandScopeA {
HapticRumble = 0x01,
PrimaryRumble = 0x02,
RightTriggerFeedback = 0x04,
LeftTriggerFeedback = 0x08,
AudioVolume = 0x10,
SpeakerToggle = 0x20,
MicrophoneVolume = 0x40,
}
export const enum CommandScopeB {
MicrophoneLED = 0x01,
Mute = 0x02,
TouchpadLeds = 0x04,
DisableLeds = 0x08,
PlayerLeds = 0x10,
MotorPower = 0x40,
}
export type CommandScope = CommandScopeA | CommandScopeB;
/** Byte value, 0 to 255 */
type Intensity = number;
/** 48 byte packet that is sent to the controller to update LEDs, rumble, etc */
export interface DualsenseCommand extends Uint8Array {
/** Packet type */
[]: 0x2;
/** Command effect limited to these bits */
[]: CommandScopeA | 0xff;
/** Command effect also limited to these bits */
[]: CommandScopeB | (0x1 | 0x2 | 0x4 | 0x10 | 0x40);
/** Right rumble intensity */
[]: Intensity;
/** Left rumble intensity */
[]: Intensity;
[]: 0; // Audio...
[]: 0;
[]: 0;
[]: 0; // ...related
/** Microphone LED intensity */
[]: Intensity;
/** Microphone mute state (0x10 muted, 0x00 unmuted) */
[]: 0x10 | 0x00;
[]: TriggerMode; // Right trigger mode
[]: number; // Right trigger force 1
[]: number; // Right trigger force 2
[]: number; // Right trigger force 3
[]: number; // Right trigger force 4
[]: number; // Right trigger force 5
[]: number; // Right trigger force 6
[]: number; // Right trigger force 7
[]: 0;
[]: TriggerMode; // Left trigger mode
[]: number; // Left trigger force 1
[]: number; // Left trigger force 2
[]: number; // Left trigger force 3
[]: number; // Left trigger force 4
[]: number; // Left trigger force 5
[]: number; // Left trigger force 6
[]: number; // Left trigger force 7
[]: 0;
[]: 0;
[]: 0;
[]: 0;
[]: 0;
[]: 0;
[]: 0;
[]: LedOptions;
[]: 0;
[]: 0;
[]: PulseOptions;
[]: Brightness;
[]: PlayerID; // White player ID LED
[]: Intensity; // Touchpad red
[]: Intensity; // Touchpad green
[]: Intensity; // Touchpad blue
[]: never;
}