dualsense-ts 5.0.2 → 5.0.4
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/hid/dualsense_hid.d.ts +3 -3
- package/dist/hid/dualsense_hid.d.ts.map +1 -1
- package/dist/hid/dualsense_hid.js +0 -4
- package/dist/hid/dualsense_hid.js.map +1 -1
- package/dist/hid/web_hid_provider.d.ts +8 -2
- package/dist/hid/web_hid_provider.d.ts.map +1 -1
- package/dist/hid/web_hid_provider.js +35 -30
- package/dist/hid/web_hid_provider.js.map +1 -1
- package/package.json +1 -1
- package/src/hid/dualsense_hid.ts +3 -7
- package/src/hid/web_hid_provider.ts +46 -38
|
@@ -13,12 +13,12 @@ export declare class DualsenseHID {
|
|
|
13
13
|
/**
|
|
14
14
|
* Register a handler for HID state updates.
|
|
15
15
|
*/
|
|
16
|
-
register(callback:
|
|
16
|
+
register(callback: HIDCallback): void;
|
|
17
17
|
/**
|
|
18
18
|
* Cancel a previously registered handler.
|
|
19
19
|
*/
|
|
20
|
-
unregister(callback:
|
|
21
|
-
on(type: "
|
|
20
|
+
unregister(callback: HIDCallback): void;
|
|
21
|
+
on(type: "error", callback: ErrorCallback): void;
|
|
22
22
|
private set;
|
|
23
23
|
private handleError;
|
|
24
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dualsense_hid.d.ts","sourceRoot":"","sources":["../../src/hid/dualsense_hid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAW,MAAM,gBAAgB,CAAC;AAEzE,oBAAY,WAAW,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAC7D,oBAAY,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAEnD;;GAEG;AACH,qBAAa,YAAY;IAgDX,QAAQ,CAAC,QAAQ,EAAE,WAAW;IA/C1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA4B;IAEtD,KAAK,EAAE,iBAAiB,CA0C7B;gBAEmB,QAAQ,EAAE,WAAW;IAK1C;;OAEG;IACI,QAAQ,CAAC,QAAQ,EAAE,
|
|
1
|
+
{"version":3,"file":"dualsense_hid.d.ts","sourceRoot":"","sources":["../../src/hid/dualsense_hid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAW,MAAM,gBAAgB,CAAC;AAEzE,oBAAY,WAAW,GAAG,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;AAC7D,oBAAY,aAAa,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAEnD;;GAEG;AACH,qBAAa,YAAY;IAgDX,QAAQ,CAAC,QAAQ,EAAE,WAAW;IA/C1C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA0B;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA4B;IAEtD,KAAK,EAAE,iBAAiB,CA0C7B;gBAEmB,QAAQ,EAAE,WAAW;IAK1C;;OAEG;IACI,QAAQ,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAI5C;;OAEG;IACI,UAAU,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI;IAIvC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAIvD,OAAO,CAAC,GAAG;IAKX,OAAO,CAAC,WAAW;CAGpB"}
|
|
@@ -77,10 +77,6 @@ class DualsenseHID {
|
|
|
77
77
|
}
|
|
78
78
|
handleError(error) {
|
|
79
79
|
this.errorSubscribers.forEach((callback) => callback(error));
|
|
80
|
-
setTimeout(() => {
|
|
81
|
-
this.provider.disconnect();
|
|
82
|
-
this.provider.connect();
|
|
83
|
-
}, 50);
|
|
84
80
|
}
|
|
85
81
|
}
|
|
86
82
|
exports.DualsenseHID = DualsenseHID;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dualsense_hid.js","sourceRoot":"","sources":["../../src/hid/dualsense_hid.ts"],"names":[],"mappings":";;;AAKA;;GAEG;AACH,MAAa,YAAY;IAgDvB,YAAqB,QAAqB;QAArB,aAAQ,GAAR,QAAQ,CAAa;QA/CzB,gBAAW,GAAG,IAAI,GAAG,EAAe,CAAC;QACrC,qBAAgB,GAAG,IAAI,GAAG,EAAiB,CAAC;QAEtD,UAAK,GAAsB;YAChC,gCAAqB,EAAE,CAAC;YACxB,gCAAqB,EAAE,CAAC;YACxB,iCAAsB,EAAE,CAAC;YACzB,iCAAsB,EAAE,CAAC;YACzB,gCAAqB,EAAE,CAAC;YACxB,iCAAsB,EAAE,CAAC;YACzB,mCAAkB,EAAE,KAAK;YACzB,+BAAgB,EAAE,KAAK;YACvB,6BAAe,EAAE,KAAK;YACtB,+BAAgB,EAAE,KAAK;YACvB,2BAAc,EAAE,CAAC;YACjB,uBAAY,EAAE,KAAK;YACnB,2BAAc,EAAE,KAAK;YACrB,2BAAc,EAAE,KAAK;YACrB,6BAAe,EAAE,KAAK;YACtB,sCAA2B,EAAE,KAAK;YAClC,qCAA0B,EAAE,KAAK;YACjC,iCAAiB,EAAE,KAAK;YACxB,+BAAgB,EAAE,KAAK;YACvB,6CAA4B,EAAE,KAAK;YACnC,4CAA2B,EAAE,KAAK;YAClC,gCAAqB,EAAE,KAAK;YAC5B,+BAAoB,EAAE,KAAK;YAC3B,yCAAqB,EAAE,KAAK;YAC5B,yCAAqB,EAAE,KAAK;YAC5B,2BAAc,EAAE,KAAK;YACrB,+BAAgB,EAAE,KAAK;YACvB,iCAAiB,EAAE,CAAC;YACpB,iCAAiB,EAAE,CAAC;YACpB,6CAAuB,EAAE,KAAK;YAC9B,mCAAkB,EAAE,CAAC;YACrB,iCAAiB,EAAE,CAAC;YACpB,iCAAiB,EAAE,CAAC;YACpB,6CAAuB,EAAE,KAAK;YAC9B,mCAAkB,EAAE,CAAC;YACrB,6BAAe,EAAE,CAAC;YAClB,6BAAe,EAAE,CAAC;YAClB,6BAAe,EAAE,CAAC;YAClB,+BAAgB,EAAE,CAAC;YACnB,+BAAgB,EAAE,CAAC;YACnB,+BAAgB,EAAE,CAAC;SACpB,CAAC;QAGA,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"dualsense_hid.js","sourceRoot":"","sources":["../../src/hid/dualsense_hid.ts"],"names":[],"mappings":";;;AAKA;;GAEG;AACH,MAAa,YAAY;IAgDvB,YAAqB,QAAqB;QAArB,aAAQ,GAAR,QAAQ,CAAa;QA/CzB,gBAAW,GAAG,IAAI,GAAG,EAAe,CAAC;QACrC,qBAAgB,GAAG,IAAI,GAAG,EAAiB,CAAC;QAEtD,UAAK,GAAsB;YAChC,gCAAqB,EAAE,CAAC;YACxB,gCAAqB,EAAE,CAAC;YACxB,iCAAsB,EAAE,CAAC;YACzB,iCAAsB,EAAE,CAAC;YACzB,gCAAqB,EAAE,CAAC;YACxB,iCAAsB,EAAE,CAAC;YACzB,mCAAkB,EAAE,KAAK;YACzB,+BAAgB,EAAE,KAAK;YACvB,6BAAe,EAAE,KAAK;YACtB,+BAAgB,EAAE,KAAK;YACvB,2BAAc,EAAE,CAAC;YACjB,uBAAY,EAAE,KAAK;YACnB,2BAAc,EAAE,KAAK;YACrB,2BAAc,EAAE,KAAK;YACrB,6BAAe,EAAE,KAAK;YACtB,sCAA2B,EAAE,KAAK;YAClC,qCAA0B,EAAE,KAAK;YACjC,iCAAiB,EAAE,KAAK;YACxB,+BAAgB,EAAE,KAAK;YACvB,6CAA4B,EAAE,KAAK;YACnC,4CAA2B,EAAE,KAAK;YAClC,gCAAqB,EAAE,KAAK;YAC5B,+BAAoB,EAAE,KAAK;YAC3B,yCAAqB,EAAE,KAAK;YAC5B,yCAAqB,EAAE,KAAK;YAC5B,2BAAc,EAAE,KAAK;YACrB,+BAAgB,EAAE,KAAK;YACvB,iCAAiB,EAAE,CAAC;YACpB,iCAAiB,EAAE,CAAC;YACpB,6CAAuB,EAAE,KAAK;YAC9B,mCAAkB,EAAE,CAAC;YACrB,iCAAiB,EAAE,CAAC;YACpB,iCAAiB,EAAE,CAAC;YACpB,6CAAuB,EAAE,KAAK;YAC9B,mCAAkB,EAAE,CAAC;YACrB,6BAAe,EAAE,CAAC;YAClB,6BAAe,EAAE,CAAC;YAClB,6BAAe,EAAE,CAAC;YAClB,+BAAgB,EAAE,CAAC;YACnB,+BAAgB,EAAE,CAAC;YACnB,+BAAgB,EAAE,CAAC;SACpB,CAAC;QAGA,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACI,QAAQ,CAAC,QAAqB;QACnC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACI,UAAU,CAAC,QAAqB;QACrC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;IAEM,EAAE,CAAC,IAAa,EAAE,QAAuB;QAC9C,IAAI,IAAI,KAAK,OAAO;YAAE,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAEO,GAAG,CAAC,KAAwB;QAClC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,CAAC;IAEO,WAAW,CAAC,KAAY;QAC9B,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,CAAC;CACF;AA/ED,oCA+EC"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
/// <reference types="w3c-web-hid" />
|
|
1
2
|
import { HIDProvider, DualsenseHIDState } from "./hid_provider";
|
|
2
3
|
export declare class WebHIDProvider extends HIDProvider {
|
|
3
4
|
private device?;
|
|
4
5
|
wireless: boolean;
|
|
5
|
-
connecting: boolean;
|
|
6
|
-
connection: boolean;
|
|
7
6
|
constructor();
|
|
7
|
+
attach(device: HIDDevice): void;
|
|
8
|
+
/**
|
|
9
|
+
* You need to get permission to user HID devices from an interactive
|
|
10
|
+
* component, like a button. This returns a callback for triggering
|
|
11
|
+
* the permissions request.
|
|
12
|
+
*/
|
|
13
|
+
getRequest(): () => Promise<unknown>;
|
|
8
14
|
connect(): void;
|
|
9
15
|
get connected(): boolean;
|
|
10
16
|
disconnect(): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web_hid_provider.d.ts","sourceRoot":"","sources":["../../src/hid/web_hid_provider.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,iBAAiB,EAIlB,MAAM,gBAAgB,CAAC;AAExB,qBAAa,cAAe,SAAQ,WAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,CAAY;IACpB,QAAQ,EAAE,OAAO,CAAQ
|
|
1
|
+
{"version":3,"file":"web_hid_provider.d.ts","sourceRoot":"","sources":["../../src/hid/web_hid_provider.ts"],"names":[],"mappings":";AAAA,OAAO,EACL,WAAW,EACX,iBAAiB,EAIlB,MAAM,gBAAgB,CAAC;AAExB,qBAAa,cAAe,SAAQ,WAAW;IAC7C,OAAO,CAAC,MAAM,CAAC,CAAY;IACpB,QAAQ,EAAE,OAAO,CAAQ;;IAchC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAc/B;;;;OAIG;IACH,UAAU,IAAI,MAAM,OAAO,CAAC,OAAO,CAAC;IAsBpC,OAAO,IAAI,IAAI;IAIf,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,UAAU,IAAI,IAAI;IASlB,OAAO,CAAC,MAAM,EAAE,QAAQ,GAAG,iBAAiB;CA2D7C"}
|
|
@@ -6,54 +6,60 @@ class WebHIDProvider extends hid_provider_1.HIDProvider {
|
|
|
6
6
|
constructor() {
|
|
7
7
|
super();
|
|
8
8
|
this.wireless = true; // TODO: Not sure what to check
|
|
9
|
-
this.connecting = false;
|
|
10
|
-
this.connection = false;
|
|
11
9
|
if (!navigator.hid)
|
|
12
|
-
throw new Error("");
|
|
10
|
+
throw new Error("WebHID not supported by this browser");
|
|
13
11
|
navigator.hid.addEventListener("disconnect", ({ device }) => {
|
|
14
12
|
if (device === this.device)
|
|
15
|
-
this.
|
|
13
|
+
this.device = undefined;
|
|
14
|
+
});
|
|
15
|
+
navigator.hid.addEventListener("connect", ({ device }) => {
|
|
16
|
+
if (!this.device)
|
|
17
|
+
this.attach(device);
|
|
16
18
|
});
|
|
17
19
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
attach(device) {
|
|
21
|
+
device
|
|
22
|
+
.open()
|
|
23
|
+
.then(() => {
|
|
24
|
+
this.device = device;
|
|
25
|
+
this.device.addEventListener("inputreport", ({ data }) => {
|
|
26
|
+
this.onData(this.process(data));
|
|
27
|
+
});
|
|
28
|
+
})
|
|
29
|
+
.catch((err) => {
|
|
30
|
+
this.onError(err);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* You need to get permission to user HID devices from an interactive
|
|
35
|
+
* component, like a button. This returns a callback for triggering
|
|
36
|
+
* the permissions request.
|
|
37
|
+
*/
|
|
38
|
+
getRequest() {
|
|
39
|
+
return () => navigator.hid
|
|
25
40
|
.requestDevice({
|
|
26
41
|
filters: [
|
|
27
|
-
{
|
|
42
|
+
{
|
|
43
|
+
vendorId: hid_provider_1.HIDProvider.vendorId,
|
|
44
|
+
productId: hid_provider_1.HIDProvider.productId,
|
|
45
|
+
},
|
|
28
46
|
],
|
|
29
47
|
})
|
|
30
48
|
.then((devices) => {
|
|
31
49
|
if (devices.length === 0) {
|
|
32
50
|
return this.onError(new Error(`No controllers available`));
|
|
33
51
|
}
|
|
34
|
-
devices[0]
|
|
35
|
-
.open()
|
|
36
|
-
.then(() => {
|
|
37
|
-
this.disconnect();
|
|
38
|
-
this.device = devices[0];
|
|
39
|
-
this.connection = true;
|
|
40
|
-
this.device.addEventListener("inputreport", ({ data }) => {
|
|
41
|
-
this.onData(this.process(data));
|
|
42
|
-
});
|
|
43
|
-
})
|
|
44
|
-
.catch((err) => {
|
|
45
|
-
this.onError(err);
|
|
46
|
-
});
|
|
52
|
+
this.attach(devices[0]);
|
|
47
53
|
})
|
|
48
54
|
.catch((err) => {
|
|
49
55
|
this.onError(err);
|
|
50
|
-
})
|
|
51
|
-
.finally(() => {
|
|
52
|
-
this.connecting = false;
|
|
53
56
|
});
|
|
54
57
|
}
|
|
58
|
+
connect() {
|
|
59
|
+
// Nothing to be done.
|
|
60
|
+
}
|
|
55
61
|
get connected() {
|
|
56
|
-
return this.device !== undefined
|
|
62
|
+
return this.device !== undefined;
|
|
57
63
|
}
|
|
58
64
|
disconnect() {
|
|
59
65
|
if (this.device) {
|
|
@@ -62,7 +68,6 @@ class WebHIDProvider extends hid_provider_1.HIDProvider {
|
|
|
62
68
|
this.wireless = false;
|
|
63
69
|
});
|
|
64
70
|
}
|
|
65
|
-
this.connecting = false;
|
|
66
71
|
}
|
|
67
72
|
process(buffer) {
|
|
68
73
|
// Bluetooth buffer starts with an extra byte
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web_hid_provider.js","sourceRoot":"","sources":["../../src/hid/web_hid_provider.ts"],"names":[],"mappings":";;;AAAA,iDAMwB;AAExB,MAAa,cAAe,SAAQ,0BAAW;
|
|
1
|
+
{"version":3,"file":"web_hid_provider.js","sourceRoot":"","sources":["../../src/hid/web_hid_provider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/hid/dualsense_hid.ts
CHANGED
|
@@ -62,18 +62,18 @@ export class DualsenseHID {
|
|
|
62
62
|
/**
|
|
63
63
|
* Register a handler for HID state updates.
|
|
64
64
|
*/
|
|
65
|
-
public register(callback:
|
|
65
|
+
public register(callback: HIDCallback): void {
|
|
66
66
|
this.subscribers.add(callback);
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
/**
|
|
70
70
|
* Cancel a previously registered handler.
|
|
71
71
|
*/
|
|
72
|
-
public unregister(callback:
|
|
72
|
+
public unregister(callback: HIDCallback): void {
|
|
73
73
|
this.subscribers.delete(callback);
|
|
74
74
|
}
|
|
75
75
|
|
|
76
|
-
public on(type: "
|
|
76
|
+
public on(type: "error", callback: ErrorCallback): void {
|
|
77
77
|
if (type === "error") this.errorSubscribers.add(callback);
|
|
78
78
|
}
|
|
79
79
|
|
|
@@ -84,9 +84,5 @@ export class DualsenseHID {
|
|
|
84
84
|
|
|
85
85
|
private handleError(error: Error): void {
|
|
86
86
|
this.errorSubscribers.forEach((callback) => callback(error));
|
|
87
|
-
setTimeout(() => {
|
|
88
|
-
this.provider.disconnect();
|
|
89
|
-
this.provider.connect();
|
|
90
|
-
}, 50);
|
|
91
87
|
}
|
|
92
88
|
}
|
|
@@ -9,57 +9,66 @@ import {
|
|
|
9
9
|
export class WebHIDProvider extends HIDProvider {
|
|
10
10
|
private device?: HIDDevice;
|
|
11
11
|
public wireless: boolean = true; // TODO: Not sure what to check
|
|
12
|
-
public connecting: boolean = false;
|
|
13
|
-
public connection: boolean = false;
|
|
14
12
|
|
|
15
13
|
constructor() {
|
|
16
14
|
super();
|
|
17
|
-
if (!navigator.hid) throw new Error("");
|
|
15
|
+
if (!navigator.hid) throw new Error("WebHID not supported by this browser");
|
|
16
|
+
|
|
18
17
|
navigator.hid.addEventListener("disconnect", ({ device }) => {
|
|
19
|
-
if (device === this.device) this.
|
|
18
|
+
if (device === this.device) this.device = undefined;
|
|
19
|
+
});
|
|
20
|
+
navigator.hid.addEventListener("connect", ({ device }) => {
|
|
21
|
+
if (!this.device) this.attach(device);
|
|
20
22
|
});
|
|
21
23
|
}
|
|
22
24
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
{ vendorId: HIDProvider.vendorId, productId: HIDProvider.productId },
|
|
32
|
-
],
|
|
33
|
-
})
|
|
34
|
-
.then((devices: HIDDevice[]) => {
|
|
35
|
-
if (devices.length === 0) {
|
|
36
|
-
return this.onError(new Error(`No controllers available`));
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
devices[0]
|
|
40
|
-
.open()
|
|
41
|
-
.then(() => {
|
|
42
|
-
this.disconnect();
|
|
43
|
-
this.device = devices[0];
|
|
44
|
-
this.connection = true;
|
|
45
|
-
this.device.addEventListener("inputreport", ({ data }) => {
|
|
46
|
-
this.onData(this.process(data));
|
|
47
|
-
});
|
|
48
|
-
})
|
|
49
|
-
.catch((err: Error) => {
|
|
50
|
-
this.onError(err);
|
|
51
|
-
});
|
|
25
|
+
attach(device: HIDDevice): void {
|
|
26
|
+
device
|
|
27
|
+
.open()
|
|
28
|
+
.then(() => {
|
|
29
|
+
this.device = device;
|
|
30
|
+
this.device.addEventListener("inputreport", ({ data }) => {
|
|
31
|
+
this.onData(this.process(data));
|
|
32
|
+
});
|
|
52
33
|
})
|
|
53
34
|
.catch((err: Error) => {
|
|
54
35
|
this.onError(err);
|
|
55
|
-
})
|
|
56
|
-
.finally(() => {
|
|
57
|
-
this.connecting = false;
|
|
58
36
|
});
|
|
59
37
|
}
|
|
60
38
|
|
|
39
|
+
/**
|
|
40
|
+
* You need to get permission to user HID devices from an interactive
|
|
41
|
+
* component, like a button. This returns a callback for triggering
|
|
42
|
+
* the permissions request.
|
|
43
|
+
*/
|
|
44
|
+
getRequest(): () => Promise<unknown> {
|
|
45
|
+
return () =>
|
|
46
|
+
navigator.hid
|
|
47
|
+
.requestDevice({
|
|
48
|
+
filters: [
|
|
49
|
+
{
|
|
50
|
+
vendorId: HIDProvider.vendorId,
|
|
51
|
+
productId: HIDProvider.productId,
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
})
|
|
55
|
+
.then((devices: HIDDevice[]) => {
|
|
56
|
+
if (devices.length === 0) {
|
|
57
|
+
return this.onError(new Error(`No controllers available`));
|
|
58
|
+
}
|
|
59
|
+
this.attach(devices[0]);
|
|
60
|
+
})
|
|
61
|
+
.catch((err: Error) => {
|
|
62
|
+
this.onError(err);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
connect(): void {
|
|
67
|
+
// Nothing to be done.
|
|
68
|
+
}
|
|
69
|
+
|
|
61
70
|
get connected(): boolean {
|
|
62
|
-
return this.device !== undefined
|
|
71
|
+
return this.device !== undefined;
|
|
63
72
|
}
|
|
64
73
|
|
|
65
74
|
disconnect(): void {
|
|
@@ -69,7 +78,6 @@ export class WebHIDProvider extends HIDProvider {
|
|
|
69
78
|
this.wireless = false;
|
|
70
79
|
});
|
|
71
80
|
}
|
|
72
|
-
this.connecting = false;
|
|
73
81
|
}
|
|
74
82
|
|
|
75
83
|
process(buffer: DataView): DualsenseHIDState {
|