@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.
Files changed (149) hide show
  1. package/.editorconfig +14 -0
  2. package/.gitattributes +11 -0
  3. package/.nvmrc +1 -0
  4. package/LICENSE +22 -0
  5. package/README.md +11 -0
  6. package/TODO.md +1 -0
  7. package/dist/RaftAttributeHandler.d.ts +12 -0
  8. package/dist/RaftAttributeHandler.js +241 -0
  9. package/dist/RaftAttributeHandler.js.map +1 -0
  10. package/dist/RaftChannel.d.ts +18 -0
  11. package/dist/RaftChannel.js +12 -0
  12. package/dist/RaftChannel.js.map +1 -0
  13. package/dist/RaftChannelWebBLE.d.ts +38 -0
  14. package/dist/RaftChannelWebBLE.js +274 -0
  15. package/dist/RaftChannelWebBLE.js.map +1 -0
  16. package/dist/RaftChannelWebSerial.d.ts +37 -0
  17. package/dist/RaftChannelWebSerial.js +319 -0
  18. package/dist/RaftChannelWebSerial.js.map +1 -0
  19. package/dist/RaftChannelWebSocket.d.ts +28 -0
  20. package/dist/RaftChannelWebSocket.js +197 -0
  21. package/dist/RaftChannelWebSocket.js.map +1 -0
  22. package/dist/RaftCommsStats.d.ts +39 -0
  23. package/dist/RaftCommsStats.js +128 -0
  24. package/dist/RaftCommsStats.js.map +1 -0
  25. package/dist/RaftConnEvents.d.ts +31 -0
  26. package/dist/RaftConnEvents.js +44 -0
  27. package/dist/RaftConnEvents.js.map +1 -0
  28. package/dist/RaftConnector.d.ts +242 -0
  29. package/dist/RaftConnector.js +613 -0
  30. package/dist/RaftConnector.js.map +1 -0
  31. package/dist/RaftCustomAttrHandler.d.ts +4 -0
  32. package/dist/RaftCustomAttrHandler.js +50 -0
  33. package/dist/RaftCustomAttrHandler.js.map +1 -0
  34. package/dist/RaftDeviceInfo.d.ts +64 -0
  35. package/dist/RaftDeviceInfo.js +36 -0
  36. package/dist/RaftDeviceInfo.js.map +1 -0
  37. package/dist/RaftDeviceManager.d.ts +37 -0
  38. package/dist/RaftDeviceManager.js +450 -0
  39. package/dist/RaftDeviceManager.js.map +1 -0
  40. package/dist/RaftDeviceMsg.d.ts +9 -0
  41. package/dist/RaftDeviceMsg.js +11 -0
  42. package/dist/RaftDeviceMsg.js.map +1 -0
  43. package/dist/RaftDeviceStates.d.ts +33 -0
  44. package/dist/RaftDeviceStates.js +60 -0
  45. package/dist/RaftDeviceStates.js.map +1 -0
  46. package/dist/RaftFileHandler.d.ts +52 -0
  47. package/dist/RaftFileHandler.js +502 -0
  48. package/dist/RaftFileHandler.js.map +1 -0
  49. package/dist/RaftLog.d.ts +22 -0
  50. package/dist/RaftLog.js +63 -0
  51. package/dist/RaftLog.js.map +1 -0
  52. package/dist/RaftMiniHDLC.d.ts +18 -0
  53. package/dist/RaftMiniHDLC.js +383 -0
  54. package/dist/RaftMiniHDLC.js.map +1 -0
  55. package/dist/RaftMsgHandler.d.ts +57 -0
  56. package/dist/RaftMsgHandler.js +480 -0
  57. package/dist/RaftMsgHandler.js.map +1 -0
  58. package/dist/RaftMsgTrackInfo.d.ts +17 -0
  59. package/dist/RaftMsgTrackInfo.js +42 -0
  60. package/dist/RaftMsgTrackInfo.js.map +1 -0
  61. package/dist/RaftProtocolDefs.d.ts +30 -0
  62. package/dist/RaftProtocolDefs.js +48 -0
  63. package/dist/RaftProtocolDefs.js.map +1 -0
  64. package/dist/RaftStreamHandler.d.ts +38 -0
  65. package/dist/RaftStreamHandler.js +257 -0
  66. package/dist/RaftStreamHandler.js.map +1 -0
  67. package/dist/RaftSystemType.d.ts +21 -0
  68. package/dist/RaftSystemType.js +3 -0
  69. package/dist/RaftSystemType.js.map +1 -0
  70. package/dist/RaftSystemUtils.d.ts +136 -0
  71. package/dist/RaftSystemUtils.js +410 -0
  72. package/dist/RaftSystemUtils.js.map +1 -0
  73. package/dist/RaftTypes.d.ts +184 -0
  74. package/dist/RaftTypes.js +157 -0
  75. package/dist/RaftTypes.js.map +1 -0
  76. package/dist/RaftUpdateEvents.d.ts +33 -0
  77. package/dist/RaftUpdateEvents.js +46 -0
  78. package/dist/RaftUpdateEvents.js.map +1 -0
  79. package/dist/RaftUpdateManager.d.ts +61 -0
  80. package/dist/RaftUpdateManager.js +618 -0
  81. package/dist/RaftUpdateManager.js.map +1 -0
  82. package/dist/RaftUtils.d.ts +125 -0
  83. package/dist/RaftUtils.js +454 -0
  84. package/dist/RaftUtils.js.map +1 -0
  85. package/dist/RaftWifiTypes.d.ts +23 -0
  86. package/dist/RaftWifiTypes.js +43 -0
  87. package/dist/RaftWifiTypes.js.map +1 -0
  88. package/dist/TestDataGen.d.ts +7 -0
  89. package/dist/TestDataGen.js +133 -0
  90. package/dist/TestDataGen.js.map +1 -0
  91. package/dist/main.d.ts +18 -0
  92. package/dist/main.js +42 -0
  93. package/dist/main.js.map +1 -0
  94. package/eslint.config.mjs +33 -0
  95. package/examples/dashboard/package.json +39 -0
  96. package/examples/dashboard/src/ConnManager.ts +86 -0
  97. package/examples/dashboard/src/Main.tsx +100 -0
  98. package/examples/dashboard/src/StatusScreen.tsx +72 -0
  99. package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +144 -0
  100. package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +77 -0
  101. package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +70 -0
  102. package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +33 -0
  103. package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +342 -0
  104. package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +170 -0
  105. package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +123 -0
  106. package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +207 -0
  107. package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +464 -0
  108. package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +146 -0
  109. package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +32 -0
  110. package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +371 -0
  111. package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +20 -0
  112. package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +113 -0
  113. package/examples/dashboard/src/index.html +15 -0
  114. package/examples/dashboard/src/index.tsx +15 -0
  115. package/examples/dashboard/src/styles.css +122 -0
  116. package/examples/dashboard/tsconfig.json +18 -0
  117. package/jest.config.js +11 -0
  118. package/package.json +50 -0
  119. package/src/RaftAttributeHandler.ts +289 -0
  120. package/src/RaftChannel.ts +30 -0
  121. package/src/RaftChannelWebBLE.ts +342 -0
  122. package/src/RaftChannelWebSerial.ts +408 -0
  123. package/src/RaftChannelWebSocket.ts +245 -0
  124. package/src/RaftCommsStats.ts +142 -0
  125. package/src/RaftConnEvents.ts +46 -0
  126. package/src/RaftConnector.ts +745 -0
  127. package/src/RaftCustomAttrHandler.ts +54 -0
  128. package/src/RaftDeviceInfo.ts +104 -0
  129. package/src/RaftDeviceManager.ts +542 -0
  130. package/src/RaftDeviceMsg.ts +20 -0
  131. package/src/RaftDeviceStates.ts +89 -0
  132. package/src/RaftFileHandler.ts +668 -0
  133. package/src/RaftLog.ts +70 -0
  134. package/src/RaftMiniHDLC.ts +396 -0
  135. package/src/RaftMsgHandler.ts +778 -0
  136. package/src/RaftMsgTrackInfo.ts +51 -0
  137. package/src/RaftProtocolDefs.ts +46 -0
  138. package/src/RaftStreamHandler.ts +328 -0
  139. package/src/RaftSystemType.ts +25 -0
  140. package/src/RaftSystemUtils.ts +487 -0
  141. package/src/RaftTypes.ts +250 -0
  142. package/src/RaftUpdateEvents.ts +48 -0
  143. package/src/RaftUpdateManager.ts +778 -0
  144. package/src/RaftUtils.ts +484 -0
  145. package/src/RaftWifiTypes.ts +36 -0
  146. package/src/TestDataGen.ts +157 -0
  147. package/src/main.ts +28 -0
  148. package/testdata/TestDeviceTypeRecs.json +492 -0
  149. package/tsconfig.json +27 -0
