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.
- package/CHANGELOG.md +14 -3
- package/README.md +57 -43
- package/dist/dualsense.d.ts +4 -4
- package/dist/dualsense.js +5 -5
- package/dist/dualsense_access.d.ts +45 -1
- package/dist/dualsense_access.d.ts.map +1 -1
- package/dist/dualsense_access.js +83 -1
- package/dist/dualsense_access.js.map +1 -1
- package/dist/elements/access_status_led.d.ts +0 -2
- package/dist/elements/access_status_led.d.ts.map +1 -1
- package/dist/elements/access_status_led.js +0 -4
- package/dist/elements/access_status_led.js.map +1 -1
- package/dist/elements/trigger_feedback.d.ts +1 -1
- package/dist/elements/trigger_feedback.js +1 -1
- package/dist/hid/access/access_hid_provider.d.ts +4 -1
- package/dist/hid/access/access_hid_provider.d.ts.map +1 -1
- package/dist/hid/access/access_hid_provider.js +41 -6
- package/dist/hid/access/access_hid_provider.js.map +1 -1
- package/dist/hid/access/access_hid_state.d.ts +49 -1
- package/dist/hid/access/access_hid_state.d.ts.map +1 -1
- package/dist/hid/access/access_hid_state.js +52 -0
- package/dist/hid/access/access_hid_state.js.map +1 -1
- package/dist/hid/access/access_node_hid_provider.d.ts +2 -2
- package/dist/hid/access/access_node_hid_provider.d.ts.map +1 -1
- package/dist/hid/access/access_node_hid_provider.js +4 -4
- package/dist/hid/access/access_node_hid_provider.js.map +1 -1
- package/dist/hid/access_hid.d.ts +1 -1
- package/dist/hid/access_hid.js +1 -1
- package/dist/hid/calibration.d.ts +1 -1
- package/dist/hid/calibration.js +1 -1
- package/dist/hid/command.d.ts +6 -6
- package/dist/hid/command.js +3 -3
- package/dist/hid/dsp.d.ts +6 -6
- package/dist/hid/dsp.js +6 -6
- package/dist/hid/dualsense_hid.d.ts +4 -4
- package/dist/hid/dualsense_hid.js +8 -8
- package/dist/hid/factory_info.d.ts +8 -2
- package/dist/hid/factory_info.d.ts.map +1 -1
- package/dist/hid/factory_info.js +10 -1
- package/dist/hid/factory_info.js.map +1 -1
- package/dist/hid/node_hid_provider.d.ts +2 -2
- package/dist/hid/node_hid_provider.js +1 -1
- package/dist/hid/web_hid_provider.d.ts +1 -1
- package/dist/hid/web_hid_provider.js +3 -3
- package/dist/manager.d.ts +4 -4
- package/dist/manager.js +13 -13
- package/dist/motion/madgwick.d.ts +2 -2
- package/dist/motion/madgwick.js +3 -3
- package/dist/motion/orientation.d.ts +3 -3
- package/dist/motion/orientation.js +3 -3
- package/dist/motion/quaternion.d.ts +2 -2
- package/dist/motion/quaternion.js +2 -2
- package/dist/motion/shake.d.ts +8 -8
- package/dist/motion/shake.js +9 -9
- 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
|
|
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`
|
|
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
|
|
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)
|
|
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
|
|
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`
|
|
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.
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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[]
|
|
599
|
-
manager.get(0); // Dualsense | undefined
|
|
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
|
|
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
|
-
//
|
|
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
|
-
|
|
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
|
-
###
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
|
751
|
-
|
|
|
752
|
-
| Class
|
|
753
|
-
|
|
|
754
|
-
|
|
|
755
|
-
|
|
|
756
|
-
|
|
|
757
|
-
|
|
|
758
|
-
|
|
|
759
|
-
|
|
|
760
|
-
|
|
|
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
|
|
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
|
|
package/dist/dualsense.d.ts
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
156
|
-
* @param tone Which tone to play
|
|
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
|
|
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
|
|
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
|
|
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
|
|
328
|
-
* @param tone Which tone to play
|
|
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":"AAAA,OAAO,EACL,SAAS,EACT,MAAM,EACN,YAAY,EACZ,OAAO,EACP,aAAa,EACb,QAAQ,EACT,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,KAAK,EAAY,WAAW,EAAE,MAAM,SAAS,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAIpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,oDAAoD;AACpD,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACxD,oEAAoE;IACpE,GAAG,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"dualsense_access.d.ts","sourceRoot":"","sources":["../src/dualsense_access.ts"],"names":[],"mappings":"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"}
|
package/dist/dualsense_access.js
CHANGED
|
@@ -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
|
|
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":";;;AAAA,yCAOoB;AACpB,wEAAmE;AACnE,oEAA+D;AAC/D,gFAA8E;AAC9E,mCAAuD;AACvD,oEAA8E;AAC9E,wDAAoD;AACpD,oFAA8E;AAC9E,4FAAsF;AACtF,uDAAmD;AAsCnD,yCAAyC;AACzC,MAAM,SAAU,SAAQ,aAAa;IAArC;;QACS,UAAK,GAAW,CAAC,CAAC;IAK3B,CAAC;IAHC,IAAW,MAAM;QACf,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,+CAA+C;AAC/C,MAAa,eAAgB,SAAQ,aAAsB;IAuDzD,wCAAwC;IACxC,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;IAC/B,CAAC;IAED,sEAAsE;IACtE,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;IAC9B,CAAC;IAED,kCAAkC;IAClC,IAAW,MAAM;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAC7B,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,YAAY,aAAK,IAAI,KAAK,CAAC,MAAM,CACpE,CAAC;IACJ,CAAC;IAED,8CAA8C;IAC9C,IAAW,QAAQ;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;IAC3B,CAAC;IAED,oCAAoC;IACpC,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,YAAY,CAAC;IAC3C,CAAC;IAED,YAAY,SAAgC,EAAE;QAC5C,KAAK,CAAC,MAAM,CAAC,CAAC;QAlFA,UAAK,GAAoB,IAAI,CAAC;QAiC9C,oBAAoB;QACJ,aAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;QAC1C,uDAAuD;QACvC,gBAAW,GAAG,IAAI,uCAAiB,EAAE,CAAC;QACtD,qDAAqD;QACrC,oBAAe,GAAG,IAAI,kDAAwB,EAAE,CAAC;QACjE,uBAAuB;QACP,cAAS,GAAG,IAAI,mCAAe,EAAE,CAAC;QAElD,iDAAiD;QAChC,WAAM,GAAqC,EAAE,CAAC;QAE/D,+BAA+B;QACd,mBAAc,GAAG;YAChC,SAAS,EAAE,CAAC;YACZ,MAAM,EAAE,4BAAY,CAAC,WAA2B;SACjD,CAAC;QAmCA,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,CAAC,MAAM,GAAG,IAAI,oBAAS,CAAC;YAC1B,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,QAAQ;YACd,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;SACzB,CAAC,CAAC;QACH,IAAI,CAAC,EAAE,GAAG,IAAI,oBAAS,CAAC;YACtB,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,IAAI;YACV,GAAG,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAS,CAAC;YAC3B,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,SAAS;YACf,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAM,CAAC;YACtB,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,OAAO;YACb,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;SACxB,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,GAAG,IAAI,kBAAO,CAAC;YACzB,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,SAAS;YACf,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;SAC1B,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,UAAU,GAAG,IAAI,oBAAS,CAAC;YAC9B,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,WAAW;YACjB,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;SAC7B,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,CAAC;QAEjC,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,KAAK,SAAS,CAAC;QACnD,IAAI,CAAC,GAAG;YACN,MAAM,CAAC,GAAG,KAAK,IAAI;gBACjB,CAAC,CAAC,IAAI,sBAAS,CAAC,IAAI,gDAAqB,EAAE,CAAC;gBAC5C,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,IAAI,sBAAS,CAAC,IAAI,wDAAyB,EAAE,CAAC,CAAC,CAAC;QACrE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAqB,EAAE,EAAE;YAC1C,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QACjC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QACpC,MAAM,mBAAmB,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QACxC,MAAM,aAAa,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;QAElC,MAAM,eAAe,GAAG,GAAG,EAAE;YAC3B,YAAY,CAAC,GAAG,GAAG,EAAE,CAAC;YACtB,eAAe,CAAC,GAAG,GAAG,EAAE,CAAC;YACzB,mBAAmB,CAAC,GAAG,GAAG,EAAE,CAAC;YAC7B,aAAa,CAAC,GAAG,GAAG,EAAE,CAAC;QACzB,CAAC,CAAC;QAEF,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,SAAS,EAAE,EAAE;YACxC,IAAI,CAAC,UAAU,CAAC,gBAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,SAAS,EAAE,CAAC;gBACd,eAAe,EAAE,CAAC;gBAClB,kEAAkE;gBAClE,iEAAiE;gBACjE,qDAAqD;gBACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,EAAE,GAAG,CAEtC,CACF,CAAC;gBACF,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,UAAU,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE,EAAE,IAAI,CAEvC,CACF,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,gBAAQ,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;QAEvD,oCAAoC;QACpC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,WAAW,CAAC,GAAG,EAAE;gBACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACjC,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC,EAAE,GAAG,CAAC,CACR,CAAC;QACJ,CAAC;QAED,mDAAmD;QACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,WAAW,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;gBAAE,OAAO;YACpC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAQ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAQ,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;YAC1D,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC;QACpC,CAAC,EAAE,IAAI,CAAC,CACT,CAAC;QAEF,qBAAqB;QACrB,oEAAoE;QACpE,8DAA8D;QAC9D,IAAI,CAAC,MAAM,CAAC,IAAI,CACd,WAAW,CAAC,GAAG,EAAE;YACf,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM;gBAAE,OAAO;YAEpC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YAC1C,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YAChD,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YACxD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAE5C,MAAM,UAAU,GACd,WAAW,KAAK,YAAY,CAAC,GAAG;gBAChC,cAAc,KAAK,eAAe,CAAC,GAAG;gBACtC,kBAAkB,KAAK,mBAAmB,CAAC,GAAG;gBAC9C,YAAY,KAAK,aAAa,CAAC,GAAG,CAAC;YAErC,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACxC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBAC/C,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBAC1D,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACzC,YAAY,CAAC,GAAG,GAAG,WAAW,CAAC;gBAC/B,eAAe,CAAC,GAAG,GAAG,cAAc,CAAC;gBACrC,mBAAmB,CAAC,GAAG,GAAG,kBAAkB,CAAC;gBAC7C,aAAa,CAAC,GAAG,GAAG,YAAY,CAAC;YACnC,CAAC;QACH,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CACd,CAAC;IACJ,CAAC;IAED,qDAAqD;IAC9C,OAAO;QACZ,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5B,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;IAED,sCAAsC;IAC9B,UAAU,CAAC,KAAqB;QACtC,IAAI,CAAC,EAAE,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,EAAE,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,IAAI,CAAC,EAAE,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,OAAO,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,OAAO,CAAC,CAAC,CAAC;QAErD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,MAAM,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,UAAU,CAAC,CAAC,CAAC;QAE7D,IAAI,CAAC,SAAS,CAAC,gBAAQ,CAAC,CAAC,KAAK,CAAC,gCAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QAEzD,MAAM,KAAK,GAAG,KAAK,CAAC,gCAAa,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,cAAc,CAAC,SAAS,GAAG,KAAK,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,KAAK,CAAC,gCAAa,CAAC,aAAa,CAAC,CAAC;IAClE,CAAC;CACF;AAlQD,0CAkQC"}
|
|
1
|
+
{"version":3,"file":"dualsense_access.js","sourceRoot":"","sources":["../src/dualsense_access.ts"],"names":[],"mappings":"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"}
|