@robotical/raftjs 1.3.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/.editorconfig +14 -0
- package/.gitattributes +11 -0
- package/.nvmrc +1 -0
- package/LICENSE +22 -0
- package/README.md +13 -0
- package/TODO.md +1 -0
- package/dist/react-native/RaftAttributeHandler.d.ts +12 -0
- package/dist/react-native/RaftAttributeHandler.js +241 -0
- package/dist/react-native/RaftAttributeHandler.js.map +1 -0
- package/dist/react-native/RaftChannel.d.ts +18 -0
- package/dist/react-native/RaftChannel.js +12 -0
- package/dist/react-native/RaftChannel.js.map +1 -0
- package/dist/react-native/RaftChannelBLE.native.d.ts +93 -0
- package/dist/react-native/RaftChannelBLE.native.js +455 -0
- package/dist/react-native/RaftChannelBLE.native.js.map +1 -0
- package/dist/react-native/RaftChannelBLE.web.d.ts +39 -0
- package/dist/react-native/RaftChannelBLE.web.js +294 -0
- package/dist/react-native/RaftChannelBLE.web.js.map +1 -0
- package/dist/react-native/RaftChannelBLEFactory.d.ts +10 -0
- package/dist/react-native/RaftChannelBLEFactory.js +17 -0
- package/dist/react-native/RaftChannelBLEFactory.js.map +1 -0
- package/dist/react-native/RaftChannelBLEScanner.native.d.ts +18 -0
- package/dist/react-native/RaftChannelBLEScanner.native.js +146 -0
- package/dist/react-native/RaftChannelBLEScanner.native.js.map +1 -0
- package/dist/react-native/RaftChannelWebSerial.d.ts +37 -0
- package/dist/react-native/RaftChannelWebSerial.js +320 -0
- package/dist/react-native/RaftChannelWebSerial.js.map +1 -0
- package/dist/react-native/RaftChannelWebSocket.d.ts +28 -0
- package/dist/react-native/RaftChannelWebSocket.js +197 -0
- package/dist/react-native/RaftChannelWebSocket.js.map +1 -0
- package/dist/react-native/RaftCommsStats.d.ts +39 -0
- package/dist/react-native/RaftCommsStats.js +128 -0
- package/dist/react-native/RaftCommsStats.js.map +1 -0
- package/dist/react-native/RaftConnEvents.d.ts +39 -0
- package/dist/react-native/RaftConnEvents.js +54 -0
- package/dist/react-native/RaftConnEvents.js.map +1 -0
- package/dist/react-native/RaftConnector.d.ts +245 -0
- package/dist/react-native/RaftConnector.js +614 -0
- package/dist/react-native/RaftConnector.js.map +1 -0
- package/dist/react-native/RaftCustomAttrHandler.d.ts +4 -0
- package/dist/react-native/RaftCustomAttrHandler.js +50 -0
- package/dist/react-native/RaftCustomAttrHandler.js.map +1 -0
- package/dist/react-native/RaftDeviceInfo.d.ts +59 -0
- package/dist/react-native/RaftDeviceInfo.js +36 -0
- package/dist/react-native/RaftDeviceInfo.js.map +1 -0
- package/dist/react-native/RaftDeviceManager.d.ts +35 -0
- package/dist/react-native/RaftDeviceManager.js +353 -0
- package/dist/react-native/RaftDeviceManager.js.map +1 -0
- package/dist/react-native/RaftDeviceMgrIF.d.ts +12 -0
- package/dist/react-native/RaftDeviceMgrIF.js +11 -0
- package/dist/react-native/RaftDeviceMgrIF.js.map +1 -0
- package/dist/react-native/RaftDeviceMsg.d.ts +9 -0
- package/dist/react-native/RaftDeviceMsg.js +11 -0
- package/dist/react-native/RaftDeviceMsg.js.map +1 -0
- package/dist/react-native/RaftDeviceStates.d.ts +33 -0
- package/dist/react-native/RaftDeviceStates.js +60 -0
- package/dist/react-native/RaftDeviceStates.js.map +1 -0
- package/dist/react-native/RaftFileHandler.d.ts +52 -0
- package/dist/react-native/RaftFileHandler.js +502 -0
- package/dist/react-native/RaftFileHandler.js.map +1 -0
- package/dist/react-native/RaftLog.d.ts +22 -0
- package/dist/react-native/RaftLog.js +63 -0
- package/dist/react-native/RaftLog.js.map +1 -0
- package/dist/react-native/RaftMiniHDLC.d.ts +18 -0
- package/dist/react-native/RaftMiniHDLC.js +383 -0
- package/dist/react-native/RaftMiniHDLC.js.map +1 -0
- package/dist/react-native/RaftMsgHandler.d.ts +57 -0
- package/dist/react-native/RaftMsgHandler.js +480 -0
- package/dist/react-native/RaftMsgHandler.js.map +1 -0
- package/dist/react-native/RaftMsgTrackInfo.d.ts +17 -0
- package/dist/react-native/RaftMsgTrackInfo.js +42 -0
- package/dist/react-native/RaftMsgTrackInfo.js.map +1 -0
- package/dist/react-native/RaftProtocolDefs.d.ts +30 -0
- package/dist/react-native/RaftProtocolDefs.js +48 -0
- package/dist/react-native/RaftProtocolDefs.js.map +1 -0
- package/dist/react-native/RaftStreamHandler.d.ts +38 -0
- package/dist/react-native/RaftStreamHandler.js +257 -0
- package/dist/react-native/RaftStreamHandler.js.map +1 -0
- package/dist/react-native/RaftSystemType.d.ts +25 -0
- package/dist/react-native/RaftSystemType.js +3 -0
- package/dist/react-native/RaftSystemType.js.map +1 -0
- package/dist/react-native/RaftSystemUtils.d.ts +136 -0
- package/dist/react-native/RaftSystemUtils.js +410 -0
- package/dist/react-native/RaftSystemUtils.js.map +1 -0
- package/dist/react-native/RaftTypes.d.ts +195 -0
- package/dist/react-native/RaftTypes.js +190 -0
- package/dist/react-native/RaftTypes.js.map +1 -0
- package/dist/react-native/RaftUpdateEvents.d.ts +33 -0
- package/dist/react-native/RaftUpdateEvents.js +46 -0
- package/dist/react-native/RaftUpdateEvents.js.map +1 -0
- package/dist/react-native/RaftUpdateManager.d.ts +61 -0
- package/dist/react-native/RaftUpdateManager.js +618 -0
- package/dist/react-native/RaftUpdateManager.js.map +1 -0
- package/dist/react-native/RaftUtils.d.ts +125 -0
- package/dist/react-native/RaftUtils.js +454 -0
- package/dist/react-native/RaftUtils.js.map +1 -0
- package/dist/react-native/RaftWifiTypes.d.ts +23 -0
- package/dist/react-native/RaftWifiTypes.js +43 -0
- package/dist/react-native/RaftWifiTypes.js.map +1 -0
- package/dist/react-native/main.d.ts +22 -0
- package/dist/react-native/main.js +48 -0
- package/dist/react-native/main.js.map +1 -0
- package/dist/web/RaftAttributeHandler.d.ts +12 -0
- package/dist/web/RaftAttributeHandler.js +241 -0
- package/dist/web/RaftAttributeHandler.js.map +1 -0
- package/dist/web/RaftChannel.d.ts +18 -0
- package/dist/web/RaftChannel.js +12 -0
- package/dist/web/RaftChannel.js.map +1 -0
- package/dist/web/RaftChannelBLE.web.d.ts +39 -0
- package/dist/web/RaftChannelBLE.web.js +294 -0
- package/dist/web/RaftChannelBLE.web.js.map +1 -0
- package/dist/web/RaftChannelBLEFactory.d.ts +10 -0
- package/dist/web/RaftChannelBLEFactory.js +17 -0
- package/dist/web/RaftChannelBLEFactory.js.map +1 -0
- package/dist/web/RaftChannelWebSerial.d.ts +37 -0
- package/dist/web/RaftChannelWebSerial.js +320 -0
- package/dist/web/RaftChannelWebSerial.js.map +1 -0
- package/dist/web/RaftChannelWebSocket.d.ts +28 -0
- package/dist/web/RaftChannelWebSocket.js +197 -0
- package/dist/web/RaftChannelWebSocket.js.map +1 -0
- package/dist/web/RaftCommsStats.d.ts +39 -0
- package/dist/web/RaftCommsStats.js +128 -0
- package/dist/web/RaftCommsStats.js.map +1 -0
- package/dist/web/RaftConnEvents.d.ts +39 -0
- package/dist/web/RaftConnEvents.js +54 -0
- package/dist/web/RaftConnEvents.js.map +1 -0
- package/dist/web/RaftConnector.d.ts +245 -0
- package/dist/web/RaftConnector.js +614 -0
- package/dist/web/RaftConnector.js.map +1 -0
- package/dist/web/RaftCustomAttrHandler.d.ts +4 -0
- package/dist/web/RaftCustomAttrHandler.js +50 -0
- package/dist/web/RaftCustomAttrHandler.js.map +1 -0
- package/dist/web/RaftDeviceInfo.d.ts +59 -0
- package/dist/web/RaftDeviceInfo.js +36 -0
- package/dist/web/RaftDeviceInfo.js.map +1 -0
- package/dist/web/RaftDeviceManager.d.ts +35 -0
- package/dist/web/RaftDeviceManager.js +353 -0
- package/dist/web/RaftDeviceManager.js.map +1 -0
- package/dist/web/RaftDeviceMgrIF.d.ts +12 -0
- package/dist/web/RaftDeviceMgrIF.js +11 -0
- package/dist/web/RaftDeviceMgrIF.js.map +1 -0
- package/dist/web/RaftDeviceMsg.d.ts +9 -0
- package/dist/web/RaftDeviceMsg.js +11 -0
- package/dist/web/RaftDeviceMsg.js.map +1 -0
- package/dist/web/RaftDeviceStates.d.ts +33 -0
- package/dist/web/RaftDeviceStates.js +60 -0
- package/dist/web/RaftDeviceStates.js.map +1 -0
- package/dist/web/RaftFileHandler.d.ts +52 -0
- package/dist/web/RaftFileHandler.js +502 -0
- package/dist/web/RaftFileHandler.js.map +1 -0
- package/dist/web/RaftLog.d.ts +22 -0
- package/dist/web/RaftLog.js +63 -0
- package/dist/web/RaftLog.js.map +1 -0
- package/dist/web/RaftMiniHDLC.d.ts +18 -0
- package/dist/web/RaftMiniHDLC.js +383 -0
- package/dist/web/RaftMiniHDLC.js.map +1 -0
- package/dist/web/RaftMsgHandler.d.ts +57 -0
- package/dist/web/RaftMsgHandler.js +480 -0
- package/dist/web/RaftMsgHandler.js.map +1 -0
- package/dist/web/RaftMsgTrackInfo.d.ts +17 -0
- package/dist/web/RaftMsgTrackInfo.js +42 -0
- package/dist/web/RaftMsgTrackInfo.js.map +1 -0
- package/dist/web/RaftProtocolDefs.d.ts +30 -0
- package/dist/web/RaftProtocolDefs.js +48 -0
- package/dist/web/RaftProtocolDefs.js.map +1 -0
- package/dist/web/RaftStreamHandler.d.ts +38 -0
- package/dist/web/RaftStreamHandler.js +257 -0
- package/dist/web/RaftStreamHandler.js.map +1 -0
- package/dist/web/RaftSystemType.d.ts +25 -0
- package/dist/web/RaftSystemType.js +3 -0
- package/dist/web/RaftSystemType.js.map +1 -0
- package/dist/web/RaftSystemUtils.d.ts +136 -0
- package/dist/web/RaftSystemUtils.js +410 -0
- package/dist/web/RaftSystemUtils.js.map +1 -0
- package/dist/web/RaftTypes.d.ts +195 -0
- package/dist/web/RaftTypes.js +190 -0
- package/dist/web/RaftTypes.js.map +1 -0
- package/dist/web/RaftUpdateEvents.d.ts +33 -0
- package/dist/web/RaftUpdateEvents.js +46 -0
- package/dist/web/RaftUpdateEvents.js.map +1 -0
- package/dist/web/RaftUpdateManager.d.ts +61 -0
- package/dist/web/RaftUpdateManager.js +618 -0
- package/dist/web/RaftUpdateManager.js.map +1 -0
- package/dist/web/RaftUtils.d.ts +125 -0
- package/dist/web/RaftUtils.js +454 -0
- package/dist/web/RaftUtils.js.map +1 -0
- package/dist/web/RaftWifiTypes.d.ts +23 -0
- package/dist/web/RaftWifiTypes.js +43 -0
- package/dist/web/RaftWifiTypes.js.map +1 -0
- package/dist/web/main.d.ts +22 -0
- package/dist/web/main.js +48 -0
- package/dist/web/main.js.map +1 -0
- package/eslint.config.mjs +33 -0
- package/examples/dashboard/package.json +43 -0
- package/examples/dashboard/src/CommandPanel.tsx +147 -0
- package/examples/dashboard/src/ConnManager.ts +85 -0
- package/examples/dashboard/src/DeviceActionsForm.tsx +133 -0
- package/examples/dashboard/src/DeviceAttrsForm.tsx +49 -0
- package/examples/dashboard/src/DeviceLineChart.tsx +139 -0
- package/examples/dashboard/src/DevicePanel.tsx +135 -0
- package/examples/dashboard/src/DevicesPanel.tsx +57 -0
- package/examples/dashboard/src/DispLedGrid.tsx +110 -0
- package/examples/dashboard/src/DispOneLed.tsx +20 -0
- package/examples/dashboard/src/Main.tsx +106 -0
- package/examples/dashboard/src/StatusPanel.tsx +71 -0
- package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +157 -0
- package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +84 -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 +78 -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 +116 -0
- package/examples/dashboard/src/index.html +15 -0
- package/examples/dashboard/src/index.tsx +15 -0
- package/examples/dashboard/src/styles.css +386 -0
- package/examples/dashboard/tsconfig.json +18 -0
- package/jest.config.js +11 -0
- package/package.json +59 -0
- package/src/RaftAttributeHandler.ts +289 -0
- package/src/RaftChannel.ts +30 -0
- package/src/RaftChannelBLE.native.ts +583 -0
- package/src/RaftChannelBLE.web.ts +362 -0
- package/src/RaftChannelBLEFactory.ts +13 -0
- package/src/RaftChannelBLEScanner.native.ts +190 -0
- package/src/RaftChannelWebSerial.ts +409 -0
- package/src/RaftChannelWebSocket.ts +245 -0
- package/src/RaftCommsStats.ts +142 -0
- package/src/RaftConnEvents.ts +58 -0
- package/src/RaftConnector.ts +737 -0
- package/src/RaftCustomAttrHandler.ts +54 -0
- package/src/RaftDeviceInfo.ts +98 -0
- package/src/RaftDeviceManager.ts +436 -0
- package/src/RaftDeviceMgrIF.ts +28 -0
- package/src/RaftDeviceMsg.ts +20 -0
- package/src/RaftDeviceStates.ts +88 -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 +29 -0
- package/src/RaftSystemUtils.ts +487 -0
- package/src/RaftTypes.ts +281 -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/main.ts +36 -0
- package/testdata/TestDeviceTypeRecs.json +492 -0
- package/tsconfig.json +30 -0
- package/tsconfig.react-native.json +29 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftCustomAttrHandler
|
|
5
|
+
// Custom attribute handler for Raft devices
|
|
6
|
+
//
|
|
7
|
+
// Rob Dobson (C) 2024
|
|
8
|
+
//
|
|
9
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
class CustomAttrHandler {
|
|
12
|
+
handleAttr(pollRespMetadata, msgBuffer, msgBufIdx) {
|
|
13
|
+
// Number of bytes in the each message
|
|
14
|
+
const numMsgBytes = pollRespMetadata.b;
|
|
15
|
+
// Create a vector for each attribute in the metadata
|
|
16
|
+
let attrValueVecs = [];
|
|
17
|
+
// Reference to each vector by attribute name
|
|
18
|
+
let attrValues = {};
|
|
19
|
+
// Add attributes to the vector
|
|
20
|
+
for (let attrIdx = 0; attrIdx < pollRespMetadata.a.length; attrIdx++) {
|
|
21
|
+
attrValueVecs.push([]);
|
|
22
|
+
attrValues[pollRespMetadata.a[attrIdx].n] = attrValueVecs[attrIdx];
|
|
23
|
+
}
|
|
24
|
+
// Custom code for each device type
|
|
25
|
+
if (pollRespMetadata.c.n === "max30101_fifo") {
|
|
26
|
+
// Hex dump msgBuffer
|
|
27
|
+
// console.log(`CustomAttrHandler handleAttr ${pollRespMetadata.c!.n} msgBuffer: ${msgBuffer.toString('hex')}`);
|
|
28
|
+
let buf = msgBuffer.slice(msgBufIdx);
|
|
29
|
+
if (buf.length < numMsgBytes) {
|
|
30
|
+
return [];
|
|
31
|
+
}
|
|
32
|
+
// Generated code ...
|
|
33
|
+
let N = (buf[0] + 32 - buf[2]) % 32;
|
|
34
|
+
let k = 3;
|
|
35
|
+
let i = 0;
|
|
36
|
+
while (i < N) {
|
|
37
|
+
attrValues['Red'].push(0);
|
|
38
|
+
attrValues['Red'][attrValues['Red'].length - 1] = (buf[k] << 16) | (buf[k + 1] << 8) | buf[k + 2];
|
|
39
|
+
attrValues['IR'].push(0);
|
|
40
|
+
attrValues['IR'][attrValues['IR'].length - 1] = (buf[k + 3] << 16) | (buf[k + 4] << 8) | buf[k + 5];
|
|
41
|
+
k += 6;
|
|
42
|
+
i++;
|
|
43
|
+
;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return attrValueVecs;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.default = CustomAttrHandler;
|
|
50
|
+
//# sourceMappingURL=RaftCustomAttrHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftCustomAttrHandler.js","sourceRoot":"","sources":["../../src/RaftCustomAttrHandler.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,wBAAwB;AACxB,4CAA4C;AAC5C,EAAE;AACF,sBAAsB;AACtB,EAAE;AACF,iHAAiH;;AAIjH,MAAqB,iBAAiB;IAE3B,UAAU,CAAC,gBAA4C,EAAE,SAAiB,EAAE,SAAiB;QAEhG,sCAAsC;QACtC,MAAM,WAAW,GAAG,gBAAgB,CAAC,CAAC,CAAC;QAEvC,qDAAqD;QACrD,IAAI,aAAa,GAAS,EAAE,CAAC;QAE7B,6CAA6C;QAC7C,IAAI,UAAU,GAAgC,EAAE,CAAC;QAEjD,+BAA+B;QAC/B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;YACnE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACvB,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;QACvE,CAAC;QAED,mCAAmC;QACnC,IAAI,gBAAgB,CAAC,CAAE,CAAC,CAAC,KAAK,eAAe,EAAE,CAAC;YAC5C,qBAAqB;YACrB,iHAAiH;YACjH,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACrC,IAAI,GAAG,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;gBAC3B,OAAO,EAAE,CAAC;YACd,CAAC;YAED,qBAAqB;YACrB,IAAI,CAAC,GAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAC,EAAE,GAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,GAAC,CAAC,CAAC;YACR,IAAI,CAAC,GAAC,CAAC,CAAC;YACR,OAAO,CAAC,GAAC,CAAC,EAAE,CAAC;gBACT,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,UAAU,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,GAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAE,EAAE,CAAC,GAAC,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,GAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;gBAC9G,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAAC,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC,GAAE,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,EAAE,CAAC,GAAC,CAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,IAAE,CAAC,CAAC,GAAC,GAAG,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC;gBAC7G,CAAC,IAAE,CAAC,CAAC;gBACL,CAAC,EAAE,CAAC;gBACJ,CAAC;YACL,CAAC;QACL,CAAC;QACD,OAAO,aAAa,CAAC;IACzB,CAAC;CACJ;AA1CD,oCA0CC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export declare function getAttrTypeBits(attrType: string): number;
|
|
2
|
+
export declare function isAttrTypeSigned(attrType: string): boolean;
|
|
3
|
+
export declare function decodeAttrUnitsEncoding(unitsEncoding: string): string;
|
|
4
|
+
export interface DeviceTypeAttribute {
|
|
5
|
+
n: string;
|
|
6
|
+
t: string;
|
|
7
|
+
at?: number;
|
|
8
|
+
u?: string;
|
|
9
|
+
r?: number[];
|
|
10
|
+
x?: number;
|
|
11
|
+
m?: number | string;
|
|
12
|
+
s?: number;
|
|
13
|
+
sb?: number;
|
|
14
|
+
ss?: number;
|
|
15
|
+
d?: number;
|
|
16
|
+
a?: number;
|
|
17
|
+
f?: string;
|
|
18
|
+
o?: string;
|
|
19
|
+
v?: boolean | number;
|
|
20
|
+
vs?: boolean | number;
|
|
21
|
+
vf?: boolean | number;
|
|
22
|
+
}
|
|
23
|
+
export interface CustomFunctionDefinition {
|
|
24
|
+
n: string;
|
|
25
|
+
c: string;
|
|
26
|
+
}
|
|
27
|
+
export interface DeviceTypePollRespMetadata {
|
|
28
|
+
b: number;
|
|
29
|
+
a: DeviceTypeAttribute[];
|
|
30
|
+
c?: CustomFunctionDefinition;
|
|
31
|
+
us?: number;
|
|
32
|
+
}
|
|
33
|
+
export interface DeviceTypeAction {
|
|
34
|
+
n: string;
|
|
35
|
+
t?: string;
|
|
36
|
+
w: string;
|
|
37
|
+
r?: number[];
|
|
38
|
+
f?: string;
|
|
39
|
+
NX?: number;
|
|
40
|
+
NY?: number;
|
|
41
|
+
concat?: boolean;
|
|
42
|
+
d?: number;
|
|
43
|
+
}
|
|
44
|
+
export interface DeviceTypeInfo {
|
|
45
|
+
name: string;
|
|
46
|
+
desc: string;
|
|
47
|
+
manu: string;
|
|
48
|
+
type: string;
|
|
49
|
+
resp?: DeviceTypePollRespMetadata;
|
|
50
|
+
actions?: DeviceTypeAction[];
|
|
51
|
+
}
|
|
52
|
+
export interface DeviceTypeInfoRecs {
|
|
53
|
+
[devType: string]: DeviceTypeInfo;
|
|
54
|
+
}
|
|
55
|
+
export type RaftDevTypeInfoResponse = {
|
|
56
|
+
req: string;
|
|
57
|
+
rslt: string;
|
|
58
|
+
devinfo: DeviceTypeInfo;
|
|
59
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftDeviceInfo
|
|
5
|
+
// Device information for Raft devices
|
|
6
|
+
//
|
|
7
|
+
// Rob Dobson (C) 2024
|
|
8
|
+
//
|
|
9
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.getAttrTypeBits = getAttrTypeBits;
|
|
12
|
+
exports.isAttrTypeSigned = isAttrTypeSigned;
|
|
13
|
+
exports.decodeAttrUnitsEncoding = decodeAttrUnitsEncoding;
|
|
14
|
+
const attrTypeBits = {
|
|
15
|
+
"c": 8, "b": 8, "B": 8, "?": 8,
|
|
16
|
+
"h": 16, "H": 16, ">h": 16, "<h": 16, ">H": 16, "<H": 16,
|
|
17
|
+
"i": 32, "I": 32, ">i": 32, "<i": 32, ">I": 32, "<I": 32, "l": 32, "L": 32, ">l": 32, "<l": 32, ">L": 32, "<L": 32,
|
|
18
|
+
"q": 64, "Q": 64, ">q": 64, "<q": 64, ">Q": 64, "<Q": 64,
|
|
19
|
+
"f": 32, ">f": 32, "<f": 32,
|
|
20
|
+
"d": 64, ">d": 64, "<d": 64,
|
|
21
|
+
};
|
|
22
|
+
function getAttrTypeBits(attrType) {
|
|
23
|
+
if (attrType in attrTypeBits) {
|
|
24
|
+
return attrTypeBits[attrType];
|
|
25
|
+
}
|
|
26
|
+
return 8;
|
|
27
|
+
}
|
|
28
|
+
function isAttrTypeSigned(attrType) {
|
|
29
|
+
const attrStr = attrType.charAt(0) === ">" || attrType.charAt(0) === "<" ? attrType.slice(1).charAt(0) : attrType.charAt(0);
|
|
30
|
+
return attrStr === "b" || attrStr === "h" || attrStr === "i" || attrStr === "l" || attrStr === "q";
|
|
31
|
+
}
|
|
32
|
+
function decodeAttrUnitsEncoding(unitsEncoding) {
|
|
33
|
+
// Replace instances of HTML encoded chars like ° with the actual char
|
|
34
|
+
return unitsEncoding.replace(/°/g, "°");
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=RaftDeviceInfo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftDeviceInfo.js","sourceRoot":"","sources":["../../src/RaftDeviceInfo.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,iBAAiB;AACjB,sCAAsC;AACtC,EAAE;AACF,sBAAsB;AACtB,EAAE;AACF,iHAAiH;;AAWjH,0CAKC;AAED,4CAGC;AAED,0DAGC;AAxBD,MAAM,YAAY,GAA8B;IAC5C,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC9B,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IACxD,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IAClH,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IACxD,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;IAC3B,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;CAC1B,CAAC;AAEN,SAAgB,eAAe,CAAC,QAAgB;IAC5C,IAAI,QAAQ,IAAI,YAAY,EAAE,CAAC;QAC3B,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5H,OAAO,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,GAAG,CAAC;AACvG,CAAC;AAED,SAAgB,uBAAuB,CAAC,aAAqB;IACzD,0EAA0E;IAC1E,OAAO,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { DeviceAttributeState, DevicesState, DeviceState } from "./RaftDeviceStates";
|
|
2
|
+
import { DeviceTypeAction } from "./RaftDeviceInfo";
|
|
3
|
+
import { DataType } from 'python-struct';
|
|
4
|
+
import RaftSystemUtils from "./RaftSystemUtils";
|
|
5
|
+
import RaftDeviceMgrIF from "./RaftDeviceMgrIF";
|
|
6
|
+
export declare class DeviceManager implements RaftDeviceMgrIF {
|
|
7
|
+
private _maxDatapointsToStore;
|
|
8
|
+
private _minTimeBetweenDeviceTypeInfoRetrievalMs;
|
|
9
|
+
private _attributeHandler;
|
|
10
|
+
private _devicesState;
|
|
11
|
+
private _deviceLastUpdateTime;
|
|
12
|
+
private _removeDevicesFlag;
|
|
13
|
+
private _removeDevicesTimeMs;
|
|
14
|
+
private _systemUtils;
|
|
15
|
+
private _callbackNewDevice;
|
|
16
|
+
private _callbackNewDeviceAttribute;
|
|
17
|
+
private _callbackNewAttributeData;
|
|
18
|
+
getDevicesState(): DevicesState;
|
|
19
|
+
getDeviceState(deviceKey: string): DeviceState;
|
|
20
|
+
private _cachedDeviceTypeRecs;
|
|
21
|
+
private _cachedDeviceTypePreviousAttemptTimes;
|
|
22
|
+
constructor();
|
|
23
|
+
sendCommand(cmd: string): Promise<boolean>;
|
|
24
|
+
setup(systemUtils: RaftSystemUtils): Promise<boolean>;
|
|
25
|
+
onNewDevice(callback: (deviceKey: string, state: DeviceState) => void): void;
|
|
26
|
+
onNewDeviceAttribute(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
|
|
27
|
+
onNewAttributeData(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
|
|
28
|
+
setFriendlyName(friendlyName: string): Promise<void>;
|
|
29
|
+
handleClientMsgJson(jsonMsg: string): void;
|
|
30
|
+
private processStateCallback;
|
|
31
|
+
private getDeviceTypeInfo;
|
|
32
|
+
sendAction(deviceKey: string, action: DeviceTypeAction, data: DataType[]): Promise<boolean>;
|
|
33
|
+
sendCompoundAction(deviceKey: string, action: DeviceTypeAction, data: DataType[][]): Promise<boolean>;
|
|
34
|
+
private hexToBytes;
|
|
35
|
+
}
|
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftDeviceManager
|
|
5
|
+
// Device manager for Raft devices
|
|
6
|
+
//
|
|
7
|
+
// Rob Dobson (C) 2024
|
|
8
|
+
//
|
|
9
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.DeviceManager = void 0;
|
|
12
|
+
const tslib_1 = require("tslib");
|
|
13
|
+
const RaftDeviceStates_1 = require("./RaftDeviceStates");
|
|
14
|
+
const python_struct_1 = tslib_1.__importDefault(require("python-struct"));
|
|
15
|
+
const RaftAttributeHandler_1 = tslib_1.__importDefault(require("./RaftAttributeHandler"));
|
|
16
|
+
const buffer_1 = require("buffer");
|
|
17
|
+
class DeviceManager {
|
|
18
|
+
getDevicesState() {
|
|
19
|
+
return this._devicesState;
|
|
20
|
+
}
|
|
21
|
+
getDeviceState(deviceKey) {
|
|
22
|
+
return this._devicesState[deviceKey];
|
|
23
|
+
}
|
|
24
|
+
// Constructor
|
|
25
|
+
constructor() {
|
|
26
|
+
// Singleton
|
|
27
|
+
// private static _instance: DeviceManager;
|
|
28
|
+
// Max data points to store
|
|
29
|
+
this._maxDatapointsToStore = 1000;
|
|
30
|
+
// Min time between attempts to retrieve device type info
|
|
31
|
+
this._minTimeBetweenDeviceTypeInfoRetrievalMs = 60000;
|
|
32
|
+
// Attribute handler
|
|
33
|
+
this._attributeHandler = new RaftAttributeHandler_1.default();
|
|
34
|
+
// Devices state
|
|
35
|
+
this._devicesState = new RaftDeviceStates_1.DevicesState();
|
|
36
|
+
// Last time each device was updated - used to detect devices that are no longer present
|
|
37
|
+
this._deviceLastUpdateTime = {};
|
|
38
|
+
// Flag indicating that removed devices should be removed from the state
|
|
39
|
+
this._removeDevicesFlag = true;
|
|
40
|
+
this._removeDevicesTimeMs = 60000;
|
|
41
|
+
// System utils
|
|
42
|
+
this._systemUtils = null;
|
|
43
|
+
// Device callbacks
|
|
44
|
+
this._callbackNewDevice = null;
|
|
45
|
+
this._callbackNewDeviceAttribute = null;
|
|
46
|
+
this._callbackNewAttributeData = null;
|
|
47
|
+
// Cached device type data
|
|
48
|
+
this._cachedDeviceTypeRecs = {};
|
|
49
|
+
// Cached device type previous attempt times
|
|
50
|
+
this._cachedDeviceTypePreviousAttemptTimes = {};
|
|
51
|
+
}
|
|
52
|
+
////////////////////////////////////////////////////////////////////////////
|
|
53
|
+
// Send REST commands
|
|
54
|
+
////////////////////////////////////////////////////////////////////////////
|
|
55
|
+
async sendCommand(cmd) {
|
|
56
|
+
var _a;
|
|
57
|
+
try {
|
|
58
|
+
// Get the msg handler
|
|
59
|
+
const msgHandler = (_a = this._systemUtils) === null || _a === void 0 ? void 0 : _a.getMsgHandler();
|
|
60
|
+
if (msgHandler) {
|
|
61
|
+
const msgRslt = await msgHandler.sendRICRESTURL(cmd);
|
|
62
|
+
return msgRslt.isOk();
|
|
63
|
+
}
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.warn(`DeviceManager sendCommand error ${error}`);
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
////////////////////////////////////////////////////////////////////////////
|
|
72
|
+
// Setup
|
|
73
|
+
////////////////////////////////////////////////////////////////////////////
|
|
74
|
+
async setup(systemUtils) {
|
|
75
|
+
// Save the system utils
|
|
76
|
+
this._systemUtils = systemUtils;
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
////////////////////////////////////////////////////////////////////////////
|
|
80
|
+
// Callbacks
|
|
81
|
+
////////////////////////////////////////////////////////////////////////////
|
|
82
|
+
// Register state change callbacks
|
|
83
|
+
onNewDevice(callback) {
|
|
84
|
+
// Save the callback
|
|
85
|
+
this._callbackNewDevice = callback;
|
|
86
|
+
}
|
|
87
|
+
onNewDeviceAttribute(callback) {
|
|
88
|
+
// Save the callback
|
|
89
|
+
this._callbackNewDeviceAttribute = callback;
|
|
90
|
+
}
|
|
91
|
+
onNewAttributeData(callback) {
|
|
92
|
+
// Save the callback
|
|
93
|
+
this._callbackNewAttributeData = callback;
|
|
94
|
+
}
|
|
95
|
+
////////////////////////////////////////////////////////////////////////////
|
|
96
|
+
// Set the friendly name for the device
|
|
97
|
+
////////////////////////////////////////////////////////////////////////////
|
|
98
|
+
async setFriendlyName(friendlyName) {
|
|
99
|
+
var _a;
|
|
100
|
+
// Set using utils
|
|
101
|
+
await ((_a = this._systemUtils) === null || _a === void 0 ? void 0 : _a.setRaftName(friendlyName));
|
|
102
|
+
}
|
|
103
|
+
////////////////////////////////////////////////////////////////////////////
|
|
104
|
+
// Handle device message JSON
|
|
105
|
+
////////////////////////////////////////////////////////////////////////////
|
|
106
|
+
handleClientMsgJson(jsonMsg) {
|
|
107
|
+
let data = JSON.parse(jsonMsg);
|
|
108
|
+
// console.log(`DeviceManager websocket message ${JSON.stringify(data)}`);
|
|
109
|
+
// Iterate over the buses
|
|
110
|
+
Object.entries(data).forEach(([busName, devices]) => {
|
|
111
|
+
// Check for bus status info
|
|
112
|
+
if (devices && typeof devices === "object" && "_s" in devices) {
|
|
113
|
+
// console.log(`DeviceManager bus status ${JSON.stringify(devices._s)}`);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
// Iterate over the devices
|
|
117
|
+
Object.entries(devices).forEach(async ([devAddr, attrGroups]) => {
|
|
118
|
+
// Check for non-device info (starts with _)
|
|
119
|
+
if (devAddr.startsWith("_")) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
// Device key
|
|
123
|
+
const deviceKey = (0, RaftDeviceStates_1.getDeviceKey)(busName, devAddr);
|
|
124
|
+
// Update the last update time
|
|
125
|
+
this._deviceLastUpdateTime[deviceKey] = Date.now();
|
|
126
|
+
// Check if a device state already exists
|
|
127
|
+
if (!(deviceKey in this._devicesState) || (this._devicesState[deviceKey].deviceTypeInfo === undefined)) {
|
|
128
|
+
let deviceTypeName = "";
|
|
129
|
+
if (attrGroups && typeof attrGroups === 'object' && "_t" in attrGroups && typeof attrGroups._t === "string") {
|
|
130
|
+
deviceTypeName = attrGroups._t || "";
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.warn(`DeviceManager missing device type attrGroups ${JSON.stringify(attrGroups)}`);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// Get the device type info
|
|
137
|
+
const deviceTypeInfo = await this.getDeviceTypeInfo(busName, devAddr, deviceTypeName);
|
|
138
|
+
// Check if device record exists
|
|
139
|
+
if (deviceKey in this._devicesState) {
|
|
140
|
+
if (deviceTypeInfo !== undefined) {
|
|
141
|
+
this._devicesState[deviceKey].deviceTypeInfo = deviceTypeInfo;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
// Create device record - device type info may be undefined
|
|
146
|
+
this._devicesState[deviceKey] = {
|
|
147
|
+
deviceTypeInfo: deviceTypeInfo,
|
|
148
|
+
deviceTimeline: {
|
|
149
|
+
timestampsUs: [],
|
|
150
|
+
lastReportTimestampUs: 0,
|
|
151
|
+
reportTimestampOffsetUs: 0
|
|
152
|
+
},
|
|
153
|
+
deviceAttributes: {},
|
|
154
|
+
deviceIsNew: true,
|
|
155
|
+
stateChanged: false,
|
|
156
|
+
isOnline: true
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Get device state
|
|
161
|
+
const deviceState = this._devicesState[deviceKey];
|
|
162
|
+
// Check for online/offline state information
|
|
163
|
+
if (attrGroups && typeof attrGroups === "object" && "_o" in attrGroups) {
|
|
164
|
+
deviceState.isOnline = ((attrGroups._o === true) || (attrGroups._o === "1") || (attrGroups._o === 1));
|
|
165
|
+
}
|
|
166
|
+
// Check if device type info is available
|
|
167
|
+
if (!deviceState.deviceTypeInfo) {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
// Iterate attribute groups
|
|
171
|
+
Object.entries(attrGroups).forEach(([attrGroupName, msgHexStr]) => {
|
|
172
|
+
// Check valid
|
|
173
|
+
if (attrGroupName.startsWith("_") || (typeof msgHexStr != 'string')) {
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
// Check the device type info
|
|
177
|
+
if (!deviceState.deviceTypeInfo.resp) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
// Convert the hex string to an arraybuffer by converting each pair of hex chars to a byte
|
|
181
|
+
const msgBytes = this.hexToBytes(msgHexStr);
|
|
182
|
+
// Convert to a Buffer
|
|
183
|
+
const msgBuffer = buffer_1.Buffer.from(msgBytes);
|
|
184
|
+
// Work through the message which may contain multiple data instances
|
|
185
|
+
let msgBufIdx = 0;
|
|
186
|
+
// Iterate over attributes in the group
|
|
187
|
+
const pollRespMetadata = deviceState.deviceTypeInfo.resp;
|
|
188
|
+
// Loop
|
|
189
|
+
while (msgBufIdx < msgBytes.length) {
|
|
190
|
+
const curTimelineLen = deviceState.deviceTimeline.timestampsUs.length;
|
|
191
|
+
const newMsgBufIdx = this._attributeHandler.processMsgAttrGroup(msgBuffer, msgBufIdx, deviceState.deviceTimeline, pollRespMetadata, deviceState.deviceAttributes, this._maxDatapointsToStore);
|
|
192
|
+
if (newMsgBufIdx < 0)
|
|
193
|
+
break;
|
|
194
|
+
msgBufIdx = newMsgBufIdx;
|
|
195
|
+
if (deviceState.deviceTimeline.timestampsUs.length !== curTimelineLen) {
|
|
196
|
+
deviceState.stateChanged = true;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
// Check for devices that have not been updated for a while
|
|
203
|
+
if (this._removeDevicesFlag) {
|
|
204
|
+
const nowTime = Date.now();
|
|
205
|
+
Object.entries(this._deviceLastUpdateTime).forEach(([deviceKey, lastUpdateTime]) => {
|
|
206
|
+
if ((nowTime - lastUpdateTime) > this._removeDevicesTimeMs) {
|
|
207
|
+
delete this._devicesState[deviceKey];
|
|
208
|
+
}
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
// Process the callback
|
|
212
|
+
this.processStateCallback();
|
|
213
|
+
}
|
|
214
|
+
////////////////////////////////////////////////////////////////////////////
|
|
215
|
+
// Process state change callback
|
|
216
|
+
////////////////////////////////////////////////////////////////////////////
|
|
217
|
+
processStateCallback() {
|
|
218
|
+
// Iterate over the devices
|
|
219
|
+
Object.entries(this._devicesState).forEach(([deviceKey, deviceState]) => {
|
|
220
|
+
// Check if device record is new
|
|
221
|
+
if (deviceState.deviceIsNew) {
|
|
222
|
+
if (this._callbackNewDevice) {
|
|
223
|
+
this._callbackNewDevice(deviceKey, deviceState);
|
|
224
|
+
}
|
|
225
|
+
deviceState.deviceIsNew = false;
|
|
226
|
+
}
|
|
227
|
+
// Iterate over the attributes
|
|
228
|
+
Object.entries(deviceState.deviceAttributes).forEach(([_attrKey, attrState]) => {
|
|
229
|
+
if (attrState.newAttribute) {
|
|
230
|
+
if (this._callbackNewDeviceAttribute) {
|
|
231
|
+
this._callbackNewDeviceAttribute(deviceKey, attrState);
|
|
232
|
+
}
|
|
233
|
+
attrState.newAttribute = false;
|
|
234
|
+
}
|
|
235
|
+
if (attrState.newData) {
|
|
236
|
+
if (this._callbackNewAttributeData) {
|
|
237
|
+
this._callbackNewAttributeData(deviceKey, attrState);
|
|
238
|
+
}
|
|
239
|
+
attrState.newData = false;
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
});
|
|
243
|
+
}
|
|
244
|
+
////////////////////////////////////////////////////////////////////////////
|
|
245
|
+
// Get device type info
|
|
246
|
+
////////////////////////////////////////////////////////////////////////////
|
|
247
|
+
async getDeviceTypeInfo(busName, _devAddr, deviceType) {
|
|
248
|
+
var _a;
|
|
249
|
+
// Check if already in the cache
|
|
250
|
+
if (deviceType in this._cachedDeviceTypeRecs) {
|
|
251
|
+
return this._cachedDeviceTypeRecs[deviceType];
|
|
252
|
+
}
|
|
253
|
+
// Check if we have tried to get device info previously (and failed presumably since it isn't in the cache)
|
|
254
|
+
if (deviceType in this._cachedDeviceTypePreviousAttemptTimes) {
|
|
255
|
+
// Check if we should retry
|
|
256
|
+
if ((Date.now() - this._cachedDeviceTypePreviousAttemptTimes[deviceType]) < this._minTimeBetweenDeviceTypeInfoRetrievalMs) {
|
|
257
|
+
return undefined;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
this._cachedDeviceTypePreviousAttemptTimes[deviceType] = Date.now();
|
|
261
|
+
// Get the device type info from the server
|
|
262
|
+
try {
|
|
263
|
+
// Form the request
|
|
264
|
+
const cmd = "devman/typeinfo?bus=" + busName + "&type=" + deviceType;
|
|
265
|
+
// Get the msg handler
|
|
266
|
+
const msgHandler = (_a = this._systemUtils) === null || _a === void 0 ? void 0 : _a.getMsgHandler();
|
|
267
|
+
if (msgHandler) {
|
|
268
|
+
const msgRslt = await msgHandler.sendRICRESTURL(cmd);
|
|
269
|
+
if (msgRslt.rslt === "ok") {
|
|
270
|
+
this._cachedDeviceTypeRecs[deviceType] = msgRslt.devinfo;
|
|
271
|
+
return msgRslt.devinfo;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
return undefined;
|
|
275
|
+
}
|
|
276
|
+
catch (error) {
|
|
277
|
+
console.error(`DeviceManager getDeviceTypeInfo error ${error}`);
|
|
278
|
+
return undefined;
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
////////////////////////////////////////////////////////////////////////////
|
|
282
|
+
// Send action to device
|
|
283
|
+
////////////////////////////////////////////////////////////////////////////
|
|
284
|
+
async sendAction(deviceKey, action, data) {
|
|
285
|
+
// console.log(`DeviceManager sendAction ${deviceKey} action name ${action.n} value ${value} prefix ${action.w}`);
|
|
286
|
+
var _a;
|
|
287
|
+
// Form the write bytes
|
|
288
|
+
let writeBytes = action.t ? python_struct_1.default.pack(action.t, data) : buffer_1.Buffer.from([]);
|
|
289
|
+
// Convert to hex string
|
|
290
|
+
let writeHexStr = buffer_1.Buffer.from(writeBytes).toString('hex');
|
|
291
|
+
// Add prefix
|
|
292
|
+
writeHexStr = action.w + writeHexStr;
|
|
293
|
+
// Separate the bus and address in the deviceKey (_ char)
|
|
294
|
+
const devBus = deviceKey.split("_")[0];
|
|
295
|
+
const devAddr = deviceKey.split("_")[1];
|
|
296
|
+
// Send the action to the server
|
|
297
|
+
const cmd = "devman/cmdraw?bus=" + devBus + "&addr=" + devAddr + "&hexWr=" + writeHexStr;
|
|
298
|
+
console.log(`DeviceManager deviceKey ${deviceKey} action name ${action.n} value ${data} prefix ${action.w} sendAction ${cmd}`);
|
|
299
|
+
// Send the command
|
|
300
|
+
try {
|
|
301
|
+
// Get the msg handler
|
|
302
|
+
const msgHandler = (_a = this._systemUtils) === null || _a === void 0 ? void 0 : _a.getMsgHandler();
|
|
303
|
+
if (msgHandler) {
|
|
304
|
+
const msgRslt = await msgHandler.sendRICRESTURL(cmd);
|
|
305
|
+
return msgRslt.isOk();
|
|
306
|
+
}
|
|
307
|
+
return false;
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
console.warn(`DeviceManager sendAction error ${error}`);
|
|
311
|
+
return false;
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
////////////////////////////////////////////////////////////////////////////
|
|
315
|
+
// Send a compound action to the device
|
|
316
|
+
////////////////////////////////////////////////////////////////////////////
|
|
317
|
+
async sendCompoundAction(deviceKey, action, data) {
|
|
318
|
+
// console.log(`DeviceManager sendAction ${deviceKey} action name ${action.n} value ${value} prefix ${action.w}`);
|
|
319
|
+
// Check if all data to be sent at once
|
|
320
|
+
if (action.concat) {
|
|
321
|
+
// Form a single list by flattening data
|
|
322
|
+
let dataToWrite = [];
|
|
323
|
+
for (let dataIdx = 0; dataIdx < data.length; dataIdx++) {
|
|
324
|
+
dataToWrite = dataToWrite.concat(data[dataIdx]);
|
|
325
|
+
}
|
|
326
|
+
// Use sendAction to send this
|
|
327
|
+
return await this.sendAction(deviceKey, action, dataToWrite);
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
// Iterate over the data
|
|
331
|
+
let allOk = true;
|
|
332
|
+
for (let dataIdx = 0; dataIdx < data.length; dataIdx++) {
|
|
333
|
+
// Create the data to write by prepending the index to the data for this index
|
|
334
|
+
let dataToWrite = [dataIdx].concat(data[dataIdx]);
|
|
335
|
+
// Use sendAction to send this
|
|
336
|
+
allOk = allOk && await this.sendAction(deviceKey, action, dataToWrite);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return false;
|
|
340
|
+
}
|
|
341
|
+
////////////////////////////////////////////////////////////////////////////
|
|
342
|
+
// Convert hex to bytes
|
|
343
|
+
////////////////////////////////////////////////////////////////////////////
|
|
344
|
+
hexToBytes(hex) {
|
|
345
|
+
const bytes = new Uint8Array(hex.length / 2);
|
|
346
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
347
|
+
bytes[i] = parseInt(hex.substr(i * 2, 2), 16);
|
|
348
|
+
}
|
|
349
|
+
return bytes;
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
exports.DeviceManager = DeviceManager;
|
|
353
|
+
//# sourceMappingURL=RaftDeviceManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftDeviceManager.js","sourceRoot":"","sources":["../../src/RaftDeviceManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { DataType } from "python-struct";
|
|
2
|
+
import { DeviceTypeAction } from "./RaftDeviceInfo";
|
|
3
|
+
import { DeviceAttributeState, DevicesState, DeviceState } from "./RaftDeviceStates";
|
|
4
|
+
export default interface RaftDeviceMgrIF {
|
|
5
|
+
getDevicesState(): DevicesState;
|
|
6
|
+
getDeviceState(deviceKey: string): DeviceState;
|
|
7
|
+
onNewDevice(callback: (deviceKey: string, state: DeviceState) => void): void;
|
|
8
|
+
onNewDeviceAttribute(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
|
|
9
|
+
onNewAttributeData(callback: (deviceKey: string, attrState: DeviceAttributeState) => void): void;
|
|
10
|
+
sendAction(deviceKey: string, action: DeviceTypeAction, data: DataType[]): void;
|
|
11
|
+
sendCompoundAction(deviceKey: string, action: DeviceTypeAction, data: DataType[][]): void;
|
|
12
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftDeviceMgrIF.ts
|
|
5
|
+
// Interface to devices state
|
|
6
|
+
//
|
|
7
|
+
// Rob Dobson (C) 2024
|
|
8
|
+
//
|
|
9
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
//# sourceMappingURL=RaftDeviceMgrIF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftDeviceMgrIF.js","sourceRoot":"","sources":["../../src/RaftDeviceMgrIF.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,qBAAqB;AACrB,6BAA6B;AAC7B,EAAE;AACF,sBAAsB;AACtB,EAAE;AACF,iHAAiH"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
3
|
+
//
|
|
4
|
+
// RaftDeviceMsg
|
|
5
|
+
// Device message for Raft devices
|
|
6
|
+
//
|
|
7
|
+
// Rob Dobson (C) 2024
|
|
8
|
+
//
|
|
9
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
//# sourceMappingURL=RaftDeviceMsg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RaftDeviceMsg.js","sourceRoot":"","sources":["../../src/RaftDeviceMsg.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,gBAAgB;AAChB,kCAAkC;AAClC,EAAE;AACF,sBAAsB;AACtB,EAAE;AACF,iHAAiH"}
|