dualsense-ts 6.11.0 → 6.13.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/CHANGELOG.md +17 -0
- package/README.md +53 -4
- package/dist/dualsense.d.ts +26 -1
- package/dist/dualsense.d.ts.map +1 -1
- package/dist/dualsense.js +40 -0
- package/dist/dualsense.js.map +1 -1
- package/dist/hid/calibration.d.ts +102 -0
- package/dist/hid/calibration.d.ts.map +1 -0
- package/dist/hid/calibration.js +164 -0
- package/dist/hid/calibration.js.map +1 -0
- package/dist/hid/dualsense_hid.d.ts +6 -0
- package/dist/hid/dualsense_hid.d.ts.map +1 -1
- package/dist/hid/dualsense_hid.js +7 -0
- package/dist/hid/dualsense_hid.js.map +1 -1
- package/dist/hid/hid_provider.d.ts +3 -0
- package/dist/hid/hid_provider.d.ts.map +1 -1
- package/dist/hid/hid_provider.js +16 -12
- package/dist/hid/hid_provider.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 +7 -2
- package/dist/hid/node_hid_provider.js.map +1 -1
- package/dist/hid/web_hid_provider.d.ts.map +1 -1
- package/dist/hid/web_hid_provider.js +8 -2
- package/dist/hid/web_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/dist/motion/index.d.ts +8 -0
- package/dist/motion/index.d.ts.map +1 -0
- package/dist/motion/index.js +24 -0
- package/dist/motion/index.js.map +1 -0
- package/dist/motion/madgwick.d.ts +41 -0
- package/dist/motion/madgwick.d.ts.map +1 -0
- package/dist/motion/madgwick.js +95 -0
- package/dist/motion/madgwick.js.map +1 -0
- package/dist/motion/orientation.d.ts +62 -0
- package/dist/motion/orientation.d.ts.map +1 -0
- package/dist/motion/orientation.js +106 -0
- package/dist/motion/orientation.js.map +1 -0
- package/dist/motion/quaternion.d.ts +30 -0
- package/dist/motion/quaternion.d.ts.map +1 -0
- package/dist/motion/quaternion.js +44 -0
- package/dist/motion/quaternion.js.map +1 -0
- package/dist/motion/shake.d.ts +132 -0
- package/dist/motion/shake.d.ts.map +1 -0
- package/dist/motion/shake.js +254 -0
- package/dist/motion/shake.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,23 @@
|
|
|
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.13.0] - 2026-04-13
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **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
|
|
10
|
+
- **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
|
|
11
|
+
- Axis remapping from DualSense Y-up to Madgwick Z-up convention for correct symmetric tilt behavior
|
|
12
|
+
- Zero-gradient guard in the Madgwick filter to prevent NaN when gravity is already aligned
|
|
13
|
+
- New `motion/` module: `Orientation`, `ShakeDetector`, `MadgwickFilter`, quaternion math — all zero-dependency
|
|
14
|
+
|
|
15
|
+
## [6.12.0] - 2026-04-14
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- **IMU calibration**:gyroscope and accelerometer readings now use per-unit factory calibration data (Feature Report 0x05) read automatically on connection. Removes gyro bias drift, corrects accelerometer zero-point offset, and normalises per-axis sensitivity so all three axes report consistent values for the same physical input
|
|
20
|
+
- `controller.calibration` exposes the resolved calibration factors for inspection and diagnostics
|
|
21
|
+
|
|
5
22
|
## [6.11.0] - 2026-04-13
|
|
6
23
|
|
|
7
24
|
### Added
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`dualsense-ts` is the natural interface for your DualSense controller. Simple to use, fully-typed, fully-featured, and supports wired and wireless connections in both node.js and the browser.
|
|
4
4
|
|
|
5
|
-
Check out the **[interactive docs](https://nsfm.github.io/dualsense-ts/)**! Connect a controller and try every feature with live demos,
|
|
5
|
+
Check out the **[interactive docs](https://nsfm.github.io/dualsense-ts/)**! Connect a controller (or a few!) and try every feature with live demos. Or, explore the [playground](https://nsfm.github.io/dualsense-ts/playground) to check all of your controller functionality in one place.
|
|
6
6
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
@@ -13,7 +13,7 @@ Check out the **[interactive docs](https://nsfm.github.io/dualsense-ts/)**! Conn
|
|
|
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
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)
|
|
15
15
|
- **[Touchpad support](https://nsfm.github.io/dualsense-ts/inputs/touchpad)** with full multi-touch handling
|
|
16
|
-
- **[Motion tracking](https://nsfm.github.io/dualsense-ts/inputs/motion)** via gyroscope and accelerometer
|
|
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
|
|
18
18
|
- **[Audio controls](https://nsfm.github.io/dualsense-ts/outputs/audio)** for speaker, headphone, and microphone volume, routing, and muting
|
|
19
19
|
- **Peripheral status** for connected headphones and microphone
|
|
@@ -180,7 +180,7 @@ Each touch point also exposes a `tracker` ([Increment](src/elements/increment.ts
|
|
|
180
180
|
|
|
181
181
|
#### [Motion Control](https://nsfm.github.io/dualsense-ts/inputs/motion)
|
|
182
182
|
|
|
183
|
-
|
|
183
|
+
Raw values from the controller's 6-axis IMU are provided:
|
|
184
184
|
|
|
185
185
|
```typescript
|
|
186
186
|
controller.gyroscope.on("change", ({ x, y, z }) => {
|
|
@@ -196,7 +196,56 @@ controller.accelerometer.z.on("change", ({ magnitude }) => {
|
|
|
196
196
|
});
|
|
197
197
|
```
|
|
198
198
|
|
|
199
|
-
|
|
199
|
+
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
|
+
|
|
201
|
+
#### [Orientation Tracking](https://nsfm.github.io/dualsense-ts/api/orientation)
|
|
202
|
+
|
|
203
|
+
Built-in sensor fusion provides a stable 3D orientation from the raw IMU data, powered by a zero-dependency [Madgwick AHRS](https://nsfm.github.io/dualsense-ts/api/orientation) filter:
|
|
204
|
+
|
|
205
|
+
```typescript
|
|
206
|
+
// Fused Euler angles (radians), updated every IMU sample
|
|
207
|
+
const { pitch, yaw, roll } = controller.orientation;
|
|
208
|
+
|
|
209
|
+
// Quaternion for 3D rendering
|
|
210
|
+
const [w, x, y, z] = controller.orientation.quaternion;
|
|
211
|
+
|
|
212
|
+
// Accelerometer-only tilt — no drift, no yaw
|
|
213
|
+
const steer = controller.orientation.tiltRoll;
|
|
214
|
+
|
|
215
|
+
// Tune the filter: lower beta = smoother, higher = less drift
|
|
216
|
+
controller.orientation.beta = 0.02;
|
|
217
|
+
|
|
218
|
+
// Reset to identity (e.g. on button press)
|
|
219
|
+
controller.orientation.reset();
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### [Shake Detection](https://nsfm.github.io/dualsense-ts/api/shake-detector)
|
|
223
|
+
|
|
224
|
+
The built-in shake detector uses [Goertzel frequency analysis](https://nsfm.github.io/dualsense-ts/api/shake-detector) to detect shake intensity, frequency, and direction-reversal rate:
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
// Simple shake detection
|
|
228
|
+
if (controller.shake.active) {
|
|
229
|
+
triggerEffect();
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Proportional response
|
|
233
|
+
controller.left.rumble = controller.shake.intensity;
|
|
234
|
+
|
|
235
|
+
// Frequency-based mechanics
|
|
236
|
+
if (controller.shake.frequency > 4) {
|
|
237
|
+
baby.soothe(controller.shake.intensity);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// Tune sensitivity and analysis window at runtime
|
|
241
|
+
controller.shake.threshold = 0.05;
|
|
242
|
+
controller.shake.windowSize = 128;
|
|
243
|
+
|
|
244
|
+
// Access raw spectrum for custom visualization
|
|
245
|
+
for (const bin of controller.shake.spectrum) {
|
|
246
|
+
drawBar(bin.freq, bin.power);
|
|
247
|
+
}
|
|
248
|
+
```
|
|
200
249
|
|
|
201
250
|
#### [Battery](https://nsfm.github.io/dualsense-ts/inputs/battery)
|
|
202
251
|
|
package/dist/dualsense.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Momentary, Dpad, DpadParams, Mute, Unisense, UnisenseParams, Touchpad, Gyroscope, GyroscopeParams, Accelerometer, AccelerometerParams, Battery, BatteryParams, Lightbar, PlayerLeds, Audio, PowerSaveControl } from "./elements";
|
|
2
2
|
import { Input, InputParams } from "./input";
|
|
3
|
-
import { DualsenseHID, FirmwareInfo, FactoryInfo, DualsenseColor } from "./hid";
|
|
3
|
+
import { DualsenseHID, FirmwareInfo, FactoryInfo, DualsenseColor, ResolvedCalibration } from "./hid";
|
|
4
4
|
import { Intensity } from "./math";
|
|
5
|
+
import { Orientation, type OrientationParams, ShakeDetector, type ShakeDetectorParams } from "./motion";
|
|
5
6
|
/** Settings for your Dualsense controller and each of its inputs */
|
|
6
7
|
export interface DualsenseParams extends InputParams {
|
|
7
8
|
/** Sets the source for HID events. Default: decide automatically */
|
|
@@ -36,6 +37,10 @@ export interface DualsenseParams extends InputParams {
|
|
|
36
37
|
accelerometer?: AccelerometerParams;
|
|
37
38
|
/** Settings for the battery */
|
|
38
39
|
battery?: BatteryParams;
|
|
40
|
+
/** Settings for the orientation tracker (Madgwick AHRS) */
|
|
41
|
+
orientation?: OrientationParams;
|
|
42
|
+
/** Settings for the shake detector */
|
|
43
|
+
shake?: ShakeDetectorParams;
|
|
39
44
|
}
|
|
40
45
|
/** Represents a Dualsense controller */
|
|
41
46
|
export declare class Dualsense extends Input<Dualsense> {
|
|
@@ -82,10 +87,24 @@ export declare class Dualsense extends Input<Dualsense> {
|
|
|
82
87
|
readonly audio: Audio;
|
|
83
88
|
/** Per-subsystem power save controls (disable touch, motion, haptics, audio) */
|
|
84
89
|
readonly powerSave: PowerSaveControl;
|
|
90
|
+
/**
|
|
91
|
+
* Fused orientation from Madgwick AHRS sensor fusion.
|
|
92
|
+
* Provides pitch, yaw, roll (radians), quaternion, and
|
|
93
|
+
* accelerometer-only tilt. Updated automatically each HID report.
|
|
94
|
+
*/
|
|
95
|
+
readonly orientation: Orientation;
|
|
96
|
+
/**
|
|
97
|
+
* Shake detector with frequency analysis.
|
|
98
|
+
* Provides intensity (0–1), dominant frequency (Hz), and an
|
|
99
|
+
* active flag. Updated automatically each HID report.
|
|
100
|
+
*/
|
|
101
|
+
readonly shake: ShakeDetector;
|
|
85
102
|
/** Monotonic sensor timestamp in microseconds from the controller's clock.
|
|
86
103
|
* Updated with each input report — useful for correlating motion sensor
|
|
87
104
|
* readings with other inputs across frames. Wraps at 2^32 (~71.6 minutes). */
|
|
88
105
|
sensorTimestamp: number;
|
|
106
|
+
/** Previous sensor timestamp for computing dt (microseconds). */
|
|
107
|
+
private prevSensorTimestamp;
|
|
89
108
|
/** Active interval timers, cleared on dispose */
|
|
90
109
|
private readonly timers;
|
|
91
110
|
/**
|
|
@@ -105,6 +124,12 @@ export declare class Dualsense extends Input<Dualsense> {
|
|
|
105
124
|
* Contains sensible defaults until the device reports its actual values.
|
|
106
125
|
*/
|
|
107
126
|
get factoryInfo(): FactoryInfo;
|
|
127
|
+
/**
|
|
128
|
+
* IMU calibration factors derived from the controller's factory calibration
|
|
129
|
+
* data (Feature Report 0x05). Applied automatically to gyroscope and
|
|
130
|
+
* accelerometer readings — exposed here for inspection and diagnostics.
|
|
131
|
+
*/
|
|
132
|
+
get calibration(): ResolvedCalibration;
|
|
108
133
|
/** A virtual button representing whether or not a controller is connected */
|
|
109
134
|
readonly connection: Momentary;
|
|
110
135
|
/** True if any input at all is active or changing */
|
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,EACV,KAAK,EACL,gBAAgB,EACjB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAY,WAAW,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EAEL,YAAY,EAMZ,YAAY,EACZ,WAAW,EACX,cAAc,
|
|
1
|
+
{"version":3,"file":"dualsense.d.ts","sourceRoot":"","sources":["../src/dualsense.ts"],"names":[],"mappings":"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"}
|
package/dist/dualsense.js
CHANGED
|
@@ -4,6 +4,7 @@ exports.Dualsense = void 0;
|
|
|
4
4
|
const elements_1 = require("./elements");
|
|
5
5
|
const input_1 = require("./input");
|
|
6
6
|
const hid_1 = require("./hid");
|
|
7
|
+
const motion_1 = require("./motion");
|
|
7
8
|
/** Represents a Dualsense controller */
|
|
8
9
|
class Dualsense extends input_1.Input {
|
|
9
10
|
/**
|
|
@@ -20,6 +21,14 @@ class Dualsense extends input_1.Input {
|
|
|
20
21
|
get factoryInfo() {
|
|
21
22
|
return this.hid.factoryInfo;
|
|
22
23
|
}
|
|
24
|
+
/**
|
|
25
|
+
* IMU calibration factors derived from the controller's factory calibration
|
|
26
|
+
* data (Feature Report 0x05). Applied automatically to gyroscope and
|
|
27
|
+
* accelerometer readings — exposed here for inspection and diagnostics.
|
|
28
|
+
*/
|
|
29
|
+
get calibration() {
|
|
30
|
+
return this.hid.calibration;
|
|
31
|
+
}
|
|
23
32
|
/** True if any input at all is active or changing */
|
|
24
33
|
get active() {
|
|
25
34
|
return Object.values(this).some((input) => input !== this && input instanceof input_1.Input && input.active);
|
|
@@ -54,6 +63,8 @@ class Dualsense extends input_1.Input {
|
|
|
54
63
|
* Updated with each input report — useful for correlating motion sensor
|
|
55
64
|
* readings with other inputs across frames. Wraps at 2^32 (~71.6 minutes). */
|
|
56
65
|
this.sensorTimestamp = 0;
|
|
66
|
+
/** Previous sensor timestamp for computing dt (microseconds). */
|
|
67
|
+
this.prevSensorTimestamp = 0;
|
|
57
68
|
/** Active interval timers, cleared on dispose */
|
|
58
69
|
this.timers = [];
|
|
59
70
|
/**
|
|
@@ -148,6 +159,8 @@ class Dualsense extends input_1.Input {
|
|
|
148
159
|
name: "Battery",
|
|
149
160
|
...(params.battery ?? {}),
|
|
150
161
|
});
|
|
162
|
+
this.orientation = new motion_1.Orientation(params.orientation);
|
|
163
|
+
this.shake = new motion_1.ShakeDetector(params.shake);
|
|
151
164
|
this.connection[input_1.InputSet](false);
|
|
152
165
|
// If a HID instance was supplied externally (e.g. by DualsenseManager),
|
|
153
166
|
// the owner is responsible for driving discovery + reconnection.
|
|
@@ -189,6 +202,11 @@ class Dualsense extends input_1.Input {
|
|
|
189
202
|
if (audioMemo.userChanged)
|
|
190
203
|
audioMemo.key = "";
|
|
191
204
|
}
|
|
205
|
+
// Reset motion helpers on both connect and disconnect so
|
|
206
|
+
// orientation doesn't carry stale state across sessions.
|
|
207
|
+
this.orientation.reset();
|
|
208
|
+
this.shake.reset();
|
|
209
|
+
this.prevSensorTimestamp = 0;
|
|
192
210
|
});
|
|
193
211
|
// Seed the initial state in case the provider was already attached.
|
|
194
212
|
this.connection[input_1.InputSet](this.hid.provider.connected);
|
|
@@ -367,6 +385,28 @@ class Dualsense extends input_1.Input {
|
|
|
367
385
|
this.accelerometer.x[input_1.InputSet](state[hid_1.InputId.AccelX]);
|
|
368
386
|
this.accelerometer.y[input_1.InputSet](state[hid_1.InputId.AccelY]);
|
|
369
387
|
this.accelerometer.z[input_1.InputSet](state[hid_1.InputId.AccelZ]);
|
|
388
|
+
// Compute dt from the controller's hardware clock (microseconds).
|
|
389
|
+
// The timestamp wraps at 2^32 (~71.6 minutes).
|
|
390
|
+
const ts = state[hid_1.InputId.SensorTimestamp];
|
|
391
|
+
if (this.prevSensorTimestamp !== 0 && ts !== 0) {
|
|
392
|
+
const dtMicro = ts >= this.prevSensorTimestamp
|
|
393
|
+
? ts - this.prevSensorTimestamp
|
|
394
|
+
: 0xFFFFFFFF - this.prevSensorTimestamp + ts + 1;
|
|
395
|
+
const dt = dtMicro / 1000000;
|
|
396
|
+
// Sanity check: skip if dt is unreasonable (>0.5s means we
|
|
397
|
+
// probably missed reports or just reconnected).
|
|
398
|
+
if (dt > 0 && dt < 0.5) {
|
|
399
|
+
const gx = state[hid_1.InputId.GyroX];
|
|
400
|
+
const gy = state[hid_1.InputId.GyroY];
|
|
401
|
+
const gz = state[hid_1.InputId.GyroZ];
|
|
402
|
+
const ax = state[hid_1.InputId.AccelX];
|
|
403
|
+
const ay = state[hid_1.InputId.AccelY];
|
|
404
|
+
const az = state[hid_1.InputId.AccelZ];
|
|
405
|
+
this.orientation.update(gx, gy, gz, ax, ay, az, dt);
|
|
406
|
+
this.shake.update(ax, ay, az, dt);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
this.prevSensorTimestamp = ts;
|
|
370
410
|
const level = state[hid_1.InputId.BatteryLevel];
|
|
371
411
|
if (level > this.pendingBattery.peakLevel) {
|
|
372
412
|
this.pendingBattery.peakLevel = level;
|
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,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* IMU calibration data from Feature Report 0x05.
|
|
3
|
+
*
|
|
4
|
+
* The DualSense stores per-unit factory calibration for the gyroscope and
|
|
5
|
+
* accelerometer. Reading and applying these offsets and scale factors
|
|
6
|
+
* removes bias drift and normalises per-axis sensitivity, giving more
|
|
7
|
+
* accurate motion data than the hardcoded mapping.
|
|
8
|
+
*
|
|
9
|
+
* Layout mirrors the Linux kernel hid-playstation.c interpretation of
|
|
10
|
+
* Feature Report 0x05 (41 bytes including the report-ID prefix).
|
|
11
|
+
*/
|
|
12
|
+
import type { HIDProvider } from "./hid_provider";
|
|
13
|
+
/** Per-axis calibration parameters for one gyro axis */
|
|
14
|
+
export interface GyroAxisCalibration {
|
|
15
|
+
/** Resting-state bias (raw int16 counts) */
|
|
16
|
+
bias: number;
|
|
17
|
+
/** Raw count at +reference rotation rate */
|
|
18
|
+
plus: number;
|
|
19
|
+
/** Raw count at −reference rotation rate */
|
|
20
|
+
minus: number;
|
|
21
|
+
}
|
|
22
|
+
/** Per-axis calibration parameters for one accelerometer axis */
|
|
23
|
+
export interface AccelAxisCalibration {
|
|
24
|
+
/** Raw count at +1 g */
|
|
25
|
+
plus: number;
|
|
26
|
+
/** Raw count at −1 g */
|
|
27
|
+
minus: number;
|
|
28
|
+
}
|
|
29
|
+
/** Full IMU calibration data parsed from Feature Report 0x05 */
|
|
30
|
+
export interface IMUCalibration {
|
|
31
|
+
gyro: {
|
|
32
|
+
pitch: GyroAxisCalibration;
|
|
33
|
+
yaw: GyroAxisCalibration;
|
|
34
|
+
roll: GyroAxisCalibration;
|
|
35
|
+
/** Reference rotation-rate magnitude (positive direction) */
|
|
36
|
+
speedPlus: number;
|
|
37
|
+
/** Reference rotation-rate magnitude (negative direction) */
|
|
38
|
+
speedMinus: number;
|
|
39
|
+
};
|
|
40
|
+
accel: {
|
|
41
|
+
x: AccelAxisCalibration;
|
|
42
|
+
y: AccelAxisCalibration;
|
|
43
|
+
z: AccelAxisCalibration;
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** Precomputed bias + scale for a single axis */
|
|
47
|
+
export interface AxisCalibrationFactors {
|
|
48
|
+
/** Value to subtract from the raw int16 */
|
|
49
|
+
bias: number;
|
|
50
|
+
/** Multiplier: calibrated = (raw − bias) × scale, then clamp to [−1, 1] */
|
|
51
|
+
scale: number;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Precomputed calibration factors for all six IMU axes.
|
|
55
|
+
*
|
|
56
|
+
* Per-sample application: `calibrated = clamp((raw − bias) × scale, −1, 1)`
|
|
57
|
+
*/
|
|
58
|
+
export interface ResolvedCalibration {
|
|
59
|
+
gyroPitch: AxisCalibrationFactors;
|
|
60
|
+
gyroYaw: AxisCalibrationFactors;
|
|
61
|
+
gyroRoll: AxisCalibrationFactors;
|
|
62
|
+
accelX: AxisCalibrationFactors;
|
|
63
|
+
accelY: AxisCalibrationFactors;
|
|
64
|
+
accelZ: AxisCalibrationFactors;
|
|
65
|
+
}
|
|
66
|
+
/** Identity calibration: zero bias, uniform 1/32767 scale */
|
|
67
|
+
export declare const DefaultResolvedCalibration: ResolvedCalibration;
|
|
68
|
+
/**
|
|
69
|
+
* Parse Feature Report 0x05 into an {@link IMUCalibration}.
|
|
70
|
+
*
|
|
71
|
+
* The report may or may not include the report-ID byte as the first
|
|
72
|
+
* element depending on platform — the parser auto-detects.
|
|
73
|
+
*/
|
|
74
|
+
export declare function parseIMUCalibration(buf: Uint8Array): IMUCalibration;
|
|
75
|
+
/**
|
|
76
|
+
* Precompute per-axis bias and scale from raw calibration data.
|
|
77
|
+
*
|
|
78
|
+
* **Gyroscope:** Removes resting-state bias and normalises per-axis
|
|
79
|
+
* sensitivity so that the same physical rotation rate produces the same
|
|
80
|
+
* numeric value on all three axes. The most-sensitive axis (largest
|
|
81
|
+
* raw range) maps exactly to [-1, 1] at full scale; less-sensitive
|
|
82
|
+
* axes are boosted to match, with ≤ 4% clipping at extreme values.
|
|
83
|
+
*
|
|
84
|
+
* **Accelerometer:** Removes the zero-point offset (manufacturing
|
|
85
|
+
* tolerance) and normalises per-axis sensitivity the same way.
|
|
86
|
+
*/
|
|
87
|
+
export declare function resolveCalibration(cal: IMUCalibration): ResolvedCalibration;
|
|
88
|
+
/**
|
|
89
|
+
* Read and parse IMU calibration from a connected controller.
|
|
90
|
+
* Returns undefined if the report cannot be read.
|
|
91
|
+
*/
|
|
92
|
+
export declare function readIMUCalibration(provider: HIDProvider): Promise<IMUCalibration | undefined>;
|
|
93
|
+
/**
|
|
94
|
+
* Assemble two raw report bytes into a signed int16.
|
|
95
|
+
*/
|
|
96
|
+
export declare function rawInt16(lo: number, hi: number): number;
|
|
97
|
+
/**
|
|
98
|
+
* Apply precomputed calibration to a single axis sample.
|
|
99
|
+
* `calibrated = clamp((raw − bias) × scale, −1, 1)`
|
|
100
|
+
*/
|
|
101
|
+
export declare function applyCal(raw: number, factors: AxisCalibrationFactors): number;
|
|
102
|
+
//# sourceMappingURL=calibration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calibration.d.ts","sourceRoot":"","sources":["../../src/hid/calibration.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMlD,wDAAwD;AACxD,MAAM,WAAW,mBAAmB;IAClC,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;CACf;AAED,iEAAiE;AACjE,MAAM,WAAW,oBAAoB;IACnC,wBAAwB;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,gEAAgE;AAChE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE;QACJ,KAAK,EAAE,mBAAmB,CAAC;QAC3B,GAAG,EAAE,mBAAmB,CAAC;QACzB,IAAI,EAAE,mBAAmB,CAAC;QAC1B,6DAA6D;QAC7D,SAAS,EAAE,MAAM,CAAC;QAClB,6DAA6D;QAC7D,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,KAAK,EAAE;QACL,CAAC,EAAE,oBAAoB,CAAC;QACxB,CAAC,EAAE,oBAAoB,CAAC;QACxB,CAAC,EAAE,oBAAoB,CAAC;KACzB,CAAC;CACH;AAMD,iDAAiD;AACjD,MAAM,WAAW,sBAAsB;IACrC,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,sBAAsB,CAAC;IAClC,OAAO,EAAE,sBAAsB,CAAC;IAChC,QAAQ,EAAE,sBAAsB,CAAC;IACjC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,MAAM,EAAE,sBAAsB,CAAC;CAChC;AAMD,6DAA6D;AAC7D,eAAO,MAAM,0BAA0B,EAAE,mBAOxC,CAAC;AAeF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,UAAU,GAAG,cAAc,CA6BnE;AAMD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,mBAAmB,CA2C3E;AAMD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,WAAW,GACpB,OAAO,CAAC,cAAc,GAAG,SAAS,CAAC,CAQrC;AAMD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,GAAG,MAAM,CAG7E"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* IMU calibration data from Feature Report 0x05.
|
|
4
|
+
*
|
|
5
|
+
* The DualSense stores per-unit factory calibration for the gyroscope and
|
|
6
|
+
* accelerometer. Reading and applying these offsets and scale factors
|
|
7
|
+
* removes bias drift and normalises per-axis sensitivity, giving more
|
|
8
|
+
* accurate motion data than the hardcoded mapping.
|
|
9
|
+
*
|
|
10
|
+
* Layout mirrors the Linux kernel hid-playstation.c interpretation of
|
|
11
|
+
* Feature Report 0x05 (41 bytes including the report-ID prefix).
|
|
12
|
+
*/
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.DefaultResolvedCalibration = void 0;
|
|
15
|
+
exports.parseIMUCalibration = parseIMUCalibration;
|
|
16
|
+
exports.resolveCalibration = resolveCalibration;
|
|
17
|
+
exports.readIMUCalibration = readIMUCalibration;
|
|
18
|
+
exports.rawInt16 = rawInt16;
|
|
19
|
+
exports.applyCal = applyCal;
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
// Defaults
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
/** Identity calibration: zero bias, uniform 1/32767 scale */
|
|
24
|
+
exports.DefaultResolvedCalibration = {
|
|
25
|
+
gyroPitch: { bias: 0, scale: 1 / 32767 },
|
|
26
|
+
gyroYaw: { bias: 0, scale: 1 / 32767 },
|
|
27
|
+
gyroRoll: { bias: 0, scale: 1 / 32767 },
|
|
28
|
+
accelX: { bias: 0, scale: 1 / 32767 },
|
|
29
|
+
accelY: { bias: 0, scale: 1 / 32767 },
|
|
30
|
+
accelZ: { bias: 0, scale: 1 / 32767 },
|
|
31
|
+
};
|
|
32
|
+
// ---------------------------------------------------------------------------
|
|
33
|
+
// Parsing
|
|
34
|
+
// ---------------------------------------------------------------------------
|
|
35
|
+
const REPORT_ID = 0x05;
|
|
36
|
+
const REPORT_LENGTH = 41;
|
|
37
|
+
function readInt16LE(buf, offset) {
|
|
38
|
+
let v = buf[offset] | (buf[offset + 1] << 8);
|
|
39
|
+
if (v > 0x7fff)
|
|
40
|
+
v -= 0x10000;
|
|
41
|
+
return v;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Parse Feature Report 0x05 into an {@link IMUCalibration}.
|
|
45
|
+
*
|
|
46
|
+
* The report may or may not include the report-ID byte as the first
|
|
47
|
+
* element depending on platform — the parser auto-detects.
|
|
48
|
+
*/
|
|
49
|
+
function parseIMUCalibration(buf) {
|
|
50
|
+
const off = buf[0] === REPORT_ID ? 1 : 0;
|
|
51
|
+
return {
|
|
52
|
+
gyro: {
|
|
53
|
+
pitch: {
|
|
54
|
+
bias: readInt16LE(buf, off + 0),
|
|
55
|
+
plus: readInt16LE(buf, off + 6),
|
|
56
|
+
minus: readInt16LE(buf, off + 8),
|
|
57
|
+
},
|
|
58
|
+
yaw: {
|
|
59
|
+
bias: readInt16LE(buf, off + 2),
|
|
60
|
+
plus: readInt16LE(buf, off + 10),
|
|
61
|
+
minus: readInt16LE(buf, off + 12),
|
|
62
|
+
},
|
|
63
|
+
roll: {
|
|
64
|
+
bias: readInt16LE(buf, off + 4),
|
|
65
|
+
plus: readInt16LE(buf, off + 14),
|
|
66
|
+
minus: readInt16LE(buf, off + 16),
|
|
67
|
+
},
|
|
68
|
+
speedPlus: readInt16LE(buf, off + 18),
|
|
69
|
+
speedMinus: readInt16LE(buf, off + 20),
|
|
70
|
+
},
|
|
71
|
+
accel: {
|
|
72
|
+
x: { plus: readInt16LE(buf, off + 22), minus: readInt16LE(buf, off + 24) },
|
|
73
|
+
y: { plus: readInt16LE(buf, off + 26), minus: readInt16LE(buf, off + 28) },
|
|
74
|
+
z: { plus: readInt16LE(buf, off + 30), minus: readInt16LE(buf, off + 32) },
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
// ---------------------------------------------------------------------------
|
|
79
|
+
// Resolution: raw calibration → precomputed factors
|
|
80
|
+
// ---------------------------------------------------------------------------
|
|
81
|
+
/**
|
|
82
|
+
* Precompute per-axis bias and scale from raw calibration data.
|
|
83
|
+
*
|
|
84
|
+
* **Gyroscope:** Removes resting-state bias and normalises per-axis
|
|
85
|
+
* sensitivity so that the same physical rotation rate produces the same
|
|
86
|
+
* numeric value on all three axes. The most-sensitive axis (largest
|
|
87
|
+
* raw range) maps exactly to [-1, 1] at full scale; less-sensitive
|
|
88
|
+
* axes are boosted to match, with ≤ 4% clipping at extreme values.
|
|
89
|
+
*
|
|
90
|
+
* **Accelerometer:** Removes the zero-point offset (manufacturing
|
|
91
|
+
* tolerance) and normalises per-axis sensitivity the same way.
|
|
92
|
+
*/
|
|
93
|
+
function resolveCalibration(cal) {
|
|
94
|
+
const pitchRange = cal.gyro.pitch.plus - cal.gyro.pitch.minus;
|
|
95
|
+
const yawRange = cal.gyro.yaw.plus - cal.gyro.yaw.minus;
|
|
96
|
+
const rollRange = cal.gyro.roll.plus - cal.gyro.roll.minus;
|
|
97
|
+
const maxGyroRange = Math.max(Math.abs(pitchRange), Math.abs(yawRange), Math.abs(rollRange));
|
|
98
|
+
const xRange = cal.accel.x.plus - cal.accel.x.minus;
|
|
99
|
+
const yRange = cal.accel.y.plus - cal.accel.y.minus;
|
|
100
|
+
const zRange = cal.accel.z.plus - cal.accel.z.minus;
|
|
101
|
+
const maxAccelRange = Math.max(Math.abs(xRange), Math.abs(yRange), Math.abs(zRange));
|
|
102
|
+
function gyroScale(range) {
|
|
103
|
+
return range !== 0 ? maxGyroRange / range / 32767 : 1 / 32767;
|
|
104
|
+
}
|
|
105
|
+
function accelScale(range) {
|
|
106
|
+
return range !== 0 ? maxAccelRange / range / 32767 : 1 / 32767;
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
gyroPitch: { bias: cal.gyro.pitch.bias, scale: gyroScale(pitchRange) },
|
|
110
|
+
gyroYaw: { bias: cal.gyro.yaw.bias, scale: gyroScale(yawRange) },
|
|
111
|
+
gyroRoll: { bias: cal.gyro.roll.bias, scale: gyroScale(rollRange) },
|
|
112
|
+
accelX: {
|
|
113
|
+
bias: (cal.accel.x.plus + cal.accel.x.minus) / 2,
|
|
114
|
+
scale: accelScale(xRange),
|
|
115
|
+
},
|
|
116
|
+
accelY: {
|
|
117
|
+
bias: (cal.accel.y.plus + cal.accel.y.minus) / 2,
|
|
118
|
+
scale: accelScale(yRange),
|
|
119
|
+
},
|
|
120
|
+
accelZ: {
|
|
121
|
+
bias: (cal.accel.z.plus + cal.accel.z.minus) / 2,
|
|
122
|
+
scale: accelScale(zRange),
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
// Reading from device
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
/**
|
|
130
|
+
* Read and parse IMU calibration from a connected controller.
|
|
131
|
+
* Returns undefined if the report cannot be read.
|
|
132
|
+
*/
|
|
133
|
+
async function readIMUCalibration(provider) {
|
|
134
|
+
try {
|
|
135
|
+
const buf = await provider.readFeatureReport(REPORT_ID, REPORT_LENGTH);
|
|
136
|
+
if (!buf || buf.length < 35)
|
|
137
|
+
return undefined;
|
|
138
|
+
return parseIMUCalibration(buf);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// ---------------------------------------------------------------------------
|
|
145
|
+
// Per-sample helpers
|
|
146
|
+
// ---------------------------------------------------------------------------
|
|
147
|
+
/**
|
|
148
|
+
* Assemble two raw report bytes into a signed int16.
|
|
149
|
+
*/
|
|
150
|
+
function rawInt16(lo, hi) {
|
|
151
|
+
let v = (hi << 8) | lo;
|
|
152
|
+
if (v > 0x7fff)
|
|
153
|
+
v -= 0x10000;
|
|
154
|
+
return v;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Apply precomputed calibration to a single axis sample.
|
|
158
|
+
* `calibrated = clamp((raw − bias) × scale, −1, 1)`
|
|
159
|
+
*/
|
|
160
|
+
function applyCal(raw, factors) {
|
|
161
|
+
const v = (raw - factors.bias) * factors.scale;
|
|
162
|
+
return v > 1 ? 1 : v < -1 ? -1 : v;
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=calibration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"calibration.js","sourceRoot":"","sources":["../../src/hid/calibration.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAuGH,kDA6BC;AAkBD,gDA2CC;AAUD,gDAUC;AASD,4BAIC;AAMD,4BAGC;AArKD,8EAA8E;AAC9E,WAAW;AACX,8EAA8E;AAE9E,6DAA6D;AAChD,QAAA,0BAA0B,GAAwB;IAC7D,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE;IACxC,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE;IACtC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE;IACvC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE;IACrC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE;IACrC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE;CACtC,CAAC;AAEF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,aAAa,GAAG,EAAE,CAAC;AAEzB,SAAS,WAAW,CAAC,GAAe,EAAE,MAAc;IAClD,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7C,IAAI,CAAC,GAAG,MAAM;QAAE,CAAC,IAAI,OAAO,CAAC;IAC7B,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,GAAe;IACjD,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzC,OAAO;QACL,IAAI,EAAE;YACJ,KAAK,EAAE;gBACL,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;gBAC/B,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;gBAC/B,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;aACjC;YACD,GAAG,EAAE;gBACH,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;gBAC/B,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;gBAChC,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;aAClC;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;gBAC/B,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;gBAChC,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;aAClC;YACD,SAAS,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;YACrC,UAAU,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;SACvC;QACD,KAAK,EAAE;YACL,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE;YAC1E,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE;YAC1E,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,EAAE;SAC3E;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,oDAAoD;AACpD,8EAA8E;AAE9E;;;;;;;;;;;GAWG;AACH,SAAgB,kBAAkB,CAAC,GAAmB;IACpD,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IACxD,MAAM,SAAS,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IAC3D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EACpB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAClB,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CACpB,CAAC;IAEF,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC5B,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAChB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAChB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CACjB,CAAC;IAEF,SAAS,SAAS,CAAC,KAAa;QAC9B,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IAChE,CAAC;IACD,SAAS,UAAU,CAAC,KAAa;QAC/B,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;IACjE,CAAC;IAED,OAAO;QACL,SAAS,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE;QACtE,OAAO,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE;QAChE,QAAQ,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE;QACnE,MAAM,EAAE;YACN,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAChD,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;SAC1B;QACD,MAAM,EAAE;YACN,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAChD,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;SAC1B;QACD,MAAM,EAAE;YACN,IAAI,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;YAChD,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC;SAC1B;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;GAGG;AACI,KAAK,UAAU,kBAAkB,CACtC,QAAqB;IAErB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,iBAAiB,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QACvE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,EAAE;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;GAEG;AACH,SAAgB,QAAQ,CAAC,EAAU,EAAE,EAAU;IAC7C,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;IACvB,IAAI,CAAC,GAAG,MAAM;QAAE,CAAC,IAAI,OAAO,CAAC;IAC7B,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;GAGG;AACH,SAAgB,QAAQ,CAAC,GAAW,EAAE,OAA+B;IACnE,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -2,6 +2,7 @@ import { PulseOptions, Brightness, MuteLedMode } from "./command";
|
|
|
2
2
|
import { HIDProvider, DualsenseHIDState } from "./hid_provider";
|
|
3
3
|
import { FirmwareInfo } from "./firmware_info";
|
|
4
4
|
import { FactoryInfo } from "./factory_info";
|
|
5
|
+
import type { ResolvedCalibration } from "./calibration";
|
|
5
6
|
export type HIDCallback = (state: DualsenseHIDState) => void;
|
|
6
7
|
export type ErrorCallback = (error: Error) => void;
|
|
7
8
|
export type ReadyCallback = () => void;
|
|
@@ -33,6 +34,11 @@ export declare class DualsenseHID {
|
|
|
33
34
|
factoryInfo: FactoryInfo;
|
|
34
35
|
/** Bluetooth MAC address from Feature Report 0x09, populated after connection */
|
|
35
36
|
macAddress?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Precomputed IMU calibration factors, populated during provider connection.
|
|
39
|
+
* Applied automatically to gyro and accelerometer readings in each input report.
|
|
40
|
+
*/
|
|
41
|
+
get calibration(): ResolvedCalibration;
|
|
36
42
|
/** Active interval timer for the command flush loop */
|
|
37
43
|
private commandTimer?;
|
|
38
44
|
constructor(provider: HIDProvider, refreshRate?: number);
|