@@ -0,0 +1,480 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RaftMsgHandler
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
+ exports.RaftMsgResultCode = void 0;
13
+ const tslib_1 = require("tslib");
14
+ const RaftMsgTrackInfo_1 = require("./RaftMsgTrackInfo");
15
+ const RaftLog_1 = tslib_1.__importDefault(require("./RaftLog"));
16
+ const RaftUtils_1 = tslib_1.__importDefault(require("./RaftUtils"));
17
+ const RaftProtocolDefs_1 = require("./RaftProtocolDefs");
18
+ const RaftMiniHDLC_1 = tslib_1.__importDefault(require("./RaftMiniHDLC"));
19
+ // Message results
20
+ var RaftMsgResultCode;
21
+ (function (RaftMsgResultCode) {
22
+ RaftMsgResultCode[RaftMsgResultCode["MESSAGE_RESULT_TIMEOUT"] = 0] = "MESSAGE_RESULT_TIMEOUT";
23
+ RaftMsgResultCode[RaftMsgResultCode["MESSAGE_RESULT_OK"] = 1] = "MESSAGE_RESULT_OK";
24
+ RaftMsgResultCode[RaftMsgResultCode["MESSAGE_RESULT_FAIL"] = 2] = "MESSAGE_RESULT_FAIL";
25
+ RaftMsgResultCode[RaftMsgResultCode["MESSAGE_RESULT_UNKNOWN"] = 3] = "MESSAGE_RESULT_UNKNOWN";
26
+ })(RaftMsgResultCode || (exports.RaftMsgResultCode = RaftMsgResultCode = {}));
27
+ class RaftMsgHandler {
28
+ // Constructor
29
+ constructor(commsStats) {
30
+ // Message numbering and tracking
31
+ this._currentMsgNumber = 1;
32
+ this._currentMsgHandle = 1;
33
+ this._msgTrackInfos = new Array(RaftMsgTrackInfo_1.RaftMsgTrackInfo.MAX_MSG_NUM + 1);
34
+ this._msgTrackTimerMs = 50;
35
+ this._msgTrackLastCheckIdx = 0;
36
+ // report message callback dictionary. Add a callback to subscribe to report messages
37
+ this._reportMsgCallbacks = new Map();
38
+ // Interface to inform of message results
39
+ this._msgResultHandler = null;
40
+ // Interface to send messages
41
+ this._msgSender = null;
42
+ this._commsStats = commsStats;
43
+ RaftLog_1.default.debug('RaftMsgHandler constructor');
44
+ // Message tracking
45
+ for (let i = 0; i < this._msgTrackInfos.length; i++) {
46
+ this._msgTrackInfos[i] = new RaftMsgTrackInfo_1.RaftMsgTrackInfo();
47
+ }
48
+ // Timer for checking messages
49
+ setTimeout(async () => {
50
+ this._onMsgTrackTimer(true);
51
+ }, this._msgTrackTimerMs);
52
+ // HDLC used to encode/decode the RICREST protocol
53
+ this._miniHDLC = new RaftMiniHDLC_1.default();
54
+ this._miniHDLC.setOnRxFrame(this._onHDLCFrameDecode.bind(this));
55
+ }
56
+ registerForResults(msgResultHandler) {
57
+ this._msgResultHandler = msgResultHandler;
58
+ }
59
+ registerMsgSender(RaftMessageSender) {
60
+ this._msgSender = RaftMessageSender;
61
+ }
62
+ handleNewRxMsg(rxMsg) {
63
+ this._miniHDLC.addRxBytes(rxMsg);
64
+ // RaftLog.verbose(`handleNewRxMsg len ${rxMsg.length} ${RaftUtils.bufferToHex(rxMsg)}`)
65
+ }
66
+ reportMsgCallbacksSet(callbackName, callback) {
67
+ this._reportMsgCallbacks.set(callbackName, callback);
68
+ }
69
+ reportMsgCallbacksDelete(callbackName) {
70
+ this._reportMsgCallbacks.delete(callbackName);
71
+ }
72
+ _onHDLCFrameDecode(rxMsg, frameTimeMs) {
73
+ var _a, _b;
74
+ // Add to stats
75
+ this._commsStats.msgRx();
76
+ // Validity
77
+ if (rxMsg.length < RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS) {
78
+ this._commsStats.msgTooShort();
79
+ return;
80
+ }
81
+ // RaftLog.verbose(`_onHDLCFrameDecode len ${rxMsg.length}`);
82
+ // Decode the RICFrame header
83
+ let rxMsgNum = rxMsg[RaftProtocolDefs_1.RICSERIAL_MSG_NUM_POS] & 0xff;
84
+ let rxProtocol = rxMsg[RaftProtocolDefs_1.RICSERIAL_PROTOCOL_POS] & 0x3f;
85
+ let rxMsgType = (rxMsg[RaftProtocolDefs_1.RICSERIAL_PROTOCOL_POS] >> 6) & 0x03;
86
+ // Check for RICREST bridging protocol
87
+ if (rxProtocol == RaftProtocolDefs_1.RaftCommsMsgProtocol.MSG_PROTOCOL_BRIDGE_RICREST) {
88
+ // Debug
89
+ const bridgeID = rxMsg.length > RaftProtocolDefs_1.RICREST_BRIDGE_ID_POS ? rxMsg[RaftProtocolDefs_1.RICREST_BRIDGE_ID_POS] : 0;
90
+ RaftLog_1.default.info(`_onHDLCFrameDecode RICREST bridge rx bridgeID ${bridgeID} len ${rxMsg.length}`);
91
+ // Simply remove the wrapper
92
+ rxMsg = rxMsg.slice(RaftProtocolDefs_1.RICREST_BRIDGE_PAYLOAD_POS);
93
+ // Get the message info from the unwrapped message
94
+ rxMsgNum = rxMsg[RaftProtocolDefs_1.RICSERIAL_MSG_NUM_POS] & 0xff;
95
+ rxProtocol = rxMsg[RaftProtocolDefs_1.RICSERIAL_PROTOCOL_POS] & 0x3f;
96
+ rxMsgType = (rxMsg[RaftProtocolDefs_1.RICSERIAL_PROTOCOL_POS] >> 6) & 0x03;
97
+ }
98
+ // Check for RICREST protocol
99
+ if (rxProtocol == RaftProtocolDefs_1.RaftCommsMsgProtocol.MSG_PROTOCOL_RICREST) {
100
+ RaftLog_1.default.verbose(`_onHDLCFrameDecode RICREST rx msgNum ${rxMsgNum} msgDirn ${rxMsgType} ${RaftUtils_1.default.bufferToHex(rxMsg)}`);
101
+ // Extract payload
102
+ const ricRestElemCode = rxMsg[RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS + RaftProtocolDefs_1.RICREST_REST_ELEM_CODE_POS] & 0xff;
103
+ if (ricRestElemCode == RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_URL ||
104
+ ricRestElemCode == RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_CMDRESPJSON ||
105
+ ricRestElemCode == RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_COMMAND_FRAME) {
106
+ // These are all text-based messages
107
+ const restStr = RaftUtils_1.default.getStringFromBuffer(rxMsg, RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS + RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS, rxMsg.length - RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS - RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS - 1);
108
+ RaftLog_1.default.verbose(`_onHDLCFrameDecode RICREST rx elemCode ${ricRestElemCode} ${restStr}`);
109
+ // Check message types
110
+ if (rxMsgType == RaftProtocolDefs_1.RaftCommsMsgTypeCode.MSG_TYPE_RESPONSE) {
111
+ // Handle response messages
112
+ this._handleResponseMessages(restStr, rxMsgNum);
113
+ }
114
+ else if (rxMsgType == RaftProtocolDefs_1.RaftCommsMsgTypeCode.MSG_TYPE_REPORT) {
115
+ // Handle report messages
116
+ this._handleReportMessages(restStr);
117
+ }
118
+ }
119
+ else {
120
+ const binMsgLen = rxMsg.length - RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS - RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS;
121
+ RaftLog_1.default.verbose(`_onHDLCFrameDecode RICREST rx binary message elemCode ${ricRestElemCode} len ${binMsgLen} data ${RaftUtils_1.default.bufferToHex(rxMsg)}`);
122
+ if (ricRestElemCode == RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_FILEBLOCK) {
123
+ const filePos = RaftUtils_1.default.getBEUint32FromBuf(rxMsg, RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS + RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS + RaftProtocolDefs_1.RICREST_FILEBLOCK_FILEPOS_POS);
124
+ (_a = this._msgResultHandler) === null || _a === void 0 ? void 0 : _a.onRxFileBlock(filePos, rxMsg.slice(RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS + RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS + RaftProtocolDefs_1.RICREST_FILEBLOCK_PAYLOAD_POS, rxMsg.length));
125
+ }
126
+ }
127
+ // Other message types
128
+ }
129
+ else {
130
+ (_b = this._msgResultHandler) === null || _b === void 0 ? void 0 : _b.onRxOtherMsgType(rxMsg, frameTimeMs);
131
+ }
132
+ }
133
+ _handleResponseMessages(restStr, rxMsgNum) {
134
+ try {
135
+ let msgRsltCode = RaftMsgResultCode.MESSAGE_RESULT_UNKNOWN;
136
+ const msgRsltJsonObj = JSON.parse(restStr);
137
+ if ('rslt' in msgRsltJsonObj) {
138
+ const rsltStr = msgRsltJsonObj.rslt.toLowerCase();
139
+ if (rsltStr === 'ok') {
140
+ RaftLog_1.default.verbose(`_handleResponseMessages RICREST rslt Ok ${rxMsgNum == 0 ? "unnumbered" : "msgNum " + rxMsgNum.toString()} resp ${msgRsltJsonObj.rslt}`);
141
+ msgRsltCode = RaftMsgResultCode.MESSAGE_RESULT_OK;
142
+ }
143
+ else if (rsltStr === 'fail') {
144
+ msgRsltCode = RaftMsgResultCode.MESSAGE_RESULT_FAIL;
145
+ RaftLog_1.default.warn(`_handleResponseMessages RICREST rslt fail ${rxMsgNum == 0 ? "unnumbered" : "msgNum " + rxMsgNum.toString()} resp ${restStr}`);
146
+ }
147
+ else {
148
+ RaftLog_1.default.warn(`_handleResponseMessages RICREST rslt not recognized ${rxMsgNum == 0 ? "unnumbered" : "msgNum " + rxMsgNum.toString()}resp ${restStr}`);
149
+ }
150
+ }
151
+ else {
152
+ RaftLog_1.default.warn(`_handleResponseMessages RICREST response doesn't contain rslt ${rxMsgNum == 0 ? "unnumbered" : "msgNum " + rxMsgNum.toString()}resp ${restStr}`);
153
+ }
154
+ // Handle matching of request and response
155
+ this.msgTrackingRxRespMsg(rxMsgNum, msgRsltCode, msgRsltJsonObj);
156
+ }
157
+ catch (excp) {
158
+ if (excp instanceof Error) {
159
+ RaftLog_1.default.warn(`_handleResponseMessages Failed to parse JSON ${rxMsgNum == 0 ? "unnumbered" : "msgNum " + rxMsgNum.toString()} JSON STR ${restStr} resp ${excp.toString()}`);
160
+ }
161
+ }
162
+ }
163
+ _handleReportMessages(restStr) {
164
+ try {
165
+ const reportMsg = JSON.parse(restStr);
166
+ reportMsg.timeReceived = Date.now();
167
+ RaftLog_1.default.debug(`_handleReportMessages ${JSON.stringify(reportMsg)}`);
168
+ this._reportMsgCallbacks.forEach((callback) => callback(reportMsg));
169
+ }
170
+ catch (excp) {
171
+ if (excp instanceof Error) {
172
+ RaftLog_1.default.warn(`_handleReportMessages Failed to parse JSON report ${excp.toString()}`);
173
+ }
174
+ }
175
+ }
176
+ async sendRICRESTURL(cmdStr, bridgeID = undefined, msgTimeoutMs = undefined) {
177
+ // Send
178
+ return this.sendRICREST(cmdStr, RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_URL, bridgeID, msgTimeoutMs);
179
+ }
180
+ async sendRICRESTCmdFrame(cmdStr, bridgeID = undefined, msgTimeoutMs = undefined) {
181
+ // Send
182
+ return this.sendRICREST(cmdStr, RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_COMMAND_FRAME, bridgeID, msgTimeoutMs);
183
+ }
184
+ async sendRICREST(cmdStr, ricRESTElemCode, bridgeID = undefined, msgTimeoutMs = undefined) {
185
+ // Put cmdStr into buffer
186
+ const cmdStrTerm = new Uint8Array(cmdStr.length + 1);
187
+ RaftUtils_1.default.addStringToBuffer(cmdStrTerm, cmdStr, 0);
188
+ cmdStrTerm[cmdStrTerm.length - 1] = 0;
189
+ // Send
190
+ return this.sendRICRESTBytes(cmdStrTerm, ricRESTElemCode, true, bridgeID, msgTimeoutMs);
191
+ }
192
+ async sendRICRESTNoResp(cmdStr, ricRESTElemCode, bridgeID = undefined) {
193
+ // Check there is a sender
194
+ if (!this._msgSender) {
195
+ return false;
196
+ }
197
+ // Put cmdStr into buffer
198
+ const cmdBytes = new Uint8Array(cmdStr.length + 1);
199
+ RaftUtils_1.default.addStringToBuffer(cmdBytes, cmdStr, 0);
200
+ cmdBytes[cmdBytes.length - 1] = 0;
201
+ // Form message
202
+ const cmdMsg = new Uint8Array(cmdBytes.length + RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS);
203
+ cmdMsg[RaftProtocolDefs_1.RICREST_REST_ELEM_CODE_POS] = ricRESTElemCode;
204
+ cmdMsg.set(cmdBytes, RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS);
205
+ // Frame the message
206
+ let framedMsg = this.frameCommsMsg(cmdMsg, RaftProtocolDefs_1.RaftCommsMsgTypeCode.MSG_TYPE_COMMAND, RaftProtocolDefs_1.RaftCommsMsgProtocol.MSG_PROTOCOL_RICREST, true);
207
+ // Wrap if bridged
208
+ if (bridgeID !== undefined) {
209
+ framedMsg = this.bridgeCommsMsg(framedMsg, bridgeID);
210
+ }
211
+ // Encode like HDLC
212
+ const encodedMsg = this._miniHDLC.encode(framedMsg);
213
+ // Send
214
+ if (!await this._msgSender.sendTxMsg(encodedMsg, false)) {
215
+ RaftLog_1.default.warn(`sendRICRESTNoResp failed to send message`);
216
+ this._commsStats.recordMsgNoConnection();
217
+ }
218
+ return true;
219
+ }
220
+ async sendRICRESTBytes(cmdBytes, ricRESTElemCode, withResponse, bridgeID = undefined, msgTimeoutMs = undefined) {
221
+ // Form message
222
+ const cmdMsg = new Uint8Array(cmdBytes.length + RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS);
223
+ cmdMsg[RaftProtocolDefs_1.RICREST_REST_ELEM_CODE_POS] = ricRESTElemCode;
224
+ cmdMsg.set(cmdBytes, RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS);
225
+ // Send
226
+ return this.sendMsgAndWaitForReply(cmdMsg, RaftProtocolDefs_1.RaftCommsMsgTypeCode.MSG_TYPE_COMMAND, RaftProtocolDefs_1.RaftCommsMsgProtocol.MSG_PROTOCOL_RICREST, withResponse, bridgeID, msgTimeoutMs);
227
+ }
228
+ async sendMsgAndWaitForReply(msgPayload, msgDirection, msgProtocol, withResponse, bridgeID = undefined, msgTimeoutMs) {
229
+ // Check there is a sender
230
+ if (!this._msgSender) {
231
+ throw new Error('sendMsgAndWaitForReply failed no sender');
232
+ }
233
+ // Frame the message
234
+ let framedMsg = this.frameCommsMsg(msgPayload, msgDirection, msgProtocol, true);
235
+ // Wrap if bridged
236
+ if (bridgeID !== undefined) {
237
+ framedMsg = this.bridgeCommsMsg(framedMsg, bridgeID);
238
+ // RaftLog.debug(`sendMsgAndWaitForReply - bridged idx ${bridgeID}`)
239
+ }
240
+ else {
241
+ // RaftLog.debug(`sendMsgAndWaitForReply - not bridged`)
242
+ }
243
+ // Encode like HDLC
244
+ const encodedMsg = this._miniHDLC.encode(framedMsg);
245
+ // Debug
246
+ // RaftLog.debug(
247
+ // `sendMsgAndWaitForReply ${RaftUtils.bufferToHex(encodedMsg)}`,
248
+ // );
249
+ // Return a promise that will be resolved when a reply is received or timeout occurs
250
+ const promise = new Promise((resolve, reject) => {
251
+ // Update message tracking
252
+ this.msgTrackingTxCmdMsg(encodedMsg, withResponse, bridgeID, msgTimeoutMs, resolve, reject);
253
+ this._currentMsgHandle++;
254
+ });
255
+ return promise;
256
+ }
257
+ frameCommsMsg(msgPayload, msgDirection, msgProtocol, isNumbered) {
258
+ // Header
259
+ const msgBuf = new Uint8Array(msgPayload.length + RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS);
260
+ msgBuf[RaftProtocolDefs_1.RICSERIAL_MSG_NUM_POS] = isNumbered ? this._currentMsgNumber & 0xff : 0;
261
+ msgBuf[RaftProtocolDefs_1.RICSERIAL_PROTOCOL_POS] = (msgDirection << 6) + msgProtocol;
262
+ // Payload
263
+ msgBuf.set(msgPayload, RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS);
264
+ // Return framed message
265
+ return msgBuf;
266
+ }
267
+ bridgeCommsMsg(msgBuf, bridgeID) {
268
+ //
269
+ const bridgedMsg = new Uint8Array(msgBuf.length + RaftProtocolDefs_1.RICREST_BRIDGE_PAYLOAD_POS);
270
+ // Bridged messages are unnumbered (msgNum == 0)
271
+ bridgedMsg[RaftProtocolDefs_1.RICSERIAL_MSG_NUM_POS] = 0;
272
+ bridgedMsg[RaftProtocolDefs_1.RICSERIAL_PROTOCOL_POS] = (RaftProtocolDefs_1.RaftCommsMsgTypeCode.MSG_TYPE_COMMAND << 6) + RaftProtocolDefs_1.RaftCommsMsgProtocol.MSG_PROTOCOL_BRIDGE_RICREST;
273
+ bridgedMsg[RaftProtocolDefs_1.RICREST_BRIDGE_ID_POS] = bridgeID;
274
+ bridgedMsg.set(msgBuf, RaftProtocolDefs_1.RICREST_BRIDGE_PAYLOAD_POS);
275
+ return bridgedMsg;
276
+ }
277
+ msgTrackingTxCmdMsg(msgFrame, withResponse, bridgeID = undefined, msgTimeoutMs, resolve, reject) {
278
+ // Record message re-use of number
279
+ if (this._msgTrackInfos[this._currentMsgNumber].msgOutstanding) {
280
+ this._commsStats.recordMsgNumCollision();
281
+ }
282
+ // Set tracking info
283
+ this._msgTrackInfos[this._currentMsgNumber].set(true, msgFrame, withResponse, bridgeID, this._currentMsgHandle, msgTimeoutMs, resolve, reject);
284
+ // Debug
285
+ RaftLog_1.default.debug(`msgTrackingTxCmdMsg msgNum ${this._currentMsgNumber} bridgeID ${bridgeID} msg ${RaftUtils_1.default.bufferToHex(msgFrame)} msgOutstanding ${this._msgTrackInfos[this._currentMsgNumber].msgOutstanding}`);
286
+ // Stats
287
+ this._commsStats.msgTx();
288
+ // Bump msg number
289
+ if (this._currentMsgNumber == RaftMsgTrackInfo_1.RaftMsgTrackInfo.MAX_MSG_NUM) {
290
+ this._currentMsgNumber = 1;
291
+ }
292
+ else {
293
+ this._currentMsgNumber++;
294
+ }
295
+ }
296
+ msgTrackingRxRespMsg(msgNum, msgRsltCode, msgRsltJsonObj) {
297
+ // Check message number
298
+ if (msgNum == 0) {
299
+ // Callback on unnumbered message
300
+ if (this._msgResultHandler !== null)
301
+ this._msgResultHandler.onRxUnnumberedMsg(msgRsltJsonObj);
302
+ return;
303
+ }
304
+ if (msgNum > RaftMsgTrackInfo_1.RaftMsgTrackInfo.MAX_MSG_NUM) {
305
+ RaftLog_1.default.warn('msgTrackingRxRespMsg msgNum > 255');
306
+ return;
307
+ }
308
+ if (!this._msgTrackInfos[msgNum].msgOutstanding) {
309
+ RaftLog_1.default.warn(`msgTrackingRxRespMsg unmatched msgNum ${msgNum}`);
310
+ this._commsStats.recordMsgNumUnmatched();
311
+ return;
312
+ }
313
+ // Handle message
314
+ RaftLog_1.default.verbose(`msgTrackingRxRespMsg Message response received msgNum ${msgNum}`);
315
+ this._commsStats.recordMsgResp(Date.now() - this._msgTrackInfos[msgNum].msgSentMs);
316
+ this._msgCompleted(msgNum, msgRsltCode, msgRsltJsonObj);
317
+ }
318
+ _msgCompleted(msgNum, msgRsltCode, msgRsltObj) {
319
+ // Lookup message in tracking
320
+ const msgHandle = this._msgTrackInfos[msgNum].msgHandle;
321
+ this._msgTrackInfos[msgNum].msgOutstanding = false;
322
+ // Check if message result handler should be informed
323
+ if (this._msgResultHandler !== null) {
324
+ this._msgResultHandler.onRxReply(msgHandle, msgRsltCode, msgRsltObj);
325
+ }
326
+ // Handle reply
327
+ // if (msgRsltCode === RaftMsgResultCode.MESSAGE_RESULT_OK) {
328
+ const resolve = this._msgTrackInfos[msgNum].resolve;
329
+ if (resolve) {
330
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
331
+ RaftLog_1.default.debug(`_msgCompleted msgNum ${msgNum} result ${msgRsltCode.toString()} ${JSON.stringify(msgRsltObj)}`);
332
+ resolve(msgRsltObj);
333
+ }
334
+ // } else {
335
+ // const reject = this._msgTrackInfos[msgNum].reject;
336
+ // if (reject) {
337
+ // // eslint-disable-next-line @typescript-eslint/no-explicit-any
338
+ // try {
339
+ // RaftLog.debug(`_msgCompleted reject rsltCode ${msgRsltCode}`);
340
+ // // (reject as any)(new Error(`Message failed msgNum ${msgNum} rslt ${msgRsltCode}`));
341
+ // } catch (excp: unknown) {
342
+ // RaftLog.warn(`_msgCompleted reject ${excp}`);
343
+ // }
344
+ // }
345
+ // }
346
+ // No longer waiting for reply
347
+ this._msgTrackInfos[msgNum].resolve = null;
348
+ this._msgTrackInfos[msgNum].reject = null;
349
+ }
350
+ // Check message timeouts
351
+ async _onMsgTrackTimer(chainRecall) {
352
+ if (this._msgSender !== null) {
353
+ // Handle message tracking
354
+ for (let loopIdx = 0; loopIdx < this._msgTrackInfos.length; loopIdx++) {
355
+ // Index to check
356
+ const checkIdx = this._msgTrackLastCheckIdx;
357
+ this._msgTrackLastCheckIdx = (checkIdx + 1) % this._msgTrackInfos.length;
358
+ // Check if message is outstanding
359
+ if (!this._msgTrackInfos[checkIdx].msgOutstanding)
360
+ continue;
361
+ // Get message timeout and ensure valid
362
+ let msgTimeoutMs = this._msgTrackInfos[checkIdx].msgTimeoutMs;
363
+ if (msgTimeoutMs === undefined) {
364
+ msgTimeoutMs = RaftMsgTrackInfo_1.RaftMsgTrackInfo.MSG_RESPONSE_TIMEOUT_MS;
365
+ }
366
+ // Check for timeout (or never sent)
367
+ if ((this._msgTrackInfos[checkIdx].retryCount === 0) || (Date.now() > this._msgTrackInfos[checkIdx].msgSentMs + (msgTimeoutMs * (this._msgTrackInfos[checkIdx].retryCount)))) {
368
+ // Debug
369
+ RaftLog_1.default.debug(`msgTrackTimer msgNum ${checkIdx} ${this._msgTrackInfos[checkIdx].retryCount === 0 ? 'first send' : 'timeout - retrying'} ${RaftUtils_1.default.bufferToHex(this._msgTrackInfos[checkIdx].msgFrame)}`);
370
+ // RaftLog.verbose(`msgTrackTimer msg ${RaftUtils.bufferToHex(this._msgTrackInfos[i].msgFrame)}`);
371
+ // Handle timeout (or first send)
372
+ if (this._msgTrackInfos[checkIdx].retryCount < RaftMsgTrackInfo_1.RaftMsgTrackInfo.MSG_RETRY_COUNT) {
373
+ this._msgTrackInfos[checkIdx].retryCount++;
374
+ try {
375
+ // Send the message
376
+ if (!await this._msgSender.sendTxMsg(this._msgTrackInfos[checkIdx].msgFrame, this._msgTrackInfos[checkIdx].withResponse)) {
377
+ RaftLog_1.default.warn(`msgTrackTimer Message send failed msgNum ${checkIdx} ${RaftUtils_1.default.bufferToHex(this._msgTrackInfos[checkIdx].msgFrame)}`);
378
+ this._msgCompleted(checkIdx, RaftMsgResultCode.MESSAGE_RESULT_FAIL, null);
379
+ this._commsStats.recordMsgNoConnection();
380
+ }
381
+ // Message sent ok so break here
382
+ break;
383
+ }
384
+ catch (error) {
385
+ RaftLog_1.default.warn(`Retry message failed ${error}`);
386
+ }
387
+ this._commsStats.recordMsgRetry();
388
+ this._msgTrackInfos[checkIdx].msgSentMs = Date.now();
389
+ }
390
+ else {
391
+ RaftLog_1.default.warn(`msgTrackTimer TIMEOUT msgNum ${checkIdx} after ${RaftMsgTrackInfo_1.RaftMsgTrackInfo.MSG_RETRY_COUNT} retries ${RaftUtils_1.default.bufferToHex(this._msgTrackInfos[checkIdx].msgFrame)}`);
392
+ this._msgCompleted(checkIdx, RaftMsgResultCode.MESSAGE_RESULT_TIMEOUT, null);
393
+ this._commsStats.recordMsgTimeout();
394
+ }
395
+ }
396
+ }
397
+ }
398
+ // Call again if required
399
+ if (chainRecall) {
400
+ setTimeout(async () => {
401
+ this._onMsgTrackTimer(true);
402
+ }, this._msgTrackTimerMs);
403
+ }
404
+ }
405
+ encodeFileStreamBlock(blockContents, blockStart, streamID) {
406
+ // Create entire message buffer (including protocol wrappers)
407
+ const msgBuf = new Uint8Array(blockContents.length + 4 + RaftProtocolDefs_1.RICREST_HEADER_PAYLOAD_POS + RaftProtocolDefs_1.RICSERIAL_PAYLOAD_POS);
408
+ let msgBufPos = 0;
409
+ // RICSERIAL protocol
410
+ msgBuf[msgBufPos++] = 0; // not numbered
411
+ msgBuf[msgBufPos++] =
412
+ (RaftProtocolDefs_1.RaftCommsMsgTypeCode.MSG_TYPE_COMMAND << 6) +
413
+ RaftProtocolDefs_1.RaftCommsMsgProtocol.MSG_PROTOCOL_RICREST;
414
+ // RICREST protocol
415
+ msgBuf[msgBufPos++] = RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_FILEBLOCK;
416
+ // Buffer header
417
+ msgBuf[msgBufPos++] = streamID & 0xff;
418
+ msgBuf[msgBufPos++] = (blockStart >> 16) & 0xff;
419
+ msgBuf[msgBufPos++] = (blockStart >> 8) & 0xff;
420
+ msgBuf[msgBufPos++] = blockStart & 0xff;
421
+ // Copy block info
422
+ msgBuf.set(blockContents, msgBufPos);
423
+ return msgBuf;
424
+ }
425
+ async sendFileBlock(blockContents, blockStart) {
426
+ const msgBuf = this.encodeFileStreamBlock(blockContents, blockStart, 0);
427
+ // // Debug
428
+ // RaftLog.debug(
429
+ // `sendFileBlock frameLen ${msgBuf.length} start ${blockStart} end ${blockEnd} len ${blockLen}`,
430
+ // );
431
+ // Send
432
+ try {
433
+ // Send
434
+ if (this._msgSender) {
435
+ // Wrap into HDLC
436
+ const framedMsg = this._miniHDLC.encode(msgBuf);
437
+ // Send
438
+ return this._msgSender.sendTxMsg(framedMsg, true);
439
+ }
440
+ }
441
+ catch (error) {
442
+ RaftLog_1.default.warn(`RaftMsgHandler sendFileBlock error${error}`);
443
+ }
444
+ return false;
445
+ }
446
+ async sendStreamBlock(blockContents, blockStart, streamID) {
447
+ // Ensure any waiting messages are sent first
448
+ await this._onMsgTrackTimer(false);
449
+ // Encode message
450
+ const msgBuf = this.encodeFileStreamBlock(blockContents, blockStart, streamID);
451
+ // // Debug
452
+ // RaftLog.debug(
453
+ // `sendStreamBlock frameLen ${msgBuf.length} start ${blockStart} end ${blockEnd} len ${blockLen}`,
454
+ // );
455
+ // Send
456
+ try {
457
+ // Send
458
+ if (this._msgSender) {
459
+ // Wrap into HDLC
460
+ const framedMsg = this._miniHDLC.encode(msgBuf);
461
+ // Send
462
+ return await this._msgSender.sendTxMsg(framedMsg, true);
463
+ }
464
+ }
465
+ catch (error) {
466
+ RaftLog_1.default.warn(`RaftMsgHandler sendStreamBlock error${error}`);
467
+ }
468
+ return false;
469
+ }
470
+ async createCommsBridge(bridgeSource, bridgeName, idleCloseSecs = 0) {
471
+ // Establish a bridge
472
+ return await this.sendRICRESTURL(`commandserial/bridge/setup?port=${bridgeSource}&name=${bridgeName}&idleCloseSecs=${idleCloseSecs}`);
473
+ }
474
+ async removeCommsBridge(bridgeID) {
475
+ // Remove a bridge
476
+ return await this.sendRICRESTURL(`commandserial/bridge/remove?id=${bridgeID}`);
477
+ }
478
+ }
479
+ exports.default = RaftMsgHandler;
480
+ //# sourceMappingURL=RaftMsgHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftMsgHandler.js","sourceRoot":"","sources":["../src/RaftMsgHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare class RaftMsgTrackInfo {
2
+ static readonly MAX_MSG_NUM = 255;
3
+ static readonly MSG_RESPONSE_TIMEOUT_MS = 2000;
4
+ static readonly MSG_RETRY_COUNT = 5;
5
+ msgOutstanding: boolean;
6
+ msgFrame: Uint8Array;
7
+ msgSentMs: number;
8
+ retryCount: number;
9
+ withResponse: boolean;
10
+ bridgeID: number | undefined;
11
+ msgHandle: number;
12
+ msgTimeoutMs: number | undefined;
13
+ resolve: unknown;
14
+ reject: unknown;
15
+ constructor();
16
+ set(msgOutstanding: boolean, msgFrame: Uint8Array, withResponse: boolean, bridgeID: number | undefined, msgHandle: number, msgTimeoutMs: number | undefined, resolve: unknown, reject: unknown): void;
17
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RaftMsgTrackInfo
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
+ exports.RaftMsgTrackInfo = void 0;
13
+ class RaftMsgTrackInfo {
14
+ constructor() {
15
+ this.msgOutstanding = false;
16
+ this.msgFrame = new Uint8Array();
17
+ this.msgSentMs = 0;
18
+ this.retryCount = 0;
19
+ this.withResponse = false;
20
+ this.bridgeID = undefined;
21
+ this.msgHandle = 0;
22
+ this.msgTimeoutMs = undefined;
23
+ this.msgOutstanding = false;
24
+ }
25
+ set(msgOutstanding, msgFrame, withResponse, bridgeID = undefined, msgHandle, msgTimeoutMs, resolve, reject) {
26
+ this.msgOutstanding = msgOutstanding;
27
+ this.msgFrame = msgFrame;
28
+ this.retryCount = 0;
29
+ this.msgSentMs = Date.now();
30
+ this.withResponse = withResponse;
31
+ this.bridgeID = bridgeID;
32
+ this.msgHandle = msgHandle;
33
+ this.msgTimeoutMs = msgTimeoutMs;
34
+ this.resolve = resolve;
35
+ this.reject = reject;
36
+ }
37
+ }
38
+ exports.RaftMsgTrackInfo = RaftMsgTrackInfo;
39
+ RaftMsgTrackInfo.MAX_MSG_NUM = 255;
40
+ RaftMsgTrackInfo.MSG_RESPONSE_TIMEOUT_MS = 2000;
41
+ RaftMsgTrackInfo.MSG_RETRY_COUNT = 5;
42
+ //# sourceMappingURL=RaftMsgTrackInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftMsgTrackInfo.js","sourceRoot":"","sources":["../src/RaftMsgTrackInfo.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,mBAAmB;AACnB,iBAAiB;AACjB,EAAE;AACF,wCAAwC;AACxC,oCAAoC;AACpC,EAAE;AACF,iHAAiH;;;AAEjH,MAAa,gBAAgB;IAe3B;QAXA,mBAAc,GAAG,KAAK,CAAC;QACvB,aAAQ,GAAe,IAAI,UAAU,EAAE,CAAC;QACxC,cAAS,GAAG,CAAC,CAAC;QACd,eAAU,GAAG,CAAC,CAAC;QACf,iBAAY,GAAG,KAAK,CAAC;QACrB,aAAQ,GAAuB,SAAS,CAAC;QACzC,cAAS,GAAG,CAAC,CAAC;QACd,iBAAY,GAAuB,SAAS,CAAC;QAK3C,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,GAAG,CACD,cAAuB,EACvB,QAAoB,EACpB,YAAqB,EACrB,WAA+B,SAAS,EACxC,SAAiB,EACjB,YAAgC,EAChC,OAAgB,EAChB,MAAe;QAEf,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;;AAvCH,4CAwCC;AAvCiB,4BAAW,GAAG,GAAG,AAAN,CAAO;AAClB,wCAAuB,GAAG,IAAI,AAAP,CAAQ;AAC/B,gCAAe,GAAG,CAAC,AAAJ,CAAK"}
@@ -0,0 +1,30 @@
1
+ export declare const RICSERIAL_MSG_NUM_POS = 0;
2
+ export declare const RICSERIAL_PROTOCOL_POS = 1;
3
+ export declare const RICSERIAL_PAYLOAD_POS = 2;
4
+ export declare const RICREST_REST_ELEM_CODE_POS = 0;
5
+ export declare const RICREST_HEADER_PAYLOAD_POS = 1;
6
+ export declare const RICREST_FILEBLOCK_CHANNEL_POS = 0;
7
+ export declare const RICREST_FILEBLOCK_FILEPOS_POS = 0;
8
+ export declare const RICREST_FILEBLOCK_FILEPOS_POS_BYTES = 4;
9
+ export declare const RICREST_FILEBLOCK_PAYLOAD_POS = 4;
10
+ export declare const RICREST_BRIDGE_ID_POS = 2;
11
+ export declare const RICREST_BRIDGE_PAYLOAD_POS = 3;
12
+ export declare enum RICRESTElemCode {
13
+ RICREST_ELEM_CODE_URL = 0,
14
+ RICREST_ELEM_CODE_CMDRESPJSON = 1,
15
+ RICREST_ELEM_CODE_BODY = 2,
16
+ RICREST_ELEM_CODE_COMMAND_FRAME = 3,
17
+ RICREST_ELEM_CODE_FILEBLOCK = 4
18
+ }
19
+ export declare enum RaftCommsMsgTypeCode {
20
+ MSG_TYPE_COMMAND = 0,
21
+ MSG_TYPE_RESPONSE = 1,
22
+ MSG_TYPE_PUBLISH = 2,
23
+ MSG_TYPE_REPORT = 3
24
+ }
25
+ export declare enum RaftCommsMsgProtocol {
26
+ MSG_PROTOCOL_ROSSERIAL = 0,
27
+ MSG_PROTOCOL_RESERVED_1 = 1,
28
+ MSG_PROTOCOL_RICREST = 2,
29
+ MSG_PROTOCOL_BRIDGE_RICREST = 3
30
+ }