dualsense-ts 6.14.0 → 6.15.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/CHANGELOG.md +14 -3
  2. package/README.md +57 -43
  3. package/dist/dualsense.d.ts +4 -4
  4. package/dist/dualsense.js +5 -5
  5. package/dist/dualsense_access.d.ts +45 -1
  6. package/dist/dualsense_access.d.ts.map +1 -1
  7. package/dist/dualsense_access.js +83 -1
  8. package/dist/dualsense_access.js.map +1 -1
  9. package/dist/elements/access_status_led.d.ts +0 -2
  10. package/dist/elements/access_status_led.d.ts.map +1 -1
  11. package/dist/elements/access_status_led.js +0 -4
  12. package/dist/elements/access_status_led.js.map +1 -1
  13. package/dist/elements/trigger_feedback.d.ts +1 -1
  14. package/dist/elements/trigger_feedback.js +1 -1
  15. package/dist/hid/access/access_hid_provider.d.ts +4 -1
  16. package/dist/hid/access/access_hid_provider.d.ts.map +1 -1
  17. package/dist/hid/access/access_hid_provider.js +41 -6
  18. package/dist/hid/access/access_hid_provider.js.map +1 -1
  19. package/dist/hid/access/access_hid_state.d.ts +49 -1
  20. package/dist/hid/access/access_hid_state.d.ts.map +1 -1
  21. package/dist/hid/access/access_hid_state.js +52 -0
  22. package/dist/hid/access/access_hid_state.js.map +1 -1
  23. package/dist/hid/access/access_node_hid_provider.d.ts +2 -2
  24. package/dist/hid/access/access_node_hid_provider.d.ts.map +1 -1
  25. package/dist/hid/access/access_node_hid_provider.js +4 -4
  26. package/dist/hid/access/access_node_hid_provider.js.map +1 -1
  27. package/dist/hid/access_hid.d.ts +1 -1
  28. package/dist/hid/access_hid.js +1 -1
  29. package/dist/hid/calibration.d.ts +1 -1
  30. package/dist/hid/calibration.js +1 -1
  31. package/dist/hid/command.d.ts +6 -6
  32. package/dist/hid/command.js +3 -3
  33. package/dist/hid/dsp.d.ts +6 -6
  34. package/dist/hid/dsp.js +6 -6
  35. package/dist/hid/dualsense_hid.d.ts +4 -4
  36. package/dist/hid/dualsense_hid.js +8 -8
  37. package/dist/hid/factory_info.d.ts +8 -2
  38. package/dist/hid/factory_info.d.ts.map +1 -1
  39. package/dist/hid/factory_info.js +10 -1
  40. package/dist/hid/factory_info.js.map +1 -1
  41. package/dist/hid/node_hid_provider.d.ts +2 -2
  42. package/dist/hid/node_hid_provider.js +1 -1
  43. package/dist/hid/web_hid_provider.d.ts +1 -1
  44. package/dist/hid/web_hid_provider.js +3 -3
  45. package/dist/manager.d.ts +4 -4
  46. package/dist/manager.js +13 -13
  47. package/dist/motion/madgwick.d.ts +2 -2
  48. package/dist/motion/madgwick.js +3 -3
  49. package/dist/motion/orientation.d.ts +3 -3
  50. package/dist/motion/orientation.js +3 -3
  51. package/dist/motion/quaternion.d.ts +2 -2
  52. package/dist/motion/quaternion.js +2 -2
  53. package/dist/motion/shake.d.ts +8 -8
  54. package/dist/motion/shake.js +9 -9
  55. package/package.json +5 -4
package/CHANGELOG.md CHANGED
@@ -2,13 +2,24 @@
2
2
 
