dualsense-ts 1.1.12 → 2.0.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/dist/dualsense.js +1 -1
- package/dist/dualsense.js.map +1 -1
- package/dist/elements/analog.d.ts.map +1 -1
- package/dist/elements/analog.js +2 -2
- package/dist/elements/analog.js.map +1 -1
- package/dist/elements/axis.d.ts +0 -2
- package/dist/elements/axis.d.ts.map +1 -1
- package/dist/elements/axis.js +1 -7
- package/dist/elements/axis.js.map +1 -1
- package/dist/elements/unisense.js +1 -1
- package/dist/elements/unisense.js.map +1 -1
- package/dist/hid/dualsense_hid.d.ts +25 -7
- package/dist/hid/dualsense_hid.d.ts.map +1 -1
- package/dist/hid/dualsense_hid.js +89 -39
- package/dist/hid/dualsense_hid.js.map +1 -1
- package/dist/hid/ids.d.ts +18 -6
- package/dist/hid/ids.d.ts.map +1 -1
- package/dist/input.d.ts +1 -1
- package/dist/input.d.ts.map +1 -1
- package/dist/input.js +5 -0
- package/dist/input.js.map +1 -1
- package/package.json +1 -1
- package/src/dualsense.ts +1 -1
- package/src/elements/analog.ts +6 -2
- package/src/elements/axis.ts +1 -8
- package/src/elements/momentary.spec.ts +28 -0
- package/src/elements/unisense.ts +1 -1
- package/src/hid/dualsense_hid.spec.ts +19 -0
- package/src/hid/dualsense_hid.ts +109 -47
- package/src/hid/ids.ts +21 -7
- package/src/input.ts +10 -2
package/dist/dualsense.js
CHANGED
|
@@ -96,7 +96,7 @@ class Dualsense extends input_1.Input {
|
|
|
96
96
|
this.dpad.down[input_1.InputSet](this.hid.state["Down" /* Down */]);
|
|
97
97
|
this.dpad.right[input_1.InputSet](this.hid.state["Right" /* Right */]);
|
|
98
98
|
this.dpad.left[input_1.InputSet](this.hid.state["Left" /* Left */]);
|
|
99
|
-
this.touchpad.button[input_1.InputSet](this.hid.state["
|
|
99
|
+
this.touchpad.button[input_1.InputSet](this.hid.state["TouchButton" /* TouchButton */]);
|
|
100
100
|
this.left.analog.x[input_1.InputSet](this.hid.state["LX" /* LeftAnalogX */]);
|
|
101
101
|
this.left.analog.y[input_1.InputSet](this.hid.state["LY" /* LeftAnalogY */]);
|
|
102
102
|
this.right.analog.x[input_1.InputSet](this.hid.state["RX" /* RightAnalogX */]);
|
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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analog.d.ts","sourceRoot":"","sources":["../../src/elements/analog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEtD,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,CAAC,CAAC,EAAE,WAAW,CAAC;IAChB,CAAC,CAAC,EAAE,WAAW,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,qBAAa,MAAO,SAAQ,KAAK,CAAC,MAAM,CAAC;IACvC,SAAgB,KAAK,EAAE,MAAM,CAAQ;IAErC,SAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,SAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,SAAgB,MAAM,EAAE,SAAS,CAAC;gBAEtB,MAAM,CAAC,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"analog.d.ts","sourceRoot":"","sources":["../../src/elements/analog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAEtD,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC/C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,CAAC,CAAC,EAAE,WAAW,CAAC;IAChB,CAAC,CAAC,EAAE,WAAW,CAAC;IAChB,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,qBAAa,MAAO,SAAQ,KAAK,CAAC,MAAM,CAAC;IACvC,SAAgB,KAAK,EAAE,MAAM,CAAQ;IAErC,SAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,SAAgB,CAAC,EAAE,IAAI,CAAC;IACxB,SAAgB,MAAM,EAAE,SAAS,CAAC;gBAEtB,MAAM,CAAC,EAAE,YAAY;IAejC,IAAW,MAAM,IAAI,OAAO,CAE3B;IAGD,IAAW,MAAM,IAAI;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAE5D;IAGD,IAAW,SAAS,IAAI,SAAS,CAEhC;IAGD,IAAW,SAAS,IAAI,OAAO,CAE9B;IAGD,IAAW,OAAO,IAAI,OAAO,CAE5B;IAGD,IAAW,KAAK,IAAI,OAAO,CAE1B;IAGD,IAAW,gBAAgB,IAAI,OAAO,CAErC;IAGD,IAAW,OAAO,IAAI,OAAO,CAE5B;IAGD,IAAW,YAAY,IAAI,OAAO,CAEjC;CACF"}
|
package/dist/elements/analog.js
CHANGED
|
@@ -17,8 +17,8 @@ class Analog extends input_1.Input {
|
|
|
17
17
|
super(params);
|
|
18
18
|
this.state = this;
|
|
19
19
|
this.button = new momentary_1.Momentary(params?.button || { icon: "3", name: "Button" });
|
|
20
|
-
this.x = new axis_1.Axis(params?.x || { icon: "↔", name: "X" });
|
|
21
|
-
this.y = new axis_1.Axis(params?.y || { icon: "↕", name: "Y" });
|
|
20
|
+
this.x = new axis_1.Axis(params?.x || { icon: "↔", name: "X", threshold: (1 / 255) * 3 });
|
|
21
|
+
this.y = new axis_1.Axis(params?.y || { icon: "↕", name: "Y", threshold: (1 / 255) * 3 });
|
|
22
22
|
}
|
|
23
23
|
// Returns true if the stick is away from the idle position, or the button is pressed.
|
|
24
24
|
get active() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analog.js","sourceRoot":"","sources":["../../src/elements/analog.ts"],"names":[],"mappings":";;;AAAA,iCAA8B;AAC9B,2CAAwC;AACxC,oCAA8C;AAU9C;;;;;;;GAOG;AACH,MAAa,MAAO,SAAQ,aAAa;IAOvC,YAAY,MAAqB;QAC/B,KAAK,CAAC,MAAM,CAAC,CAAC;QAPA,UAAK,GAAW,IAAI,CAAC;QASnC,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAS,CACzB,MAAM,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAChD,CAAC;QACF,IAAI,CAAC,CAAC,GAAG,IAAI,WAAI,
|
|
1
|
+
{"version":3,"file":"analog.js","sourceRoot":"","sources":["../../src/elements/analog.ts"],"names":[],"mappings":";;;AAAA,iCAA8B;AAC9B,2CAAwC;AACxC,oCAA8C;AAU9C;;;;;;;GAOG;AACH,MAAa,MAAO,SAAQ,aAAa;IAOvC,YAAY,MAAqB;QAC/B,KAAK,CAAC,MAAM,CAAC,CAAC;QAPA,UAAK,GAAW,IAAI,CAAC;QASnC,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAS,CACzB,MAAM,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAChD,CAAC;QACF,IAAI,CAAC,CAAC,GAAG,IAAI,WAAI,CACf,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAChE,CAAC;QACF,IAAI,CAAC,CAAC,GAAG,IAAI,WAAI,CACf,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAChE,CAAC;IACJ,CAAC;IAED,sFAAsF;IACtF,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC/D,CAAC;IAED,uEAAuE;IACvE,IAAW,MAAM;QACf,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;IAClE,CAAC;IAED,iDAAiD;IACjD,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAED,gEAAgE;IAChE,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,yBAAyB;IACzB,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,yBAAyB;IACzB,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,+CAA+C;IAC/C,IAAW,gBAAgB;QACzB,OAAO,CAAC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,iCAAiC;IACjC,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;IAED,iCAAiC;IACjC,IAAW,YAAY;QACrB,OAAO,IAAI,CAAC,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAjED,wBAiEC"}
|
package/dist/elements/axis.d.ts
CHANGED
|
@@ -2,10 +2,8 @@ import { Input } from "../input";
|
|
|
2
2
|
import { Force, Magnitude } from "../math";
|
|
3
3
|
export declare class Axis extends Input<Force> {
|
|
4
4
|
state: Force;
|
|
5
|
-
deadzone: Magnitude;
|
|
6
5
|
get active(): boolean;
|
|
7
6
|
get force(): Force;
|
|
8
7
|
get magnitude(): Magnitude;
|
|
9
|
-
changes(state: Magnitude): boolean;
|
|
10
8
|
}
|
|
11
9
|
//# sourceMappingURL=axis.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axis.d.ts","sourceRoot":"","sources":["../../src/elements/axis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE3C,qBAAa,IAAK,SAAQ,KAAK,CAAC,KAAK,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAK;
|
|
1
|
+
{"version":3,"file":"axis.d.ts","sourceRoot":"","sources":["../../src/elements/axis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE3C,qBAAa,IAAK,SAAQ,KAAK,CAAC,KAAK,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAK;IAExB,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED,IAAW,KAAK,IAAI,KAAK,CAExB;IAED,IAAW,SAAS,IAAI,SAAS,CAEhC;CACF"}
|
package/dist/elements/axis.js
CHANGED
|
@@ -6,10 +6,9 @@ class Axis extends input_1.Input {
|
|
|
6
6
|
constructor() {
|
|
7
7
|
super(...arguments);
|
|
8
8
|
this.state = 0;
|
|
9
|
-
this.deadzone = 0.025;
|
|
10
9
|
}
|
|
11
10
|
get active() {
|
|
12
|
-
return this.magnitude > this.
|
|
11
|
+
return this.magnitude > this.threshold;
|
|
13
12
|
}
|
|
14
13
|
get force() {
|
|
15
14
|
return this.state;
|
|
@@ -17,11 +16,6 @@ class Axis extends input_1.Input {
|
|
|
17
16
|
get magnitude() {
|
|
18
17
|
return Math.abs(this.state);
|
|
19
18
|
}
|
|
20
|
-
changes(state) {
|
|
21
|
-
if (!this.active && Math.abs(state) < this.deadzone)
|
|
22
|
-
return false;
|
|
23
|
-
return this.state !== state;
|
|
24
|
-
}
|
|
25
19
|
}
|
|
26
20
|
exports.Axis = Axis;
|
|
27
21
|
//# sourceMappingURL=axis.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"axis.js","sourceRoot":"","sources":["../../src/elements/axis.ts"],"names":[],"mappings":";;;AAAA,oCAAiC;AAGjC,MAAa,IAAK,SAAQ,aAAY;IAAtC;;QACS,UAAK,GAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"axis.js","sourceRoot":"","sources":["../../src/elements/axis.ts"],"names":[],"mappings":";;;AAAA,oCAAiC;AAGjC,MAAa,IAAK,SAAQ,aAAY;IAAtC;;QACS,UAAK,GAAU,CAAC,CAAC;IAa1B,CAAC;IAXC,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IACzC,CAAC;IAED,IAAW,KAAK;QACd,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,IAAW,SAAS;QAClB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;CACF;AAdD,oBAcC"}
|
|
@@ -11,7 +11,7 @@ class Unisense extends input_1.Input {
|
|
|
11
11
|
constructor(params) {
|
|
12
12
|
super(params);
|
|
13
13
|
this.state = this;
|
|
14
|
-
this.trigger = new trigger_1.Trigger(params?.trigger || { icon: "2", name: "Trigger" });
|
|
14
|
+
this.trigger = new trigger_1.Trigger(params?.trigger || { icon: "2", name: "Trigger", threshold: (1 / 255) * 3 });
|
|
15
15
|
this.bumper = new momentary_1.Momentary(params?.bumper || { icon: "1", name: "Bumper" });
|
|
16
16
|
this.analog = new analog_1.Analog(params?.analog || { icon: "⨁", name: "Analog" });
|
|
17
17
|
this.haptic = new haptics_1.Haptic();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unisense.js","sourceRoot":"","sources":["../../src/elements/unisense.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AACpC,2CAAwC;AACxC,qCAAkC;AAClC,wCAAoC;AACpC,oCAA8C;AAQ9C,iFAAiF;AACjF,MAAa,QAAS,SAAQ,aAAe;IAQ3C,YAAY,MAAuB;QACjC,KAAK,CAAC,MAAM,CAAC,CAAC;QARA,UAAK,GAAa,IAAI,CAAC;QAUrC,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CACxB,MAAM,EAAE,OAAO,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"unisense.js","sourceRoot":"","sources":["../../src/elements/unisense.ts"],"names":[],"mappings":";;;AAAA,uCAAoC;AACpC,2CAAwC;AACxC,qCAAkC;AAClC,wCAAoC;AACpC,oCAA8C;AAQ9C,iFAAiF;AACjF,MAAa,QAAS,SAAQ,aAAe;IAQ3C,YAAY,MAAuB;QACjC,KAAK,CAAC,MAAM,CAAC,CAAC;QARA,UAAK,GAAa,IAAI,CAAC;QAUrC,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,CACxB,MAAM,EAAE,OAAO,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,GAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAC1E,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAS,CACzB,MAAM,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAChD,CAAC;QACF,IAAI,CAAC,MAAM,GAAG,IAAI,eAAM,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1E,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAM,EAAE,CAAC;IAC7B,CAAC;IAED,IAAW,MAAM;QACf,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IACzE,CAAC;CACF;AAxBD,4BAwBC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { EventEmitter } from "events";
|
|
3
3
|
import { InputId } from "./ids";
|
|
4
|
-
export
|
|
4
|
+
export interface DualsenseHIDState {
|
|
5
5
|
[InputId.LeftAnalogX]: number;
|
|
6
6
|
[InputId.LeftAnalogY]: number;
|
|
7
7
|
[InputId.RightAnalogX]: number;
|
|
@@ -12,6 +12,7 @@ export declare type DualsenseHIDState = {
|
|
|
12
12
|
[InputId.Circle]: boolean;
|
|
13
13
|
[InputId.Cross]: boolean;
|
|
14
14
|
[InputId.Square]: boolean;
|
|
15
|
+
[InputId.Dpad]: number;
|
|
15
16
|
[InputId.Up]: boolean;
|
|
16
17
|
[InputId.Down]: boolean;
|
|
17
18
|
[InputId.Left]: boolean;
|
|
@@ -25,19 +26,36 @@ export declare type DualsenseHIDState = {
|
|
|
25
26
|
[InputId.RightBumper]: boolean;
|
|
26
27
|
[InputId.LeftBumper]: boolean;
|
|
27
28
|
[InputId.Playstation]: boolean;
|
|
28
|
-
[InputId.
|
|
29
|
+
[InputId.TouchButton]: boolean;
|
|
29
30
|
[InputId.Mute]: boolean;
|
|
30
|
-
[InputId.
|
|
31
|
-
[InputId.
|
|
32
|
-
[InputId.
|
|
33
|
-
[InputId.
|
|
34
|
-
|
|
31
|
+
[InputId.Status]: boolean;
|
|
32
|
+
[InputId.TouchX0]: number;
|
|
33
|
+
[InputId.TouchY0]: number;
|
|
34
|
+
[InputId.TouchContact0]: boolean;
|
|
35
|
+
[InputId.TouchId0]: number;
|
|
36
|
+
[InputId.TouchX1]: number;
|
|
37
|
+
[InputId.TouchY1]: number;
|
|
38
|
+
[InputId.TouchContact1]: boolean;
|
|
39
|
+
[InputId.TouchId1]: number;
|
|
40
|
+
[InputId.GyroX]: number;
|
|
41
|
+
[InputId.GyroY]: number;
|
|
42
|
+
[InputId.GyroZ]: number;
|
|
43
|
+
[InputId.AccelX]: number;
|
|
44
|
+
[InputId.AccelY]: number;
|
|
45
|
+
[InputId.AccelZ]: number;
|
|
46
|
+
}
|
|
47
|
+
export declare function mapAxis(value: number): number;
|
|
48
|
+
export declare function mapTrigger(value: number): number;
|
|
35
49
|
export declare class DualsenseHID extends EventEmitter {
|
|
36
50
|
state: DualsenseHIDState;
|
|
37
51
|
private device;
|
|
52
|
+
private wireless;
|
|
38
53
|
static readonly vendorId: number;
|
|
39
54
|
static readonly productId: number;
|
|
40
55
|
constructor();
|
|
56
|
+
/**
|
|
57
|
+
* Unpacks a Dualsense HID report.
|
|
58
|
+
*/
|
|
41
59
|
private process;
|
|
42
60
|
private handleError;
|
|
43
61
|
private disconnect;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dualsense_hid.d.ts","sourceRoot":"","sources":["../../src/hid/dualsense_hid.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,
|
|
1
|
+
{"version":3,"file":"dualsense_hid.d.ts","sourceRoot":"","sources":["../../src/hid/dualsense_hid.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DualsenseHID = void 0;
|
|
3
|
+
exports.DualsenseHID = exports.mapTrigger = exports.mapAxis = void 0;
|
|
4
4
|
const node_hid_1 = require("node-hid");
|
|
5
5
|
const events_1 = require("events");
|
|
6
|
+
// Maps a HID input of 0...255 to -1...1
|
|
7
|
+
function mapAxis(value) {
|
|
8
|
+
return (2 / 255) * Math.max(0, Math.min(255, value)) - 1;
|
|
9
|
+
}
|
|
10
|
+
exports.mapAxis = mapAxis;
|
|
11
|
+
// Maps a HID input of 0...255 to 0...1
|
|
12
|
+
function mapTrigger(value) {
|
|
13
|
+
return (1 / 255) * Math.max(0, Math.min(255, value));
|
|
14
|
+
}
|
|
15
|
+
exports.mapTrigger = mapTrigger;
|
|
6
16
|
class DualsenseHID extends events_1.EventEmitter {
|
|
7
17
|
constructor() {
|
|
8
18
|
super();
|
|
@@ -17,6 +27,7 @@ class DualsenseHID extends events_1.EventEmitter {
|
|
|
17
27
|
["Circle" /* Circle */]: false,
|
|
18
28
|
["Cross" /* Cross */]: false,
|
|
19
29
|
["Square" /* Square */]: false,
|
|
30
|
+
["Dpad" /* Dpad */]: 0,
|
|
20
31
|
["Up" /* Up */]: false,
|
|
21
32
|
["Down" /* Down */]: false,
|
|
22
33
|
["Left" /* Left */]: false,
|
|
@@ -30,48 +41,85 @@ class DualsenseHID extends events_1.EventEmitter {
|
|
|
30
41
|
["R1" /* RightBumper */]: false,
|
|
31
42
|
["L1" /* LeftBumper */]: false,
|
|
32
43
|
["Playstation" /* Playstation */]: false,
|
|
33
|
-
["
|
|
44
|
+
["TouchButton" /* TouchButton */]: false,
|
|
34
45
|
["Mute" /* Mute */]: false,
|
|
35
|
-
["
|
|
36
|
-
["
|
|
37
|
-
["
|
|
38
|
-
["
|
|
46
|
+
["Status" /* Status */]: false,
|
|
47
|
+
["TouchX0" /* TouchX0 */]: 0,
|
|
48
|
+
["TouchY0" /* TouchY0 */]: 0,
|
|
49
|
+
["TouchContact0" /* TouchContact0 */]: false,
|
|
50
|
+
["TouchId0" /* TouchId0 */]: 0,
|
|
51
|
+
["TouchX1" /* TouchX1 */]: 0,
|
|
52
|
+
["TouchY1" /* TouchY1 */]: 0,
|
|
53
|
+
["TouchContact1" /* TouchContact1 */]: false,
|
|
54
|
+
["TouchId1" /* TouchId1 */]: 0,
|
|
55
|
+
["GyroX" /* GyroX */]: 0,
|
|
56
|
+
["GyroY" /* GyroY */]: 0,
|
|
57
|
+
["GyroZ" /* GyroZ */]: 0,
|
|
58
|
+
["AccelX" /* AccelX */]: 0,
|
|
59
|
+
["AccelY" /* AccelY */]: 0,
|
|
60
|
+
["AccelZ" /* AccelZ */]: 0,
|
|
39
61
|
};
|
|
62
|
+
this.wireless = false;
|
|
40
63
|
this.device = this.connect();
|
|
41
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Unpacks a Dualsense HID report.
|
|
67
|
+
*/
|
|
42
68
|
process(buffer) {
|
|
43
|
-
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
69
|
+
// Bluetooth buffer starts with an extra byte
|
|
70
|
+
const report = buffer.subarray(this.wireless ? 2 : 1);
|
|
71
|
+
const { state } = this;
|
|
72
|
+
state["LX" /* LeftAnalogX */] = mapAxis(report.readUint8(0));
|
|
73
|
+
state["LY" /* LeftAnalogY */] = -mapAxis(report.readUint8(1));
|
|
74
|
+
state["RX" /* RightAnalogX */] = mapAxis(report.readUint8(2));
|
|
75
|
+
state["RY" /* RightAnalogY */] = -mapAxis(report.readUint8(3));
|
|
76
|
+
state["L2" /* LeftTrigger */] = mapTrigger(report.readUint8(4));
|
|
77
|
+
state["R2" /* RightTrigger */] = mapTrigger(report.readUint8(5));
|
|
78
|
+
// 6 is a sequence byte
|
|
79
|
+
const mainButtons = report.readUint8(7);
|
|
80
|
+
state["Triangle" /* Triangle */] = (mainButtons & 128) > 0;
|
|
81
|
+
state["Circle" /* Circle */] = (mainButtons & 64) > 0;
|
|
82
|
+
state["Cross" /* Cross */] = (mainButtons & 32) > 0;
|
|
83
|
+
state["Square" /* Square */] = (mainButtons & 16) > 0;
|
|
84
|
+
state["Dpad" /* Dpad */] = (mainButtons << 4) >> 4;
|
|
85
|
+
state["Up" /* Up */] = state["Dpad" /* Dpad */] < 2 || state["Dpad" /* Dpad */] === 7;
|
|
86
|
+
state["Down" /* Down */] = state["Dpad" /* Dpad */] > 2 && state["Dpad" /* Dpad */] < 6;
|
|
87
|
+
state["Left" /* Left */] = state["Dpad" /* Dpad */] > 4 && state["Dpad" /* Dpad */] < 8;
|
|
88
|
+
state["Right" /* Right */] = state["Dpad" /* Dpad */] > 0 && state["Dpad" /* Dpad */] < 4;
|
|
89
|
+
const miscButtons = report.readUint8(8);
|
|
90
|
+
state["L2Button" /* LeftTriggerButton */] = (miscButtons & 4) > 0;
|
|
91
|
+
state["R2Button" /* RightTriggerButton */] = (miscButtons & 8) > 0;
|
|
92
|
+
state["L1" /* LeftBumper */] = (miscButtons & 1) > 0;
|
|
93
|
+
state["R1" /* RightBumper */] = (miscButtons & 2) > 0;
|
|
94
|
+
state["Create" /* Create */] = (miscButtons & 16) > 0;
|
|
95
|
+
state["Options" /* Options */] = (miscButtons & 32) > 0;
|
|
96
|
+
state["L3" /* LeftAnalogButton */] = (miscButtons & 64) > 0;
|
|
97
|
+
state["R3" /* RightAnalogButton */] = (miscButtons & 128) > 0;
|
|
98
|
+
const lastButtons = report.readUint8(9);
|
|
99
|
+
state["Playstation" /* Playstation */] = (lastButtons & 1) > 0;
|
|
100
|
+
state["TouchButton" /* TouchButton */] = (lastButtons & 2) > 0;
|
|
101
|
+
state["Mute" /* Mute */] = (lastButtons & 4) > 0;
|
|
102
|
+
// The other 5 bits are unused
|
|
103
|
+
// 5 reserved bytes
|
|
104
|
+
state["GyroX" /* GyroX */] = report.readUint16LE(15);
|
|
105
|
+
state["GyroY" /* GyroY */] = report.readUint16LE(17);
|
|
106
|
+
state["GyroZ" /* GyroZ */] = report.readUint16LE(19);
|
|
107
|
+
state["AccelX" /* AccelX */] = report.readUint16LE(21);
|
|
108
|
+
state["AccelY" /* AccelY */] = report.readUint16LE(23);
|
|
109
|
+
state["AccelZ" /* AccelZ */] = report.readUint16LE(25);
|
|
110
|
+
// 4 bytes for sensor timestamp (32LE)
|
|
111
|
+
// 1 reserved byte
|
|
112
|
+
state["TouchId0" /* TouchId0 */] = report.readUint8(32) & 0x7f;
|
|
113
|
+
state["TouchContact0" /* TouchContact0 */] = (report.readUint8(32) & 0x80) === 0;
|
|
114
|
+
state["TouchX0" /* TouchX0 */] = (report.readUint16LE(33) << 20) >> 20;
|
|
115
|
+
state["TouchY0" /* TouchY0 */] = report.readUint16LE(34) >> 4;
|
|
116
|
+
state["TouchId1" /* TouchId1 */] = report.readUint8(36) & 0x7f;
|
|
117
|
+
state["TouchContact1" /* TouchContact1 */] = (report.readUint8(36) & 0x80) === 0;
|
|
118
|
+
state["TouchX1" /* TouchX1 */] = (report.readUint16LE(37) << 20) >> 20;
|
|
119
|
+
state["TouchY1" /* TouchY1 */] = report.readUint16LE(38) >> 4;
|
|
120
|
+
// 12 reserved bytes
|
|
121
|
+
state["Status" /* Status */] = (report.readUint8(53) & 4) > 0;
|
|
122
|
+
this.emit("input", state);
|
|
75
123
|
}
|
|
76
124
|
handleError(error) {
|
|
77
125
|
console.error(error);
|
|
@@ -93,9 +141,11 @@ class DualsenseHID extends events_1.EventEmitter {
|
|
|
93
141
|
connect() {
|
|
94
142
|
this.disconnect();
|
|
95
143
|
const controllers = (0, node_hid_1.devices)(DualsenseHID.vendorId, DualsenseHID.productId);
|
|
96
|
-
if (!controllers[0]
|
|
144
|
+
if (controllers.length === 0 || !controllers[0].path) {
|
|
97
145
|
throw new Error(`No controllers (${(0, node_hid_1.devices)().length} other devices)`);
|
|
98
146
|
}
|
|
147
|
+
if (controllers[0].interface === -1)
|
|
148
|
+
this.wireless = true;
|
|
99
149
|
const controller = new node_hid_1.HID(controllers[0].path);
|
|
100
150
|
controller.on("data", this.process.bind(this));
|
|
101
151
|
controller.on("error", this.handleError.bind(this));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dualsense_hid.js","sourceRoot":"","sources":["../../src/hid/dualsense_hid.ts"],"names":[],"mappings":";;;AAAA,uCAAwC;AACxC,mCAAsC;
|
|
1
|
+
{"version":3,"file":"dualsense_hid.js","sourceRoot":"","sources":["../../src/hid/dualsense_hid.ts"],"names":[],"mappings":"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"}
|
package/dist/hid/ids.d.ts
CHANGED
|
@@ -3,19 +3,25 @@ export declare const enum InputId {
|
|
|
3
3
|
Create = "Create",
|
|
4
4
|
Playstation = "Playstation",
|
|
5
5
|
Mute = "Mute",
|
|
6
|
+
Status = "Status",
|
|
6
7
|
Triangle = "Triangle",
|
|
7
8
|
Circle = "Circle",
|
|
8
9
|
Cross = "Cross",
|
|
9
10
|
Square = "Square",
|
|
11
|
+
Dpad = "Dpad",
|
|
10
12
|
Up = "Up",
|
|
11
13
|
Down = "Down",
|
|
12
14
|
Left = "Left",
|
|
13
15
|
Right = "Right",
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
TouchButton = "TouchButton",
|
|
17
|
+
TouchX0 = "TouchX0",
|
|
18
|
+
TouchY0 = "TouchY0",
|
|
19
|
+
TouchContact0 = "TouchContact0",
|
|
20
|
+
TouchId0 = "TouchId0",
|
|
21
|
+
TouchX1 = "TouchX1",
|
|
22
|
+
TouchY1 = "TouchY1",
|
|
23
|
+
TouchContact1 = "TouchContact1",
|
|
24
|
+
TouchId1 = "TouchId1",
|
|
19
25
|
LeftAnalogButton = "L3",
|
|
20
26
|
RightAnalogButton = "R3",
|
|
21
27
|
LeftTrigger = "L2",
|
|
@@ -27,6 +33,12 @@ export declare const enum InputId {
|
|
|
27
33
|
LeftAnalogX = "LX",
|
|
28
34
|
LeftAnalogY = "LY",
|
|
29
35
|
RightAnalogX = "RX",
|
|
30
|
-
RightAnalogY = "RY"
|
|
36
|
+
RightAnalogY = "RY",
|
|
37
|
+
GyroX = "GyroX",
|
|
38
|
+
GyroY = "GyroY",
|
|
39
|
+
GyroZ = "GyroZ",
|
|
40
|
+
AccelX = "AccelX",
|
|
41
|
+
AccelY = "AccelY",
|
|
42
|
+
AccelZ = "AccelZ"
|
|
31
43
|
}
|
|
32
44
|
//# sourceMappingURL=ids.d.ts.map
|
package/dist/hid/ids.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/hid/ids.ts"],"names":[],"mappings":"AACA,0BAAkB,OAAO;IACvB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,IAAI,SAAS;
|
|
1
|
+
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../src/hid/ids.ts"],"names":[],"mappings":"AACA,0BAAkB,OAAO;IACvB,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,WAAW,gBAAgB;IAC3B,IAAI,SAAS;IACb,MAAM,WAAW;IAEjB,QAAQ,aAAa;IACrB,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,MAAM,WAAW;IAEjB,IAAI,SAAS;IACb,EAAE,OAAO;IACT,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IAEf,WAAW,gBAAgB;IAE3B,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IAErB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,aAAa,kBAAkB;IAC/B,QAAQ,aAAa;IAErB,gBAAgB,OAAO;IACvB,iBAAiB,OAAO;IAExB,WAAW,OAAO;IAClB,YAAY,OAAO;IACnB,iBAAiB,aAAa;IAC9B,kBAAkB,aAAa;IAE/B,UAAU,OAAO;IACjB,WAAW,OAAO;IAElB,WAAW,OAAO;IAClB,WAAW,OAAO;IAClB,YAAY,OAAO;IACnB,YAAY,OAAO;IAEnB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,KAAK,UAAU;IAEf,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;CAClB"}
|
package/dist/input.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export declare const InputChanged: unique symbol;
|
|
|
18
18
|
export declare const InputSet: unique symbol;
|
|
19
19
|
export declare const InputName: unique symbol;
|
|
20
20
|
export declare const InputIcon: unique symbol;
|
|
21
|
-
export declare type InputEvent = "change" | "input";
|
|
21
|
+
export declare type InputEvent = "change" | "input" | "press" | "release";
|
|
22
22
|
export declare interface Input<Type> {
|
|
23
23
|
on(event: InputEvent, listener: (input: Input<Type>, changed: Input<unknown>) => unknown | Promise<unknown>): this;
|
|
24
24
|
emit(event: InputEvent, ...args: [Input<Type>, Input<unknown> | Input<Type>]): boolean;
|
package/dist/input.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;CACzB;AASD,QAAA,MAAM,UAAU,eAAuB,CAAC;AACxC,QAAA,MAAM,cAAc,eAA2B,CAAC;AAChD,QAAA,MAAM,WAAW,eAAwB,CAAC;AAC1C,QAAA,MAAM,kBAAkB,eAA+B,CAAC;AACxD,QAAA,MAAM,qBAAqB,eAAkC,CAAC;AAC9D,QAAA,MAAM,qBAAqB,eAAkC,CAAC;AAC9D,QAAA,MAAM,mBAAmB,eAAgC,CAAC;AAG1D,eAAO,MAAM,YAAY,eAAyB,CAAC;AAGnD,eAAO,MAAM,QAAQ,eAAqB,CAAC;AAC3C,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,eAAO,MAAM,SAAS,eAAsB,CAAC;AAE7C,oBAAY,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
|
package/dist/input.js
CHANGED
|
@@ -148,6 +148,11 @@ class Input extends events_1.EventEmitter {
|
|
|
148
148
|
this.state = state;
|
|
149
149
|
this.lastChange = Date.now();
|
|
150
150
|
this.emit("change", this, this);
|
|
151
|
+
if (typeof state === "boolean") {
|
|
152
|
+
state
|
|
153
|
+
? this.emit("press", this, this)
|
|
154
|
+
: this.emit("release", this, this);
|
|
155
|
+
}
|
|
151
156
|
}
|
|
152
157
|
this.emit("input", this, this);
|
|
153
158
|
}
|
package/dist/input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":";;;;AAAA,mCAAsC;AACtC,+BAA+B;AAS/B,MAAM,aAAa,GAA0C;IAC3D,IAAI,EAAE,KAAK;IACX,IAAI,EAAE,KAAK;IACX,SAAS,EAAE,CAAC;CACb,CAAC;AAEF,qBAAqB;AACrB,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AACxC,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAChD,MAAM,WAAW,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AAC1C,MAAM,kBAAkB,GAAG,MAAM,CAAC,oBAAoB,CAAC,CAAC;AACxD,MAAM,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAC9D,MAAM,qBAAqB,GAAG,MAAM,CAAC,uBAAuB,CAAC,CAAC;AAC9D,MAAM,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC;AAE1D,+BAA+B;AAClB,QAAA,YAAY,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;AAEnD,YAAY;AACC,QAAA,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC9B,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAChC,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/dualsense.ts
CHANGED
|
@@ -146,7 +146,7 @@ export class Dualsense extends Input<Dualsense> {
|
|
|
146
146
|
this.dpad.down[InputSet](this.hid.state[InputId.Down]);
|
|
147
147
|
this.dpad.right[InputSet](this.hid.state[InputId.Right]);
|
|
148
148
|
this.dpad.left[InputSet](this.hid.state[InputId.Left]);
|
|
149
|
-
this.touchpad.button[InputSet](this.hid.state[InputId.
|
|
149
|
+
this.touchpad.button[InputSet](this.hid.state[InputId.TouchButton]);
|
|
150
150
|
this.left.analog.x[InputSet](this.hid.state[InputId.LeftAnalogX]);
|
|
151
151
|
this.left.analog.y[InputSet](this.hid.state[InputId.LeftAnalogY]);
|
|
152
152
|
this.right.analog.x[InputSet](this.hid.state[InputId.RightAnalogX]);
|
package/src/elements/analog.ts
CHANGED
|
@@ -31,8 +31,12 @@ export class Analog extends Input<Analog> {
|
|
|
31
31
|
this.button = new Momentary(
|
|
32
32
|
params?.button || { icon: "3", name: "Button" }
|
|
33
33
|
);
|
|
34
|
-
this.x = new Axis(
|
|
35
|
-
|
|
34
|
+
this.x = new Axis(
|
|
35
|
+
params?.x || { icon: "↔", name: "X", threshold: (1 / 255) * 3 }
|
|
36
|
+
);
|
|
37
|
+
this.y = new Axis(
|
|
38
|
+
params?.y || { icon: "↕", name: "Y", threshold: (1 / 255) * 3 }
|
|
39
|
+
);
|
|
36
40
|
}
|
|
37
41
|
|
|
38
42
|
// Returns true if the stick is away from the idle position, or the button is pressed.
|
package/src/elements/axis.ts
CHANGED
|
@@ -4,10 +4,8 @@ import { Force, Magnitude } from "../math";
|
|
|
4
4
|
export class Axis extends Input<Force> {
|
|
5
5
|
public state: Force = 0;
|
|
6
6
|
|
|
7
|
-
public deadzone: Magnitude = 0.025;
|
|
8
|
-
|
|
9
7
|
public get active(): boolean {
|
|
10
|
-
return this.magnitude > this.
|
|
8
|
+
return this.magnitude > this.threshold;
|
|
11
9
|
}
|
|
12
10
|
|
|
13
11
|
public get force(): Force {
|
|
@@ -17,9 +15,4 @@ export class Axis extends Input<Force> {
|
|
|
17
15
|
public get magnitude(): Magnitude {
|
|
18
16
|
return Math.abs(this.state);
|
|
19
17
|
}
|
|
20
|
-
|
|
21
|
-
public changes(state: Magnitude): boolean {
|
|
22
|
-
if (!this.active && Math.abs(state) < this.deadzone) return false;
|
|
23
|
-
return this.state !== state;
|
|
24
|
-
}
|
|
25
18
|
}
|
|
@@ -23,4 +23,32 @@ describe("Momentary", () => {
|
|
|
23
23
|
button[InputSet](false);
|
|
24
24
|
expect(button.state).toEqual(false);
|
|
25
25
|
});
|
|
26
|
+
|
|
27
|
+
it("should implement 'on `press`'", (done) => {
|
|
28
|
+
const button = new Momentary({});
|
|
29
|
+
button[InputSet](false);
|
|
30
|
+
button.on("release", () => {
|
|
31
|
+
fail();
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
button.on("press", (btn) => {
|
|
35
|
+
expect(button.id).toBe(btn.id);
|
|
36
|
+
done();
|
|
37
|
+
});
|
|
38
|
+
button[InputSet](true);
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
it("should implement 'on `release`'", (done) => {
|
|
42
|
+
const button = new Momentary({});
|
|
43
|
+
button[InputSet](true);
|
|
44
|
+
button.on("press", () => {
|
|
45
|
+
fail();
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
button.on("release", (btn) => {
|
|
49
|
+
expect(button.id).toBe(btn.id);
|
|
50
|
+
done();
|
|
51
|
+
});
|
|
52
|
+
button[InputSet](false);
|
|
53
|
+
});
|
|
26
54
|
});
|
package/src/elements/unisense.ts
CHANGED
|
@@ -23,7 +23,7 @@ export class Unisense extends Input<Unisense> {
|
|
|
23
23
|
super(params);
|
|
24
24
|
|
|
25
25
|
this.trigger = new Trigger(
|
|
26
|
-
params?.trigger || { icon: "2", name: "Trigger" }
|
|
26
|
+
params?.trigger || { icon: "2", name: "Trigger", threshold: (1/255) * 3 }
|
|
27
27
|
);
|
|
28
28
|
this.bumper = new Momentary(
|
|
29
29
|
params?.bumper || { icon: "1", name: "Bumper" }
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { mapAxis, mapTrigger } from "./dualsense_hid";
|
|
2
|
+
|
|
3
|
+
describe("Dualsense HID", () => {
|
|
4
|
+
it("should map axis values betwen -1 and 1", () => {
|
|
5
|
+
expect(mapAxis(255)).toBeCloseTo(1);
|
|
6
|
+
expect(mapAxis(255 / 2)).toBeCloseTo(0);
|
|
7
|
+
expect(mapAxis(255 / 4)).toBeCloseTo(-0.5);
|
|
8
|
+
expect(mapAxis(255 / 8)).toBeCloseTo(-0.75);
|
|
9
|
+
expect(mapAxis(0)).toBeCloseTo(-1);
|
|
10
|
+
});
|
|
11
|
+
|
|
12
|
+
it("should map trigger values betwen 0 and 1", () => {
|
|
13
|
+
expect(mapTrigger(255)).toBeCloseTo(1);
|
|
14
|
+
expect(mapTrigger(255 / 2)).toBeCloseTo(0.5);
|
|
15
|
+
expect(mapTrigger(255 / 4)).toBeCloseTo(0.25);
|
|
16
|
+
expect(mapTrigger(255 / 8)).toBeCloseTo(0.125);
|
|
17
|
+
expect(mapTrigger(0)).toBeCloseTo(0);
|
|
18
|
+
});
|
|
19
|
+
});
|
package/src/hid/dualsense_hid.ts
CHANGED
|
@@ -3,7 +3,7 @@ import { EventEmitter } from "events";
|
|
|
3
3
|
|
|
4
4
|
import { InputId } from "./ids";
|
|
5
5
|
|
|
6
|
-
export
|
|
6
|
+
export interface DualsenseHIDState {
|
|
7
7
|
[InputId.LeftAnalogX]: number;
|
|
8
8
|
[InputId.LeftAnalogY]: number;
|
|
9
9
|
[InputId.RightAnalogX]: number;
|
|
@@ -14,6 +14,7 @@ export type DualsenseHIDState = {
|
|
|
14
14
|
[InputId.Circle]: boolean;
|
|
15
15
|
[InputId.Cross]: boolean;
|
|
16
16
|
[InputId.Square]: boolean;
|
|
17
|
+
[InputId.Dpad]: number;
|
|
17
18
|
[InputId.Up]: boolean;
|
|
18
19
|
[InputId.Down]: boolean;
|
|
19
20
|
[InputId.Left]: boolean;
|
|
@@ -27,13 +28,34 @@ export type DualsenseHIDState = {
|
|
|
27
28
|
[InputId.RightBumper]: boolean;
|
|
28
29
|
[InputId.LeftBumper]: boolean;
|
|
29
30
|
[InputId.Playstation]: boolean;
|
|
30
|
-
[InputId.
|
|
31
|
+
[InputId.TouchButton]: boolean;
|
|
31
32
|
[InputId.Mute]: boolean;
|
|
32
|
-
[InputId.
|
|
33
|
-
[InputId.
|
|
34
|
-
[InputId.
|
|
35
|
-
[InputId.
|
|
36
|
-
|
|
33
|
+
[InputId.Status]: boolean;
|
|
34
|
+
[InputId.TouchX0]: number;
|
|
35
|
+
[InputId.TouchY0]: number;
|
|
36
|
+
[InputId.TouchContact0]: boolean;
|
|
37
|
+
[InputId.TouchId0]: number;
|
|
38
|
+
[InputId.TouchX1]: number;
|
|
39
|
+
[InputId.TouchY1]: number;
|
|
40
|
+
[InputId.TouchContact1]: boolean;
|
|
41
|
+
[InputId.TouchId1]: number;
|
|
42
|
+
[InputId.GyroX]: number;
|
|
43
|
+
[InputId.GyroY]: number;
|
|
44
|
+
[InputId.GyroZ]: number;
|
|
45
|
+
[InputId.AccelX]: number;
|
|
46
|
+
[InputId.AccelY]: number;
|
|
47
|
+
[InputId.AccelZ]: number;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Maps a HID input of 0...255 to -1...1
|
|
51
|
+
export function mapAxis(value: number): number {
|
|
52
|
+
return (2 / 255) * Math.max(0, Math.min(255, value)) - 1;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Maps a HID input of 0...255 to 0...1
|
|
56
|
+
export function mapTrigger(value: number): number {
|
|
57
|
+
return (1 / 255) * Math.max(0, Math.min(255, value));
|
|
58
|
+
}
|
|
37
59
|
|
|
38
60
|
export class DualsenseHID extends EventEmitter {
|
|
39
61
|
public state: DualsenseHIDState = {
|
|
@@ -47,6 +69,7 @@ export class DualsenseHID extends EventEmitter {
|
|
|
47
69
|
[InputId.Circle]: false,
|
|
48
70
|
[InputId.Cross]: false,
|
|
49
71
|
[InputId.Square]: false,
|
|
72
|
+
[InputId.Dpad]: 0,
|
|
50
73
|
[InputId.Up]: false,
|
|
51
74
|
[InputId.Down]: false,
|
|
52
75
|
[InputId.Left]: false,
|
|
@@ -60,15 +83,27 @@ export class DualsenseHID extends EventEmitter {
|
|
|
60
83
|
[InputId.RightBumper]: false,
|
|
61
84
|
[InputId.LeftBumper]: false,
|
|
62
85
|
[InputId.Playstation]: false,
|
|
63
|
-
[InputId.
|
|
86
|
+
[InputId.TouchButton]: false,
|
|
64
87
|
[InputId.Mute]: false,
|
|
65
|
-
[InputId.
|
|
66
|
-
[InputId.
|
|
67
|
-
[InputId.
|
|
68
|
-
[InputId.
|
|
88
|
+
[InputId.Status]: false,
|
|
89
|
+
[InputId.TouchX0]: 0,
|
|
90
|
+
[InputId.TouchY0]: 0,
|
|
91
|
+
[InputId.TouchContact0]: false,
|
|
92
|
+
[InputId.TouchId0]: 0,
|
|
93
|
+
[InputId.TouchX1]: 0,
|
|
94
|
+
[InputId.TouchY1]: 0,
|
|
95
|
+
[InputId.TouchContact1]: false,
|
|
96
|
+
[InputId.TouchId1]: 0,
|
|
97
|
+
[InputId.GyroX]: 0,
|
|
98
|
+
[InputId.GyroY]: 0,
|
|
99
|
+
[InputId.GyroZ]: 0,
|
|
100
|
+
[InputId.AccelX]: 0,
|
|
101
|
+
[InputId.AccelY]: 0,
|
|
102
|
+
[InputId.AccelZ]: 0,
|
|
69
103
|
};
|
|
70
104
|
|
|
71
105
|
private device: HID;
|
|
106
|
+
private wireless: boolean = false;
|
|
72
107
|
|
|
73
108
|
static readonly vendorId: number = 1356;
|
|
74
109
|
static readonly productId: number = 3302;
|
|
@@ -78,41 +113,66 @@ export class DualsenseHID extends EventEmitter {
|
|
|
78
113
|
this.device = this.connect();
|
|
79
114
|
}
|
|
80
115
|
|
|
116
|
+
/**
|
|
117
|
+
* Unpacks a Dualsense HID report.
|
|
118
|
+
*/
|
|
81
119
|
private process(buffer: Buffer): void {
|
|
82
|
-
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
const
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
120
|
+
// Bluetooth buffer starts with an extra byte
|
|
121
|
+
const report = buffer.subarray(this.wireless ? 2 : 1);
|
|
122
|
+
|
|
123
|
+
const { state } = this;
|
|
124
|
+
state[InputId.LeftAnalogX] = mapAxis(report.readUint8(0));
|
|
125
|
+
state[InputId.LeftAnalogY] = -mapAxis(report.readUint8(1));
|
|
126
|
+
state[InputId.RightAnalogX] = mapAxis(report.readUint8(2));
|
|
127
|
+
state[InputId.RightAnalogY] = -mapAxis(report.readUint8(3));
|
|
128
|
+
state[InputId.LeftTrigger] = mapTrigger(report.readUint8(4));
|
|
129
|
+
state[InputId.RightTrigger] = mapTrigger(report.readUint8(5));
|
|
130
|
+
// 6 is a sequence byte
|
|
131
|
+
const mainButtons = report.readUint8(7);
|
|
132
|
+
state[InputId.Triangle] = (mainButtons & 128) > 0;
|
|
133
|
+
state[InputId.Circle] = (mainButtons & 64) > 0;
|
|
134
|
+
state[InputId.Cross] = (mainButtons & 32) > 0;
|
|
135
|
+
state[InputId.Square] = (mainButtons & 16) > 0;
|
|
136
|
+
state[InputId.Dpad] = (mainButtons << 4) >> 4;
|
|
137
|
+
state[InputId.Up] = state[InputId.Dpad] < 2 || state[InputId.Dpad] === 7;
|
|
138
|
+
state[InputId.Down] = state[InputId.Dpad] > 2 && state[InputId.Dpad] < 6;
|
|
139
|
+
state[InputId.Left] = state[InputId.Dpad] > 4 && state[InputId.Dpad] < 8;
|
|
140
|
+
state[InputId.Right] = state[InputId.Dpad] > 0 && state[InputId.Dpad] < 4;
|
|
141
|
+
const miscButtons = report.readUint8(8);
|
|
142
|
+
state[InputId.LeftTriggerButton] = (miscButtons & 4) > 0;
|
|
143
|
+
state[InputId.RightTriggerButton] = (miscButtons & 8) > 0;
|
|
144
|
+
state[InputId.LeftBumper] = (miscButtons & 1) > 0;
|
|
145
|
+
state[InputId.RightBumper] = (miscButtons & 2) > 0;
|
|
146
|
+
state[InputId.Create] = (miscButtons & 16) > 0;
|
|
147
|
+
state[InputId.Options] = (miscButtons & 32) > 0;
|
|
148
|
+
state[InputId.LeftAnalogButton] = (miscButtons & 64) > 0;
|
|
149
|
+
state[InputId.RightAnalogButton] = (miscButtons & 128) > 0;
|
|
150
|
+
const lastButtons = report.readUint8(9);
|
|
151
|
+
state[InputId.Playstation] = (lastButtons & 1) > 0;
|
|
152
|
+
state[InputId.TouchButton] = (lastButtons & 2) > 0;
|
|
153
|
+
state[InputId.Mute] = (lastButtons & 4) > 0;
|
|
154
|
+
// The other 5 bits are unused
|
|
155
|
+
// 5 reserved bytes
|
|
156
|
+
state[InputId.GyroX] = report.readUint16LE(15);
|
|
157
|
+
state[InputId.GyroY] = report.readUint16LE(17);
|
|
158
|
+
state[InputId.GyroZ] = report.readUint16LE(19);
|
|
159
|
+
state[InputId.AccelX] = report.readUint16LE(21);
|
|
160
|
+
state[InputId.AccelY] = report.readUint16LE(23);
|
|
161
|
+
state[InputId.AccelZ] = report.readUint16LE(25);
|
|
162
|
+
// 4 bytes for sensor timestamp (32LE)
|
|
163
|
+
// 1 reserved byte
|
|
164
|
+
state[InputId.TouchId0] = report.readUint8(32) & 0x7f;
|
|
165
|
+
state[InputId.TouchContact0] = (report.readUint8(32) & 0x80) === 0;
|
|
166
|
+
state[InputId.TouchX0] = (report.readUint16LE(33) << 20) >> 20;
|
|
167
|
+
state[InputId.TouchY0] = report.readUint16LE(34) >> 4;
|
|
168
|
+
state[InputId.TouchId1] = report.readUint8(36) & 0x7f;
|
|
169
|
+
state[InputId.TouchContact1] = (report.readUint8(36) & 0x80) === 0;
|
|
170
|
+
state[InputId.TouchX1] = (report.readUint16LE(37) << 20) >> 20;
|
|
171
|
+
state[InputId.TouchY1] = report.readUint16LE(38) >> 4;
|
|
172
|
+
// 12 reserved bytes
|
|
173
|
+
state[InputId.Status] = (report.readUint8(53) & 4) > 0;
|
|
174
|
+
|
|
175
|
+
this.emit("input", state);
|
|
116
176
|
}
|
|
117
177
|
|
|
118
178
|
private handleError(error: unknown): void {
|
|
@@ -137,10 +197,12 @@ export class DualsenseHID extends EventEmitter {
|
|
|
137
197
|
this.disconnect();
|
|
138
198
|
|
|
139
199
|
const controllers = devices(DualsenseHID.vendorId, DualsenseHID.productId);
|
|
140
|
-
if (!controllers[0]
|
|
200
|
+
if (controllers.length === 0 || !controllers[0].path) {
|
|
141
201
|
throw new Error(`No controllers (${devices().length} other devices)`);
|
|
142
202
|
}
|
|
143
203
|
|
|
204
|
+
if (controllers[0].interface === -1) this.wireless = true;
|
|
205
|
+
|
|
144
206
|
const controller = new HID(controllers[0].path);
|
|
145
207
|
controller.on("data", this.process.bind(this));
|
|
146
208
|
controller.on("error", this.handleError.bind(this));
|
package/src/hid/ids.ts
CHANGED
|
@@ -4,24 +4,30 @@ export const enum InputId {
|
|
|
4
4
|
Create = "Create",
|
|
5
5
|
Playstation = "Playstation",
|
|
6
6
|
Mute = "Mute",
|
|
7
|
+
Status = "Status", // Orange indicator light state
|
|
7
8
|
|
|
8
9
|
Triangle = "Triangle",
|
|
9
10
|
Circle = "Circle",
|
|
10
11
|
Cross = "Cross",
|
|
11
12
|
Square = "Square",
|
|
12
13
|
|
|
14
|
+
Dpad = "Dpad",
|
|
13
15
|
Up = "Up",
|
|
14
16
|
Down = "Down",
|
|
15
17
|
Left = "Left",
|
|
16
18
|
Right = "Right",
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
TouchButton = "TouchButton",
|
|
21
|
+
|
|
22
|
+
TouchX0 = "TouchX0",
|
|
23
|
+
TouchY0 = "TouchY0",
|
|
24
|
+
TouchContact0 = "TouchContact0",
|
|
25
|
+
TouchId0 = "TouchId0",
|
|
26
|
+
|
|
27
|
+
TouchX1 = "TouchX1",
|
|
28
|
+
TouchY1 = "TouchY1",
|
|
29
|
+
TouchContact1 = "TouchContact1",
|
|
30
|
+
TouchId1 = "TouchId1",
|
|
25
31
|
|
|
26
32
|
LeftAnalogButton = "L3",
|
|
27
33
|
RightAnalogButton = "R3",
|
|
@@ -38,4 +44,12 @@ export const enum InputId {
|
|
|
38
44
|
LeftAnalogY = "LY",
|
|
39
45
|
RightAnalogX = "RX",
|
|
40
46
|
RightAnalogY = "RY",
|
|
47
|
+
|
|
48
|
+
GyroX = "GyroX",
|
|
49
|
+
GyroY = "GyroY",
|
|
50
|
+
GyroZ = "GyroZ",
|
|
51
|
+
|
|
52
|
+
AccelX = "AccelX",
|
|
53
|
+
AccelY = "AccelY",
|
|
54
|
+
AccelZ = "AccelZ",
|
|
41
55
|
}
|
package/src/input.ts
CHANGED
|
@@ -31,12 +31,15 @@ export const InputSet = Symbol("InputSet");
|
|
|
31
31
|
export const InputName = Symbol("InputName");
|
|
32
32
|
export const InputIcon = Symbol("InputIcon");
|
|
33
33
|
|
|
34
|
-
export type InputEvent = "change" | "input";
|
|
34
|
+
export type InputEvent = "change" | "input" | "press" | "release";
|
|
35
35
|
|
|
36
36
|
export declare interface Input<Type> {
|
|
37
37
|
on(
|
|
38
38
|
event: InputEvent,
|
|
39
|
-
listener: (
|
|
39
|
+
listener: (
|
|
40
|
+
input: Input<Type>,
|
|
41
|
+
changed: Input<unknown>
|
|
42
|
+
) => unknown | Promise<unknown>
|
|
40
43
|
): this;
|
|
41
44
|
emit(
|
|
42
45
|
event: InputEvent,
|
|
@@ -211,6 +214,11 @@ export abstract class Input<Type>
|
|
|
211
214
|
this.state = state;
|
|
212
215
|
this.lastChange = Date.now();
|
|
213
216
|
this.emit("change", this, this);
|
|
217
|
+
if (typeof state === "boolean") {
|
|
218
|
+
state
|
|
219
|
+
? this.emit("press", this, this)
|
|
220
|
+
: this.emit("release", this, this);
|
|
221
|
+
}
|
|
214
222
|
}
|
|
215
223
|
|
|
216
224
|
this.emit("input", this, this);
|