@robotical/raftjs 2.1.0 → 2.1.3
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/devdocs/devbin-backwards-compatibility.md +105 -0
- package/devdocs/pseudocode-to-js-transpiler.md +563 -0
- package/dist/react-native/PseudocodeTranspiler.d.ts +6 -0
- package/dist/react-native/PseudocodeTranspiler.js +115 -0
- package/dist/react-native/PseudocodeTranspiler.js.map +1 -0
- package/dist/react-native/RaftAttributeHandler.d.ts +1 -1
- package/dist/react-native/RaftAttributeHandler.js +108 -32
- package/dist/react-native/RaftAttributeHandler.js.map +1 -1
- package/dist/react-native/RaftChannelBLE.web.d.ts +4 -0
- package/dist/react-native/RaftChannelBLE.web.js +59 -21
- package/dist/react-native/RaftChannelBLE.web.js.map +1 -1
- package/dist/react-native/RaftChannelSimulated.d.ts +1 -0
- package/dist/react-native/RaftChannelSimulated.js +9 -5
- package/dist/react-native/RaftChannelSimulated.js.map +1 -1
- package/dist/react-native/RaftChannelWebSocket.js +16 -1
- package/dist/react-native/RaftChannelWebSocket.js.map +1 -1
- package/dist/react-native/RaftConnector.d.ts +29 -1
- package/dist/react-native/RaftConnector.js +177 -11
- package/dist/react-native/RaftConnector.js.map +1 -1
- package/dist/react-native/RaftCustomAttrHandler.d.ts +2 -2
- package/dist/react-native/RaftCustomAttrHandler.js +32 -44
- package/dist/react-native/RaftCustomAttrHandler.js.map +1 -1
- package/dist/react-native/RaftDeviceInfo.d.ts +18 -0
- package/dist/react-native/RaftDeviceInfo.js +8 -0
- package/dist/react-native/RaftDeviceInfo.js.map +1 -1
- package/dist/react-native/RaftDeviceManager.d.ts +30 -3
- package/dist/react-native/RaftDeviceManager.js +618 -107
- package/dist/react-native/RaftDeviceManager.js.map +1 -1
- package/dist/react-native/RaftDeviceMgrIF.d.ts +11 -2
- package/dist/react-native/RaftDeviceStates.d.ts +27 -3
- package/dist/react-native/RaftDeviceStates.js +31 -6
- package/dist/react-native/RaftDeviceStates.js.map +1 -1
- package/dist/react-native/RaftFileHandler.d.ts +1 -1
- package/dist/react-native/RaftFileHandler.js +101 -34
- package/dist/react-native/RaftFileHandler.js.map +1 -1
- package/dist/react-native/RaftMicroPythonConsoleClient.d.ts +38 -0
- package/dist/react-native/RaftMicroPythonConsoleClient.js +45 -0
- package/dist/react-native/RaftMicroPythonConsoleClient.js.map +1 -0
- package/dist/react-native/RaftMsgHandler.d.ts +1 -1
- package/dist/react-native/RaftMsgHandler.js +6 -3
- package/dist/react-native/RaftMsgHandler.js.map +1 -1
- package/dist/react-native/RaftPublish.d.ts +2 -0
- package/dist/react-native/RaftPublish.js +81 -0
- package/dist/react-native/RaftPublish.js.map +1 -0
- package/dist/react-native/RaftStreamHandler.d.ts +11 -0
- package/dist/react-native/RaftStreamHandler.js +66 -0
- package/dist/react-native/RaftStreamHandler.js.map +1 -1
- package/dist/react-native/RaftStruct.d.ts +2 -2
- package/dist/react-native/RaftStruct.js +97 -26
- package/dist/react-native/RaftStruct.js.map +1 -1
- package/dist/react-native/RaftSystemType.d.ts +1 -0
- package/dist/react-native/RaftSystemUtils.d.ts +17 -1
- package/dist/react-native/RaftSystemUtils.js +51 -0
- package/dist/react-native/RaftSystemUtils.js.map +1 -1
- package/dist/react-native/RaftTimezone.d.ts +16 -0
- package/dist/react-native/RaftTimezone.js +153 -0
- package/dist/react-native/RaftTimezone.js.map +1 -0
- package/dist/react-native/RaftTypes.d.ts +46 -1
- package/dist/react-native/RaftTypes.js.map +1 -1
- package/dist/react-native/RaftUpdateManager.js +1 -1
- package/dist/react-native/RaftUpdateManager.js.map +1 -1
- package/dist/react-native/main.d.ts +3 -0
- package/dist/react-native/main.js +8 -1
- package/dist/react-native/main.js.map +1 -1
- package/dist/web/PseudocodeTranspiler.d.ts +6 -0
- package/dist/web/PseudocodeTranspiler.js +115 -0
- package/dist/web/PseudocodeTranspiler.js.map +1 -0
- package/dist/web/RaftAttributeHandler.d.ts +1 -1
- package/dist/web/RaftAttributeHandler.js +108 -32
- package/dist/web/RaftAttributeHandler.js.map +1 -1
- package/dist/web/RaftChannelBLE.web.d.ts +4 -0
- package/dist/web/RaftChannelBLE.web.js +59 -21
- package/dist/web/RaftChannelBLE.web.js.map +1 -1
- package/dist/web/RaftChannelSimulated.d.ts +1 -0
- package/dist/web/RaftChannelSimulated.js +9 -5
- package/dist/web/RaftChannelSimulated.js.map +1 -1
- package/dist/web/RaftChannelWebSocket.js +16 -1
- package/dist/web/RaftChannelWebSocket.js.map +1 -1
- package/dist/web/RaftConnector.d.ts +29 -1
- package/dist/web/RaftConnector.js +177 -11
- package/dist/web/RaftConnector.js.map +1 -1
- package/dist/web/RaftCustomAttrHandler.d.ts +2 -2
- package/dist/web/RaftCustomAttrHandler.js +32 -44
- package/dist/web/RaftCustomAttrHandler.js.map +1 -1
- package/dist/web/RaftDeviceInfo.d.ts +18 -0
- package/dist/web/RaftDeviceInfo.js +8 -0
- package/dist/web/RaftDeviceInfo.js.map +1 -1
- package/dist/web/RaftDeviceManager.d.ts +30 -3
- package/dist/web/RaftDeviceManager.js +618 -107
- package/dist/web/RaftDeviceManager.js.map +1 -1
- package/dist/web/RaftDeviceMgrIF.d.ts +11 -2
- package/dist/web/RaftDeviceStates.d.ts +27 -3
- package/dist/web/RaftDeviceStates.js +31 -6
- package/dist/web/RaftDeviceStates.js.map +1 -1
- package/dist/web/RaftFileHandler.d.ts +1 -1
- package/dist/web/RaftFileHandler.js +101 -34
- package/dist/web/RaftFileHandler.js.map +1 -1
- package/dist/web/RaftMicroPythonConsoleClient.d.ts +38 -0
- package/dist/web/RaftMicroPythonConsoleClient.js +45 -0
- package/dist/web/RaftMicroPythonConsoleClient.js.map +1 -0
- package/dist/web/RaftMsgHandler.d.ts +1 -1
- package/dist/web/RaftMsgHandler.js +6 -3
- package/dist/web/RaftMsgHandler.js.map +1 -1
- package/dist/web/RaftPublish.d.ts +2 -0
- package/dist/web/RaftPublish.js +81 -0
- package/dist/web/RaftPublish.js.map +1 -0
- package/dist/web/RaftStreamHandler.d.ts +11 -0
- package/dist/web/RaftStreamHandler.js +66 -0
- package/dist/web/RaftStreamHandler.js.map +1 -1
- package/dist/web/RaftStruct.d.ts +2 -2
- package/dist/web/RaftStruct.js +97 -26
- package/dist/web/RaftStruct.js.map +1 -1
- package/dist/web/RaftSystemType.d.ts +1 -0
- package/dist/web/RaftSystemUtils.d.ts +17 -1
- package/dist/web/RaftSystemUtils.js +51 -0
- package/dist/web/RaftSystemUtils.js.map +1 -1
- package/dist/web/RaftTimezone.d.ts +16 -0
- package/dist/web/RaftTimezone.js +153 -0
- package/dist/web/RaftTimezone.js.map +1 -0
- package/dist/web/RaftTypes.d.ts +46 -1
- package/dist/web/RaftTypes.js.map +1 -1
- package/dist/web/RaftUpdateManager.js +1 -1
- package/dist/web/RaftUpdateManager.js.map +1 -1
- package/dist/web/main.d.ts +3 -0
- package/dist/web/main.js +8 -1
- package/dist/web/main.js.map +1 -1
- package/examples/dashboard/package.json +2 -2
- package/examples/dashboard/src/DeviceActionsForm.tsx +177 -17
- package/examples/dashboard/src/DeviceLineChart.tsx +16 -3
- package/examples/dashboard/src/DevicePanel.tsx +92 -11
- package/examples/dashboard/src/DeviceSelectDialog.tsx +224 -0
- package/examples/dashboard/src/DeviceStatsPanel.tsx +76 -0
- package/examples/dashboard/src/DevicesPanel.tsx +11 -0
- package/examples/dashboard/src/LogConfigPanel.tsx +357 -0
- package/examples/dashboard/src/LogFilesPanel.tsx +200 -0
- package/examples/dashboard/src/LoggingPanel.tsx +264 -0
- package/examples/dashboard/src/Main.tsx +12 -2
- package/examples/dashboard/src/SettingsScreen.tsx +9 -4
- package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +10 -3
- package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +37 -3
- package/examples/dashboard/src/SystemTypeGeneric/StateInfoGeneric.ts +10 -2
- package/examples/dashboard/src/SystemTypeGeneric/SystemTypeGeneric.ts +41 -7
- package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +34 -3
- package/examples/dashboard/src/styles.css +766 -1
- package/notes/web-ble-reconnect-retry.md +69 -0
- package/package.json +10 -7
- package/src/PseudocodeTranspiler.test.ts +372 -0
- package/src/PseudocodeTranspiler.ts +127 -0
- package/src/RaftAttributeHandler.ts +152 -76
- package/src/RaftChannelBLE.web.ts +62 -20
- package/src/RaftChannelSimulated.ts +10 -5
- package/src/RaftChannelWebSocket.ts +16 -2
- package/src/RaftConnector.ts +204 -17
- package/src/RaftCustomAttrHandler.ts +35 -45
- package/src/RaftDeviceInfo.ts +27 -0
- package/src/RaftDeviceManager.test.ts +164 -0
- package/src/RaftDeviceManager.ts +705 -127
- package/src/RaftDeviceMgrIF.ts +13 -2
- package/src/RaftDeviceStates.ts +49 -8
- package/src/RaftFileHandler.ts +112 -39
- package/src/RaftMicroPythonConsoleClient.ts +78 -0
- package/src/RaftMsgHandler.ts +8 -4
- package/src/RaftPublish.ts +92 -0
- package/src/RaftStreamHandler.ts +84 -1
- package/src/RaftStruct.test.ts +229 -0
- package/src/RaftStruct.ts +101 -37
- package/src/RaftSystemType.ts +1 -0
- package/src/RaftSystemUtils.ts +59 -0
- package/src/RaftTimezone.ts +151 -0
- package/src/RaftTypes.ts +57 -1
- package/src/RaftUpdateManager.ts +1 -1
- package/src/main.ts +3 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// PseudocodeTranspiler
|
|
5
|
+
// Transpiles Raft device pseudocode (from devInfoJson resp.c.c) to JavaScript function bodies
|
|
6
|
+
//
|
|
7
|
+
// Rob Dobson (C) 2024
|
|
8
|
+
//
|
|
9
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.tokenize = tokenize;
|
|
12
|
+
exports.transpilePseudocodeToJs = transpilePseudocodeToJs;
|
|
13
|
+
const TOKEN_SPEC = [
|
|
14
|
+
['FLOAT_KW', /float\b/],
|
|
15
|
+
['INT_KW', /int\b/],
|
|
16
|
+
['RETURN', /return\b/],
|
|
17
|
+
['WHILE', /while\b/],
|
|
18
|
+
['NEXT', /next\b/],
|
|
19
|
+
['HEX_NUM', /0x[0-9A-Fa-f]+/],
|
|
20
|
+
['NUM_FLOAT', /\d+\.\d*/],
|
|
21
|
+
['NUM_INT', /\d+/],
|
|
22
|
+
['ID', /[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*/],
|
|
23
|
+
['LSHIFT', /<</],
|
|
24
|
+
['RSHIFT', />>/],
|
|
25
|
+
['LOGICAL_AND', /&&/],
|
|
26
|
+
['LOGICAL_OR', /\|\|/],
|
|
27
|
+
['REL_OP', /==|!=|<=|>=|<|>/],
|
|
28
|
+
['INC_OP', /\+\+/],
|
|
29
|
+
['DEC_OP', /--/],
|
|
30
|
+
['ASSIGN', /=/],
|
|
31
|
+
['ADD_OP', /\+/],
|
|
32
|
+
['SUB_OP', /-/],
|
|
33
|
+
['MUL_OP', /\*/],
|
|
34
|
+
['DIV_OP', /\//],
|
|
35
|
+
['MOD_OP', /%/],
|
|
36
|
+
['BITWISE_AND', /&/],
|
|
37
|
+
['BITWISE_OR', /\|/],
|
|
38
|
+
['BITWISE_XOR', /\^/],
|
|
39
|
+
['BITWISE_NOT', /~/],
|
|
40
|
+
['LOGICAL_NOT', /!/],
|
|
41
|
+
['SEMI', /;/],
|
|
42
|
+
['COMMA', /,/],
|
|
43
|
+
['LPAREN', /\(/],
|
|
44
|
+
['RPAREN', /\)/],
|
|
45
|
+
['LBRACE', /\{/],
|
|
46
|
+
['RBRACE', /\}/],
|
|
47
|
+
['LBRACK', /\[/],
|
|
48
|
+
['RBRACK', /\]/],
|
|
49
|
+
['WS', /[ \t\n]+/],
|
|
50
|
+
];
|
|
51
|
+
// Build the combined regex once at module load
|
|
52
|
+
const COMBINED_RE = new RegExp(TOKEN_SPEC.map(([name, re]) => `(?<${name}>${re.source})`).join('|'), 'g');
|
|
53
|
+
function tokenize(code) {
|
|
54
|
+
// Reset lastIndex since we reuse the global regex
|
|
55
|
+
COMBINED_RE.lastIndex = 0;
|
|
56
|
+
const tokens = [];
|
|
57
|
+
let match;
|
|
58
|
+
while ((match = COMBINED_RE.exec(code)) !== null) {
|
|
59
|
+
for (const [name] of TOKEN_SPEC) {
|
|
60
|
+
if (match.groups[name] !== undefined) {
|
|
61
|
+
if (name !== 'WS') {
|
|
62
|
+
tokens.push({ type: name, value: match[0] });
|
|
63
|
+
}
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return tokens;
|
|
69
|
+
}
|
|
70
|
+
const PREAMBLE = 'const out = new Proxy({}, { set(_, p, v) { if (attrValues[p]) attrValues[p].push(v); return true; } });\n' +
|
|
71
|
+
'function toInt16(lo, hi) { const u = (hi << 8) | lo; return u & 0x8000 ? u - 0x10000 : u; }\n' +
|
|
72
|
+
'function toInt32(b0, b1, b2, b3) { return (b3 << 24) | (b2 << 16) | (b1 << 8) | b0; }\n';
|
|
73
|
+
function transpilePseudocodeToJs(pseudocode) {
|
|
74
|
+
const tokens = tokenize(pseudocode);
|
|
75
|
+
let js = PREAMBLE;
|
|
76
|
+
// Track int declarations so we can wrap the init expression in Math.trunc()
|
|
77
|
+
// to emulate C integer division semantics
|
|
78
|
+
let afterIntKw = false;
|
|
79
|
+
let wrappedInTrunc = false;
|
|
80
|
+
for (const token of tokens) {
|
|
81
|
+
switch (token.type) {
|
|
82
|
+
case 'INT_KW':
|
|
83
|
+
js += 'let ';
|
|
84
|
+
afterIntKw = true;
|
|
85
|
+
break;
|
|
86
|
+
case 'FLOAT_KW':
|
|
87
|
+
js += 'let ';
|
|
88
|
+
afterIntKw = false;
|
|
89
|
+
break;
|
|
90
|
+
case 'ASSIGN':
|
|
91
|
+
js += '=';
|
|
92
|
+
if (afterIntKw) {
|
|
93
|
+
js += 'Math.trunc(';
|
|
94
|
+
wrappedInTrunc = true;
|
|
95
|
+
}
|
|
96
|
+
break;
|
|
97
|
+
case 'SEMI':
|
|
98
|
+
if (wrappedInTrunc) {
|
|
99
|
+
js += ')';
|
|
100
|
+
wrappedInTrunc = false;
|
|
101
|
+
}
|
|
102
|
+
js += ';';
|
|
103
|
+
afterIntKw = false;
|
|
104
|
+
break;
|
|
105
|
+
case 'NEXT':
|
|
106
|
+
// no-op in JS — samples are pushed to arrays via the out Proxy
|
|
107
|
+
break;
|
|
108
|
+
default:
|
|
109
|
+
js += token.value;
|
|
110
|
+
break;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return js;
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=PseudocodeTranspiler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PseudocodeTranspiler.js","sourceRoot":"","sources":["../../src/PseudocodeTranspiler.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ export default class AttributeHandler {
|
|
|
5
5
|
private POLL_RESULT_TIMESTAMP_SIZE;
|
|
6
6
|
private POLL_RESULT_WRAP_VALUE;
|
|
7
7
|
private POLL_RESULT_RESOLUTION_US;
|
|
8
|
-
processMsgAttrGroup(msgBuffer: Uint8Array, msgBufIdx: number, deviceTimeline: DeviceTimeline, pollRespMetadata: DeviceTypePollRespMetadata, devAttrsState: DeviceAttributesState, maxDataPoints: number): number;
|
|
8
|
+
processMsgAttrGroup(msgBuffer: Uint8Array, msgBufIdx: number, deviceTimeline: DeviceTimeline, pollRespMetadata: DeviceTypePollRespMetadata, devAttrsState: DeviceAttributesState, maxDataPoints: number, msgEndIdx?: number): number;
|
|
9
9
|
private validateAttributes;
|
|
10
10
|
private processMsgAttribute;
|
|
11
11
|
private signExtend;
|
|
@@ -19,12 +19,13 @@ class AttributeHandler {
|
|
|
19
19
|
// Message timestamp size
|
|
20
20
|
this.POLL_RESULT_TIMESTAMP_SIZE = 2;
|
|
21
21
|
this.POLL_RESULT_WRAP_VALUE = this.POLL_RESULT_TIMESTAMP_SIZE === 2 ? 65536 : 4294967296;
|
|
22
|
-
this.POLL_RESULT_RESOLUTION_US =
|
|
22
|
+
this.POLL_RESULT_RESOLUTION_US = 100;
|
|
23
23
|
}
|
|
24
|
-
processMsgAttrGroup(msgBuffer, msgBufIdx, deviceTimeline, pollRespMetadata, devAttrsState, maxDataPoints) {
|
|
24
|
+
processMsgAttrGroup(msgBuffer, msgBufIdx, deviceTimeline, pollRespMetadata, devAttrsState, maxDataPoints, msgEndIdx = msgBuffer.length) {
|
|
25
25
|
// console.log(`processMsgAttrGroup msg ${msgHexStr} timestamp ${timestamp} origTimestamp ${origTimestamp} msgBufIdx ${msgBufIdx}`)
|
|
26
|
+
const boundedMsgEndIdx = Math.min(Math.max(msgEndIdx, msgBufIdx), msgBuffer.length);
|
|
26
27
|
// Extract msg timestamp
|
|
27
|
-
const { newBufIdx, timestampUs } = this.extractTimestampAndAdvanceIdx(msgBuffer, msgBufIdx, deviceTimeline);
|
|
28
|
+
const { newBufIdx, timestampUs } = this.extractTimestampAndAdvanceIdx(msgBuffer, msgBufIdx, deviceTimeline, boundedMsgEndIdx);
|
|
28
29
|
if (newBufIdx < 0)
|
|
29
30
|
return -1;
|
|
30
31
|
msgBufIdx = newBufIdx;
|
|
@@ -34,7 +35,32 @@ class AttributeHandler {
|
|
|
34
35
|
let newAttrValues = [];
|
|
35
36
|
if ("c" in pollRespMetadata) {
|
|
36
37
|
// Extract attribute values using custom handler
|
|
37
|
-
newAttrValues = this._customAttrHandler.handleAttr(pollRespMetadata, msgBuffer, msgBufIdx);
|
|
38
|
+
newAttrValues = this._customAttrHandler.handleAttr(pollRespMetadata, msgBuffer, msgBufIdx, boundedMsgEndIdx);
|
|
39
|
+
// Apply per-attribute transforms that the custom handler doesn't handle
|
|
40
|
+
for (let attrIdx = 0; attrIdx < pollRespMetadata.a.length && attrIdx < newAttrValues.length; attrIdx++) {
|
|
41
|
+
const attrDef = pollRespMetadata.a[attrIdx];
|
|
42
|
+
if (newAttrValues[attrIdx].length === 0)
|
|
43
|
+
continue;
|
|
44
|
+
// Sign-extend values for signed types — the pseudocode produces unsigned
|
|
45
|
+
// values from bitwise operations, but the attribute type declares signedness
|
|
46
|
+
if (attrDef.t && (0, RaftDeviceInfo_1.isAttrTypeSigned)(attrDef.t)) {
|
|
47
|
+
const byteWidth = (0, RaftStruct_1.structSizeOf)(attrDef.t);
|
|
48
|
+
const signBit = 1 << (byteWidth * 8 - 1);
|
|
49
|
+
const range = signBit * 2;
|
|
50
|
+
newAttrValues[attrIdx] = newAttrValues[attrIdx].map(v => {
|
|
51
|
+
const n = v;
|
|
52
|
+
return (n & signBit) ? n - range : n;
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
if ("d" in attrDef && attrDef.d) {
|
|
56
|
+
const divisor = attrDef.d;
|
|
57
|
+
newAttrValues[attrIdx] = newAttrValues[attrIdx].map(v => v / divisor);
|
|
58
|
+
}
|
|
59
|
+
if ("a" in attrDef && attrDef.a !== undefined) {
|
|
60
|
+
const addend = attrDef.a;
|
|
61
|
+
newAttrValues[attrIdx] = newAttrValues[attrIdx].map(v => v + addend);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
38
64
|
}
|
|
39
65
|
else {
|
|
40
66
|
// console.log(`RaftAttrHdlr.processMsgAttrGroup ${JSON.stringify(pollRespMetadata)} msgBufIdx ${msgBufIdx} timestampUs ${timestampUs}`);
|
|
@@ -49,10 +75,9 @@ class AttributeHandler {
|
|
|
49
75
|
}
|
|
50
76
|
// console.log(`RaftAttrHdlr.processMsgAttrGroup attr ${attrDef.n} msgBufIdx ${msgBufIdx} timestampUs ${timestampUs} attrDef ${JSON.stringify(attrDef)}`);
|
|
51
77
|
// Process the attribute
|
|
52
|
-
const { values, newMsgBufIdx } = this.processMsgAttribute(attrDef, msgBuffer, msgBufIdx, msgDataStartIdx);
|
|
78
|
+
const { values, newMsgBufIdx } = this.processMsgAttribute(attrDef, msgBuffer, msgBufIdx, msgDataStartIdx, boundedMsgEndIdx);
|
|
53
79
|
if (newMsgBufIdx < 0) {
|
|
54
|
-
|
|
55
|
-
continue;
|
|
80
|
+
return -1;
|
|
56
81
|
}
|
|
57
82
|
msgBufIdx = newMsgBufIdx;
|
|
58
83
|
newAttrValues.push(values);
|
|
@@ -66,7 +91,7 @@ class AttributeHandler {
|
|
|
66
91
|
// Check if any attributes were added (in addition to timestamp)
|
|
67
92
|
if (newAttrValues.length === 0) {
|
|
68
93
|
console.warn(`DeviceManager msg attrGroup ${JSON.stringify(pollRespMetadata)} newAttrValues ${newAttrValues} is empty`);
|
|
69
|
-
return
|
|
94
|
+
return -1;
|
|
70
95
|
}
|
|
71
96
|
// All attributes must have the same number of new values
|
|
72
97
|
const numNewDataPoints = newAttrValues[0].length;
|
|
@@ -109,11 +134,55 @@ class AttributeHandler {
|
|
|
109
134
|
devAttrsState[attrDef.n].newData = newAttrValues[attrIdx].length > 0;
|
|
110
135
|
devAttrsState[attrDef.n].numNewValues = newAttrValues[attrIdx].length;
|
|
111
136
|
}
|
|
112
|
-
//
|
|
137
|
+
// --- Piecewise EMA timestamp reconstruction ---
|
|
138
|
+
// Track the last assigned sample timestamp and step forward by emaIntervalUs
|
|
139
|
+
// per sample. No T0 recomputation — avoids amplified batch-boundary jitter.
|
|
113
140
|
const timeIncUs = pollRespMetadata.us ? pollRespMetadata.us : 1000;
|
|
141
|
+
if (!deviceTimeline.emaCalibrated) {
|
|
142
|
+
// Cold start: anchor so that sample 0 gets the poll timestamp
|
|
143
|
+
deviceTimeline.emaIntervalUs = timeIncUs;
|
|
144
|
+
deviceTimeline.emaLastSampleTimeUs = timestampUs - deviceTimeline.emaIntervalUs;
|
|
145
|
+
deviceTimeline.emaPrevPollTimeUs = timestampUs;
|
|
146
|
+
deviceTimeline.emaCalibrated = true;
|
|
147
|
+
deviceTimeline.emaCalibrationPolls = 1;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
// EMA interval update from poll-to-poll gap
|
|
151
|
+
if (numNewDataPoints > 1) {
|
|
152
|
+
const instantIntervalUs = (timestampUs - deviceTimeline.emaPrevPollTimeUs) / numNewDataPoints;
|
|
153
|
+
const alpha = deviceTimeline.emaCalibrationPolls < 20 ? 0.3 : 0.05;
|
|
154
|
+
deviceTimeline.emaIntervalUs = alpha * instantIntervalUs
|
|
155
|
+
+ (1.0 - alpha) * deviceTimeline.emaIntervalUs;
|
|
156
|
+
}
|
|
157
|
+
else if (numNewDataPoints === 1) {
|
|
158
|
+
const instantIntervalUs = timestampUs - deviceTimeline.emaPrevPollTimeUs;
|
|
159
|
+
if (Number.isFinite(instantIntervalUs) && instantIntervalUs > 0) {
|
|
160
|
+
deviceTimeline.emaIntervalUs = instantIntervalUs;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
deviceTimeline.emaPrevPollTimeUs = timestampUs;
|
|
164
|
+
deviceTimeline.emaCalibrationPolls++;
|
|
165
|
+
}
|
|
166
|
+
// Assign timestamps: each sample steps forward by emaIntervalUs
|
|
114
167
|
const timestampsUs = Array(numNewDataPoints).fill(0);
|
|
168
|
+
const lastTimeUs = deviceTimeline.timestampsUs.length > 0
|
|
169
|
+
? deviceTimeline.timestampsUs[deviceTimeline.timestampsUs.length - 1]
|
|
170
|
+
: -Infinity;
|
|
115
171
|
for (let i = 0; i < numNewDataPoints; i++) {
|
|
116
|
-
timestampsUs[i] =
|
|
172
|
+
timestampsUs[i] = numNewDataPoints === 1
|
|
173
|
+
? timestampUs
|
|
174
|
+
: deviceTimeline.emaLastSampleTimeUs + (i + 1) * deviceTimeline.emaIntervalUs;
|
|
175
|
+
// Ensure monotonically increasing timestamps
|
|
176
|
+
if (i === 0 && timestampsUs[0] <= lastTimeUs) {
|
|
177
|
+
timestampsUs[0] = lastTimeUs + 1;
|
|
178
|
+
}
|
|
179
|
+
else if (i > 0 && timestampsUs[i] <= timestampsUs[i - 1]) {
|
|
180
|
+
timestampsUs[i] = timestampsUs[i - 1] + 1;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Advance the piecewise model cursor past all samples in this batch
|
|
184
|
+
if (deviceTimeline.emaCalibrated && numNewDataPoints > 0) {
|
|
185
|
+
deviceTimeline.emaLastSampleTimeUs = timestampsUs[timestampsUs.length - 1];
|
|
117
186
|
}
|
|
118
187
|
// Check if timeline points need to be discarded
|
|
119
188
|
const discardCount = Math.max(0, deviceTimeline.timestampsUs.length + timestampsUs.length - maxDataPoints);
|
|
@@ -122,6 +191,7 @@ class AttributeHandler {
|
|
|
122
191
|
}
|
|
123
192
|
// Add the new timestamps
|
|
124
193
|
deviceTimeline.timestampsUs.push(...timestampsUs);
|
|
194
|
+
deviceTimeline.totalSamplesAdded += numNewDataPoints;
|
|
125
195
|
// Validate attributes based on the vft field
|
|
126
196
|
this.validateAttributes(pollRespMetadata, devAttrsState, numNewDataPoints);
|
|
127
197
|
// Return the next message buffer index
|
|
@@ -168,29 +238,34 @@ class AttributeHandler {
|
|
|
168
238
|
}
|
|
169
239
|
}
|
|
170
240
|
}
|
|
171
|
-
processMsgAttribute(attrDef, msgBuffer, msgBufIdx, msgDataStartIdx) {
|
|
241
|
+
processMsgAttribute(attrDef, msgBuffer, msgBufIdx, msgDataStartIdx, msgEndIdx) {
|
|
172
242
|
// Current field message string index
|
|
173
243
|
let curFieldBufIdx = msgBufIdx;
|
|
174
244
|
let attrUsesAbsPos = false;
|
|
245
|
+
const boundedMsgEndIdx = Math.min(Math.max(msgEndIdx, msgDataStartIdx), msgBuffer.length);
|
|
246
|
+
const attrTypesOnly = attrDef.t;
|
|
247
|
+
const numBytesConsumed = (0, RaftStruct_1.structSizeOf)(attrTypesOnly);
|
|
175
248
|
// Check for "at" field which means absolute position in the buffer
|
|
176
249
|
if (attrDef.at !== undefined) {
|
|
177
250
|
// Handle both single value and array of byte positions
|
|
178
251
|
if (Array.isArray(attrDef.at)) {
|
|
179
252
|
// Create a new buffer for non-contiguous data extraction
|
|
180
|
-
const elemSize =
|
|
253
|
+
const elemSize = numBytesConsumed;
|
|
181
254
|
const bytesForType = new Uint8Array(elemSize);
|
|
182
255
|
// Zero out the buffer
|
|
183
256
|
bytesForType.fill(0);
|
|
184
257
|
// Copy bytes from the specified positions
|
|
185
258
|
for (let i = 0; i < attrDef.at.length && i < elemSize; i++) {
|
|
186
259
|
const sourceIdx = msgDataStartIdx + attrDef.at[i];
|
|
187
|
-
if (sourceIdx
|
|
188
|
-
|
|
260
|
+
if (sourceIdx >= boundedMsgEndIdx) {
|
|
261
|
+
return { values: [], newMsgBufIdx: -1 };
|
|
189
262
|
}
|
|
263
|
+
bytesForType[i] = msgBuffer[sourceIdx];
|
|
190
264
|
}
|
|
191
265
|
// Use this buffer for attribute extraction
|
|
192
266
|
msgBuffer = bytesForType;
|
|
193
267
|
curFieldBufIdx = 0;
|
|
268
|
+
msgEndIdx = bytesForType.length;
|
|
194
269
|
}
|
|
195
270
|
else {
|
|
196
271
|
// Standard absolute position in the buffer
|
|
@@ -199,21 +274,21 @@ class AttributeHandler {
|
|
|
199
274
|
attrUsesAbsPos = true;
|
|
200
275
|
}
|
|
201
276
|
// Check if outside bounds of message
|
|
202
|
-
|
|
277
|
+
const attrEndIdx = curFieldBufIdx + numBytesConsumed;
|
|
278
|
+
const effectiveMsgEndIdx = Math.min(Math.max(msgEndIdx, curFieldBufIdx), msgBuffer.length);
|
|
279
|
+
if (curFieldBufIdx >= effectiveMsgEndIdx || attrEndIdx > effectiveMsgEndIdx) {
|
|
203
280
|
// console.warn(`DeviceManager msg outside bounds msgBuffer ${msgBuffer} attrName ${attrDef.n}`);
|
|
204
281
|
return { values: [], newMsgBufIdx: -1 };
|
|
205
282
|
}
|
|
206
|
-
// Attribute type
|
|
207
|
-
const attrTypesOnly = attrDef.t;
|
|
208
283
|
// Slice into buffer
|
|
209
|
-
const attrBuf = msgBuffer.slice(curFieldBufIdx);
|
|
284
|
+
const attrBuf = msgBuffer.slice(curFieldBufIdx, effectiveMsgEndIdx);
|
|
210
285
|
// Check if a mask is used and the value is signed
|
|
211
286
|
const maskOnSignedValue = "m" in attrDef && (0, RaftDeviceInfo_1.isAttrTypeSigned)(attrTypesOnly);
|
|
212
287
|
// Extract the value using python-struct
|
|
213
288
|
const unpackValues = (0, RaftStruct_1.structUnpack)(maskOnSignedValue ? attrTypesOnly.toUpperCase() : attrTypesOnly, attrBuf);
|
|
214
289
|
let attrValues = unpackValues;
|
|
215
|
-
//
|
|
216
|
-
const
|
|
290
|
+
// Check if any values are strings (from 's' format) — skip numeric transforms for those
|
|
291
|
+
const hasStringValues = attrValues.some(v => typeof v === 'string');
|
|
217
292
|
// // Check if sign extendable mask specified on signed value
|
|
218
293
|
// if (mmSpecifiedOnSignedValue) {
|
|
219
294
|
// const signBitMask = 1 << (signExtendableMaskSignPos - 1);
|
|
@@ -225,17 +300,17 @@ class AttributeHandler {
|
|
|
225
300
|
// }
|
|
226
301
|
// }
|
|
227
302
|
// Check for XOR mask
|
|
228
|
-
if ("x" in attrDef) {
|
|
303
|
+
if (!hasStringValues && "x" in attrDef) {
|
|
229
304
|
const mask = typeof attrDef.x === "string" ? parseInt(attrDef.x, 16) : attrDef.x;
|
|
230
305
|
attrValues = attrValues.map((value) => (value >>> 0) ^ mask);
|
|
231
306
|
}
|
|
232
307
|
// Check for AND mask
|
|
233
|
-
if ("m" in attrDef) {
|
|
308
|
+
if (!hasStringValues && "m" in attrDef) {
|
|
234
309
|
const mask = typeof attrDef.m === "string" ? parseInt(attrDef.m, 16) : attrDef.m;
|
|
235
310
|
attrValues = attrValues.map((value) => (maskOnSignedValue ? this.signExtend(value, mask) : (value >>> 0) & mask));
|
|
236
311
|
}
|
|
237
312
|
// Check for a sign-bit
|
|
238
|
-
if ("sb" in attrDef) {
|
|
313
|
+
if (!hasStringValues && "sb" in attrDef) {
|
|
239
314
|
const signBitPos = attrDef.sb;
|
|
240
315
|
const signBitMask = 1 << signBitPos;
|
|
241
316
|
if ("ss" in attrDef) {
|
|
@@ -247,7 +322,7 @@ class AttributeHandler {
|
|
|
247
322
|
}
|
|
248
323
|
}
|
|
249
324
|
// Check for bit shift required
|
|
250
|
-
if ("s" in attrDef && attrDef.s) {
|
|
325
|
+
if (!hasStringValues && "s" in attrDef && attrDef.s) {
|
|
251
326
|
const bitshift = attrDef.s;
|
|
252
327
|
if (bitshift > 0) {
|
|
253
328
|
attrValues = attrValues.map((value) => (value >>> 0) >>> bitshift);
|
|
@@ -257,17 +332,17 @@ class AttributeHandler {
|
|
|
257
332
|
}
|
|
258
333
|
}
|
|
259
334
|
// Check for divisor
|
|
260
|
-
if ("d" in attrDef && attrDef.d) {
|
|
335
|
+
if (!hasStringValues && "d" in attrDef && attrDef.d) {
|
|
261
336
|
const divisor = attrDef.d;
|
|
262
|
-
attrValues = attrValues.map((value) =>
|
|
337
|
+
attrValues = attrValues.map((value) => value / divisor);
|
|
263
338
|
}
|
|
264
339
|
// Check for value to add
|
|
265
|
-
if ("a" in attrDef && attrDef.a !== undefined) {
|
|
340
|
+
if (!hasStringValues && "a" in attrDef && attrDef.a !== undefined) {
|
|
266
341
|
const addValue = attrDef.a;
|
|
267
|
-
attrValues = attrValues.map((value) =>
|
|
342
|
+
attrValues = attrValues.map((value) => value + addValue);
|
|
268
343
|
}
|
|
269
344
|
// Apply lookup table if defined
|
|
270
|
-
if ("lut" in attrDef && attrDef.lut !== undefined) {
|
|
345
|
+
if (!hasStringValues && "lut" in attrDef && attrDef.lut !== undefined) {
|
|
271
346
|
attrValues = attrValues.map((value) => {
|
|
272
347
|
// Skip NaN values
|
|
273
348
|
if (isNaN(value)) {
|
|
@@ -313,9 +388,10 @@ class AttributeHandler {
|
|
|
313
388
|
}
|
|
314
389
|
return value;
|
|
315
390
|
}
|
|
316
|
-
extractTimestampAndAdvanceIdx(msgBuffer, msgBufIdx, timestampWrapHandler) {
|
|
391
|
+
extractTimestampAndAdvanceIdx(msgBuffer, msgBufIdx, timestampWrapHandler, msgEndIdx = msgBuffer.length) {
|
|
392
|
+
const boundedMsgEndIdx = Math.min(Math.max(msgEndIdx, msgBufIdx), msgBuffer.length);
|
|
317
393
|
// Check there are enough bytes for the timestamp
|
|
318
|
-
if (msgBufIdx + this.POLL_RESULT_TIMESTAMP_SIZE >
|
|
394
|
+
if (msgBufIdx + this.POLL_RESULT_TIMESTAMP_SIZE > boundedMsgEndIdx) {
|
|
319
395
|
return { newBufIdx: -1, timestampUs: 0 };
|
|
320
396
|
}
|
|
321
397
|
// Use struct to extract the timestamp
|
|
@@ -328,7 +404,7 @@ class AttributeHandler {
|
|
|
328
404
|
timestampUs = (0, RaftStruct_1.structUnpack)(">I", tsBuffer)[0] * this.POLL_RESULT_RESOLUTION_US;
|
|
329
405
|
}
|
|
330
406
|
// Check if time is before lastReportTimeMs by more than 100ms - in which case a wrap around occurred to add on the max value
|
|
331
|
-
if (timestampUs +
|
|
407
|
+
if (timestampUs + 10000 < timestampWrapHandler.lastReportTimestampUs) {
|
|
332
408
|
timestampWrapHandler.reportTimestampOffsetUs += this.POLL_RESULT_WRAP_VALUE * this.POLL_RESULT_RESOLUTION_US;
|
|
333
409
|
}
|
|
334
410
|
timestampWrapHandler.lastReportTimestampUs = timestampUs;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RaftAttributeHandler.js","sourceRoot":"","sources":["../../src/RaftAttributeHandler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RaftAttributeHandler.js","sourceRoot":"","sources":["../../src/RaftAttributeHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,9 +16,11 @@ export default class RaftChannelBLE implements RaftChannel {
|
|
|
16
16
|
private readonly maxRetries;
|
|
17
17
|
private _isConnected;
|
|
18
18
|
private readonly _maxConnRetries;
|
|
19
|
+
private readonly _connRetryDelayMs;
|
|
19
20
|
private _eventListenerFn;
|
|
20
21
|
private _requestedBatchAckSize;
|
|
21
22
|
private _requestedFileBlockSize;
|
|
23
|
+
private _maxBleWriteSize;
|
|
22
24
|
fhBatchAckSize(): number;
|
|
23
25
|
fhFileBlockSize(): number;
|
|
24
26
|
setMsgHandler(raftMsgHandler: RaftMsgHandler): void;
|
|
@@ -29,10 +31,12 @@ export default class RaftChannelBLE implements RaftChannel {
|
|
|
29
31
|
setOnConnEvent(connEventFn: RaftConnEventFn): void;
|
|
30
32
|
onDisconnected(event: Event): void;
|
|
31
33
|
getConnectedLocator(): string | object;
|
|
34
|
+
private disconnectGattBeforeRetry;
|
|
32
35
|
connect(locator: string | object, _connectorOptions: ConnectorOptions): Promise<boolean>;
|
|
33
36
|
disconnect(): Promise<void>;
|
|
34
37
|
pauseConnection(pause: boolean): void;
|
|
35
38
|
_onMsgRx(event: Event): void;
|
|
39
|
+
private _writeChunk;
|
|
36
40
|
sendTxMsg(msg: Uint8Array): Promise<boolean>;
|
|
37
41
|
sendTxMsgNoAwait(msg: Uint8Array): Promise<boolean>;
|
|
38
42
|
sendTxMsgRaw(): boolean;
|
|
@@ -34,11 +34,16 @@ class RaftChannelBLE {
|
|
|
34
34
|
// Connected flag and retries
|
|
35
35
|
this._isConnected = false;
|
|
36
36
|
this._maxConnRetries = 3;
|
|
37
|
+
this._connRetryDelayMs = 500;
|
|
37
38
|
// Event listener fn
|
|
38
39
|
this._eventListenerFn = null;
|
|
39
40
|
// File Handler parameters
|
|
40
41
|
this._requestedBatchAckSize = 10;
|
|
41
42
|
this._requestedFileBlockSize = 500;
|
|
43
|
+
// Max bytes per BLE write - messages larger than this are split into chunks.
|
|
44
|
+
// Web Bluetooth doesn't expose the negotiated MTU, so use a conservative
|
|
45
|
+
// default that works with BLE 4.2+ (ATT_MTU 251 → payload 244).
|
|
46
|
+
this._maxBleWriteSize = 244;
|
|
42
47
|
}
|
|
43
48
|
fhBatchAckSize() {
|
|
44
49
|
return this._requestedBatchAckSize;
|
|
@@ -93,6 +98,18 @@ class RaftChannelBLE {
|
|
|
93
98
|
getConnectedLocator() {
|
|
94
99
|
return this._bleDevice || "";
|
|
95
100
|
}
|
|
101
|
+
async disconnectGattBeforeRetry() {
|
|
102
|
+
var _a, _b;
|
|
103
|
+
if (!((_b = (_a = this._bleDevice) === null || _a === void 0 ? void 0 : _a.gatt) === null || _b === void 0 ? void 0 : _b.connected)) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
await this._bleDevice.gatt.disconnect();
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
RaftLog_1.default.warn(`RaftChannelBLE.connect - cannot disconnect before retry ${error}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
96
113
|
// Connect to a device
|
|
97
114
|
async connect(locator, _connectorOptions) {
|
|
98
115
|
// RaftLog.debug(`Selected device: ${deviceID}`);
|
|
@@ -124,8 +141,14 @@ class RaftChannelBLE {
|
|
|
124
141
|
}
|
|
125
142
|
}
|
|
126
143
|
if (!service) {
|
|
127
|
-
|
|
128
|
-
|
|
144
|
+
if (connRetry === this._maxConnRetries - 1) {
|
|
145
|
+
RaftLog_1.default.warn(`RaftChannelBLE.connect - cannot get primary service - attempt #${connRetry + 1} - giving up`);
|
|
146
|
+
return false;
|
|
147
|
+
}
|
|
148
|
+
RaftLog_1.default.warn(`RaftChannelBLE.connect - cannot get primary service - attempt #${connRetry + 1} - retrying`);
|
|
149
|
+
await this.disconnectGattBeforeRetry();
|
|
150
|
+
await new Promise(resolve => setTimeout(resolve, this._connRetryDelayMs));
|
|
151
|
+
continue;
|
|
129
152
|
}
|
|
130
153
|
RaftLog_1.default.debug(`RaftChannelBLE.connect - found service: ${service.uuid}`);
|
|
131
154
|
try {
|
|
@@ -219,7 +242,22 @@ class RaftChannelBLE {
|
|
|
219
242
|
}
|
|
220
243
|
}
|
|
221
244
|
}
|
|
222
|
-
//
|
|
245
|
+
// Write a single chunk to the BLE characteristic
|
|
246
|
+
async _writeChunk(data) {
|
|
247
|
+
if (!this._characteristicTx)
|
|
248
|
+
return;
|
|
249
|
+
const bs = RaftUtils_1.default.toBufferSource(data);
|
|
250
|
+
if (this._characteristicTx.writeValueWithoutResponse) {
|
|
251
|
+
await this._characteristicTx.writeValueWithoutResponse(bs);
|
|
252
|
+
}
|
|
253
|
+
else if (this._characteristicTx.writeValue) {
|
|
254
|
+
await this._characteristicTx.writeValue(bs);
|
|
255
|
+
}
|
|
256
|
+
else if (this._characteristicTx.writeValueWithResponse) {
|
|
257
|
+
await this._characteristicTx.writeValueWithResponse(bs);
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// Send a message, chunking if it exceeds the BLE write size
|
|
223
261
|
async sendTxMsg(msg
|
|
224
262
|
// _sendWithResponse: boolean
|
|
225
263
|
) {
|
|
@@ -234,18 +272,17 @@ class RaftChannelBLE {
|
|
|
234
272
|
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
235
273
|
}
|
|
236
274
|
this._msgTxTimeLast = Date.now();
|
|
237
|
-
// Write to the characteristic
|
|
275
|
+
// Write to the characteristic, chunking if necessary
|
|
238
276
|
try {
|
|
239
277
|
if (this._characteristicTx) {
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
await this._characteristicTx.writeValueWithoutResponse(bs);
|
|
243
|
-
}
|
|
244
|
-
else if (this._characteristicTx.writeValue) {
|
|
245
|
-
await this._characteristicTx.writeValue(bs);
|
|
278
|
+
if (msg.length <= this._maxBleWriteSize) {
|
|
279
|
+
await this._writeChunk(msg);
|
|
246
280
|
}
|
|
247
|
-
else
|
|
248
|
-
|
|
281
|
+
else {
|
|
282
|
+
for (let offset = 0; offset < msg.length; offset += this._maxBleWriteSize) {
|
|
283
|
+
const chunk = msg.subarray(offset, Math.min(offset + this._maxBleWriteSize, msg.length));
|
|
284
|
+
await this._writeChunk(chunk);
|
|
285
|
+
}
|
|
249
286
|
}
|
|
250
287
|
}
|
|
251
288
|
break;
|
|
@@ -271,17 +308,18 @@ class RaftChannelBLE {
|
|
|
271
308
|
await new Promise((resolve) => setTimeout(resolve, 5));
|
|
272
309
|
}
|
|
273
310
|
this._msgTxTimeLast = Date.now();
|
|
274
|
-
// Write to the characteristic
|
|
311
|
+
// Write to the characteristic, chunking if necessary
|
|
275
312
|
if (this._characteristicTx) {
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
this._characteristicTx.writeValueWithoutResponse(bs);
|
|
279
|
-
}
|
|
280
|
-
else if (this._characteristicTx.writeValue) {
|
|
281
|
-
this._characteristicTx.writeValue(bs);
|
|
313
|
+
if (msg.length <= this._maxBleWriteSize) {
|
|
314
|
+
this._writeChunk(msg);
|
|
282
315
|
}
|
|
283
|
-
else
|
|
284
|
-
|
|
316
|
+
else {
|
|
317
|
+
(async () => {
|
|
318
|
+
for (let offset = 0; offset < msg.length; offset += this._maxBleWriteSize) {
|
|
319
|
+
const chunk = msg.subarray(offset, Math.min(offset + this._maxBleWriteSize, msg.length));
|
|
320
|
+
await this._writeChunk(chunk);
|
|
321
|
+
}
|
|
322
|
+
})();
|
|
285
323
|
}
|
|
286
324
|
return true;
|
|
287
325
|
}
|