3
3
  All notable changes to `dualsense-ts` are documented here. This project uses [Semantic Versioning](https://semver.org/).
4
4
 
5
+ ## [6.15.0] - 2026-04-15
6
+
7
+ ### Added
8
+
9
+ - **DualSense Access profile-mapped inputs**: `DualsenseAccess` now exposes a full DualSense-compatible input layer driven by the controller's active profile
10
+ - Mapped sticks (`left.analog`, `right.analog`), triggers (`left.trigger`, `right.trigger`), bumpers (`left.bumper`, `right.bumper`), face buttons (`cross`, `circle`, `square`, `triangle`), D-pad, touchpad button, `options`, `create`, and `mute`
11
+ - Same property names and types as `Dualsense` - code written for one works on both
12
+ - Bluetooth limited mode (Report 0x01) now parses the mapped header, providing mapped inputs before Feature Report 0x05 triggers full mode
13
+ - **Documentation app**: expanded Access section with 7 pages - Overview (with DualSense comparison table), Access Playground (interactive demo with all inputs and LED controls), Hardware Inputs, Profile Inputs, LED Control, Profile Management (WIP), and Expansion Slots (WIP)
14
+ - Updated README with profile-mapped input examples and revised comparison table
15
+
5
16
  ## [6.14.0] - 2026-04-14
6
17
 
7
18
  ### Added
8
19
 
9
20
  - **DualSense Access controller support**: new `DualsenseAccess` class with full input reading and LED control over USB and Bluetooth
10
21
  - **Inputs**: 8 hardware buttons (B1–B8), center button, PS button, profile cycle button, analog stick (X/Y/click), battery level and charge status, active profile ID (1–3)
11
- - **LED output**: RGB lightbar, 3-segment profile LEDs (off/on/fade/sweep), 6-segment player indicator (patterns 1–4), white status LED all controllable over both USB and BT
22
+ - **LED output**: RGB lightbar, 3-segment profile LEDs (off/on/fade/sweep), 6-segment player indicator (patterns 1–4), white status LED - all controllable over both USB and BT
12
23
  - **Bluetooth**: full Report 0x31 support with automatic firmware animation dismiss on connect, CRC32 output reports, and Feature Report 0x05 mode switch
13
24
  - **Transports**: `AccessNodeHIDProvider` (node-hid) with multi-device enumeration and serial number targeting, `AccessWebHIDProvider` (WebHID) with permission dialog and device replacement, `AccessNullHIDProvider` (headless/testing)
14
25
  - **Identity**: firmware version, factory info (serial number, body color, board revision), and MAC address loaded automatically on connect with retry/backoff
@@ -25,10 +36,10 @@ All notable changes to `dualsense-ts` are documented here. This project uses [Se
25
36
  ### Added
26
37
 
27
38
  - **Orientation tracking**: `controller.orientation` provides fused 3D orientation (pitch, yaw, roll, quaternion) via a zero-dependency Madgwick AHRS filter, plus accelerometer-only `tiltPitch`/`tiltRoll` for drift-free gravity-reference applications. Filter gain (`beta`) is tunable at runtime
28
- - **Shake detection**: `controller.shake` detects shake intensity, frequency, and active state using per-axis Goertzel frequency analysis on first-difference signals. Reports both `frequency` (reversal rate) and `fundamental` (oscillation frequency), with a live `spectrum` of frequency bin powers. Configurable `threshold`, `windowSize`, `sustain`, `freqStep`, `freqMin`, and `freqMax` all tunable at runtime
39
+ - **Shake detection**: `controller.shake` detects shake intensity, frequency, and active state using per-axis Goertzel frequency analysis on first-difference signals. Reports both `frequency` (reversal rate) and `fundamental` (oscillation frequency), with a live `spectrum` of frequency bin powers. Configurable `threshold`, `windowSize`, `sustain`, `freqStep`, `freqMin`, and `freqMax` - all tunable at runtime
29
40
  - Axis remapping from DualSense Y-up to Madgwick Z-up convention for correct symmetric tilt behavior
30
41
  - Zero-gradient guard in the Madgwick filter to prevent NaN when gravity is already aligned
31
- - New `motion/` module: `Orientation`, `ShakeDetector`, `MadgwickFilter`, quaternion math all zero-dependency
42
+ - New `motion/` module: `Orientation`, `ShakeDetector`, `MadgwickFilter`, quaternion math - all zero-dependency
32
43
 
33
44
  ## [6.12.0] - 2026-04-14
34
45
 
package/README.md CHANGED
@@ -11,7 +11,7 @@ Check out the **[interactive docs](https://nsfm.github.io/dualsense-ts/)**! Conn
11
11
  - **Automatic connection and reconnection** even when connection type changes
12
12
  - **[Multiplayer support](https://nsfm.github.io/dualsense-ts/multiplayer)**, allowing up to 31 connected controllers at a time
13
13
  - **Lighting control** covering [RGB light bars](https://nsfm.github.io/dualsense-ts/outputs/lightbar), [player LEDs](https://nsfm.github.io/dualsense-ts/outputs/player-leds), and [mute button](https://nsfm.github.io/dualsense-ts/outputs/mute-led)
14
- - **Full haptics control** over independent [left/right rumble](https://nsfm.github.io/dualsense-ts/outputs/rumble) plus complete [trigger haptics](https://nsfm.github.io/dualsense-ts/outputs/trigger-effects)
14
+ - **Full haptics control** over independent [left/right rumble](https://nsfm.github.io/dualsense-ts/outputs/rumble) and [trigger haptics](https://nsfm.github.io/dualsense-ts/outputs/trigger-effects)
15
15
  - **[Touchpad support](https://nsfm.github.io/dualsense-ts/inputs/touchpad)** with full multi-touch handling
16
16
  - **[Motion tracking](https://nsfm.github.io/dualsense-ts/inputs/motion)** via factory-calibrated gyroscope and accelerometer, with built-in [orientation tracking](https://nsfm.github.io/dualsense-ts/api/orientation) and [shake detection](https://nsfm.github.io/dualsense-ts/api/shake-detector)
17
17
  - **[Battery status](https://nsfm.github.io/dualsense-ts/inputs/battery)** including level and charging state
@@ -19,7 +19,7 @@ Check out the **[interactive docs](https://nsfm.github.io/dualsense-ts/)**! Conn
19
19
  - **Peripheral status** for connected headphones and microphone
20
20
  - **[Power save](https://nsfm.github.io/dualsense-ts/outputs/power-save)** flags for per-subsystem muting (haptic mute confirmed; subsystem disable flags advisory)
21
21
  - **[Firmware info](https://nsfm.github.io/dualsense-ts/status)** checks providing controller color, hardware/software versions, and more
22
- - **[DualSense Access controller](https://nsfm.github.io/dualsense-ts/access)** support with 8 hardware buttons, analog stick, battery, profile switching, and full LED control
22
+ - **[DualSense Access controller](https://nsfm.github.io/dualsense-ts/access)** support with hardware inputs, profile-mapped DualSense-compatible controls, and 4 LED systems
23
23
 
24
24
  ## [Getting started](https://nsfm.github.io/dualsense-ts/getting-started)
25
25
 
@@ -61,7 +61,7 @@ controller.connection.active; // returns true while the controller is available
61
61
  controller.wireless; // returns true while connected over bluetooth
62
62
  ```
63
63
 
64
- When the user switches from wired to wireless or vice versa, `dualsense-ts` will reconnect to the same device seamlessly.
64
+ When the user switches from wired to wireless or vice versa, `dualsense-ts` reconnects to the same device.
65
65
 
66
66
  ### [Input APIs](https://nsfm.github.io/dualsense-ts/inputs)
67
67
 
@@ -197,7 +197,7 @@ controller.accelerometer.z.on("change", ({ magnitude }) => {
197
197
  });
198
198
  ```
199
199
 
200
- Gyroscope and accelerometer readings are automatically calibrated using each controller's factory calibration data, which removes gyro bias drift and accelerometer zero-point offset. Calibration is applied transparently — you can inspect the resolved factors via `controller.calibration`. See [Factory Calibration](https://nsfm.github.io/dualsense-ts/inputs/motion) in the docs for details on bias removal, zero-point correction, and per-axis sensitivity normalization.
200
+ Gyroscope and accelerometer readings are automatically calibrated using each controller's factory calibration data, which removes gyro bias drift and accelerometer zero-point offset. You can inspect the resolved calibration factors via `controller.calibration`, and the [Factory Calibration](https://nsfm.github.io/dualsense-ts/inputs/motion) docs cover the details.
201
201
 
202
202
  #### [Orientation Tracking](https://nsfm.github.io/dualsense-ts/api/orientation)
203
203
 
@@ -210,7 +210,7 @@ const { pitch, yaw, roll } = controller.orientation;
210
210
  // Quaternion for 3D rendering
211
211
  const [w, x, y, z] = controller.orientation.quaternion;
212
212
 
213
- // Accelerometer-only tilt no drift, no yaw
213
+ // Accelerometer-only tilt - no drift, no yaw
214
214
  const steer = controller.orientation.tiltRoll;
215
215
 
216
216
  // Tune the filter: lower beta = smoother, higher = less drift
@@ -277,7 +277,7 @@ controller.battery.level.on("change", ({ state }) => {
277
277
  });
278
278
  ```
279
279
 
280
- After connection it may take a second for these values to populate. Please note that the battery level is not a precise reading - it changes in 10% increments and is prone to flip-flopping. `dualsense-ts` makes an attempt to buffer and normalize these values.
280
+ After connection it may take a second for these values to populate. The battery level is not a precise reading - it changes in 10% increments and is prone to flip-flopping. `dualsense-ts` makes an attempt to buffer and normalize these values.
281
281
 
282
282
  #### [Rumble](https://nsfm.github.io/dualsense-ts/outputs/rumble)
283
283
 
@@ -315,7 +315,7 @@ controller.right.trigger.feedback.set({
315
315
  strength: 0.8,
316
316
  });
317
317
 
318
- // Weapon trigger resistance with snap release
318
+ // Weapon trigger - resistance with snap release
319
319
  controller.right.trigger.feedback.set({
320
320
  effect: TriggerEffect.Weapon,
321
321
  start: 0.2,
@@ -342,7 +342,7 @@ console.log(controller.right.trigger.feedback.config);
342
342
  console.log(controller.right.trigger.feedback.effect); // TriggerEffect.Off
343
343
  ```
344
344
 
345
- Feedback state is automatically restored if the controller disconnects and reconnects - no handling required on your end.
345
+ If the controller disconnects and reconnects, your feedback settings are restored automatically.
346
346
 
347
347
  #### Trigger effects
348
348
 
@@ -356,7 +356,7 @@ Feedback state is automatically restored if the controller disconnects and recon
356
356
  | `TriggerEffect.Vibration` | Zone-based oscillation with amplitude and frequency |
357
357
  | `TriggerEffect.Machine` | Dual-amplitude vibration with frequency and period control |
358
358
 
359
- Each effect accepts a unique set of configuration options; your editor's type hints will guide you through the available parameters for each effect. The [interactive docs](https://nsfm.github.io/dualsense-ts/outputs/trigger-effects) include full slider controls for every effect and parameter, making it a great tool for finding the right values.
359
+ Each effect accepts its own set of configuration options - your editor's type hints will show you what's available. To find the right values, try the [interactive docs](https://nsfm.github.io/dualsense-ts/outputs/trigger-effects), which have slider controls for every effect and parameter.
360
360
 
361
361
  Effect names are based on [Nielk1's DualSense trigger effect documentation](https://gist.github.com/Nielk1/6d54cc2c00d2201ccb8c2720ad7538db).
362
362
 
@@ -367,17 +367,17 @@ You can control the controller's lightbar as well as the [player indicator](http
367
367
  ```typescript
368
368
  import { PlayerID, Brightness } from "dualsense-ts";
369
369
 
370
- // Light bar set color with {r, g, b} (0–255 per channel)
370
+ // Light bar - set color with {r, g, b} (0–255 per channel)
371
371
  controller.lightbar.set({ r: 255, g: 0, b: 128 });
372
372
  controller.lightbar.color; // { r: 255, g: 0, b: 128 }
373
373
 
374
- // Light bar pulse effects firmware-driven one-shot animations
374
+ // Light bar pulse effects - firmware-driven one-shot animations
375
375
  // This overrides your custom color
376
376
  controller.lightbar.fadeBlue(); // Fades to blue and holds
377
377
  // You must call `fadeOut()` to restore custom lightbar colors
378
378
  controller.lightbar.fadeOut(); // Fades to black, then returns to set color
379
379
 
380
- // Player indicator LEDs 5 white LEDs, individually addressable
380
+ // Player indicator LEDs - 5 white LEDs, individually addressable
381
381
  controller.playerLeds.set(PlayerID.Player1); // Use a preset pattern
382
382
  controller.playerLeds.setLed(0, true); // Toggle individual LEDs (0–4)
383
383
  controller.playerLeds.setLed(4, true);
@@ -516,7 +516,7 @@ The output report exposes per-subsystem power save flags. The **mute flags** (ha
516
516
  // Mute haptic output (confirmed working)
517
517
  controller.powerSave.hapticsMuted = true;
518
518
 
519
- // Send disable flags (advisory no confirmed observable effect)
519
+ // Send disable flags (advisory - no confirmed observable effect)
520
520
  controller.powerSave.set({ motion: false, touch: false });
521
521
 
522
522
  // Re-enable everything
@@ -537,7 +537,7 @@ import { Dualsense, type Input } from "dualsense-ts";
537
537
  const controller = new Dualsense();
538
538
  export const ControllerContext = createContext(controller);
539
539
 
540
- // Hook subscribes to any input, re-renders on change
540
+ // Hook - subscribes to any input, re-renders on change
541
541
  function useControllerInput<T extends Input<T>>(
542
542
  selector: (c: Dualsense) => T,
543
543
  ): T {
@@ -595,8 +595,8 @@ This only applies to the first connection for each controller.
595
595
  ### Accessing controllers
596
596
 
597
597
  ```typescript
598
- manager.controllers; // readonly Dualsense[] all managed controllers
599
- manager.get(0); // Dualsense | undefined by slot index
598
+ manager.controllers; // readonly Dualsense[] - all managed controllers
599
+ manager.get(0); // Dualsense | undefined - by slot index
600
600
  manager.count; // number of managed slots (including disconnected)
601
601
  manager.state.active; // number of currently connected controllers
602
602
 
@@ -658,7 +658,7 @@ The PS4 DualShock controller is not supported.
658
658
 
659
659
  ## [DualSense Access](https://nsfm.github.io/dualsense-ts/access)
660
660
 
661
- The DualSense Access controller is supported via a separate `DualsenseAccess` class. It exposes the controller's raw hardware inputs - independent of the active profile mapping - plus battery, profile state, and all 4 LED systems.
661
+ The DualSense Access controller is supported via a separate `DualsenseAccess` class. It exposes two layers of input: [raw hardware inputs](https://nsfm.github.io/dualsense-ts/access/hardware-inputs) (profile-independent) and [profile-mapped inputs](https://nsfm.github.io/dualsense-ts/access/profile-inputs) that mirror the standard DualSense layout. Both layers update simultaneously on every report.
662
662
 
663
663
  ### Quick start
664
664
 
@@ -667,21 +667,20 @@ import { DualsenseAccess } from "dualsense-ts";
667
667
 
668
668
  const access = new DualsenseAccess();
669
669
 
670
- // 8 hardware buttons (profile-independent)
670
+ // Raw hardware inputs (always the same regardless of profile)
671
671
  access.b1.on("press", () => console.log("B1 pressed"));
672
- access.b3.on("change", ({ active }) => console.log(`B3: ${active}`));
673
-
674
- // Center, PS, and profile cycle buttons
675
- access.center.on("press", () => console.log("Center pressed"));
676
- access.profile.on("press", () => console.log("Profile cycle"));
677
-
678
- // Analog stick
679
672
  access.stick.on("change", () => {
680
673
  console.log(
681
674
  `Stick: ${access.stick.x.state.toFixed(2)}, ${access.stick.y.state.toFixed(2)}`,
682
675
  );
683
676
  });
684
- access.stick.button.on("press", () => console.log("Stick clicked"));
677
+
678
+ // Profile-mapped inputs (same API as Dualsense)
679
+ access.cross.on("press", () => console.log("Cross"));
680
+ access.left.analog.on("change", (s) => {
681
+ console.log(`Left stick: ${s.x.state.toFixed(2)}, ${s.y.state.toFixed(2)}`);
682
+ });
683
+ access.dpad.up.on("press", () => console.log("D-pad up"));
685
684
 
686
685
  // Battery and profile
687
686
  access.battery.level.on("change", ({ state }) => {
@@ -692,7 +691,20 @@ access.profileId.on("change", ({ state }) => {
692
691
  });
693
692
  ```
694
693
 
695
- ### LED control
694
+ ### Profile-mapped inputs
695
+
696
+ The controller's firmware maps hardware buttons to a virtual DualSense layout using the active profile. These mapped inputs use the same property names as `Dualsense`, so code written for one works on both:
697
+
698
+ ```typescript
699
+ // Works identically on Dualsense and DualsenseAccess
700
+ controller.cross.on("press", () => jump());
701
+ controller.left.analog.on("change", (s) => move(s.x.state, s.y.state));
702
+ controller.dpad.up.on("press", () => selectPrevious());
703
+ ```
704
+
705
+ Available mapped inputs: `left` / `right` ([Unisense](https://nsfm.github.io/dualsense-ts/api/unisense) - stick, trigger, bumper), `dpad`, `cross`, `circle`, `square`, `triangle`, `touchpad` (button only), `options`, `create`, `mute`.
706
+
707
+ ### [LED control](https://nsfm.github.io/dualsense-ts/access/led-control)
696
708
 
697
709
  The Access controller has 4 independent LED systems:
698
710
 
@@ -702,19 +714,18 @@ import { AccessProfileLedMode, AccessPlayerIndicator } from "dualsense-ts";
702
714
  // RGB lightbar (same API as DualSense)
703
715
  access.lightbar.set({ r: 255, g: 0, b: 128 });
704
716
 
705
- // Profile LEDs 3-segment arc
717
+ // Profile LEDs - 3-segment arc
706
718
  access.profileLeds.set(AccessProfileLedMode.Sweep);
707
719
  access.profileLeds.set(AccessProfileLedMode.Fade);
708
720
  access.profileLeds.set(AccessProfileLedMode.Off);
709
721
 
710
- // Player indicator 6-segment ring
722
+ // Player indicator - 6-segment ring
711
723
  access.playerIndicator.set(AccessPlayerIndicator.Player1);
712
724
  access.playerIndicator.set(AccessPlayerIndicator.Off);
713
725
 
714
726
  // White status LED
715
727
  access.statusLed.set(true); // on
716
728
  access.statusLed.set(false); // off
717
- access.statusLed.toggle();
718
729
  ```
719
730
 
720
731
  ### Identity
@@ -732,7 +743,7 @@ console.log(`Board: ${access.factoryInfo.boardRevision}`);
732
743
 
733
744
  ### Browser usage
734
745
 
735
- In Node.js, `new DualsenseAccess()` auto-connects no extra setup needed. In the browser, WebHID requires a one-time user gesture to grant device permission:
746
+ In Node.js, `new DualsenseAccess()` auto-connects without any extra setup. In the browser, WebHID requires a one-time user gesture to grant device permission:
736
747
 
737
748
  ```typescript
738
749
  import { DualsenseAccess } from "dualsense-ts";
@@ -747,17 +758,19 @@ Once permission is granted, the controller connects automatically and reconnects
747
758
 
748
759
  ### Important differences from DualSense
749
760
 
750
- | | DualSense | DualSense Access |
751
- | -------- | -------------------------------------- | ---------------------------------------------------- |
752
- | Class | `Dualsense` | `DualsenseAccess` |
753
- | Buttons | Face buttons, D-pad, bumpers, triggers | B1–B8, center, PS, profile |
754
- | Analog | 2 sticks, 2 triggers | 1 stick |
755
- | Motion | Gyroscope + accelerometer | None |
756
- | Touchpad | Yes | No |
757
- | Audio | Speaker, mic, headphone jack | No |
758
- | Haptics | Rumble + adaptive triggers | No |
759
- | LEDs | Lightbar, player LEDs, mute LED | Lightbar, profile LEDs, player indicator, status LED |
760
- | Profiles | N/A | 3 hardware profiles (read-only) |
761
+ | | DualSense | DualSense Access |
762
+ | --------------- | ------------------------------------------- | ---------------------------------------------------- |
763
+ | Class | `Dualsense` | `DualsenseAccess` |
764
+ | Hardware inputs | Face buttons, D-pad, bumpers, triggers, etc | B1–B8, center, analog stick, PS, profile |
765
+ | Mapped inputs | N/A (inputs are fixed) | Profile-mapped DualSense-compatible layout |
766
+ | Analog sticks | 2 sticks | 1 raw + 2 profile-mapped |
767
+ | Triggers | L2 / R2 with analog pressure | Analog via expansion port accessories only |
768
+ | Motion | Gyroscope + accelerometer | None |
769
+ | Touchpad | Multi-touch surface | Button only (no touch surface) |
770
+ | Audio | Speaker, mic, headphone jack | None |
771
+ | Haptics | Rumble + adaptive triggers | None |
772
+ | LEDs | Lightbar, player LEDs, mute LED | Lightbar, profile LEDs, player indicator, status LED |
773
+ | Profiles | N/A | 3 hardware profiles (read-only) |
761
774
 
762
775
  ## Known Issues
763
776
 
@@ -791,6 +804,7 @@ The Access controller pairs over Bluetooth but does not bond in the way BlueZ ex
791
804
  ```ini
792
805
  [General]
793
806
  ClassicBondedOnly=false
807
+ UserspaceHID=false
794
808
  ```
795
809
 
796
810
  2. Load the `hidp` kernel module if it isn't already loaded:
@@ -805,7 +819,7 @@ sudo modprobe hidp
805
819
  sudo systemctl restart bluetooth
806
820
  ```
807
821
 
808
- This is a BlueZ-specific issue Windows and macOS handle pairing seamlessly. The standard DualSense is not affected.
822
+ This is a BlueZ-specific issue; Windows and macOS pair without any fuss. The standard DualSense is not affected.
809
823
 
810
824
  ## Migration Guide
811
825
 
@@ -102,7 +102,7 @@ export declare class Dualsense extends Input<Dualsense> {
102
102
  */
103
103
  readonly shake: ShakeDetector;
104
104
  /** Monotonic sensor timestamp in microseconds from the controller's clock.
105
- * Updated with each input report useful for correlating motion sensor
105
+ * Updated with each input report - useful for correlating motion sensor
106
106
  * readings with other inputs across frames. Wraps at 2^32 (~71.6 minutes). */
107
107
  sensorTimestamp: number;
108
108
  /** Previous sensor timestamp for computing dt (microseconds). */
@@ -129,7 +129,7 @@ export declare class Dualsense extends Input<Dualsense> {
129
129
  /**
130
130
  * IMU calibration factors derived from the controller's factory calibration
131
131
  * data (Feature Report 0x05). Applied automatically to gyroscope and
132
- * accelerometer readings exposed here for inspection and diagnostics.
132
+ * accelerometer readings - exposed here for inspection and diagnostics.
133
133
  */
134
134
  get calibration(): ResolvedCalibration;
135
135
  /** A virtual button representing whether or not a controller is connected */
@@ -152,8 +152,8 @@ export declare class Dualsense extends Input<Dualsense> {
152
152
  /**
153
153
  * Play a built-in test tone via the onboard DSP.
154
154
  * Works over both USB and Bluetooth. Call `stopTestTone()` to stop.
155
- * @param target Output destination "speaker" (default) or "headphone"
156
- * @param tone Which tone to play "1khz" (default), "100hz", or "both"
155
+ * @param target Output destination - "speaker" (default) or "headphone"
156
+ * @param tone Which tone to play - "1khz" (default), "100hz", or "both"
157
157
  */
158
158
  startTestTone(target?: "speaker" | "headphone", tone?: "1khz" | "100hz" | "both"): Promise<void>;
159
159
  /** Stop the DSP test tone */
package/dist/dualsense.js CHANGED
@@ -24,7 +24,7 @@ class Dualsense extends input_1.Input {
24
24
  /**
25
25
  * IMU calibration factors derived from the controller's factory calibration
26
26
  * data (Feature Report 0x05). Applied automatically to gyroscope and
27
- * accelerometer readings exposed here for inspection and diagnostics.
27
+ * accelerometer readings - exposed here for inspection and diagnostics.
28
28
  */
29
29
  get calibration() {
30
30
  return this.hid.calibration;
@@ -60,7 +60,7 @@ class Dualsense extends input_1.Input {
60
60
  /** Per-subsystem power save controls (disable touch, motion, haptics, audio) */
61
61
  this.powerSave = new elements_1.PowerSaveControl();
62
62
  /** Monotonic sensor timestamp in microseconds from the controller's clock.
63
- * Updated with each input report useful for correlating motion sensor
63
+ * Updated with each input report - useful for correlating motion sensor
64
64
  * readings with other inputs across frames. Wraps at 2^32 (~71.6 minutes). */
65
65
  this.sensorTimestamp = 0;
66
66
  /** Previous sensor timestamp for computing dt (microseconds). */
@@ -164,7 +164,7 @@ class Dualsense extends input_1.Input {
164
164
  this.connection[input_1.InputSet](false);
165
165
  // If a HID instance was supplied externally (e.g. by DualsenseManager),
166
166
  // the owner is responsible for driving discovery + reconnection.
167
- // `hid: null` creates a headless instance with no provider useful for
167
+ // `hid: null` creates a headless instance with no provider - useful for
168
168
  // placeholder controllers in UIs where WebHID may not be available.
169
169
  // Otherwise, construct a default platform provider and run our own
170
170
  // discovery loop.
@@ -324,8 +324,8 @@ class Dualsense extends input_1.Input {
324
324
  /**
325
325
  * Play a built-in test tone via the onboard DSP.
326
326
  * Works over both USB and Bluetooth. Call `stopTestTone()` to stop.
327
- * @param target Output destination "speaker" (default) or "headphone"
328
- * @param tone Which tone to play "1khz" (default), "100hz", or "both"
327
+ * @param target Output destination - "speaker" (default) or "headphone"
328
+ * @param tone Which tone to play - "1khz" (default), "100hz", or "both"
329
329
  */
330
330
  async startTestTone(target = "speaker", tone = "1khz") {
331
331
  return this.hid.startTestTone(target, tone);
@@ -1,4 +1,4 @@
1
- import { Momentary, Analog, AnalogParams, Battery, BatteryParams, Lightbar } from "./elements";
1
+ import { Momentary, Analog, AnalogParams, Battery, BatteryParams, Lightbar, Mute, Unisense, UnisenseParams, Dpad, DpadParams, Touchpad } from "./elements";
2
2
  import { AccessProfileLeds } from "./elements/access_profile_leds";
3
3
  import { AccessStatusLed } from "./elements/access_status_led";
4
4
  import { AccessPlayerIndicatorLed } from "./elements/access_player_indicator";
@@ -34,6 +34,28 @@ export interface DualsenseAccessParams extends InputParams {
34
34
  profile?: InputParams;
35
35
  /** Settings for the analog stick */
36
36
  stick?: AnalogParams;
37
+ /** Settings for the left stick/trigger/bumper group */
38
+ left?: UnisenseParams;
39
+ /** Settings for the right stick/trigger/bumper group */
40
+ right?: UnisenseParams;
41
+ /** Settings for the D-pad */
42
+ dpad?: DpadParams;
43
+ /** Settings for the Cross button */
44
+ cross?: InputParams;
45
+ /** Settings for the Circle button */
46
+ circle?: InputParams;
47
+ /** Settings for the Square button */
48
+ square?: InputParams;
49
+ /** Settings for the Triangle button */
50
+ triangle?: InputParams;
51
+ /** Settings for the touchpad */
52
+ touchpad?: InputParams;
53
+ /** Settings for the Options button */
54
+ options?: InputParams;
55
+ /** Settings for the Create button */
56
+ create?: InputParams;
57
+ /** Settings for the Mute button */
58
+ mute?: InputParams;
37
59
  /** Settings for the battery */
38
60
  battery?: BatteryParams;
39
61
  /** Settings for the connection indicator */
@@ -71,6 +93,28 @@ export declare class DualsenseAccess extends Input<DualsenseAccess> {
71
93
  readonly profile: Momentary;
72
94
  /** Analog stick (x, y, button = stick click) */
73
95
  readonly stick: Analog;
96
+ /** Left stick, trigger (L2), and bumper (L1) - profile-mapped */
97
+ readonly left: Unisense;
98
+ /** Right stick, trigger (R2), and bumper (R1) - profile-mapped */
99
+ readonly right: Unisense;
100
+ /** D-pad - profile-mapped */
101
+ readonly dpad: Dpad;
102
+ /** Cross button - profile-mapped */
103
+ readonly cross: Momentary;
104
+ /** Circle button - profile-mapped */
105
+ readonly circle: Momentary;
106
+ /** Square button - profile-mapped */
107
+ readonly square: Momentary;
108
+ /** Triangle button - profile-mapped */
109
+ readonly triangle: Momentary;
110
+ /** Touchpad (button only, contacts stay at neutral) - profile-mapped */
111
+ readonly touchpad: Touchpad;
112
+ /** Options button - profile-mapped */
113
+ readonly options: Momentary;
114
+ /** Create button - profile-mapped */
115
+ readonly create: Momentary;
116
+ /** Mute button - profile-mapped */
117
+ readonly mute: Mute;
74
118
  /** Battery level and charging status */
75
119
  readonly battery: Battery;
76
120
  /** Active profile ID (1–3) */
@@ -1 +1 @@
1
- {"version":3,"file":"dualsense_access.d.ts","sourceRoot":"","sources":["../src/dualsense_access.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dualsense_access.d.ts","sourceRoot":"","sources":["../src/dualsense_access.ts"],"names":[],"mappings":"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"}
@@ -89,6 +89,62 @@ class DualsenseAccess extends input_1.Input {
89
89
  name: "Stick",
90
90
  ...(params.stick ?? {}),
91
91
  });
92
+ // Profile-mapped inputs (DualSense-compatible)
93
+ this.left = new elements_1.Unisense({
94
+ icon: "L",
95
+ name: "Left",
96
+ ...(params.left ?? {}),
97
+ });
98
+ this.right = new elements_1.Unisense({
99
+ icon: "R",
100
+ name: "Right",
101
+ ...(params.right ?? {}),
102
+ });
103
+ this.dpad = new elements_1.Dpad({
104
+ icon: "D",
105
+ name: "D-pad",
106
+ ...(params.dpad ?? {}),
107
+ });
108
+ this.cross = new elements_1.Momentary({
109
+ icon: "⮿",
110
+ name: "Cross",
111
+ ...(params.cross ?? {}),
112
+ });
113
+ this.circle = new elements_1.Momentary({
114
+ icon: "⊚",
115
+ name: "Circle",
116
+ ...(params.circle ?? {}),
117
+ });
118
+ this.square = new elements_1.Momentary({
119
+ icon: "🟗",
120
+ name: "Square",
121
+ ...(params.square ?? {}),
122
+ });
123
+ this.triangle = new elements_1.Momentary({
124
+ icon: "🟕",
125
+ name: "Triangle",
126
+ ...(params.triangle ?? {}),
127
+ });
128
+ this.touchpad = new elements_1.Touchpad({
129
+ icon: "⎚",
130
+ name: "Touchpad",
131
+ ...(params.touchpad ?? {}),
132
+ });
133
+ this.options = new elements_1.Momentary({
134
+ icon: "⋯",
135
+ name: "Options",
136
+ ...(params.options ?? {}),
137
+ });
138
+ this.create = new elements_1.Momentary({
139
+ icon: "🖉",
140
+ name: "Create",
141
+ ...(params.create ?? {}),
142
+ });
143
+ this.mute = new elements_1.Mute({
144
+ icon: "🕩",
145
+ name: "Mute",
146
+ ...(params.mute ?? {}),
147
+ });
92
148
  this.battery = new elements_1.Battery({
93
149
  icon: "🔋",
94
150
  name: "Battery",
@@ -148,7 +204,7 @@ class DualsenseAccess extends input_1.Input {
148
204
  this.pendingBattery.peakLevel = 0;
149
205
  }, 1000));
150
206
  // Output loop (30Hz)
151
- // When any subsystem changes, send all 4 in one report the Access
207
+ // When any subsystem changes, send all 4 in one report - the Access
152
208
  // controller over BT requires combined mutator + LED_FLAGS_1.
153
209
  this.timers.push(setInterval(() => {
154
210
  if (!this.connection.active)
@@ -184,6 +240,7 @@ class DualsenseAccess extends input_1.Input {
184
240
  }
185
241
  /** Distributes HID state to inputs */
186
242
  processHID(state) {
243
+ // Raw hardware inputs
187
244
  this.b1[input_1.InputSet](state[access_hid_state_1.AccessInputId.B1]);
188
245
  this.b2[input_1.InputSet](state[access_hid_state_1.AccessInputId.B2]);
189
246
  this.b3[input_1.InputSet](state[access_hid_state_1.AccessInputId.B3]);
@@ -198,6 +255,31 @@ class DualsenseAccess extends input_1.Input {
198
255
  this.stick.x[input_1.InputSet](state[access_hid_state_1.AccessInputId.StickX]);
199
256
  this.stick.y[input_1.InputSet](state[access_hid_state_1.AccessInputId.StickY]);
200
257
  this.stick.button[input_1.InputSet](state[access_hid_state_1.AccessInputId.StickClick]);
258
+ // Profile-mapped inputs
259
+ this.left.analog.x[input_1.InputSet](state[access_hid_state_1.AccessInputId.MappedLeftStickX]);
260
+ this.left.analog.y[input_1.InputSet](state[access_hid_state_1.AccessInputId.MappedLeftStickY]);
261
+ this.left.analog.button[input_1.InputSet](state[access_hid_state_1.AccessInputId.L3]);
262
+ this.left.trigger[input_1.InputSet](state[access_hid_state_1.AccessInputId.MappedL2]);
263
+ this.left.trigger.button[input_1.InputSet](state[access_hid_state_1.AccessInputId.L2Button]);
264
+ this.left.bumper[input_1.InputSet](state[access_hid_state_1.AccessInputId.L1]);
265
+ this.right.analog.x[input_1.InputSet](state[access_hid_state_1.AccessInputId.MappedRightStickX]);
266
+ this.right.analog.y[input_1.InputSet](state[access_hid_state_1.AccessInputId.MappedRightStickY]);
267
+ this.right.analog.button[input_1.InputSet](state[access_hid_state_1.AccessInputId.R3]);
268
+ this.right.trigger[input_1.InputSet](state[access_hid_state_1.AccessInputId.MappedR2]);
269
+ this.right.trigger.button[input_1.InputSet](state[access_hid_state_1.AccessInputId.R2Button]);
270
+ this.right.bumper[input_1.InputSet](state[access_hid_state_1.AccessInputId.R1]);
271
+ this.dpad.up[input_1.InputSet](state[access_hid_state_1.AccessInputId.DpadUp]);
272
+ this.dpad.down[input_1.InputSet](state[access_hid_state_1.AccessInputId.DpadDown]);
273
+ this.dpad.left[input_1.InputSet](state[access_hid_state_1.AccessInputId.DpadLeft]);
274
+ this.dpad.right[input_1.InputSet](state[access_hid_state_1.AccessInputId.DpadRight]);
275
+ this.cross[input_1.InputSet](state[access_hid_state_1.AccessInputId.Cross]);
276
+ this.circle[input_1.InputSet](state[access_hid_state_1.AccessInputId.Circle]);
277
+ this.square[input_1.InputSet](state[access_hid_state_1.AccessInputId.Square]);
278
+ this.triangle[input_1.InputSet](state[access_hid_state_1.AccessInputId.Triangle]);
279
+ this.touchpad.button[input_1.InputSet](state[access_hid_state_1.AccessInputId.TouchButton]);
280
+ this.options[input_1.InputSet](state[access_hid_state_1.AccessInputId.Options]);
281
+ this.create[input_1.InputSet](state[access_hid_state_1.AccessInputId.Create]);
282
+ this.mute[input_1.InputSet](state[access_hid_state_1.AccessInputId.MuteButton]);
201
283
  this.profileId[input_1.InputSet](state[access_hid_state_1.AccessInputId.ProfileId]);
202
284
  const level = state[access_hid_state_1.AccessInputId.BatteryLevel];
203
285
  if (level > this.pendingBattery.peakLevel) {
@@ -1 +1 @@
1
- {"version":3,"file":"dualsense_access.js","sourceRoot":"","sources":["../src/dualsense_access.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dualsense_access.js","sourceRoot":"","sources":["../src/dualsense_access.ts"],"names":[],"mappings":"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"}
@@ -5,8 +5,6 @@ export declare class AccessStatusLed {
5
5
  get on(): boolean;
6
6
  /** Set the status LED on or off */
7
7
  set(on: boolean): void;
8
- /** Toggle the status LED */
9
- toggle(): void;
10
8
  /** Returns a string key for change detection */
11
9
  toKey(): string;
12
10
  }