dualsense-ts 6.6.0 → 6.7.0
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/README.md +111 -9
- package/dist/audio.d.ts +56 -0
- package/dist/audio.d.ts.map +1 -0
- package/dist/audio.js +79 -0
- package/dist/audio.js.map +1 -0
- package/dist/dualsense.d.ts +12 -1
- package/dist/dualsense.d.ts.map +1 -1
- package/dist/dualsense.js +39 -1
- package/dist/dualsense.js.map +1 -1
- package/dist/elements/audio.d.ts +77 -0
- package/dist/elements/audio.d.ts.map +1 -0
- package/dist/elements/audio.js +146 -0
- package/dist/elements/audio.js.map +1 -0
- package/dist/elements/index.d.ts +1 -0
- package/dist/elements/index.d.ts.map +1 -1
- package/dist/elements/index.js +1 -0
- package/dist/elements/index.js.map +1 -1
- package/dist/hid/command.d.ts +66 -16
- package/dist/hid/command.d.ts.map +1 -1
- package/dist/hid/command.js +37 -1
- package/dist/hid/command.js.map +1 -1
- package/dist/hid/dsp.d.ts +130 -0
- package/dist/hid/dsp.d.ts.map +1 -0
- package/dist/hid/dsp.js +136 -0
- package/dist/hid/dsp.js.map +1 -0
- package/dist/hid/dualsense_hid.d.ts +47 -0
- package/dist/hid/dualsense_hid.d.ts.map +1 -1
- package/dist/hid/dualsense_hid.js +131 -0
- package/dist/hid/dualsense_hid.js.map +1 -1
- package/dist/hid/index.d.ts +1 -0
- package/dist/hid/index.d.ts.map +1 -1
- package/dist/hid/index.js +1 -0
- package/dist/hid/index.js.map +1 -1
- package/dist/hid/node_hid_provider.d.ts.map +1 -1
- package/dist/hid/node_hid_provider.js +22 -2
- package/dist/hid/node_hid_provider.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/nodehid_example/dsp_explore.ts +288 -0
- package/nodehid_example/single.ts +25 -0
- package/nodehid_example/verify.ts +499 -0
- package/package.json +4 -2
- package/src/audio.ts +91 -0
- package/src/dualsense.ts +50 -1
- package/src/elements/audio.ts +163 -0
- package/src/elements/index.ts +1 -0
- package/src/hid/command.ts +69 -14
- package/src/hid/dsp.ts +132 -0
- package/src/hid/dualsense_hid.ts +181 -1
- package/src/hid/index.ts +1 -0
- package/src/hid/node_hid_provider.ts +21 -2
- package/src/index.ts +1 -0
- package/webhid_example/build/asset-manifest.json +3 -3
- package/webhid_example/build/index.html +1 -1
- package/webhid_example/build/static/js/main.e64bfdb3.js +3 -0
- package/webhid_example/build/static/js/main.e64bfdb3.js.map +1 -0
- package/webhid_example/src/App.tsx +49 -24
- package/webhid_example/src/hud/AudioControls.tsx +787 -0
- package/webhid_example/src/hud/Debugger.tsx +6 -1
- package/webhid_example/src/hud/TouchpadVisualization.tsx +2 -2
- package/webhid_example/src/hud/index.tsx +1 -0
- package/LINUX_HID.md +0 -85
- package/webhid_example/build/static/js/main.916c7197.js +0 -3
- package/webhid_example/build/static/js/main.916c7197.js.map +0 -1
- /package/webhid_example/build/static/js/{main.916c7197.js.LICENSE.txt → main.e64bfdb3.js.LICENSE.txt} +0 -0
package/README.md
CHANGED
|
@@ -10,11 +10,12 @@
|
|
|
10
10
|
- **Bluetooth and USB** support in the browser or node.js
|
|
11
11
|
- **Automatic connection and reconnection** even when connection type changes
|
|
12
12
|
- **Multiplayer support**, allowing up to 31 connected controllers at a time
|
|
13
|
-
- **Lighting control**
|
|
14
|
-
- **Full haptics control**
|
|
13
|
+
- **Lighting control** covering RGB light bars, player LEDs, and mute button
|
|
14
|
+
- **Full haptics control** over independent left/right rumble plus complete trigger haptics
|
|
15
15
|
- **Touchpad support** with full multi-touch handling
|
|
16
16
|
- **Motion tracking** via gyroscope and accelerometer readings
|
|
17
17
|
- **Battery status** including level and charging state
|
|
18
|
+
- **Audio controls** for speaker, headphone, and microphone volume, routing, and muting
|
|
18
19
|
- **Peripheral status** for connected headphones and microphone
|
|
19
20
|
- **Firmware info** checks providing controller color, hardware/software versions, and more
|
|
20
21
|
|
|
@@ -32,7 +33,7 @@
|
|
|
32
33
|
|
|
33
34
|
#### In node.js
|
|
34
35
|
|
|
35
|
-
`dualsense-ts` relies on `node-hid` as a peer dependency
|
|
36
|
+
`dualsense-ts` relies on `node-hid` as a peer dependency. You'll need to add it to your project as well:
|
|
36
37
|
|
|
37
38
|
- `npm add node-hid`
|
|
38
39
|
|
|
@@ -143,6 +144,39 @@ for await (const { pressure } of controller.left.trigger) {
|
|
|
143
144
|
|
|
144
145
|
### Other Supported Features
|
|
145
146
|
|
|
147
|
+
#### Touchpad
|
|
148
|
+
|
|
149
|
+
The touchpad supports two simultaneous touches, each modeled as an analog input with x/y axes ranging from -1 to 1 (center is 0,0). The physical touchpad button is a separate input:
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
// React to the first touch point (or single-finger touch)
|
|
153
|
+
controller.touchpad.left.on("change", (touch) => {
|
|
154
|
+
console.log(
|
|
155
|
+
`Touch: x=${touch.x.state.toFixed(2)}, y=${touch.y.state.toFixed(2)}`,
|
|
156
|
+
);
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
// Detect touch contact and release
|
|
160
|
+
controller.touchpad.left.contact.on("press", () => console.log("Finger down"));
|
|
161
|
+
controller.touchpad.left.contact.on("release", () => console.log("Finger up"));
|
|
162
|
+
|
|
163
|
+
// Second touch point for multi-touch
|
|
164
|
+
controller.touchpad.right.on("change", (touch) => {
|
|
165
|
+
if (touch.contact.active) {
|
|
166
|
+
console.log(
|
|
167
|
+
`Touch 2: x=${touch.x.state.toFixed(2)}, y=${touch.y.state.toFixed(2)}`,
|
|
168
|
+
);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
// Physical click of the touchpad
|
|
173
|
+
controller.touchpad.button.on("press", () => console.log("Touchpad clicked"));
|
|
174
|
+
// And another way to detect a touch
|
|
175
|
+
controller.touchpad.on("press", () => console.log("Touchpad touched"));
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Each touch point also exposes a `tracker` ([Increment](src/elements/increment.ts)) that provides a touch ID, which increments each time a new finger is placed on the pad.
|
|
179
|
+
|
|
146
180
|
#### Motion Control
|
|
147
181
|
|
|
148
182
|
You can access raw gyroscope and accelerometer readings from the device:
|
|
@@ -334,7 +368,62 @@ controller.mute.status.on("change", ({ state }) => {
|
|
|
334
368
|
});
|
|
335
369
|
```
|
|
336
370
|
|
|
337
|
-
|
|
371
|
+
#### Audio Control
|
|
372
|
+
|
|
373
|
+
The DualSense has a built-in speaker and microphone. Over USB, it registers as a standard audio device at the OS level. `dualsense-ts` provides volume, routing, and mute controls:
|
|
374
|
+
|
|
375
|
+
```typescript
|
|
376
|
+
import { AudioOutput, MicSelect, MicMode } from "dualsense-ts";
|
|
377
|
+
|
|
378
|
+
// Volume control (0.0-1.0)
|
|
379
|
+
controller.audio.setSpeakerVolume(0.8);
|
|
380
|
+
controller.audio.setHeadphoneVolume(0.5);
|
|
381
|
+
controller.audio.setMicrophoneVolume(1.0);
|
|
382
|
+
|
|
383
|
+
// Audio output routing
|
|
384
|
+
controller.audio.setOutput(AudioOutput.Speaker); // Internal speaker only
|
|
385
|
+
controller.audio.setOutput(AudioOutput.Headphone); // Headphone only (default)
|
|
386
|
+
controller.audio.setOutput(AudioOutput.Split); // Left: headphone, right: speaker
|
|
387
|
+
|
|
388
|
+
// Per-output muting
|
|
389
|
+
controller.audio.muteSpeaker(true);
|
|
390
|
+
controller.audio.muteHeadphone(true);
|
|
391
|
+
controller.audio.muteMicrophone(true);
|
|
392
|
+
controller.audio.muteSpeaker(false); // Unmute
|
|
393
|
+
|
|
394
|
+
// Microphone source and processing
|
|
395
|
+
controller.audio.setMicSelect(MicSelect.Internal); // Built-in mic
|
|
396
|
+
controller.audio.setMicSelect(MicSelect.Headset); // Headset mic
|
|
397
|
+
controller.audio.setMicMode(MicMode.Chat); // Chat mode
|
|
398
|
+
|
|
399
|
+
// Speaker preamp gain (0–7) and beam forming
|
|
400
|
+
controller.audio.setPreamp(4);
|
|
401
|
+
controller.audio.setPreamp(2, true); // Enable beam forming
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
These HID commands control volume and routing but do not stream audio data. To send audio to the controller's speaker or capture from its microphone, use the OS audio device (Web Audio API or a native audio library like PortAudio). The helper function `findDualsenseAudioDevices()` locates matching audio devices in the browser:
|
|
405
|
+
|
|
406
|
+
```typescript
|
|
407
|
+
import { findDualsenseAudioDevices } from "dualsense-ts";
|
|
408
|
+
|
|
409
|
+
const { outputs, inputs } = await findDualsenseAudioDevices();
|
|
410
|
+
|
|
411
|
+
// Route audio to the controller's speaker
|
|
412
|
+
if (outputs.length > 0) {
|
|
413
|
+
const ctx = new AudioContext({ sinkId: outputs[0].deviceId });
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// Capture from the controller's microphone
|
|
417
|
+
if (inputs.length > 0) {
|
|
418
|
+
const stream = await navigator.mediaDevices.getUserMedia({
|
|
419
|
+
audio: { deviceId: { exact: inputs[0].deviceId } },
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
For Node.js, enumerate audio devices by USB vendor ID `0x054C` and product ID `0x0CE6` using your audio library of choice. These constants are exported as `DUALSENSE_AUDIO_VENDOR_ID` and `DUALSENSE_AUDIO_PRODUCT_ID`.
|
|
425
|
+
|
|
426
|
+
Unfortunately, multi-controller support is limited. We don't have a dependable way to link individual controllers to their device IDs across all connection types at this time - if you have any ideas, please submit a PR!
|
|
338
427
|
|
|
339
428
|
#### Color and Serial Number
|
|
340
429
|
|
|
@@ -370,7 +459,7 @@ The `firmwareInfo` property includes build date/time, firmware versions, hardwar
|
|
|
370
459
|
|
|
371
460
|
## Using `dualsense-ts` with React
|
|
372
461
|
|
|
373
|
-
Check out [the
|
|
462
|
+
Check out [the demo app](./webhid_example/) for reference implementations. All features supported by the controller are available in the app.
|
|
374
463
|
|
|
375
464
|
```typescript
|
|
376
465
|
// DualsenseContext.tsx
|
|
@@ -525,13 +614,26 @@ Using `new Dualsense()` directly continues to work exactly as before, allowing y
|
|
|
525
614
|
|
|
526
615
|
## Known Issues
|
|
527
616
|
|
|
528
|
-
###
|
|
617
|
+
### Audio streaming requires USB
|
|
529
618
|
|
|
530
|
-
|
|
619
|
+
The DualSense registers as a USB Audio Class device only over USB. Over Bluetooth, there is no audio transport. Audio controls (volume, routing, muting) work over both USB and Bluetooth, but they only affect audio playback over USB.
|
|
620
|
+
|
|
621
|
+
### Linux - headphone audio plays in one ear only
|
|
531
622
|
|
|
532
|
-
|
|
623
|
+
PulseAudio defaults to the mono "Speaker" profile when the DualSense is connected. This sends a single audio channel, which the controller routes to the right side only. To get stereo headphone output, switch to the headphones profile:
|
|
533
624
|
|
|
534
|
-
|
|
625
|
+
```bash
|
|
626
|
+
# Switch to stereo headphone profile
|
|
627
|
+
pactl set-card-profile alsa_card.usb-Sony_Interactive_Entertainment_Wireless_Controller-00 "HiFi (Headphones, Mic)"
|
|
628
|
+
|
|
629
|
+
# Set it as the default output and adjust volume
|
|
630
|
+
pactl set-default-sink alsa_output.usb-Sony_Interactive_Entertainment_Wireless_Controller-00.HiFi__Headphones__sink
|
|
631
|
+
pactl set-sink-volume alsa_output.usb-Sony_Interactive_Entertainment_Wireless_Controller-00.HiFi__Headphones__sink 100%
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
### Linux - can't use multiple controllers over Bluetooth
|
|
635
|
+
|
|
636
|
+
Identical Bluetooth devices are not given separate HID interfaces under some circumstances. You may still use multiple USB-connected controllers plus one Bluetooth controller.
|
|
535
637
|
|
|
536
638
|
## Other Dualsense Variants
|
|
537
639
|
|
package/dist/audio.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio device matching utilities for the DualSense controller.
|
|
3
|
+
*
|
|
4
|
+
* The DualSense registers as a USB Audio Class device (speaker + microphone)
|
|
5
|
+
* when connected over USB. These utilities help locate the corresponding
|
|
6
|
+
* audio devices in the Web Audio API or native audio libraries.
|
|
7
|
+
*
|
|
8
|
+
* Note: Audio devices are only available over USB, not Bluetooth.
|
|
9
|
+
*/
|
|
10
|
+
/** USB Vendor ID for Sony Interactive Entertainment */
|
|
11
|
+
export declare const DUALSENSE_AUDIO_VENDOR_ID = 1356;
|
|
12
|
+
/** USB Product ID for the DualSense controller */
|
|
13
|
+
export declare const DUALSENSE_AUDIO_PRODUCT_ID = 3302;
|
|
14
|
+
/**
|
|
15
|
+
* Known device label patterns for DualSense audio devices across platforms.
|
|
16
|
+
* Browser `enumerateDevices()` labels vary by OS:
|
|
17
|
+
* - Windows: "Wireless Controller"
|
|
18
|
+
* - macOS: "Wireless Controller"
|
|
19
|
+
* - Linux: "Wireless Controller" or "Sony Interactive Entertainment Wireless Controller"
|
|
20
|
+
*/
|
|
21
|
+
export declare const DUALSENSE_AUDIO_LABELS: readonly ["Wireless Controller", "DualSense"];
|
|
22
|
+
/** Filtered result from audio device enumeration */
|
|
23
|
+
export interface DualsenseAudioDevices {
|
|
24
|
+
/** Audio output devices (speaker/headphone) */
|
|
25
|
+
outputs: MediaDeviceInfo[];
|
|
26
|
+
/** Audio input devices (microphone) */
|
|
27
|
+
inputs: MediaDeviceInfo[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Find DualSense audio devices using the Web Audio API.
|
|
31
|
+
*
|
|
32
|
+
* Requires `navigator.mediaDevices` (browser only). Returns matching
|
|
33
|
+
* audio input and output devices based on known label patterns.
|
|
34
|
+
*
|
|
35
|
+
* Note: Device labels may be empty until the user grants microphone
|
|
36
|
+
* or camera permission via `getUserMedia()`.
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* import { findDualsenseAudioDevices } from "dualsense-ts";
|
|
41
|
+
*
|
|
42
|
+
* const { outputs, inputs } = await findDualsenseAudioDevices();
|
|
43
|
+
* if (outputs.length > 0) {
|
|
44
|
+
* const ctx = new AudioContext({ sinkId: outputs[0].deviceId });
|
|
45
|
+
* // Route audio to the controller's speaker
|
|
46
|
+
* }
|
|
47
|
+
* if (inputs.length > 0) {
|
|
48
|
+
* const stream = await navigator.mediaDevices.getUserMedia({
|
|
49
|
+
* audio: { deviceId: { exact: inputs[0].deviceId } },
|
|
50
|
+
* });
|
|
51
|
+
* // Capture from the controller's microphone
|
|
52
|
+
* }
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare function findDualsenseAudioDevices(): Promise<DualsenseAudioDevices>;
|
|
56
|
+
//# sourceMappingURL=audio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,uDAAuD;AACvD,eAAO,MAAM,yBAAyB,OAAS,CAAC;AAEhD,kDAAkD;AAClD,eAAO,MAAM,0BAA0B,OAAS,CAAC;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,sBAAsB,+CAGzB,CAAC;AAUX,oDAAoD;AACpD,MAAM,WAAW,qBAAqB;IACpC,+CAA+C;IAC/C,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,uCAAuC;IACvC,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,yBAAyB,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAoBhF"}
|
package/dist/audio.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Audio device matching utilities for the DualSense controller.
|
|
4
|
+
*
|
|
5
|
+
* The DualSense registers as a USB Audio Class device (speaker + microphone)
|
|
6
|
+
* when connected over USB. These utilities help locate the corresponding
|
|
7
|
+
* audio devices in the Web Audio API or native audio libraries.
|
|
8
|
+
*
|
|
9
|
+
* Note: Audio devices are only available over USB, not Bluetooth.
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.findDualsenseAudioDevices = exports.DUALSENSE_AUDIO_LABELS = exports.DUALSENSE_AUDIO_PRODUCT_ID = exports.DUALSENSE_AUDIO_VENDOR_ID = void 0;
|
|
13
|
+
/** USB Vendor ID for Sony Interactive Entertainment */
|
|
14
|
+
exports.DUALSENSE_AUDIO_VENDOR_ID = 0x054c;
|
|
15
|
+
/** USB Product ID for the DualSense controller */
|
|
16
|
+
exports.DUALSENSE_AUDIO_PRODUCT_ID = 0x0ce6;
|
|
17
|
+
/**
|
|
18
|
+
* Known device label patterns for DualSense audio devices across platforms.
|
|
19
|
+
* Browser `enumerateDevices()` labels vary by OS:
|
|
20
|
+
* - Windows: "Wireless Controller"
|
|
21
|
+
* - macOS: "Wireless Controller"
|
|
22
|
+
* - Linux: "Wireless Controller" or "Sony Interactive Entertainment Wireless Controller"
|
|
23
|
+
*/
|
|
24
|
+
exports.DUALSENSE_AUDIO_LABELS = [
|
|
25
|
+
"Wireless Controller",
|
|
26
|
+
"DualSense",
|
|
27
|
+
];
|
|
28
|
+
/** Matches a MediaDeviceInfo label against known DualSense patterns */
|
|
29
|
+
function matchesDualsenseLabel(label) {
|
|
30
|
+
const lower = label.toLowerCase();
|
|
31
|
+
return exports.DUALSENSE_AUDIO_LABELS.some((pattern) => lower.includes(pattern.toLowerCase()));
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Find DualSense audio devices using the Web Audio API.
|
|
35
|
+
*
|
|
36
|
+
* Requires `navigator.mediaDevices` (browser only). Returns matching
|
|
37
|
+
* audio input and output devices based on known label patterns.
|
|
38
|
+
*
|
|
39
|
+
* Note: Device labels may be empty until the user grants microphone
|
|
40
|
+
* or camera permission via `getUserMedia()`.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* import { findDualsenseAudioDevices } from "dualsense-ts";
|
|
45
|
+
*
|
|
46
|
+
* const { outputs, inputs } = await findDualsenseAudioDevices();
|
|
47
|
+
* if (outputs.length > 0) {
|
|
48
|
+
* const ctx = new AudioContext({ sinkId: outputs[0].deviceId });
|
|
49
|
+
* // Route audio to the controller's speaker
|
|
50
|
+
* }
|
|
51
|
+
* if (inputs.length > 0) {
|
|
52
|
+
* const stream = await navigator.mediaDevices.getUserMedia({
|
|
53
|
+
* audio: { deviceId: { exact: inputs[0].deviceId } },
|
|
54
|
+
* });
|
|
55
|
+
* // Capture from the controller's microphone
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
async function findDualsenseAudioDevices() {
|
|
60
|
+
if (typeof navigator === "undefined" ||
|
|
61
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
62
|
+
!navigator.mediaDevices?.enumerateDevices) {
|
|
63
|
+
return { outputs: [], inputs: [] };
|
|
64
|
+
}
|
|
65
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
66
|
+
const outputs = [];
|
|
67
|
+
const inputs = [];
|
|
68
|
+
for (const device of devices) {
|
|
69
|
+
if (!matchesDualsenseLabel(device.label))
|
|
70
|
+
continue;
|
|
71
|
+
if (device.kind === "audiooutput")
|
|
72
|
+
outputs.push(device);
|
|
73
|
+
else if (device.kind === "audioinput")
|
|
74
|
+
inputs.push(device);
|
|
75
|
+
}
|
|
76
|
+
return { outputs, inputs };
|
|
77
|
+
}
|
|
78
|
+
exports.findDualsenseAudioDevices = findDualsenseAudioDevices;
|
|
79
|
+
//# sourceMappingURL=audio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.js","sourceRoot":"","sources":["../src/audio.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,uDAAuD;AAC1C,QAAA,yBAAyB,GAAG,MAAM,CAAC;AAEhD,kDAAkD;AACrC,QAAA,0BAA0B,GAAG,MAAM,CAAC;AAEjD;;;;;;GAMG;AACU,QAAA,sBAAsB,GAAG;IACpC,qBAAqB;IACrB,WAAW;CACH,CAAC;AAEX,uEAAuE;AACvE,SAAS,qBAAqB,CAAC,KAAa;IAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAClC,OAAO,8BAAsB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAC7C,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CACtC,CAAC;AACJ,CAAC;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACI,KAAK,UAAU,yBAAyB;IAC7C,IACE,OAAO,SAAS,KAAK,WAAW;QAChC,uEAAuE;QACvE,CAAC,SAAS,CAAC,YAAY,EAAE,gBAAgB,EACzC;QACA,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;KACpC;IAED,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;IAChE,MAAM,OAAO,GAAsB,EAAE,CAAC;IACtC,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;QAC5B,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,SAAS;QACnD,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa;YAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aACnD,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;YAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;KAC5D;IAED,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC7B,CAAC;AApBD,8DAoBC"}
|
package/dist/dualsense.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Momentary, Dpad, DpadParams, Mute, Unisense, UnisenseParams, Touchpad, Gyroscope, GyroscopeParams, Accelerometer, AccelerometerParams, Battery, BatteryParams, Lightbar, PlayerLeds } from "./elements";
|
|
1
|
+
import { Momentary, Dpad, DpadParams, Mute, Unisense, UnisenseParams, Touchpad, Gyroscope, GyroscopeParams, Accelerometer, AccelerometerParams, Battery, BatteryParams, Lightbar, PlayerLeds, Audio } from "./elements";
|
|
2
2
|
import { Input, InputParams } from "./input";
|
|
3
3
|
import { DualsenseHID, FirmwareInfo, FactoryInfo, DualsenseColor } from "./hid";
|
|
4
4
|
import { Intensity } from "./math";
|
|
@@ -78,6 +78,8 @@ export declare class Dualsense extends Input<Dualsense> {
|
|
|
78
78
|
readonly lightbar: Lightbar;
|
|
79
79
|
/** The 5 white player indicator LEDs */
|
|
80
80
|
readonly playerLeds: PlayerLeds;
|
|
81
|
+
/** Audio volume, routing, and microphone controls */
|
|
82
|
+
readonly audio: Audio;
|
|
81
83
|
/**
|
|
82
84
|
* Buffered battery reading, sampled on a slow cadence
|
|
83
85
|
* Battery readings are prone to flip-flopping, so we buffer them
|
|
@@ -111,6 +113,15 @@ export declare class Dualsense extends Input<Dualsense> {
|
|
|
111
113
|
private get rumbleIntensity();
|
|
112
114
|
/** Reset adaptive trigger feedback on both sides to the default linear feel */
|
|
113
115
|
resetTriggerFeedback(): void;
|
|
116
|
+
/**
|
|
117
|
+
* Play a built-in test tone via the onboard DSP.
|
|
118
|
+
* Works over both USB and Bluetooth. Call `stopTestTone()` to stop.
|
|
119
|
+
* @param target Output destination — "speaker" (default) or "headphone"
|
|
120
|
+
* @param tone Which tone to play — "1khz" (default), "100hz", or "both"
|
|
121
|
+
*/
|
|
122
|
+
startTestTone(target?: "speaker" | "headphone", tone?: "1khz" | "100hz" | "both"): Promise<void>;
|
|
123
|
+
/** Stop the DSP test tone */
|
|
124
|
+
stopTestTone(): Promise<void>;
|
|
114
125
|
/** Check or adjust rumble intensity evenly across both sides of the controller */
|
|
115
126
|
rumble(intensity?: Intensity): number;
|
|
116
127
|
/** Distributes HID event values to the controller's public inputs. */
|
package/dist/dualsense.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dualsense.d.ts","sourceRoot":"","sources":["../src/dualsense.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,IAAI,EACJ,UAAU,EACV,IAAI,EACJ,QAAQ,EACR,cAAc,EACd,QAAQ,EACR,SAAS,EACT,eAAe,EACf,aAAa,EACb,mBAAmB,EACnB,OAAO,EACP,aAAa,EACb,QAAQ,EACR,UAAU,
|
|
1
|
+
{"version":3,"file":"dualsense.d.ts","sourceRoot":"","sources":["../src/dualsense.ts"],"names":[],"mappings":"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"}
|
package/dist/dualsense.js
CHANGED
|
@@ -47,6 +47,8 @@ class Dualsense extends input_1.Input {
|
|
|
47
47
|
this.lightbar = new elements_1.Lightbar();
|
|
48
48
|
/** The 5 white player indicator LEDs */
|
|
49
49
|
this.playerLeds = new elements_1.PlayerLeds();
|
|
50
|
+
/** Audio volume, routing, and microphone controls */
|
|
51
|
+
this.audio = new elements_1.Audio();
|
|
50
52
|
/**
|
|
51
53
|
* Buffered battery reading, sampled on a slow cadence
|
|
52
54
|
* Battery readings are prone to flip-flopping, so we buffer them
|
|
@@ -153,6 +155,11 @@ class Dualsense extends input_1.Input {
|
|
|
153
155
|
const lightbarMemo = { key: "" };
|
|
154
156
|
const playerLedsMemo = { key: "" };
|
|
155
157
|
const muteLedMemo = { mode: undefined };
|
|
158
|
+
// Seed audio memo with the initial state so we don't override the
|
|
159
|
+
// controller's firmware-managed routing on connect. Audio commands
|
|
160
|
+
// are only sent once the user explicitly changes a setting.
|
|
161
|
+
const initialAudioKey = this.audio.toKey();
|
|
162
|
+
const audioMemo = { key: initialAudioKey, userChanged: false };
|
|
156
163
|
// Mirror transport-level connect/disconnect into the connection Momentary,
|
|
157
164
|
// and invalidate output memos on rising-edge connect so the output loop
|
|
158
165
|
// re-pushes desired state to the new device.
|
|
@@ -164,6 +171,8 @@ class Dualsense extends input_1.Input {
|
|
|
164
171
|
lightbarMemo.key = "";
|
|
165
172
|
playerLedsMemo.key = "";
|
|
166
173
|
muteLedMemo.mode = undefined;
|
|
174
|
+
if (audioMemo.userChanged)
|
|
175
|
+
audioMemo.key = "";
|
|
167
176
|
}
|
|
168
177
|
});
|
|
169
178
|
// Seed the initial state in case the provider was already attached.
|
|
@@ -193,7 +202,12 @@ class Dualsense extends input_1.Input {
|
|
|
193
202
|
return;
|
|
194
203
|
const leftRumble = this.left.rumble();
|
|
195
204
|
const rightRumble = this.right.rumble();
|
|
196
|
-
|
|
205
|
+
// Always resend when rumble is active. The controller has an internal
|
|
206
|
+
// keepalive timeout (~5s) that stops the motors if not refreshed.
|
|
207
|
+
if (leftRumble > 0 ||
|
|
208
|
+
rightRumble > 0 ||
|
|
209
|
+
leftRumble !== rumbleMemo.left ||
|
|
210
|
+
rightRumble !== rumbleMemo.right) {
|
|
197
211
|
this.hid.setRumble(leftRumble * 255, rightRumble * 255);
|
|
198
212
|
rumbleMemo.left = leftRumble;
|
|
199
213
|
rumbleMemo.right = rightRumble;
|
|
@@ -240,6 +254,17 @@ class Dualsense extends input_1.Input {
|
|
|
240
254
|
}
|
|
241
255
|
muteLedMemo.mode = muteLedMode;
|
|
242
256
|
}
|
|
257
|
+
const audioKey = this.audio.toKey();
|
|
258
|
+
if (audioKey !== audioMemo.key) {
|
|
259
|
+
audioMemo.userChanged = true;
|
|
260
|
+
this.hid.setHeadphoneVolume(this.audio.headphoneVolumeRaw);
|
|
261
|
+
this.hid.setSpeakerVolume(this.audio.speakerVolumeRaw);
|
|
262
|
+
this.hid.setMicrophoneVolume(this.audio.microphoneVolumeRaw);
|
|
263
|
+
this.hid.setAudioFlags(this.audio.audioFlags);
|
|
264
|
+
this.hid.setPowerSave(this.audio.powerSaveFlags);
|
|
265
|
+
this.hid.setSpeakerPreamp(this.audio.preampGain, this.audio.beamForming);
|
|
266
|
+
audioMemo.key = audioKey;
|
|
267
|
+
}
|
|
243
268
|
}, 1000 / 30);
|
|
244
269
|
}
|
|
245
270
|
/** Average rumble strength across both halves of the controller. */
|
|
@@ -251,6 +276,19 @@ class Dualsense extends input_1.Input {
|
|
|
251
276
|
this.left.trigger.feedback.reset();
|
|
252
277
|
this.right.trigger.feedback.reset();
|
|
253
278
|
}
|
|
279
|
+
/**
|
|
280
|
+
* Play a built-in test tone via the onboard DSP.
|
|
281
|
+
* Works over both USB and Bluetooth. Call `stopTestTone()` to stop.
|
|
282
|
+
* @param target Output destination — "speaker" (default) or "headphone"
|
|
283
|
+
* @param tone Which tone to play — "1khz" (default), "100hz", or "both"
|
|
284
|
+
*/
|
|
285
|
+
async startTestTone(target = "speaker", tone = "1khz") {
|
|
286
|
+
return this.hid.startTestTone(target, tone);
|
|
287
|
+
}
|
|
288
|
+
/** Stop the DSP test tone */
|
|
289
|
+
async stopTestTone() {
|
|
290
|
+
return this.hid.stopTestTone();
|
|
291
|
+
}
|
|
254
292
|
/** Check or adjust rumble intensity evenly across both sides of the controller */
|
|
255
293
|
rumble(intensity) {
|
|
256
294
|
this.left.rumble(intensity);
|
package/dist/dualsense.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dualsense.js","sourceRoot":"","sources":["../src/dualsense.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dualsense.js","sourceRoot":"","sources":["../src/dualsense.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { AudioOutput, MicSelect, MicMode } from "../hid/command";
|
|
2
|
+
/** Audio control state for the DualSense controller */
|
|
3
|
+
export declare class Audio {
|
|
4
|
+
/** Headphone volume (0.0–1.0) */
|
|
5
|
+
private _headphoneVolume;
|
|
6
|
+
/** Speaker volume (0.0–1.0) */
|
|
7
|
+
private _speakerVolume;
|
|
8
|
+
/** Microphone volume (0.0–1.0) */
|
|
9
|
+
private _microphoneVolume;
|
|
10
|
+
/** Audio output routing */
|
|
11
|
+
private _output;
|
|
12
|
+
/** Microphone source selection */
|
|
13
|
+
private _micSelect?;
|
|
14
|
+
/** Microphone processing flags */
|
|
15
|
+
private _micFlags;
|
|
16
|
+
/** Microphone input mode */
|
|
17
|
+
private _micMode;
|
|
18
|
+
/** Speaker preamp gain (0–7) */
|
|
19
|
+
private _preampGain;
|
|
20
|
+
/** Beam forming enabled */
|
|
21
|
+
private _beamForming;
|
|
22
|
+
/** Per-subsystem mute flags */
|
|
23
|
+
private _muteMask;
|
|
24
|
+
/** Get headphone volume as a fraction (0.0–1.0) */
|
|
25
|
+
get headphoneVolume(): number;
|
|
26
|
+
/** Set headphone volume (0.0–1.0) */
|
|
27
|
+
setHeadphoneVolume(volume: number): void;
|
|
28
|
+
/** Get speaker volume as a fraction (0.0–1.0) */
|
|
29
|
+
get speakerVolume(): number;
|
|
30
|
+
/** Set speaker volume (0.0–1.0) */
|
|
31
|
+
setSpeakerVolume(volume: number): void;
|
|
32
|
+
/** Get microphone volume as a fraction (0.0–1.0) */
|
|
33
|
+
get microphoneVolume(): number;
|
|
34
|
+
/** Set microphone volume (0.0–1.0) */
|
|
35
|
+
setMicrophoneVolume(volume: number): void;
|
|
36
|
+
/** Get audio output routing */
|
|
37
|
+
get output(): AudioOutput;
|
|
38
|
+
/** Set audio output routing */
|
|
39
|
+
setOutput(output: AudioOutput): void;
|
|
40
|
+
/** Get speaker preamp gain (0–7) */
|
|
41
|
+
get preampGain(): number;
|
|
42
|
+
/** Set speaker preamp gain (0–7) and optional beam forming */
|
|
43
|
+
setPreamp(gain: number, beamForming?: boolean): void;
|
|
44
|
+
/** Whether beam forming is enabled */
|
|
45
|
+
get beamForming(): boolean;
|
|
46
|
+
/** Set microphone source */
|
|
47
|
+
setMicSelect(source: MicSelect): void;
|
|
48
|
+
/** Set microphone processing flags (echo cancellation, noise cancellation) */
|
|
49
|
+
setMicFlags(flags: number): void;
|
|
50
|
+
/** Set microphone input mode */
|
|
51
|
+
setMicMode(mode: MicMode): void;
|
|
52
|
+
/** Mute the speaker */
|
|
53
|
+
muteSpeaker(muted?: boolean): void;
|
|
54
|
+
/** Mute the headphone output */
|
|
55
|
+
muteHeadphone(muted?: boolean): void;
|
|
56
|
+
/** Mute the microphone */
|
|
57
|
+
muteMicrophone(muted?: boolean): void;
|
|
58
|
+
/** Whether the speaker is muted */
|
|
59
|
+
get speakerMuted(): boolean;
|
|
60
|
+
/** Whether headphone output is muted */
|
|
61
|
+
get headphoneMuted(): boolean;
|
|
62
|
+
/** Whether the microphone is muted */
|
|
63
|
+
get microphoneMuted(): boolean;
|
|
64
|
+
/** Raw headphone volume byte (0x00–0x7F) */
|
|
65
|
+
get headphoneVolumeRaw(): number;
|
|
66
|
+
/** Raw speaker volume byte (0x00–0x64) */
|
|
67
|
+
get speakerVolumeRaw(): number;
|
|
68
|
+
/** Raw microphone volume byte (0x00–0x40) */
|
|
69
|
+
get microphoneVolumeRaw(): number;
|
|
70
|
+
/** Composed audio flags byte */
|
|
71
|
+
get audioFlags(): number;
|
|
72
|
+
/** Power save mute mask */
|
|
73
|
+
get powerSaveFlags(): number;
|
|
74
|
+
/** Change-detection key for the output loop */
|
|
75
|
+
toKey(): string;
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=audio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio.d.ts","sourceRoot":"","sources":["../../src/elements/audio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAW,OAAO,EAAa,MAAM,gBAAgB,CAAC;AAErF,uDAAuD;AACvD,qBAAa,KAAK;IAChB,iCAAiC;IACjC,OAAO,CAAC,gBAAgB,CAAO;IAC/B,+BAA+B;IAC/B,OAAO,CAAC,cAAc,CAAO;IAC7B,kCAAkC;IAClC,OAAO,CAAC,iBAAiB,CAAO;IAChC,2BAA2B;IAC3B,OAAO,CAAC,OAAO,CAAyB;IACxC,kCAAkC;IAClC,OAAO,CAAC,UAAU,CAAC,CAAY;IAC/B,kCAAkC;IAClC,OAAO,CAAC,SAAS,CAAK;IACtB,4BAA4B;IAC5B,OAAO,CAAC,QAAQ,CAAmB;IACnC,gCAAgC;IAChC,OAAO,CAAC,WAAW,CAAK;IACxB,2BAA2B;IAC3B,OAAO,CAAC,YAAY,CAAS;IAC7B,+BAA+B;IAC/B,OAAO,CAAC,SAAS,CAAK;IAEtB,mDAAmD;IACnD,IAAW,eAAe,IAAI,MAAM,CAEnC;IAED,qCAAqC;IAC9B,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI/C,iDAAiD;IACjD,IAAW,aAAa,IAAI,MAAM,CAEjC;IAED,mCAAmC;IAC5B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI7C,oDAAoD;IACpD,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED,sCAAsC;IAC/B,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIhD,+BAA+B;IAC/B,IAAW,MAAM,IAAI,WAAW,CAE/B;IAED,+BAA+B;IACxB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAI3C,oCAAoC;IACpC,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,8DAA8D;IACvD,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI;IAO3D,sCAAsC;IACtC,IAAW,WAAW,IAAI,OAAO,CAEhC;IAED,4BAA4B;IACrB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAI5C,8EAA8E;IACvE,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIvC,gCAAgC;IACzB,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAItC,uBAAuB;IAChB,WAAW,CAAC,KAAK,UAAO,GAAG,IAAI;IAKtC,gCAAgC;IACzB,aAAa,CAAC,KAAK,UAAO,GAAG,IAAI;IAKxC,0BAA0B;IACnB,cAAc,CAAC,KAAK,UAAO,GAAG,IAAI;IAKzC,mCAAmC;IACnC,IAAW,YAAY,IAAI,OAAO,CAEjC;IAED,wCAAwC;IACxC,IAAW,cAAc,IAAI,OAAO,CAEnC;IAED,sCAAsC;IACtC,IAAW,eAAe,IAAI,OAAO,CAEpC;IAID,4CAA4C;IAC5C,IAAW,kBAAkB,IAAI,MAAM,CAEtC;IAED,0CAA0C;IAC1C,IAAW,gBAAgB,IAAI,MAAM,CAEpC;IAED,6CAA6C;IAC7C,IAAW,mBAAmB,IAAI,MAAM,CAEvC;IAED,gCAAgC;IAChC,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED,2BAA2B;IAC3B,IAAW,cAAc,IAAI,MAAM,CAElC;IAED,+CAA+C;IACxC,KAAK,IAAI,MAAM;CAGvB"}
|