@robdobsn/raftjs 1.1.1
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/.editorconfig +14 -0
- package/.gitattributes +11 -0
- package/.nvmrc +1 -0
- package/LICENSE +22 -0
- package/README.md +11 -0
- package/TODO.md +1 -0
- package/dist/RaftAttributeHandler.d.ts +12 -0
- package/dist/RaftAttributeHandler.js +241 -0
- package/dist/RaftAttributeHandler.js.map +1 -0
- package/dist/RaftChannel.d.ts +18 -0
- package/dist/RaftChannel.js +12 -0
- package/dist/RaftChannel.js.map +1 -0
- package/dist/RaftChannelWebBLE.d.ts +38 -0
- package/dist/RaftChannelWebBLE.js +274 -0
- package/dist/RaftChannelWebBLE.js.map +1 -0
- package/dist/RaftChannelWebSerial.d.ts +37 -0
- package/dist/RaftChannelWebSerial.js +319 -0
- package/dist/RaftChannelWebSerial.js.map +1 -0
- package/dist/RaftChannelWebSocket.d.ts +28 -0
- package/dist/RaftChannelWebSocket.js +197 -0
- package/dist/RaftChannelWebSocket.js.map +1 -0
- package/dist/RaftCommsStats.d.ts +39 -0
- package/dist/RaftCommsStats.js +128 -0
- package/dist/RaftCommsStats.js.map +1 -0
- package/dist/RaftConnEvents.d.ts +31 -0
- package/dist/RaftConnEvents.js +44 -0
- package/dist/RaftConnEvents.js.map +1 -0
- package/dist/RaftConnector.d.ts +242 -0
- package/dist/RaftConnector.js +613 -0
- package/dist/RaftConnector.js.map +1 -0
- package/dist/RaftCustomAttrHandler.d.ts +4 -0
- package/dist/RaftCustomAttrHandler.js +50 -0
- package/dist/RaftCustomAttrHandler.js.map +1 -0
- package/dist/RaftDeviceInfo.d.ts +64 -0
- package/dist/RaftDeviceInfo.js +36 -0
- package/dist/RaftDeviceInfo.js.map +1 -0
- package/dist/RaftDeviceManager.d.ts +37 -0
- package/dist/RaftDeviceManager.js +450 -0
- package/dist/RaftDeviceManager.js.map +1 -0
- package/dist/RaftDeviceMsg.d.ts +9 -0
- package/dist/RaftDeviceMsg.js +11 -0
- package/dist/RaftDeviceMsg.js.map +1 -0
- package/dist/RaftDeviceStates.d.ts +33 -0
- package/dist/RaftDeviceStates.js +60 -0
- package/dist/RaftDeviceStates.js.map +1 -0
- package/dist/RaftFileHandler.d.ts +52 -0
- package/dist/RaftFileHandler.js +502 -0
- package/dist/RaftFileHandler.js.map +1 -0
- package/dist/RaftLog.d.ts +22 -0
- package/dist/RaftLog.js +63 -0
- package/dist/RaftLog.js.map +1 -0
- package/dist/RaftMiniHDLC.d.ts +18 -0
- package/dist/RaftMiniHDLC.js +383 -0
- package/dist/RaftMiniHDLC.js.map +1 -0
- package/dist/RaftMsgHandler.d.ts +57 -0
- package/dist/RaftMsgHandler.js +480 -0
- package/dist/RaftMsgHandler.js.map +1 -0
- package/dist/RaftMsgTrackInfo.d.ts +17 -0
- package/dist/RaftMsgTrackInfo.js +42 -0
- package/dist/RaftMsgTrackInfo.js.map +1 -0
- package/dist/RaftProtocolDefs.d.ts +30 -0
- package/dist/RaftProtocolDefs.js +48 -0
- package/dist/RaftProtocolDefs.js.map +1 -0
- package/dist/RaftStreamHandler.d.ts +38 -0
- package/dist/RaftStreamHandler.js +257 -0
- package/dist/RaftStreamHandler.js.map +1 -0
- package/dist/RaftSystemType.d.ts +21 -0
- package/dist/RaftSystemType.js +3 -0
- package/dist/RaftSystemType.js.map +1 -0
- package/dist/RaftSystemUtils.d.ts +136 -0
- package/dist/RaftSystemUtils.js +410 -0
- package/dist/RaftSystemUtils.js.map +1 -0
- package/dist/RaftTypes.d.ts +184 -0
- package/dist/RaftTypes.js +157 -0
- package/dist/RaftTypes.js.map +1 -0
- package/dist/RaftUpdateEvents.d.ts +33 -0
- package/dist/RaftUpdateEvents.js +46 -0
- package/dist/RaftUpdateEvents.js.map +1 -0
- package/dist/RaftUpdateManager.d.ts +61 -0
- package/dist/RaftUpdateManager.js +618 -0
- package/dist/RaftUpdateManager.js.map +1 -0
- package/dist/RaftUtils.d.ts +125 -0
- package/dist/RaftUtils.js +454 -0
- package/dist/RaftUtils.js.map +1 -0
- package/dist/RaftWifiTypes.d.ts +23 -0
- package/dist/RaftWifiTypes.js +43 -0
- package/dist/RaftWifiTypes.js.map +1 -0
- package/dist/TestDataGen.d.ts +7 -0
- package/dist/TestDataGen.js +133 -0
- package/dist/TestDataGen.js.map +1 -0
- package/dist/main.d.ts +18 -0
- package/dist/main.js +42 -0
- package/dist/main.js.map +1 -0
- package/eslint.config.mjs +33 -0
- package/examples/dashboard/package.json +39 -0
- package/examples/dashboard/src/ConnManager.ts +86 -0
- package/examples/dashboard/src/Main.tsx +100 -0
- package/examples/dashboard/src/StatusScreen.tsx +72 -0
- package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +144 -0
- package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +77 -0
- package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +70 -0
- package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +33 -0
- package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +342 -0
- package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +170 -0
- package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +123 -0
- package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +207 -0
- package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +464 -0
- package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +146 -0
- package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +32 -0
- package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +371 -0
- package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +20 -0
- package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +113 -0
- package/examples/dashboard/src/index.html +15 -0
- package/examples/dashboard/src/index.tsx +15 -0
- package/examples/dashboard/src/styles.css +122 -0
- package/examples/dashboard/tsconfig.json +18 -0
- package/jest.config.js +11 -0
- package/package.json +50 -0
- package/src/RaftAttributeHandler.ts +289 -0
- package/src/RaftChannel.ts +30 -0
- package/src/RaftChannelWebBLE.ts +342 -0
- package/src/RaftChannelWebSerial.ts +408 -0
- package/src/RaftChannelWebSocket.ts +245 -0
- package/src/RaftCommsStats.ts +142 -0
- package/src/RaftConnEvents.ts +46 -0
- package/src/RaftConnector.ts +745 -0
- package/src/RaftCustomAttrHandler.ts +54 -0
- package/src/RaftDeviceInfo.ts +104 -0
- package/src/RaftDeviceManager.ts +542 -0
- package/src/RaftDeviceMsg.ts +20 -0
- package/src/RaftDeviceStates.ts +89 -0
- package/src/RaftFileHandler.ts +668 -0
- package/src/RaftLog.ts +70 -0
- package/src/RaftMiniHDLC.ts +396 -0
- package/src/RaftMsgHandler.ts +778 -0
- package/src/RaftMsgTrackInfo.ts +51 -0
- package/src/RaftProtocolDefs.ts +46 -0
- package/src/RaftStreamHandler.ts +328 -0
- package/src/RaftSystemType.ts +25 -0
- package/src/RaftSystemUtils.ts +487 -0
- package/src/RaftTypes.ts +250 -0
- package/src/RaftUpdateEvents.ts +48 -0
- package/src/RaftUpdateManager.ts +778 -0
- package/src/RaftUtils.ts +484 -0
- package/src/RaftWifiTypes.ts +36 -0
- package/src/TestDataGen.ts +157 -0
- package/src/main.ts +28 -0
- package/testdata/TestDeviceTypeRecs.json +492 -0
- package/tsconfig.json +27 -0
package/.editorconfig
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# http://editorconfig.org
|
|
2
|
+
root = true
|
|
3
|
+
|
|
4
|
+
[*]
|
|
5
|
+
charset = utf-8
|
|
6
|
+
end_of_line = lf
|
|
7
|
+
indent_size = 2
|
|
8
|
+
indent_style = space
|
|
9
|
+
insert_final_newline = true
|
|
10
|
+
trim_trailing_whitespace = true
|
|
11
|
+
|
|
12
|
+
[*.md]
|
|
13
|
+
max_line_length = 0
|
|
14
|
+
trim_trailing_whitespace = true
|
package/.gitattributes
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Set the default behavior, in case users don't have core.autocrlf set.
|
|
2
|
+
* text=auto
|
|
3
|
+
|
|
4
|
+
# Declare files that will always have LF line endings on checkout.
|
|
5
|
+
* text eol=lf
|
|
6
|
+
|
|
7
|
+
# Denote all files that are truly binary and should not be modified.
|
|
8
|
+
*.png binary
|
|
9
|
+
*.jpg binary
|
|
10
|
+
*.gif binary
|
|
11
|
+
*.pdf binary
|
package/.nvmrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
20.11.0
|
package/LICENSE
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2021-2024 Rob Dobson
|
|
4
|
+
Examples copyright (c) 2021-2024 Robotical
|
|
5
|
+
|
|
6
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
7
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
8
|
+
in the Software without restriction, including without limitation the rights
|
|
9
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
10
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
11
|
+
furnished to do so, subject to the following conditions:
|
|
12
|
+
|
|
13
|
+
The above copyright notice and this permission notice shall be included in all
|
|
14
|
+
copies or substantial portions of the Software.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
17
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
18
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
19
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
20
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
21
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
22
|
+
SOFTWARE.
|
package/README.md
ADDED
package/TODO.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[] Previously there was a function called retrieveMartySystemInfo() on RICConnector - this is removed - it used to call RICSystem (now RaftSystemUtils).retrieve info and that used to ge to getHWElems() etc as the code to do that was in RICSystem. This now needs to be split out and getHWElems(), etc handled directly in the target library and not RaftJS
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DeviceTypePollRespMetadata } from "./RaftDeviceInfo";
|
|
2
|
+
import { DeviceAttributesState, DeviceTimeline } from "./RaftDeviceStates";
|
|
3
|
+
export default class AttributeHandler {
|
|
4
|
+
private _customAttrHandler;
|
|
5
|
+
private POLL_RESULT_TIMESTAMP_SIZE;
|
|
6
|
+
private POLL_RESULT_WRAP_VALUE;
|
|
7
|
+
private POLL_RESULT_RESOLUTION_US;
|
|
8
|
+
processMsgAttrGroup(msgBuffer: Buffer, msgBufIdx: number, deviceTimeline: DeviceTimeline, pollRespMetadata: DeviceTypePollRespMetadata, devAttrsState: DeviceAttributesState, maxDataPoints: number): number;
|
|
9
|
+
private processMsgAttribute;
|
|
10
|
+
private signExtend;
|
|
11
|
+
private extractTimestampAndAdvanceIdx;
|
|
12
|
+
}
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftAttributeHandler
|
|
5
|
+
// Attribute handler for Raft devices
|
|
6
|
+
//
|
|
7
|
+
// Rob Dobson (C) 2024
|
|
8
|
+
//
|
|
9
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
const tslib_1 = require("tslib");
|
|
12
|
+
const RaftCustomAttrHandler_1 = tslib_1.__importDefault(require("./RaftCustomAttrHandler"));
|
|
13
|
+
const RaftDeviceInfo_1 = require("./RaftDeviceInfo");
|
|
14
|
+
const python_struct_1 = tslib_1.__importDefault(require("python-struct"));
|
|
15
|
+
class AttributeHandler {
|
|
16
|
+
constructor() {
|
|
17
|
+
// Custom attribute handler
|
|
18
|
+
this._customAttrHandler = new RaftCustomAttrHandler_1.default();
|
|
19
|
+
// Message timestamp size
|
|
20
|
+
this.POLL_RESULT_TIMESTAMP_SIZE = 2;
|
|
21
|
+
this.POLL_RESULT_WRAP_VALUE = this.POLL_RESULT_TIMESTAMP_SIZE === 2 ? 65536 : 4294967296;
|
|
22
|
+
this.POLL_RESULT_RESOLUTION_US = 1000;
|
|
23
|
+
}
|
|
24
|
+
processMsgAttrGroup(msgBuffer, msgBufIdx, deviceTimeline, pollRespMetadata, devAttrsState, maxDataPoints) {
|
|
25
|
+
// console.log(`processMsgAttrGroup msg ${msgHexStr} timestamp ${timestamp} origTimestamp ${origTimestamp} msgBufIdx ${msgBufIdx}`)
|
|
26
|
+
// Extract msg timestamp
|
|
27
|
+
let { newBufIdx, timestampUs } = this.extractTimestampAndAdvanceIdx(msgBuffer, msgBufIdx, deviceTimeline);
|
|
28
|
+
if (newBufIdx < 0)
|
|
29
|
+
return -1;
|
|
30
|
+
msgBufIdx = newBufIdx;
|
|
31
|
+
// Start of message data
|
|
32
|
+
const msgDataStartIdx = msgBufIdx;
|
|
33
|
+
// New attribute values (in order as they appear in the attributes JSON)
|
|
34
|
+
let newAttrValues = [];
|
|
35
|
+
if ("c" in pollRespMetadata) {
|
|
36
|
+
// Extract attribute values using custom handler
|
|
37
|
+
newAttrValues = this._customAttrHandler.handleAttr(pollRespMetadata, msgBuffer, msgBufIdx);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// Iterate over attributes
|
|
41
|
+
for (let attrIdx = 0; attrIdx < pollRespMetadata.a.length; attrIdx++) {
|
|
42
|
+
// Get the attribute definition
|
|
43
|
+
const attrDef = pollRespMetadata.a[attrIdx];
|
|
44
|
+
if (!("t" in attrDef)) {
|
|
45
|
+
console.warn(`DeviceManager msg unknown msgBuffer ${msgBuffer} tsUs ${timestampUs} attrDef ${JSON.stringify(attrDef)}`);
|
|
46
|
+
newAttrValues.push([]);
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
// Process the attribute
|
|
50
|
+
const { values, newMsgBufIdx } = this.processMsgAttribute(attrDef, msgBuffer, msgBufIdx, msgDataStartIdx);
|
|
51
|
+
if (newMsgBufIdx < 0) {
|
|
52
|
+
newAttrValues.push([]);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
msgBufIdx = newMsgBufIdx;
|
|
56
|
+
newAttrValues.push(values);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// Number of bytes in group
|
|
60
|
+
const pollRespSizeBytes = pollRespMetadata.b;
|
|
61
|
+
// Check if any attributes were added (in addition to timestamp)
|
|
62
|
+
if (newAttrValues.length === 0) {
|
|
63
|
+
console.warn(`DeviceManager msg attrGroup ${JSON.stringify(pollRespMetadata)} newAttrValues ${newAttrValues} is empty`);
|
|
64
|
+
return msgDataStartIdx + pollRespSizeBytes;
|
|
65
|
+
}
|
|
66
|
+
// All attributes must have the same number of new values
|
|
67
|
+
let numNewDataPoints = newAttrValues[0].length;
|
|
68
|
+
for (let i = 1; i < newAttrValues.length; i++) {
|
|
69
|
+
if (newAttrValues[i].length !== numNewDataPoints) {
|
|
70
|
+
console.warn(`DeviceManager msg attrGroup ${pollRespMetadata} attrName ${pollRespMetadata.a[i].n} newAttrValues ${newAttrValues} do not have the same length`);
|
|
71
|
+
return msgDataStartIdx + pollRespSizeBytes;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// All attributes in the schema should have values
|
|
75
|
+
if (newAttrValues.length !== pollRespMetadata.a.length) {
|
|
76
|
+
console.warn(`DeviceManager msg attrGroup ${pollRespMetadata} newAttrValues ${newAttrValues} length does not match attrGroup.a length`);
|
|
77
|
+
return msgDataStartIdx + pollRespSizeBytes;
|
|
78
|
+
}
|
|
79
|
+
// Add the new attribute values to the device state
|
|
80
|
+
for (let attrIdx = 0; attrIdx < pollRespMetadata.a.length; attrIdx++) {
|
|
81
|
+
// Check if attribute already exists in the device state
|
|
82
|
+
const attrDef = pollRespMetadata.a[attrIdx];
|
|
83
|
+
if (!(attrDef.n in devAttrsState)) {
|
|
84
|
+
devAttrsState[attrDef.n] = {
|
|
85
|
+
name: attrDef.n,
|
|
86
|
+
newAttribute: true,
|
|
87
|
+
newData: true,
|
|
88
|
+
values: [],
|
|
89
|
+
units: (0, RaftDeviceInfo_1.decodeAttrUnitsEncoding)(attrDef.u || ""),
|
|
90
|
+
range: attrDef.r || [0, 0],
|
|
91
|
+
format: ("f" in attrDef && typeof attrDef.f == "string") ? attrDef.f : "",
|
|
92
|
+
visibleSeries: "v" in attrDef ? attrDef.v === 0 || attrDef.v === false : ("vs" in attrDef ? (attrDef.vs === 0 || attrDef.vs === false ? false : !!attrDef.vs) : true),
|
|
93
|
+
visibleForm: "v" in attrDef ? attrDef.v === 0 || attrDef.v === false : ("vf" in attrDef ? (attrDef.vf === 0 || attrDef.vf === false ? false : !!attrDef.vf) : true),
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// Check if any data points need to be discarded
|
|
97
|
+
const discardCount = Math.max(0, devAttrsState[attrDef.n].values.length + newAttrValues[attrIdx].length - maxDataPoints);
|
|
98
|
+
if (discardCount > 0) {
|
|
99
|
+
devAttrsState[attrDef.n].values.splice(0, discardCount);
|
|
100
|
+
}
|
|
101
|
+
// Add the new values
|
|
102
|
+
devAttrsState[attrDef.n].values.push(...newAttrValues[attrIdx]);
|
|
103
|
+
devAttrsState[attrDef.n].newData = newAttrValues[attrIdx].length > 0;
|
|
104
|
+
}
|
|
105
|
+
// Handle the timestamps with increments if specified
|
|
106
|
+
const timeIncUs = pollRespMetadata.us ? pollRespMetadata.us : 1000;
|
|
107
|
+
let timestampsUs = Array(numNewDataPoints).fill(0);
|
|
108
|
+
for (let i = 0; i < numNewDataPoints; i++) {
|
|
109
|
+
timestampsUs[i] = timestampUs + i * timeIncUs;
|
|
110
|
+
}
|
|
111
|
+
// Check if timeline points need to be discarded
|
|
112
|
+
const discardCount = Math.max(0, deviceTimeline.timestampsUs.length + timestampsUs.length - maxDataPoints);
|
|
113
|
+
if (discardCount > 0) {
|
|
114
|
+
deviceTimeline.timestampsUs.splice(0, discardCount);
|
|
115
|
+
}
|
|
116
|
+
// Add the new timestamps
|
|
117
|
+
deviceTimeline.timestampsUs.push(...timestampsUs);
|
|
118
|
+
// Return the next message buffer index
|
|
119
|
+
return msgDataStartIdx + pollRespSizeBytes;
|
|
120
|
+
}
|
|
121
|
+
processMsgAttribute(attrDef, msgBuffer, msgBufIdx, msgDataStartIdx) {
|
|
122
|
+
// Current field message string index
|
|
123
|
+
let curFieldBufIdx = msgBufIdx;
|
|
124
|
+
let attrUsesAbsPos = false;
|
|
125
|
+
// Check for "at": N which means start reading from byte N of the message (after the timestamp bytes)
|
|
126
|
+
if (attrDef.at !== undefined) {
|
|
127
|
+
curFieldBufIdx = msgDataStartIdx + attrDef.at;
|
|
128
|
+
attrUsesAbsPos = true;
|
|
129
|
+
}
|
|
130
|
+
// Check if outside bounds of message
|
|
131
|
+
if (curFieldBufIdx >= msgBuffer.length) {
|
|
132
|
+
console.warn(`DeviceManager msg outside bounds msgBuffer ${msgBuffer} attrName ${attrDef.n}`);
|
|
133
|
+
return { values: [], newMsgBufIdx: -1 };
|
|
134
|
+
}
|
|
135
|
+
// Attribute type
|
|
136
|
+
const attrTypesOnly = attrDef.t;
|
|
137
|
+
// Slice into buffer
|
|
138
|
+
const attrBuf = msgBuffer.slice(curFieldBufIdx);
|
|
139
|
+
// Check if a mask is used and the value is signed
|
|
140
|
+
const maskOnSignedValue = "m" in attrDef && (0, RaftDeviceInfo_1.isAttrTypeSigned)(attrTypesOnly);
|
|
141
|
+
// Extract the value using python-struct
|
|
142
|
+
let unpackValues = python_struct_1.default.unpack(maskOnSignedValue ? attrTypesOnly.toUpperCase() : attrTypesOnly, attrBuf);
|
|
143
|
+
let attrValues = unpackValues;
|
|
144
|
+
// Get number of bytes consumed
|
|
145
|
+
const numBytesConsumed = python_struct_1.default.sizeOf(attrTypesOnly);
|
|
146
|
+
// // Check if sign extendable mask specified on signed value
|
|
147
|
+
// if (mmSpecifiedOnSignedValue) {
|
|
148
|
+
// const signBitMask = 1 << (signExtendableMaskSignPos - 1);
|
|
149
|
+
// const valueOnlyMask = signBitMask - 1;
|
|
150
|
+
// if (value & signBitMask) {
|
|
151
|
+
// value = (value & valueOnlyMask) - signBitMask;
|
|
152
|
+
// } else {
|
|
153
|
+
// value = value & valueOnlyMask;
|
|
154
|
+
// }
|
|
155
|
+
// }
|
|
156
|
+
// Check for XOR mask
|
|
157
|
+
if ("x" in attrDef) {
|
|
158
|
+
const mask = typeof attrDef.x === "string" ? parseInt(attrDef.x, 16) : attrDef.x;
|
|
159
|
+
attrValues = attrValues.map((value) => value ^ mask);
|
|
160
|
+
}
|
|
161
|
+
// Check for AND mask
|
|
162
|
+
if ("m" in attrDef) {
|
|
163
|
+
const mask = typeof attrDef.m === "string" ? parseInt(attrDef.m, 16) : attrDef.m;
|
|
164
|
+
attrValues = attrValues.map((value) => (maskOnSignedValue ? this.signExtend(value, mask) : value & mask));
|
|
165
|
+
}
|
|
166
|
+
// Check for a sign-bit
|
|
167
|
+
if ("sb" in attrDef) {
|
|
168
|
+
const signBitPos = attrDef.sb;
|
|
169
|
+
const signBitMask = 1 << signBitPos;
|
|
170
|
+
if ("ss" in attrDef) {
|
|
171
|
+
const signBitSubtract = attrDef.ss;
|
|
172
|
+
attrValues = attrValues.map((value) => (value & signBitMask) ? signBitSubtract - value : value);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
attrValues = attrValues.map((value) => (value & signBitMask) ? value - (signBitMask << 1) : value);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Check for bit shift required
|
|
179
|
+
if ("s" in attrDef && attrDef.s) {
|
|
180
|
+
const bitshift = attrDef.s;
|
|
181
|
+
if (bitshift > 0) {
|
|
182
|
+
attrValues = attrValues.map((value) => (value) >> bitshift);
|
|
183
|
+
}
|
|
184
|
+
else if (bitshift < 0) {
|
|
185
|
+
attrValues = attrValues.map((value) => (value) << -bitshift);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Check for divisor
|
|
189
|
+
if ("d" in attrDef && attrDef.d) {
|
|
190
|
+
const divisor = attrDef.d;
|
|
191
|
+
attrValues = attrValues.map((value) => (value) / divisor);
|
|
192
|
+
}
|
|
193
|
+
// Check for value to add
|
|
194
|
+
if ("a" in attrDef && attrDef.a !== undefined) {
|
|
195
|
+
const addValue = attrDef.a;
|
|
196
|
+
attrValues = attrValues.map((value) => (value) + addValue);
|
|
197
|
+
}
|
|
198
|
+
// console.log(`DeviceManager msg attrGroup ${attrGroup} devkey ${deviceKey} valueHexChars ${valueHexChars} msgHexStr ${msgHexStr} ts ${timestamp} attrName ${attrDef.n} type ${attrDef.t} value ${value} signExtendableMaskSignPos ${signExtendableMaskSignPos} attrTypeDefForStruct ${attrTypeDefForStruct} attrDef ${attrDef}`);
|
|
199
|
+
// Move buffer position if using relative positioning
|
|
200
|
+
msgBufIdx += attrUsesAbsPos ? 0 : numBytesConsumed;
|
|
201
|
+
// Return the value
|
|
202
|
+
return { values: attrValues, newMsgBufIdx: msgBufIdx };
|
|
203
|
+
}
|
|
204
|
+
signExtend(value, mask) {
|
|
205
|
+
const signBitMask = (mask + 1) >> 1;
|
|
206
|
+
const signBit = value & signBitMask;
|
|
207
|
+
if (signBit !== 0) { // If sign bit is set
|
|
208
|
+
const highBitsMask = ~mask & ~((mask + 1) >> 1);
|
|
209
|
+
value |= highBitsMask; // Apply the sign extension
|
|
210
|
+
}
|
|
211
|
+
return value;
|
|
212
|
+
}
|
|
213
|
+
extractTimestampAndAdvanceIdx(msgBuffer, msgBufIdx, timestampWrapHandler) {
|
|
214
|
+
// Check there are enough characters for the timestamp
|
|
215
|
+
if (msgBufIdx + this.POLL_RESULT_TIMESTAMP_SIZE > msgBuffer.length) {
|
|
216
|
+
return { newBufIdx: -1, timestampUs: 0 };
|
|
217
|
+
}
|
|
218
|
+
// Use struct to extract the timestamp
|
|
219
|
+
const tsBuffer = msgBuffer.slice(msgBufIdx, msgBufIdx + this.POLL_RESULT_TIMESTAMP_SIZE);
|
|
220
|
+
let timestampUs;
|
|
221
|
+
if (this.POLL_RESULT_TIMESTAMP_SIZE === 2) {
|
|
222
|
+
timestampUs = python_struct_1.default.unpack(">H", tsBuffer)[0] * this.POLL_RESULT_RESOLUTION_US;
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
timestampUs = python_struct_1.default.unpack(">I", tsBuffer)[0] * this.POLL_RESULT_RESOLUTION_US;
|
|
226
|
+
}
|
|
227
|
+
// Check if time is before lastReportTimeMs - in which case a wrap around occurred to add on the max value
|
|
228
|
+
if (timestampUs < timestampWrapHandler.lastReportTimestampUs) {
|
|
229
|
+
timestampWrapHandler.reportTimestampOffsetUs += this.POLL_RESULT_WRAP_VALUE * this.POLL_RESULT_RESOLUTION_US;
|
|
230
|
+
}
|
|
231
|
+
timestampWrapHandler.lastReportTimestampUs = timestampUs;
|
|
232
|
+
// Offset timestamp
|
|
233
|
+
timestampUs += timestampWrapHandler.reportTimestampOffsetUs;
|
|
234
|
+
// Advance the index
|
|
235
|
+
msgBufIdx += this.POLL_RESULT_TIMESTAMP_SIZE;
|
|
236
|
+
// Return the timestamp
|
|
237
|
+
return { newBufIdx: msgBufIdx, timestampUs: timestampUs };
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
exports.default = AttributeHandler;
|
|
241
|
+
//# sourceMappingURL=RaftAttributeHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftAttributeHandler.js","sourceRoot":"","sources":["../src/RaftAttributeHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { RaftConnEventFn } from "./RaftConnEvents";
|
|
2
|
+
import RaftMsgHandler from "./RaftMsgHandler";
|
|
3
|
+
import { ConnectorOptions } from "./RaftSystemType";
|
|
4
|
+
export default interface RaftChannel {
|
|
5
|
+
isConnected(): boolean;
|
|
6
|
+
connect(locator: string | object, connectorOptions: ConnectorOptions): Promise<boolean>;
|
|
7
|
+
disconnect(): Promise<void>;
|
|
8
|
+
getConnectedLocator(): string | object;
|
|
9
|
+
setOnConnEvent(connEventFn: RaftConnEventFn): void;
|
|
10
|
+
setMsgHandler(raftMsgHandler: RaftMsgHandler): void;
|
|
11
|
+
sendTxMsg(msg: Uint8Array, sendWithResponse: boolean): Promise<boolean>;
|
|
12
|
+
sendTxMsgNoAwait(msg: Uint8Array, sendWithResponse: boolean): Promise<boolean>;
|
|
13
|
+
requiresSubscription(): boolean;
|
|
14
|
+
ricRestCmdBeforeDisconnect(): string | null;
|
|
15
|
+
fhBatchAckSize(): number;
|
|
16
|
+
fhFileBlockSize(): number;
|
|
17
|
+
pauseConnection(pause: boolean): void;
|
|
18
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftChannel
|
|
5
|
+
// Part of RaftJS
|
|
6
|
+
//
|
|
7
|
+
// Rob Dobson & Chris Greening 2020-2024
|
|
8
|
+
// (C) 2020-2024 All rights reserved
|
|
9
|
+
//
|
|
10
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
//# sourceMappingURL=RaftChannel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftChannel.js","sourceRoot":"","sources":["../src/RaftChannel.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,cAAc;AACd,iBAAiB;AACjB,EAAE;AACF,wCAAwC;AACxC,oCAAoC;AACpC,EAAE;AACF,iHAAiH"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import RaftChannel from "./RaftChannel";
|
|
2
|
+
import { RaftConnEventFn } from "./RaftConnEvents";
|
|
3
|
+
import RaftMsgHandler from "./RaftMsgHandler";
|
|
4
|
+
import { ConnectorOptions } from "./RaftSystemType";
|
|
5
|
+
export default class RaftChannelWebBLE implements RaftChannel {
|
|
6
|
+
static ServiceUUID: string;
|
|
7
|
+
static CmdUUID: string;
|
|
8
|
+
static RespUUID: string;
|
|
9
|
+
private _bleDevice;
|
|
10
|
+
private _characteristicTx;
|
|
11
|
+
private _characteristicRx;
|
|
12
|
+
private _raftMsgHandler;
|
|
13
|
+
private _onConnEvent;
|
|
14
|
+
private _msgTxTimeLast;
|
|
15
|
+
private _msgTxMinTimeBetweenMs;
|
|
16
|
+
private readonly maxRetries;
|
|
17
|
+
private _isConnected;
|
|
18
|
+
private readonly _maxConnRetries;
|
|
19
|
+
private _eventListenerFn;
|
|
20
|
+
private _requestedBatchAckSize;
|
|
21
|
+
private _requestedFileBlockSize;
|
|
22
|
+
fhBatchAckSize(): number;
|
|
23
|
+
fhFileBlockSize(): number;
|
|
24
|
+
setMsgHandler(raftMsgHandler: RaftMsgHandler): void;
|
|
25
|
+
requiresSubscription(): boolean;
|
|
26
|
+
ricRestCmdBeforeDisconnect(): string | null;
|
|
27
|
+
isEnabled(): boolean;
|
|
28
|
+
isConnected(): boolean;
|
|
29
|
+
setOnConnEvent(connEventFn: RaftConnEventFn): void;
|
|
30
|
+
onDisconnected(event: Event): void;
|
|
31
|
+
getConnectedLocator(): string | object;
|
|
32
|
+
connect(locator: string | object, _connectorOptions: ConnectorOptions): Promise<boolean>;
|
|
33
|
+
disconnect(): Promise<void>;
|
|
34
|
+
pauseConnection(pause: boolean): void;
|
|
35
|
+
_onMsgRx(event: Event): void;
|
|
36
|
+
sendTxMsg(msg: Uint8Array): Promise<boolean>;
|
|
37
|
+
sendTxMsgNoAwait(msg: Uint8Array): Promise<boolean>;
|
|
38
|
+
}
|