@matter/nodejs-ble 0.13.0-alpha.0-20250415-475996bb5 → 0.13.0-alpha.0-20250418-8cfc0b832
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/cjs/BlenoBleServer.d.ts +1 -1
- package/dist/cjs/BlenoBleServer.d.ts.map +1 -1
- package/dist/cjs/BlenoBleServer.js +17 -8
- package/dist/cjs/BlenoBleServer.js.map +1 -1
- package/dist/cjs/NobleBleClient.d.ts +1 -0
- package/dist/cjs/NobleBleClient.d.ts.map +1 -1
- package/dist/cjs/NobleBleClient.js +5 -0
- package/dist/cjs/NobleBleClient.js.map +1 -1
- package/dist/cjs/NodeJsBle.d.ts +3 -3
- package/dist/cjs/NodeJsBle.d.ts.map +1 -1
- package/dist/cjs/NodeJsBle.js +7 -6
- package/dist/cjs/NodeJsBle.js.map +1 -1
- package/dist/esm/BlenoBleServer.d.ts +1 -1
- package/dist/esm/BlenoBleServer.d.ts.map +1 -1
- package/dist/esm/BlenoBleServer.js +17 -8
- package/dist/esm/BlenoBleServer.js.map +1 -1
- package/dist/esm/NobleBleClient.d.ts +1 -0
- package/dist/esm/NobleBleClient.d.ts.map +1 -1
- package/dist/esm/NobleBleClient.js +5 -0
- package/dist/esm/NobleBleClient.js.map +1 -1
- package/dist/esm/NodeJsBle.d.ts +3 -3
- package/dist/esm/NodeJsBle.d.ts.map +1 -1
- package/dist/esm/NodeJsBle.js +7 -6
- package/dist/esm/NodeJsBle.js.map +1 -1
- package/package.json +6 -6
- package/src/BlenoBleServer.ts +22 -8
- package/src/NobleBleClient.ts +7 -0
- package/src/NodeJsBle.ts +7 -4
|
@@ -34,7 +34,7 @@ export declare class BlenoBleServer extends BleChannel<Uint8Array> {
|
|
|
34
34
|
* @param offset
|
|
35
35
|
* @param withoutResponse
|
|
36
36
|
*/
|
|
37
|
-
handleC1WriteRequest(data: Buffer
|
|
37
|
+
handleC1WriteRequest(data: Buffer<ArrayBufferLike>, offset: number, withoutResponse: boolean): void;
|
|
38
38
|
/**
|
|
39
39
|
* Process a Subscribe request on characteristic C2 from the Matter service.
|
|
40
40
|
* This is expected directly after a handshake request and initializes the BTP session handler with the stored
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlenoBleServer.d.ts","sourceRoot":"","sources":["../../src/BlenoBleServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAA8C,MAAM,iBAAiB,CAAC;AAEtF,OAAO,EAMH,UAAU,EAKb,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"BlenoBleServer.d.ts","sourceRoot":"","sources":["../../src/BlenoBleServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAA8C,MAAM,iBAAiB,CAAC;AAEtF,OAAO,EAMH,UAAU,EAKb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA4G5C;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,UAAU,CAAC,UAAU,CAAC;IACtD,OAAO,CAAC,KAAK,CAAa;IAC1B,aAAa,UAAS;IACtB,OAAO,CAAC,yBAAyB,CAA2B;IAC5D,OAAO,CAAC,eAAe,CAAqB;IAE5C,OAAO,CAAC,sBAAsB,CAAqB;IACnD,OAAO,CAAC,UAAU,CAAgC;IAElD,OAAO,CAAC,uBAAuB,CAAwE;IACvG,OAAO,CAAC,yBAAyB,CAAsC;IAEhE,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,OAAO,CAAC,mBAAmB,CAEzB;IAEF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAEtB,OAAO,CAAC,EAAE,UAAU;IAsEhC;;;;;;;;OAQG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO;IA0B5F;;;;;;;;OAQG;IACG,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAsChG,gBAAgB;IAShB;;;;;OAKG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM;IAQ5B,SAAS,CAAC,aAAa,EAAE,UAAU,EAAE,2BAA2B,CAAC,EAAE,UAAU;IAyB7E,eAAe;IAYrB,wBAAwB,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI;IAOpF,4BAA4B;IAK5B,KAAK;IAUL,UAAU;IAchB;;;;OAIG;IACG,IAAI,CAAC,IAAI,EAAE,UAAU;IAQ3B,IAAI,IAAI,WAEP;CACJ"}
|
|
@@ -40,10 +40,11 @@ function initializeBleno(server, hciId) {
|
|
|
40
40
|
constructor() {
|
|
41
41
|
super({
|
|
42
42
|
uuid: import_protocol.BLE_MATTER_C1_CHARACTERISTIC_UUID,
|
|
43
|
-
properties: ["write"]
|
|
43
|
+
properties: ["write"],
|
|
44
|
+
onWriteRequest: (_handle, data, offset, withoutResponse, callback) => this.#onWriteRequest(data, offset, withoutResponse, callback)
|
|
44
45
|
});
|
|
45
46
|
}
|
|
46
|
-
onWriteRequest(data, offset, withoutResponse, callback) {
|
|
47
|
+
#onWriteRequest(data, offset, withoutResponse, callback) {
|
|
47
48
|
logger.debug(`C1 write request: ${data.toString("hex")} ${offset} ${withoutResponse}`);
|
|
48
49
|
try {
|
|
49
50
|
server.handleC1WriteRequest(data, offset, withoutResponse);
|
|
@@ -58,18 +59,21 @@ function initializeBleno(server, hciId) {
|
|
|
58
59
|
constructor() {
|
|
59
60
|
super({
|
|
60
61
|
uuid: import_protocol.BLE_MATTER_C2_CHARACTERISTIC_UUID,
|
|
61
|
-
properties: ["indicate"]
|
|
62
|
+
properties: ["indicate"],
|
|
63
|
+
onSubscribe: (_handle, maxValueSize, updateValueCallback) => this.#onSubscribe(maxValueSize, updateValueCallback),
|
|
64
|
+
onUnsubscribe: () => this.#onUnsubscribe(),
|
|
65
|
+
onIndicate: () => this.#onIndicate()
|
|
62
66
|
});
|
|
63
67
|
}
|
|
64
|
-
onSubscribe(maxValueSize, updateValueCallback) {
|
|
68
|
+
#onSubscribe(maxValueSize, updateValueCallback) {
|
|
65
69
|
logger.debug(`C2 subscribe ${maxValueSize}`);
|
|
66
70
|
server.handleC2SubscribeRequest(maxValueSize, updateValueCallback).catch((e) => logger.warn("Error happened in when handling C2 subscribe", e));
|
|
67
71
|
}
|
|
68
|
-
onUnsubscribe() {
|
|
72
|
+
#onUnsubscribe() {
|
|
69
73
|
logger.debug("C2 unsubscribe");
|
|
70
74
|
server.close().catch((e) => logger.warn("Error happened when closing server for C2 unsubscribe", e));
|
|
71
75
|
}
|
|
72
|
-
onIndicate() {
|
|
76
|
+
#onIndicate() {
|
|
73
77
|
logger.debug("C2 indicate");
|
|
74
78
|
server.handleC2Indicate();
|
|
75
79
|
}
|
|
@@ -78,10 +82,11 @@ function initializeBleno(server, hciId) {
|
|
|
78
82
|
constructor() {
|
|
79
83
|
super({
|
|
80
84
|
uuid: import_protocol.BLE_MATTER_C3_CHARACTERISTIC_UUID,
|
|
81
|
-
properties: ["read"]
|
|
85
|
+
properties: ["read"],
|
|
86
|
+
onReadRequest: (_handle, offset, callback) => this.#onReadRequest(offset, callback)
|
|
82
87
|
});
|
|
83
88
|
}
|
|
84
|
-
onReadRequest(offset, callback) {
|
|
89
|
+
#onReadRequest(offset, callback) {
|
|
85
90
|
try {
|
|
86
91
|
const data = server.handleC3ReadRequest(offset);
|
|
87
92
|
logger.debug(`C3 read request: ${data.toString("hex")} ${offset}`);
|
|
@@ -124,6 +129,8 @@ class BlenoBleServer extends import_protocol.BleChannel {
|
|
|
124
129
|
matterBleService;
|
|
125
130
|
constructor(options) {
|
|
126
131
|
super();
|
|
132
|
+
const { environment } = options ?? {};
|
|
133
|
+
environment?.runtime.add(this);
|
|
127
134
|
this.matterBleService = initializeBleno(this, options?.hciId);
|
|
128
135
|
Bleno.on("stateChange", (state) => {
|
|
129
136
|
if (state === this.state) return;
|
|
@@ -143,6 +150,7 @@ class BlenoBleServer extends import_protocol.BleChannel {
|
|
|
143
150
|
});
|
|
144
151
|
Bleno.on("disconnect", (clientAddress) => {
|
|
145
152
|
logger.debug(`disconnect, client: ${clientAddress}`);
|
|
153
|
+
this.isAdvertising = false;
|
|
146
154
|
if (this.btpSession !== void 0) {
|
|
147
155
|
this.btpSession.close().then(() => {
|
|
148
156
|
this.btpSession = void 0;
|
|
@@ -314,6 +322,7 @@ class BlenoBleServer extends import_protocol.BleChannel {
|
|
|
314
322
|
this.onMatterMessageListener = void 0;
|
|
315
323
|
}
|
|
316
324
|
async disconnect() {
|
|
325
|
+
this.isAdvertising = false;
|
|
317
326
|
Bleno.disconnect();
|
|
318
327
|
}
|
|
319
328
|
// Channel<Uint8Array>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/BlenoBleServer.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,qBAAoE;AACpE,qBAAwB;AACxB,sBAWO;AAnBP;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -12,6 +12,7 @@ export declare class NobleBleClient {
|
|
|
12
12
|
private nobleState;
|
|
13
13
|
private deviceDiscoveredCallback;
|
|
14
14
|
constructor(options?: BleOptions);
|
|
15
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
15
16
|
setDiscoveryCallback(callback: (peripheral: Peripheral, manufacturerData: Uint8Array) => void): void;
|
|
16
17
|
startScanning(): Promise<void>;
|
|
17
18
|
stopScanning(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NobleBleClient.d.ts","sourceRoot":"","sources":["../../src/NobleBleClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkB5C,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAGlC;IACJ,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,wBAAwB,CAA+E;gBAEnG,OAAO,CAAC,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"NobleBleClient.d.ts","sourceRoot":"","sources":["../../src/NobleBleClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkB5C,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAGlC;IACJ,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,wBAAwB,CAA+E;gBAEnG,OAAO,CAAC,EAAE,UAAU;IAqChC,CAAC,MAAM,CAAC,YAAY,CAAC;IAId,oBAAoB,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,KAAK,IAAI;IAOvF,aAAa;IAgBb,YAAY;IAQzB,OAAO,CAAC,sBAAsB;CAqCjC"}
|
|
@@ -47,6 +47,8 @@ class NobleBleClient {
|
|
|
47
47
|
nobleState = "unknown";
|
|
48
48
|
deviceDiscoveredCallback;
|
|
49
49
|
constructor(options) {
|
|
50
|
+
const { environment } = options ?? {};
|
|
51
|
+
environment?.runtime.add(this);
|
|
50
52
|
loadNoble(options?.hciId);
|
|
51
53
|
noble.on("stateChange", (state) => {
|
|
52
54
|
this.nobleState = state;
|
|
@@ -68,6 +70,9 @@ class NobleBleClient {
|
|
|
68
70
|
});
|
|
69
71
|
noble.on("scanStop", () => this.isScanning = false);
|
|
70
72
|
}
|
|
73
|
+
[Symbol.asyncDispose]() {
|
|
74
|
+
return this.stopScanning();
|
|
75
|
+
}
|
|
71
76
|
setDiscoveryCallback(callback) {
|
|
72
77
|
this.deviceDiscoveredCallback = callback;
|
|
73
78
|
for (const { peripheral, matterServiceData } of this.discoveredPeripherals.values()) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/NobleBleClient.ts"],
|
|
4
|
-
"mappings": "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",
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/cjs/NodeJsBle.d.ts
CHANGED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { NetInterface, TransportInterface } from "@matter/general";
|
|
6
|
+
import { Environment, NetInterface, TransportInterface } from "@matter/general";
|
|
7
7
|
import { Ble, InstanceBroadcaster, Scanner } from "@matter/protocol";
|
|
8
8
|
export type BleOptions = {
|
|
9
9
|
hciId?: number;
|
|
10
|
+
environment?: Environment;
|
|
10
11
|
};
|
|
11
12
|
export declare class NodeJsBle extends Ble {
|
|
12
13
|
#private;
|
|
13
|
-
|
|
14
|
-
constructor(options?: BleOptions | undefined);
|
|
14
|
+
constructor(options?: BleOptions);
|
|
15
15
|
getBlePeripheralInterface(): TransportInterface;
|
|
16
16
|
getBleCentralInterface(): NetInterface;
|
|
17
17
|
getBleBroadcaster(additionalAdvertisementData?: Uint8Array): InstanceBroadcaster;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeJsBle.d.ts","sourceRoot":"","sources":["../../src/NodeJsBle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"NodeJsBle.d.ts","sourceRoot":"","sources":["../../src/NodeJsBle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAQrE,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B,CAAC;AAEF,qBAAa,SAAU,SAAQ,GAAG;;gBASlB,OAAO,CAAC,EAAE,UAAU;IAmBhC,yBAAyB,IAAI,kBAAkB;IAO/C,sBAAsB,IAAI,YAAY;IAOtC,iBAAiB,CAAC,2BAA2B,CAAC,EAAE,UAAU,GAAG,mBAAmB;IAOhF,aAAa,IAAI,OAAO;CAM3B"}
|
package/dist/cjs/NodeJsBle.js
CHANGED
|
@@ -34,25 +34,26 @@ var import_NobleBleClient = require("./NobleBleClient.js");
|
|
|
34
34
|
* SPDX-License-Identifier: Apache-2.0
|
|
35
35
|
*/
|
|
36
36
|
class NodeJsBle extends import_protocol.Ble {
|
|
37
|
-
|
|
38
|
-
super();
|
|
39
|
-
this.options = options;
|
|
40
|
-
}
|
|
37
|
+
#options;
|
|
41
38
|
#blePeripheralInstance;
|
|
42
39
|
#bleCentralInstance;
|
|
43
40
|
#bleScanner;
|
|
44
41
|
#bleBroadcaster;
|
|
45
42
|
#bleCentralInterface;
|
|
46
43
|
#blePeripheralInterface;
|
|
44
|
+
constructor(options) {
|
|
45
|
+
super();
|
|
46
|
+
this.#options = options;
|
|
47
|
+
}
|
|
47
48
|
get #blePeripheralServer() {
|
|
48
49
|
if (this.#blePeripheralInstance === void 0) {
|
|
49
|
-
this.#blePeripheralInstance = new import_BlenoBleServer.BlenoBleServer(this
|
|
50
|
+
this.#blePeripheralInstance = new import_BlenoBleServer.BlenoBleServer(this.#options);
|
|
50
51
|
}
|
|
51
52
|
return this.#blePeripheralInstance;
|
|
52
53
|
}
|
|
53
54
|
get #bleCentralClient() {
|
|
54
55
|
if (this.#bleCentralInstance === void 0) {
|
|
55
|
-
this.#bleCentralInstance = new import_NobleBleClient.NobleBleClient(this
|
|
56
|
+
this.#bleCentralInstance = new import_NobleBleClient.NobleBleClient(this.#options);
|
|
56
57
|
}
|
|
57
58
|
return this.#bleCentralInstance;
|
|
58
59
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/NodeJsBle.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,sBAAkD;AAClD,4BAA+B;AAC/B,oCAAuC;AACvC,wBAA2B;AAC3B,4BAA+B;AAC/B,6BAAyC;AACzC,4BAA+B;AAb/B;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,sBAAkD;AAClD,4BAA+B;AAC/B,oCAAuC;AACvC,wBAA2B;AAC3B,4BAA+B;AAC/B,6BAAyC;AACzC,4BAA+B;AAb/B;AAAA;AAAA;AAAA;AAAA;AAoBO,MAAM,kBAAkB,oBAAI;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,SAAsB;AAC9B,UAAM;AACN,SAAK,WAAW;AAAA,EACpB;AAAA,EAEA,IAAI,uBAAuB;AACvB,QAAI,KAAK,2BAA2B,QAAW;AAC3C,WAAK,yBAAyB,IAAI,qCAAe,KAAK,QAAQ;AAAA,IAClE;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,oBAAoB;AACpB,QAAI,KAAK,wBAAwB,QAAW;AACxC,WAAK,sBAAsB,IAAI,qCAAe,KAAK,QAAQ;AAAA,IAC/D;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,4BAAgD;AAC5C,QAAI,KAAK,4BAA4B,QAAW;AAC5C,WAAK,0BAA0B,IAAI,qDAAuB,KAAK,oBAAoB;AAAA,IACvF;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,yBAAuC;AACnC,QAAI,KAAK,yBAAyB,QAAW;AACzC,WAAK,uBAAuB,IAAI,gDAAyB,KAAK,cAAc,CAAe;AAAA,IAC/F;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,kBAAkB,6BAA+D;AAC7E,QAAI,KAAK,oBAAoB,QAAW;AACpC,WAAK,kBAAkB,IAAI,qCAAe,KAAK,sBAAsB,2BAA2B;AAAA,IACpG;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,gBAAyB;AACrB,QAAI,KAAK,gBAAgB,QAAW;AAChC,WAAK,cAAc,IAAI,6BAAW,KAAK,iBAAiB;AAAA,IAC5D;AACA,WAAO,KAAK;AAAA,EAChB;AACJ;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -34,7 +34,7 @@ export declare class BlenoBleServer extends BleChannel<Uint8Array> {
|
|
|
34
34
|
* @param offset
|
|
35
35
|
* @param withoutResponse
|
|
36
36
|
*/
|
|
37
|
-
handleC1WriteRequest(data: Buffer
|
|
37
|
+
handleC1WriteRequest(data: Buffer<ArrayBufferLike>, offset: number, withoutResponse: boolean): void;
|
|
38
38
|
/**
|
|
39
39
|
* Process a Subscribe request on characteristic C2 from the Matter service.
|
|
40
40
|
* This is expected directly after a handshake request and initializes the BTP session handler with the stored
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BlenoBleServer.d.ts","sourceRoot":"","sources":["../../src/BlenoBleServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAA8C,MAAM,iBAAiB,CAAC;AAEtF,OAAO,EAMH,UAAU,EAKb,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"BlenoBleServer.d.ts","sourceRoot":"","sources":["../../src/BlenoBleServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAA8C,MAAM,iBAAiB,CAAC;AAEtF,OAAO,EAMH,UAAU,EAKb,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA4G5C;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,UAAU,CAAC,UAAU,CAAC;IACtD,OAAO,CAAC,KAAK,CAAa;IAC1B,aAAa,UAAS;IACtB,OAAO,CAAC,yBAAyB,CAA2B;IAC5D,OAAO,CAAC,eAAe,CAAqB;IAE5C,OAAO,CAAC,sBAAsB,CAAqB;IACnD,OAAO,CAAC,UAAU,CAAgC;IAElD,OAAO,CAAC,uBAAuB,CAAwE;IACvG,OAAO,CAAC,yBAAyB,CAAsC;IAEhE,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IACzC,OAAO,CAAC,mBAAmB,CAEzB;IAEF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;gBAEtB,OAAO,CAAC,EAAE,UAAU;IAsEhC;;;;;;;;OAQG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO;IA0B5F;;;;;;;;OAQG;IACG,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAsChG,gBAAgB;IAShB;;;;;OAKG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM;IAQ5B,SAAS,CAAC,aAAa,EAAE,UAAU,EAAE,2BAA2B,CAAC,EAAE,UAAU;IAyB7E,eAAe;IAYrB,wBAAwB,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,KAAK,IAAI;IAOpF,4BAA4B;IAK5B,KAAK;IAUL,UAAU;IAchB;;;;OAIG;IACG,IAAI,CAAC,IAAI,EAAE,UAAU;IAQ3B,IAAI,IAAI,WAEP;CACJ"}
|
|
@@ -28,10 +28,11 @@ function initializeBleno(server, hciId) {
|
|
|
28
28
|
constructor() {
|
|
29
29
|
super({
|
|
30
30
|
uuid: BLE_MATTER_C1_CHARACTERISTIC_UUID,
|
|
31
|
-
properties: ["write"]
|
|
31
|
+
properties: ["write"],
|
|
32
|
+
onWriteRequest: (_handle, data, offset, withoutResponse, callback) => this.#onWriteRequest(data, offset, withoutResponse, callback)
|
|
32
33
|
});
|
|
33
34
|
}
|
|
34
|
-
onWriteRequest(data, offset, withoutResponse, callback) {
|
|
35
|
+
#onWriteRequest(data, offset, withoutResponse, callback) {
|
|
35
36
|
logger.debug(`C1 write request: ${data.toString("hex")} ${offset} ${withoutResponse}`);
|
|
36
37
|
try {
|
|
37
38
|
server.handleC1WriteRequest(data, offset, withoutResponse);
|
|
@@ -46,18 +47,21 @@ function initializeBleno(server, hciId) {
|
|
|
46
47
|
constructor() {
|
|
47
48
|
super({
|
|
48
49
|
uuid: BLE_MATTER_C2_CHARACTERISTIC_UUID,
|
|
49
|
-
properties: ["indicate"]
|
|
50
|
+
properties: ["indicate"],
|
|
51
|
+
onSubscribe: (_handle, maxValueSize, updateValueCallback) => this.#onSubscribe(maxValueSize, updateValueCallback),
|
|
52
|
+
onUnsubscribe: () => this.#onUnsubscribe(),
|
|
53
|
+
onIndicate: () => this.#onIndicate()
|
|
50
54
|
});
|
|
51
55
|
}
|
|
52
|
-
onSubscribe(maxValueSize, updateValueCallback) {
|
|
56
|
+
#onSubscribe(maxValueSize, updateValueCallback) {
|
|
53
57
|
logger.debug(`C2 subscribe ${maxValueSize}`);
|
|
54
58
|
server.handleC2SubscribeRequest(maxValueSize, updateValueCallback).catch((e) => logger.warn("Error happened in when handling C2 subscribe", e));
|
|
55
59
|
}
|
|
56
|
-
onUnsubscribe() {
|
|
60
|
+
#onUnsubscribe() {
|
|
57
61
|
logger.debug("C2 unsubscribe");
|
|
58
62
|
server.close().catch((e) => logger.warn("Error happened when closing server for C2 unsubscribe", e));
|
|
59
63
|
}
|
|
60
|
-
onIndicate() {
|
|
64
|
+
#onIndicate() {
|
|
61
65
|
logger.debug("C2 indicate");
|
|
62
66
|
server.handleC2Indicate();
|
|
63
67
|
}
|
|
@@ -66,10 +70,11 @@ function initializeBleno(server, hciId) {
|
|
|
66
70
|
constructor() {
|
|
67
71
|
super({
|
|
68
72
|
uuid: BLE_MATTER_C3_CHARACTERISTIC_UUID,
|
|
69
|
-
properties: ["read"]
|
|
73
|
+
properties: ["read"],
|
|
74
|
+
onReadRequest: (_handle, offset, callback) => this.#onReadRequest(offset, callback)
|
|
70
75
|
});
|
|
71
76
|
}
|
|
72
|
-
onReadRequest(offset, callback) {
|
|
77
|
+
#onReadRequest(offset, callback) {
|
|
73
78
|
try {
|
|
74
79
|
const data = server.handleC3ReadRequest(offset);
|
|
75
80
|
logger.debug(`C3 read request: ${data.toString("hex")} ${offset}`);
|
|
@@ -112,6 +117,8 @@ class BlenoBleServer extends BleChannel {
|
|
|
112
117
|
matterBleService;
|
|
113
118
|
constructor(options) {
|
|
114
119
|
super();
|
|
120
|
+
const { environment } = options ?? {};
|
|
121
|
+
environment?.runtime.add(this);
|
|
115
122
|
this.matterBleService = initializeBleno(this, options?.hciId);
|
|
116
123
|
Bleno.on("stateChange", (state) => {
|
|
117
124
|
if (state === this.state) return;
|
|
@@ -131,6 +138,7 @@ class BlenoBleServer extends BleChannel {
|
|
|
131
138
|
});
|
|
132
139
|
Bleno.on("disconnect", (clientAddress) => {
|
|
133
140
|
logger.debug(`disconnect, client: ${clientAddress}`);
|
|
141
|
+
this.isAdvertising = false;
|
|
134
142
|
if (this.btpSession !== void 0) {
|
|
135
143
|
this.btpSession.close().then(() => {
|
|
136
144
|
this.btpSession = void 0;
|
|
@@ -302,6 +310,7 @@ class BlenoBleServer extends BleChannel {
|
|
|
302
310
|
this.onMatterMessageListener = void 0;
|
|
303
311
|
}
|
|
304
312
|
async disconnect() {
|
|
313
|
+
this.isAdvertising = false;
|
|
305
314
|
Bleno.disconnect();
|
|
306
315
|
}
|
|
307
316
|
// Channel<Uint8Array>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/BlenoBleServer.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAkB,eAAe,QAAQ,MAAM,qBAAqB;AACpE,SAAS,WAAAA,gBAAe;AACxB;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["require"]
|
|
6
6
|
}
|
|
@@ -12,6 +12,7 @@ export declare class NobleBleClient {
|
|
|
12
12
|
private nobleState;
|
|
13
13
|
private deviceDiscoveredCallback;
|
|
14
14
|
constructor(options?: BleOptions);
|
|
15
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
15
16
|
setDiscoveryCallback(callback: (peripheral: Peripheral, manufacturerData: Uint8Array) => void): void;
|
|
16
17
|
startScanning(): Promise<void>;
|
|
17
18
|
stopScanning(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NobleBleClient.d.ts","sourceRoot":"","sources":["../../src/NobleBleClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkB5C,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAGlC;IACJ,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,wBAAwB,CAA+E;gBAEnG,OAAO,CAAC,EAAE,UAAU;
|
|
1
|
+
{"version":3,"file":"NobleBleClient.d.ts","sourceRoot":"","sources":["../../src/NobleBleClient.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAkB5C,qBAAa,cAAc;IACvB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAGlC;IACJ,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,wBAAwB,CAA+E;gBAEnG,OAAO,CAAC,EAAE,UAAU;IAqChC,CAAC,MAAM,CAAC,YAAY,CAAC;IAId,oBAAoB,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,KAAK,IAAI;IAOvF,aAAa;IAgBb,YAAY;IAQzB,OAAO,CAAC,sBAAsB;CAqCjC"}
|
|
@@ -24,6 +24,8 @@ class NobleBleClient {
|
|
|
24
24
|
nobleState = "unknown";
|
|
25
25
|
deviceDiscoveredCallback;
|
|
26
26
|
constructor(options) {
|
|
27
|
+
const { environment } = options ?? {};
|
|
28
|
+
environment?.runtime.add(this);
|
|
27
29
|
loadNoble(options?.hciId);
|
|
28
30
|
noble.on("stateChange", (state) => {
|
|
29
31
|
this.nobleState = state;
|
|
@@ -45,6 +47,9 @@ class NobleBleClient {
|
|
|
45
47
|
});
|
|
46
48
|
noble.on("scanStop", () => this.isScanning = false);
|
|
47
49
|
}
|
|
50
|
+
[Symbol.asyncDispose]() {
|
|
51
|
+
return this.stopScanning();
|
|
52
|
+
}
|
|
48
53
|
setDiscoveryCallback(callback) {
|
|
49
54
|
this.deviceDiscoveredCallback = callback;
|
|
50
55
|
for (const { peripheral, matterServiceData } of this.discoveredPeripherals.values()) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/NobleBleClient.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,YAAY,cAAc;AACnC,SAAS,WAAAA,gBAAe;AACxB,SAAS,+BAA+B;AAIxC,MAAM,SAAS,OAAO,IAAI,gBAAgB;AAC1C,IAAI;AAEJ,SAAS,UAAU,OAAgB;AAE/B,MAAI,UAAU,QAAW;AACrB,YAAQ,IAAI,sBAAsB,MAAM,SAAS;AAAA,EACrD;AACA,UAAQA,SAAQ,mBAAmB;AACnC,MAAI,OAAO,MAAM,OAAO,YAAY;AAGhC,YAAS,MAAc,EAAE,UAAU,MAAM,CAAC;AAAA,EAC9C;AACJ;AAEO,MAAM,eAAe;AAAA,EACP,wBAAwB,oBAAI,IAG3C;AAAA,EACM,aAAa;AAAA,EACb,aAAa;AAAA,EACb,aAAa;AAAA,EACb;AAAA,EAER,YAAY,SAAsB;AAC9B,cAAU,SAAS,KAAK;AAUxB,UAAM,GAAG,eAAe,WAAS;AAC7B,WAAK,aAAa;AAClB,aAAO,MAAM,0BAA0B,KAAK,EAAE;AAC9C,UAAI,UAAU,aAAa;AACvB,YAAI,KAAK,YAAY;AACjB,eAAK,KAAK,cAAc;AAAA,QAC5B;AAAA,MACJ,OAAO;AACH,aAAK,KAAK,aAAa;AAAA,MAC3B;AAAA,IACJ,CAAC;AACD,UAAM,GAAG,YAAY,gBAAc,KAAK,uBAAuB,UAAU,CAAC;AAC1E,UAAM,GAAG,aAAa,MAAM;AACxB,UAAI,CAAC,KAAK,YAAY;AAGlB;AAAA,MACJ;AACA,WAAK,aAAa;AAAA,IACtB,CAAC;AACD,UAAM,GAAG,YAAY,MAAO,KAAK,aAAa,KAAM;AAAA,EACxD;AAAA,EAEO,qBAAqB,UAA0E;AAClG,SAAK,2BAA2B;AAChC,eAAW,EAAE,YAAY,kBAAkB,KAAK,KAAK,sBAAsB,OAAO,GAAG;AACjF,WAAK,yBAAyB,YAAY,iBAAiB;AAAA,IAC/D;AAAA,EACJ;AAAA,EAEA,MAAa,gBAAgB;AACzB,QAAI,KAAK,YAAY;AACjB;AAAA,IACJ;AAEA,SAAK,aAAa;AAClB,QAAI,KAAK,eAAe,aAAa;AACjC,aAAO,MAAM,4CAA4C;AAGzD,YAAM,MAAM,mBAAmB,QAAQ,aAAa,UAAU,CAAC,uBAAuB,IAAI,QAAW,IAAI;AAAA,IAC7G,OAAO;AACH,aAAO,MAAM,gEAAgE;AAAA,IACjF;AAAA,EACJ;AAAA,EAEA,MAAa,eAAe;AACxB,SAAK,aAAa;AAClB,QAAI,KAAK,YAAY;AACjB,aAAO,MAAM,2CAA2C;AACxD,YAAM,MAAM,kBAAkB;AAAA,IAClC;AAAA,EACJ;AAAA,EAEQ,uBAAuB,YAAwB;AAOnD,QACI,QAAQ,aAAa,WACrB,CAAC,WAAW,cAAc,YAAY,KAAK,CAAC,EAAE,KAAK,MAAM,SAAS,uBAAuB,GAC3F;AACE;AAAA,IACJ;AAEA,UAAM,UAAU,WAAW;AAC3B,WAAO;AAAA,MACH,oBAAoB,OAAO,KAAK,WAAW,cAAc,SAAS,MAAM,WAAW;AAAA,QAC/E,WAAW;AAAA,MACf,CAAC;AAAA,IACL;AAEA,QAAI,CAAC,WAAW,aAAa;AACzB,aAAO,KAAK,cAAc,OAAO,kCAAkC;AACnE;AAAA,IACJ;AACA,UAAM,oBAAoB,WAAW,cAAc,YAAY;AAAA,MAC3D,CAAC,EAAE,KAAK,MAAM,SAAS;AAAA,IAC3B;AACA,QAAI,sBAAsB,UAAa,kBAAkB,KAAK,WAAW,GAAG;AACxE,aAAO,KAAK,cAAc,OAAO,iDAAiD;AAClF;AAAA,IACJ;AAEA,SAAK,sBAAsB,IAAI,SAAS,EAAE,YAAY,mBAAmB,kBAAkB,KAAK,CAAC;AAEjG,SAAK,2BAA2B,YAAY,kBAAkB,IAAI;AAAA,EACtE;AACJ;",
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["require"]
|
|
6
6
|
}
|
package/dist/esm/NodeJsBle.d.ts
CHANGED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
* Copyright 2022-2025 Matter.js Authors
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { NetInterface, TransportInterface } from "@matter/general";
|
|
6
|
+
import { Environment, NetInterface, TransportInterface } from "@matter/general";
|
|
7
7
|
import { Ble, InstanceBroadcaster, Scanner } from "@matter/protocol";
|
|
8
8
|
export type BleOptions = {
|
|
9
9
|
hciId?: number;
|
|
10
|
+
environment?: Environment;
|
|
10
11
|
};
|
|
11
12
|
export declare class NodeJsBle extends Ble {
|
|
12
13
|
#private;
|
|
13
|
-
|
|
14
|
-
constructor(options?: BleOptions | undefined);
|
|
14
|
+
constructor(options?: BleOptions);
|
|
15
15
|
getBlePeripheralInterface(): TransportInterface;
|
|
16
16
|
getBleCentralInterface(): NetInterface;
|
|
17
17
|
getBleBroadcaster(additionalAdvertisementData?: Uint8Array): InstanceBroadcaster;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeJsBle.d.ts","sourceRoot":"","sources":["../../src/NodeJsBle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"NodeJsBle.d.ts","sourceRoot":"","sources":["../../src/NodeJsBle.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,EAAE,GAAG,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAQrE,MAAM,MAAM,UAAU,GAAG;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,WAAW,CAAC;CAC7B,CAAC;AAEF,qBAAa,SAAU,SAAQ,GAAG;;gBASlB,OAAO,CAAC,EAAE,UAAU;IAmBhC,yBAAyB,IAAI,kBAAkB;IAO/C,sBAAsB,IAAI,YAAY;IAOtC,iBAAiB,CAAC,2BAA2B,CAAC,EAAE,UAAU,GAAG,mBAAmB;IAOhF,aAAa,IAAI,OAAO;CAM3B"}
|
package/dist/esm/NodeJsBle.js
CHANGED
|
@@ -11,25 +11,26 @@ import { BlenoBleServer } from "./BlenoBleServer.js";
|
|
|
11
11
|
import { NobleBleCentralInterface } from "./NobleBleChannel.js";
|
|
12
12
|
import { NobleBleClient } from "./NobleBleClient.js";
|
|
13
13
|
class NodeJsBle extends Ble {
|
|
14
|
-
|
|
15
|
-
super();
|
|
16
|
-
this.options = options;
|
|
17
|
-
}
|
|
14
|
+
#options;
|
|
18
15
|
#blePeripheralInstance;
|
|
19
16
|
#bleCentralInstance;
|
|
20
17
|
#bleScanner;
|
|
21
18
|
#bleBroadcaster;
|
|
22
19
|
#bleCentralInterface;
|
|
23
20
|
#blePeripheralInterface;
|
|
21
|
+
constructor(options) {
|
|
22
|
+
super();
|
|
23
|
+
this.#options = options;
|
|
24
|
+
}
|
|
24
25
|
get #blePeripheralServer() {
|
|
25
26
|
if (this.#blePeripheralInstance === void 0) {
|
|
26
|
-
this.#blePeripheralInstance = new BlenoBleServer(this
|
|
27
|
+
this.#blePeripheralInstance = new BlenoBleServer(this.#options);
|
|
27
28
|
}
|
|
28
29
|
return this.#blePeripheralInstance;
|
|
29
30
|
}
|
|
30
31
|
get #bleCentralClient() {
|
|
31
32
|
if (this.#bleCentralInstance === void 0) {
|
|
32
|
-
this.#bleCentralInstance = new NobleBleClient(this
|
|
33
|
+
this.#bleCentralInstance = new NobleBleClient(this.#options);
|
|
33
34
|
}
|
|
34
35
|
return this.#bleCentralInstance;
|
|
35
36
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/NodeJsBle.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,WAAyC;AAClD,SAAS,sBAAsB;AAC/B,SAAS,8BAA8B;AACvC,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,SAAS,gCAAgC;AACzC,SAAS,sBAAsB;
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,WAAyC;AAClD,SAAS,sBAAsB;AAC/B,SAAS,8BAA8B;AACvC,SAAS,kBAAkB;AAC3B,SAAS,sBAAsB;AAC/B,SAAS,gCAAgC;AACzC,SAAS,sBAAsB;AAOxB,MAAM,kBAAkB,IAAI;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,SAAsB;AAC9B,UAAM;AACN,SAAK,WAAW;AAAA,EACpB;AAAA,EAEA,IAAI,uBAAuB;AACvB,QAAI,KAAK,2BAA2B,QAAW;AAC3C,WAAK,yBAAyB,IAAI,eAAe,KAAK,QAAQ;AAAA,IAClE;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,oBAAoB;AACpB,QAAI,KAAK,wBAAwB,QAAW;AACxC,WAAK,sBAAsB,IAAI,eAAe,KAAK,QAAQ;AAAA,IAC/D;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,4BAAgD;AAC5C,QAAI,KAAK,4BAA4B,QAAW;AAC5C,WAAK,0BAA0B,IAAI,uBAAuB,KAAK,oBAAoB;AAAA,IACvF;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,yBAAuC;AACnC,QAAI,KAAK,yBAAyB,QAAW;AACzC,WAAK,uBAAuB,IAAI,yBAAyB,KAAK,cAAc,CAAe;AAAA,IAC/F;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,kBAAkB,6BAA+D;AAC7E,QAAI,KAAK,oBAAoB,QAAW;AACpC,WAAK,kBAAkB,IAAI,eAAe,KAAK,sBAAsB,2BAA2B;AAAA,IACpG;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,gBAAyB;AACrB,QAAI,KAAK,gBAAgB,QAAW;AAChC,WAAK,cAAc,IAAI,WAAW,KAAK,iBAAiB;AAAA,IAC5D;AACA,WAAO,KAAK;AAAA,EAChB;AACJ;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter/nodejs-ble",
|
|
3
|
-
"version": "0.13.0-alpha.0-
|
|
3
|
+
"version": "0.13.0-alpha.0-20250418-8cfc0b832",
|
|
4
4
|
"description": "Matter BLE support for node.js",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"iot",
|
|
@@ -28,15 +28,15 @@
|
|
|
28
28
|
"build-clean": "matter-build --clean"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@matter/general": "0.13.0-alpha.0-
|
|
32
|
-
"@matter/types": "0.13.0-alpha.0-
|
|
33
|
-
"@matter/protocol": "0.13.0-alpha.0-
|
|
31
|
+
"@matter/general": "0.13.0-alpha.0-20250418-8cfc0b832",
|
|
32
|
+
"@matter/types": "0.13.0-alpha.0-20250418-8cfc0b832",
|
|
33
|
+
"@matter/protocol": "0.13.0-alpha.0-20250418-8cfc0b832"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@matter/tools": "0.13.0-alpha.0-
|
|
36
|
+
"@matter/tools": "0.13.0-alpha.0-20250418-8cfc0b832"
|
|
37
37
|
},
|
|
38
38
|
"optionalDependencies": {
|
|
39
|
-
"@stoprocent/bleno": "^0.
|
|
39
|
+
"@stoprocent/bleno": "^0.10.2",
|
|
40
40
|
"@stoprocent/noble": "^1.19.1"
|
|
41
41
|
},
|
|
42
42
|
"engines": {
|
package/src/BlenoBleServer.ts
CHANGED
|
@@ -18,10 +18,11 @@ import {
|
|
|
18
18
|
BtpSessionHandler,
|
|
19
19
|
ChannelNotConnectedError,
|
|
20
20
|
} from "@matter/protocol";
|
|
21
|
+
import type { Bleno as BlenoType } from "@stoprocent/bleno";
|
|
21
22
|
import { BleOptions } from "./NodeJsBle.js";
|
|
22
23
|
|
|
23
24
|
const logger = Logger.get("BlenoBleServer");
|
|
24
|
-
let Bleno:
|
|
25
|
+
let Bleno: BlenoType;
|
|
25
26
|
|
|
26
27
|
function initializeBleno(server: BlenoBleServer, hciId?: number) {
|
|
27
28
|
// load Bleno driver with the correct device selected
|
|
@@ -35,11 +36,13 @@ function initializeBleno(server: BlenoBleServer, hciId?: number) {
|
|
|
35
36
|
super({
|
|
36
37
|
uuid: BLE_MATTER_C1_CHARACTERISTIC_UUID,
|
|
37
38
|
properties: ["write"],
|
|
39
|
+
onWriteRequest: (_handle, data, offset, withoutResponse, callback) =>
|
|
40
|
+
this.#onWriteRequest(data, offset, withoutResponse, callback),
|
|
38
41
|
});
|
|
39
42
|
}
|
|
40
43
|
|
|
41
|
-
|
|
42
|
-
data: Buffer
|
|
44
|
+
#onWriteRequest(
|
|
45
|
+
data: Buffer<ArrayBufferLike>,
|
|
43
46
|
offset: number,
|
|
44
47
|
withoutResponse: boolean,
|
|
45
48
|
callback: (result: number) => void,
|
|
@@ -61,10 +64,14 @@ function initializeBleno(server: BlenoBleServer, hciId?: number) {
|
|
|
61
64
|
super({
|
|
62
65
|
uuid: BLE_MATTER_C2_CHARACTERISTIC_UUID,
|
|
63
66
|
properties: ["indicate"],
|
|
67
|
+
onSubscribe: (_handle, maxValueSize, updateValueCallback) =>
|
|
68
|
+
this.#onSubscribe(maxValueSize, updateValueCallback),
|
|
69
|
+
onUnsubscribe: () => this.#onUnsubscribe(),
|
|
70
|
+
onIndicate: () => this.#onIndicate(),
|
|
64
71
|
});
|
|
65
72
|
}
|
|
66
73
|
|
|
67
|
-
|
|
74
|
+
#onSubscribe(maxValueSize: number, updateValueCallback: (data: Buffer) => void) {
|
|
68
75
|
logger.debug(`C2 subscribe ${maxValueSize}`);
|
|
69
76
|
|
|
70
77
|
server
|
|
@@ -72,12 +79,12 @@ function initializeBleno(server: BlenoBleServer, hciId?: number) {
|
|
|
72
79
|
.catch(e => logger.warn("Error happened in when handling C2 subscribe", e));
|
|
73
80
|
}
|
|
74
81
|
|
|
75
|
-
|
|
82
|
+
#onUnsubscribe() {
|
|
76
83
|
logger.debug("C2 unsubscribe");
|
|
77
84
|
server.close().catch(e => logger.warn("Error happened when closing server for C2 unsubscribe", e));
|
|
78
85
|
}
|
|
79
86
|
|
|
80
|
-
|
|
87
|
+
#onIndicate() {
|
|
81
88
|
logger.debug("C2 indicate");
|
|
82
89
|
server.handleC2Indicate();
|
|
83
90
|
}
|
|
@@ -88,10 +95,11 @@ function initializeBleno(server: BlenoBleServer, hciId?: number) {
|
|
|
88
95
|
super({
|
|
89
96
|
uuid: BLE_MATTER_C3_CHARACTERISTIC_UUID,
|
|
90
97
|
properties: ["read"],
|
|
98
|
+
onReadRequest: (_handle, offset, callback) => this.#onReadRequest(offset, callback),
|
|
91
99
|
});
|
|
92
100
|
}
|
|
93
101
|
|
|
94
|
-
|
|
102
|
+
#onReadRequest(offset: number, callback: (result: number, data?: Buffer) => void) {
|
|
95
103
|
try {
|
|
96
104
|
const data = server.handleC3ReadRequest(offset);
|
|
97
105
|
logger.debug(`C3 read request: ${data.toString("hex")} ${offset}`);
|
|
@@ -146,6 +154,10 @@ export class BlenoBleServer extends BleChannel<Uint8Array> {
|
|
|
146
154
|
|
|
147
155
|
constructor(options?: BleOptions) {
|
|
148
156
|
super();
|
|
157
|
+
|
|
158
|
+
const { environment } = options ?? {};
|
|
159
|
+
environment?.runtime.add(this);
|
|
160
|
+
|
|
149
161
|
this.matterBleService = initializeBleno(this, options?.hciId);
|
|
150
162
|
|
|
151
163
|
// Write Bleno into this class
|
|
@@ -170,6 +182,7 @@ export class BlenoBleServer extends BleChannel<Uint8Array> {
|
|
|
170
182
|
|
|
171
183
|
Bleno.on("disconnect", clientAddress => {
|
|
172
184
|
logger.debug(`disconnect, client: ${clientAddress}`);
|
|
185
|
+
this.isAdvertising = false;
|
|
173
186
|
if (this.btpSession !== undefined) {
|
|
174
187
|
this.btpSession
|
|
175
188
|
.close()
|
|
@@ -218,7 +231,7 @@ export class BlenoBleServer extends BleChannel<Uint8Array> {
|
|
|
218
231
|
* @param offset
|
|
219
232
|
* @param withoutResponse
|
|
220
233
|
*/
|
|
221
|
-
handleC1WriteRequest(data: Buffer
|
|
234
|
+
handleC1WriteRequest(data: Buffer<ArrayBufferLike>, offset: number, withoutResponse: boolean) {
|
|
222
235
|
if (offset !== 0 || withoutResponse) {
|
|
223
236
|
throw new BleError(`Offset ${offset} or withoutResponse ${withoutResponse} not supported`);
|
|
224
237
|
}
|
|
@@ -374,6 +387,7 @@ export class BlenoBleServer extends BleChannel<Uint8Array> {
|
|
|
374
387
|
}
|
|
375
388
|
|
|
376
389
|
async disconnect() {
|
|
390
|
+
this.isAdvertising = false;
|
|
377
391
|
Bleno.disconnect();
|
|
378
392
|
/*
|
|
379
393
|
TODO: This is not working as expected, the disconnect event is not triggered, seems issue in Bleno
|
package/src/NobleBleClient.ts
CHANGED
|
@@ -37,6 +37,9 @@ export class NobleBleClient {
|
|
|
37
37
|
private deviceDiscoveredCallback: ((peripheral: Peripheral, manufacturerData: Uint8Array) => void) | undefined;
|
|
38
38
|
|
|
39
39
|
constructor(options?: BleOptions) {
|
|
40
|
+
const { environment } = options ?? {};
|
|
41
|
+
environment?.runtime.add(this);
|
|
42
|
+
|
|
40
43
|
loadNoble(options?.hciId);
|
|
41
44
|
/*try {
|
|
42
45
|
noble.reset();
|
|
@@ -70,6 +73,10 @@ export class NobleBleClient {
|
|
|
70
73
|
noble.on("scanStop", () => (this.isScanning = false));
|
|
71
74
|
}
|
|
72
75
|
|
|
76
|
+
[Symbol.asyncDispose]() {
|
|
77
|
+
return this.stopScanning();
|
|
78
|
+
}
|
|
79
|
+
|
|
73
80
|
public setDiscoveryCallback(callback: (peripheral: Peripheral, manufacturerData: Uint8Array) => void) {
|
|
74
81
|
this.deviceDiscoveredCallback = callback;
|
|
75
82
|
for (const { peripheral, matterServiceData } of this.discoveredPeripherals.values()) {
|
package/src/NodeJsBle.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
import { NetInterface, TransportInterface } from "@matter/general";
|
|
7
|
+
import { Environment, NetInterface, TransportInterface } from "@matter/general";
|
|
8
8
|
import { Ble, InstanceBroadcaster, Scanner } from "@matter/protocol";
|
|
9
9
|
import { BleBroadcaster } from "./BleBroadcaster.js";
|
|
10
10
|
import { BlePeripheralInterface } from "./BlePeripheralInterface.js";
|
|
@@ -15,9 +15,11 @@ import { NobleBleClient } from "./NobleBleClient.js";
|
|
|
15
15
|
|
|
16
16
|
export type BleOptions = {
|
|
17
17
|
hciId?: number;
|
|
18
|
+
environment?: Environment;
|
|
18
19
|
};
|
|
19
20
|
|
|
20
21
|
export class NodeJsBle extends Ble {
|
|
22
|
+
#options?: BleOptions;
|
|
21
23
|
#blePeripheralInstance?: BlenoBleServer;
|
|
22
24
|
#bleCentralInstance?: NobleBleClient;
|
|
23
25
|
#bleScanner?: BleScanner;
|
|
@@ -25,20 +27,21 @@ export class NodeJsBle extends Ble {
|
|
|
25
27
|
#bleCentralInterface?: NobleBleCentralInterface;
|
|
26
28
|
#blePeripheralInterface?: BlePeripheralInterface;
|
|
27
29
|
|
|
28
|
-
constructor(
|
|
30
|
+
constructor(options?: BleOptions) {
|
|
29
31
|
super();
|
|
32
|
+
this.#options = options;
|
|
30
33
|
}
|
|
31
34
|
|
|
32
35
|
get #blePeripheralServer() {
|
|
33
36
|
if (this.#blePeripheralInstance === undefined) {
|
|
34
|
-
this.#blePeripheralInstance = new BlenoBleServer(this
|
|
37
|
+
this.#blePeripheralInstance = new BlenoBleServer(this.#options);
|
|
35
38
|
}
|
|
36
39
|
return this.#blePeripheralInstance;
|
|
37
40
|
}
|
|
38
41
|
|
|
39
42
|
get #bleCentralClient() {
|
|
40
43
|
if (this.#bleCentralInstance === undefined) {
|
|
41
|
-
this.#bleCentralInstance = new NobleBleClient(this
|
|
44
|
+
this.#bleCentralInstance = new NobleBleClient(this.#options);
|
|
42
45
|
}
|
|
43
46
|
return this.#bleCentralInstance;
|
|
44
47
|
}
|