@robdobsn/raftjs 1.7.2 → 1.7.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.
Files changed (188) hide show
  1. package/dist/web/RaftAttributeHandler.js +5 -5
  2. package/dist/web/RaftAttributeHandler.js.map +1 -1
  3. package/package.json +5 -2
  4. package/.editorconfig +0 -14
  5. package/.gitattributes +0 -11
  6. package/.nvmrc +0 -1
  7. package/TODO.md +0 -1
  8. package/dist/react-native/RaftAttributeHandler.d.ts +0 -12
  9. package/dist/react-native/RaftAttributeHandler.js +0 -249
  10. package/dist/react-native/RaftAttributeHandler.js.map +0 -1
  11. package/dist/react-native/RaftChannel.d.ts +0 -20
  12. package/dist/react-native/RaftChannel.js +0 -12
  13. package/dist/react-native/RaftChannel.js.map +0 -1
  14. package/dist/react-native/RaftChannelBLE.native.d.ts +0 -95
  15. package/dist/react-native/RaftChannelBLE.native.js +0 -482
  16. package/dist/react-native/RaftChannelBLE.native.js.map +0 -1
  17. package/dist/react-native/RaftChannelBLE.web.d.ts +0 -40
  18. package/dist/react-native/RaftChannelBLE.web.js +0 -300
  19. package/dist/react-native/RaftChannelBLE.web.js.map +0 -1
  20. package/dist/react-native/RaftChannelBLEFactory.d.ts +0 -10
  21. package/dist/react-native/RaftChannelBLEFactory.js +0 -17
  22. package/dist/react-native/RaftChannelBLEFactory.js.map +0 -1
  23. package/dist/react-native/RaftChannelBLEScanner.native.d.ts +0 -18
  24. package/dist/react-native/RaftChannelBLEScanner.native.js +0 -138
  25. package/dist/react-native/RaftChannelBLEScanner.native.js.map +0 -1
  26. package/dist/react-native/RaftChannelSimulated.d.ts +0 -32
  27. package/dist/react-native/RaftChannelSimulated.js +0 -418
  28. package/dist/react-native/RaftChannelSimulated.js.map +0 -1
  29. package/dist/react-native/RaftChannelWebSerial.d.ts +0 -39
  30. package/dist/react-native/RaftChannelWebSerial.js +0 -329
  31. package/dist/react-native/RaftChannelWebSerial.js.map +0 -1
  32. package/dist/react-native/RaftChannelWebSocket.d.ts +0 -30
  33. package/dist/react-native/RaftChannelWebSocket.js +0 -207
  34. package/dist/react-native/RaftChannelWebSocket.js.map +0 -1
  35. package/dist/react-native/RaftCommsStats.d.ts +0 -39
  36. package/dist/react-native/RaftCommsStats.js +0 -128
  37. package/dist/react-native/RaftCommsStats.js.map +0 -1
  38. package/dist/react-native/RaftConnEvents.d.ts +0 -39
  39. package/dist/react-native/RaftConnEvents.js +0 -54
  40. package/dist/react-native/RaftConnEvents.js.map +0 -1
  41. package/dist/react-native/RaftConnector.d.ts +0 -245
  42. package/dist/react-native/RaftConnector.js +0 -621
  43. package/dist/react-native/RaftConnector.js.map +0 -1
  44. package/dist/react-native/RaftCustomAttrHandler.d.ts +0 -4
  45. package/dist/react-native/RaftCustomAttrHandler.js +0 -50
  46. package/dist/react-native/RaftCustomAttrHandler.js.map +0 -1
  47. package/dist/react-native/RaftDeviceInfo.d.ts +0 -63
  48. package/dist/react-native/RaftDeviceInfo.js +0 -36
  49. package/dist/react-native/RaftDeviceInfo.js.map +0 -1
  50. package/dist/react-native/RaftDeviceManager.d.ts +0 -40
  51. package/dist/react-native/RaftDeviceManager.js +0 -499
  52. package/dist/react-native/RaftDeviceManager.js.map +0 -1
  53. package/dist/react-native/RaftDeviceMgrIF.d.ts +0 -15
  54. package/dist/react-native/RaftDeviceMgrIF.js +0 -11
  55. package/dist/react-native/RaftDeviceMgrIF.js.map +0 -1
  56. package/dist/react-native/RaftDeviceMsg.d.ts +0 -9
  57. package/dist/react-native/RaftDeviceMsg.js +0 -11
  58. package/dist/react-native/RaftDeviceMsg.js.map +0 -1
  59. package/dist/react-native/RaftDeviceStates.d.ts +0 -37
  60. package/dist/react-native/RaftDeviceStates.js +0 -60
  61. package/dist/react-native/RaftDeviceStates.js.map +0 -1
  62. package/dist/react-native/RaftFileHandler.d.ts +0 -52
  63. package/dist/react-native/RaftFileHandler.js +0 -502
  64. package/dist/react-native/RaftFileHandler.js.map +0 -1
  65. package/dist/react-native/RaftLog.d.ts +0 -22
  66. package/dist/react-native/RaftLog.js +0 -63
  67. package/dist/react-native/RaftLog.js.map +0 -1
  68. package/dist/react-native/RaftMiniHDLC.d.ts +0 -18
  69. package/dist/react-native/RaftMiniHDLC.js +0 -383
  70. package/dist/react-native/RaftMiniHDLC.js.map +0 -1
  71. package/dist/react-native/RaftMsgHandler.d.ts +0 -62
  72. package/dist/react-native/RaftMsgHandler.js +0 -511
  73. package/dist/react-native/RaftMsgHandler.js.map +0 -1
  74. package/dist/react-native/RaftMsgTrackInfo.d.ts +0 -17
  75. package/dist/react-native/RaftMsgTrackInfo.js +0 -42
  76. package/dist/react-native/RaftMsgTrackInfo.js.map +0 -1
  77. package/dist/react-native/RaftProtocolDefs.d.ts +0 -30
  78. package/dist/react-native/RaftProtocolDefs.js +0 -48
  79. package/dist/react-native/RaftProtocolDefs.js.map +0 -1
  80. package/dist/react-native/RaftStreamHandler.d.ts +0 -38
  81. package/dist/react-native/RaftStreamHandler.js +0 -257
  82. package/dist/react-native/RaftStreamHandler.js.map +0 -1
  83. package/dist/react-native/RaftStruct.d.ts +0 -3
  84. package/dist/react-native/RaftStruct.js +0 -208
  85. package/dist/react-native/RaftStruct.js.map +0 -1
  86. package/dist/react-native/RaftSysTypeManager.d.ts +0 -14
  87. package/dist/react-native/RaftSysTypeManager.js +0 -53
  88. package/dist/react-native/RaftSysTypeManager.js.map +0 -1
  89. package/dist/react-native/RaftSystemType.d.ts +0 -28
  90. package/dist/react-native/RaftSystemType.js +0 -3
  91. package/dist/react-native/RaftSystemType.js.map +0 -1
  92. package/dist/react-native/RaftSystemUtils.d.ts +0 -136
  93. package/dist/react-native/RaftSystemUtils.js +0 -410
  94. package/dist/react-native/RaftSystemUtils.js.map +0 -1
  95. package/dist/react-native/RaftTypes.d.ts +0 -194
  96. package/dist/react-native/RaftTypes.js +0 -153
  97. package/dist/react-native/RaftTypes.js.map +0 -1
  98. package/dist/react-native/RaftUpdateEvents.d.ts +0 -33
  99. package/dist/react-native/RaftUpdateEvents.js +0 -46
  100. package/dist/react-native/RaftUpdateEvents.js.map +0 -1
  101. package/dist/react-native/RaftUpdateManager.d.ts +0 -61
  102. package/dist/react-native/RaftUpdateManager.js +0 -621
  103. package/dist/react-native/RaftUpdateManager.js.map +0 -1
  104. package/dist/react-native/RaftUtils.d.ts +0 -126
  105. package/dist/react-native/RaftUtils.js +0 -467
  106. package/dist/react-native/RaftUtils.js.map +0 -1
  107. package/dist/react-native/RaftWifiTypes.d.ts +0 -23
  108. package/dist/react-native/RaftWifiTypes.js +0 -43
  109. package/dist/react-native/RaftWifiTypes.js.map +0 -1
  110. package/dist/react-native/main.d.ts +0 -25
  111. package/dist/react-native/main.js +0 -51
  112. package/dist/react-native/main.js.map +0 -1
  113. package/eslint.config.mjs +0 -33
  114. package/examples/dashboard/package.json +0 -36
  115. package/examples/dashboard/src/CommandPanel.tsx +0 -147
  116. package/examples/dashboard/src/ConnManager.ts +0 -164
  117. package/examples/dashboard/src/DeviceActionsForm.tsx +0 -133
  118. package/examples/dashboard/src/DeviceAttrsForm.tsx +0 -49
  119. package/examples/dashboard/src/DeviceLineChart.tsx +0 -163
  120. package/examples/dashboard/src/DevicePanel.tsx +0 -166
  121. package/examples/dashboard/src/DevicesPanel.tsx +0 -58
  122. package/examples/dashboard/src/DispLedGrid.tsx +0 -110
  123. package/examples/dashboard/src/DispOneLed.tsx +0 -20
  124. package/examples/dashboard/src/LatencyTest.ts +0 -130
  125. package/examples/dashboard/src/LatencyTestPanel.tsx +0 -92
  126. package/examples/dashboard/src/Main.tsx +0 -234
  127. package/examples/dashboard/src/SettingsManager.ts +0 -67
  128. package/examples/dashboard/src/SettingsScreen.tsx +0 -174
  129. package/examples/dashboard/src/StatusPanel.tsx +0 -71
  130. package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +0 -163
  131. package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +0 -91
  132. package/examples/dashboard/src/SystemTypeGeneric/StateInfoGeneric.ts +0 -30
  133. package/examples/dashboard/src/SystemTypeGeneric/SystemTypeGeneric.ts +0 -91
  134. package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +0 -70
  135. package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +0 -33
  136. package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +0 -342
  137. package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +0 -170
  138. package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +0 -123
  139. package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +0 -207
  140. package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +0 -464
  141. package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +0 -146
  142. package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +0 -97
  143. package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +0 -371
  144. package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +0 -20
  145. package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +0 -119
  146. package/examples/dashboard/src/index.html +0 -15
  147. package/examples/dashboard/src/index.tsx +0 -13
  148. package/examples/dashboard/src/styles.css +0 -408
  149. package/examples/dashboard/tsconfig.json +0 -18
  150. package/jest.config.js +0 -11
  151. package/src/RaftAttributeHandler.ts +0 -298
  152. package/src/RaftChannel.ts +0 -32
  153. package/src/RaftChannelBLE.native.ts +0 -616
  154. package/src/RaftChannelBLE.web.ts +0 -372
  155. package/src/RaftChannelBLEFactory.ts +0 -13
  156. package/src/RaftChannelBLEScanner.native.ts +0 -184
  157. package/src/RaftChannelSimulated.ts +0 -482
  158. package/src/RaftChannelWebSerial.ts +0 -420
  159. package/src/RaftChannelWebSocket.ts +0 -258
  160. package/src/RaftCommsStats.ts +0 -142
  161. package/src/RaftConnEvents.ts +0 -58
  162. package/src/RaftConnector.ts +0 -743
  163. package/src/RaftCustomAttrHandler.ts +0 -54
  164. package/src/RaftDeviceInfo.ts +0 -102
  165. package/src/RaftDeviceManager.ts +0 -607
  166. package/src/RaftDeviceMgrIF.ts +0 -33
  167. package/src/RaftDeviceMsg.ts +0 -20
  168. package/src/RaftDeviceStates.ts +0 -92
  169. package/src/RaftFileHandler.ts +0 -668
  170. package/src/RaftLog.ts +0 -70
  171. package/src/RaftMiniHDLC.ts +0 -396
  172. package/src/RaftMsgHandler.ts +0 -813
  173. package/src/RaftMsgTrackInfo.ts +0 -51
  174. package/src/RaftProtocolDefs.ts +0 -46
  175. package/src/RaftStreamHandler.ts +0 -328
  176. package/src/RaftStruct.ts +0 -209
  177. package/src/RaftSysTypeManager.ts +0 -60
  178. package/src/RaftSystemType.ts +0 -32
  179. package/src/RaftSystemUtils.ts +0 -487
  180. package/src/RaftTypes.ts +0 -278
  181. package/src/RaftUpdateEvents.ts +0 -48
  182. package/src/RaftUpdateManager.ts +0 -781
  183. package/src/RaftUtils.ts +0 -494
  184. package/src/RaftWifiTypes.ts +0 -36
  185. package/src/main.ts +0 -38
  186. package/testdata/TestDeviceTypeRecs.json +0 -492
  187. package/tsconfig.json +0 -30
  188. package/tsconfig.react-native.json +0 -29
@@ -1,621 +0,0 @@
1
- "use strict";
2
- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
- //
4
- // RaftUpdateManager
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
- const tslib_1 = require("tslib");
13
- const RaftLog_1 = tslib_1.__importDefault(require("./RaftLog"));
14
- const RaftTypes_1 = require("./RaftTypes");
15
- const RaftUpdateEvents_1 = require("./RaftUpdateEvents");
16
- const RaftUtils_1 = tslib_1.__importDefault(require("./RaftUtils"));
17
- class RICUpdateManager {
18
- constructor(_systemType, _msgHandler, _raftFileHandler, _raftSystemUtils, _eventListener, _firmwareTypeStrForMainFw, _currentAppVersion, _fileDownloader, _firmwareUpdateURL, _firmwareBaseURL, _raftChannel) {
19
- this._systemType = _systemType;
20
- this._msgHandler = _msgHandler;
21
- this._raftFileHandler = _raftFileHandler;
22
- this._raftSystemUtils = _raftSystemUtils;
23
- this._eventListener = _eventListener;
24
- this._firmwareTypeStrForMainFw = _firmwareTypeStrForMainFw;
25
- this._currentAppVersion = _currentAppVersion;
26
- this._fileDownloader = _fileDownloader;
27
- this._firmwareUpdateURL = _firmwareUpdateURL;
28
- this._firmwareBaseURL = _firmwareBaseURL;
29
- this._raftChannel = _raftChannel;
30
- // Version info
31
- this._latestVersionInfo = null;
32
- this._updateESPRequired = false;
33
- this._updateElemsRequired = false;
34
- // FW update
35
- this.FW_UPDATE_CHECKS_BEFORE_ASSUME_FAILED = 10;
36
- this.ELEM_FW_CHECK_LOOPS = 36;
37
- // Progress levels
38
- this._progressAfterDownload = 0.1;
39
- this._progressDuringUpload = 0.8;
40
- this._progressDuringRestart = 0.015;
41
- // Raft info
42
- this._idToConnectTo = null;
43
- this._nameToConnectTo = null;
44
- // TODO - decide what to do with RICHwRevNo
45
- this._ricHwRevNo = null;
46
- // TESTS - set to true for testing OTA updates ONLY
47
- this.TEST_TRUNCATE_ESP_FILE = false;
48
- this.TEST_PRETEND_ELEM_UPDATE_REQD = false;
49
- this.TEST_PRETEND_INITIAL_VERSIONS_DIFFER = false; // this is public so it can be set from the front-end to force an update
50
- this.TEST_PRETEND_FINAL_VERSIONS_MATCH = false;
51
- this.TEST_SKIP_FW_UPDATE = false;
52
- }
53
- async checkForUpdate(systemInfo) {
54
- var _a;
55
- if (systemInfo === null) {
56
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_NOT_AVAILABLE;
57
- }
58
- this._latestVersionInfo = null;
59
- try {
60
- // handle url modifications
61
- let updateURL = this._firmwareUpdateURL;
62
- const raftSystemInfo = this._raftSystemUtils.getCachedSystemInfo();
63
- // TODO - decide what to do with ricHWRevNo - several times below
64
- if (!raftSystemInfo || !raftSystemInfo.RicHwRevNo) {
65
- RaftLog_1.default.debug("checkForUpdate failed to get Raft info, either no channel or no system info");
66
- RaftLog_1.default.debug("raftSystemInfo:" + JSON.stringify(raftSystemInfo));
67
- RaftLog_1.default.debug("ricHwRevNo:" + raftSystemInfo.RicHwRevNo);
68
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_FAILED;
69
- }
70
- updateURL = updateURL.replace("{HWRevNo}", raftSystemInfo.RicHwRevNo.toString());
71
- // debug
72
- RaftLog_1.default.debug(`Update URL: ${updateURL}`);
73
- const response = await fetch(updateURL, { method: 'GET' });
74
- if (!response.ok) {
75
- RaftLog_1.default.debug(`HTTP error! status: ${response.status}`);
76
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_CANT_REACH_SERVER;
77
- }
78
- this._latestVersionInfo = await response.json();
79
- }
80
- catch (error) {
81
- RaftLog_1.default.debug(`Failed to get latest version from internet ${error}`);
82
- }
83
- if (this._latestVersionInfo === null) {
84
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_CANT_REACH_SERVER;
85
- }
86
- // Check the version and incomplete previous hw-elem update if needed
87
- try {
88
- const updateRequired = await this._isUpdateRequired(this._latestVersionInfo, systemInfo);
89
- RaftLog_1.default.debug(`checkForUpdate systemVersion ${systemInfo === null || systemInfo === void 0 ? void 0 : systemInfo.SystemVersion} available online ${(_a = this._latestVersionInfo) === null || _a === void 0 ? void 0 : _a.firmwareVersion} updateRequired ${updateRequired}`);
90
- if (updateRequired) {
91
- if (RaftUtils_1.default.isVersionGreater(this._latestVersionInfo.minimumUpdaterVersion.ota, this._currentAppVersion)) {
92
- RaftLog_1.default.debug(`App version ${this._currentAppVersion} but version ${this._latestVersionInfo.minimumUpdaterVersion.ota} required`);
93
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_APP_UPDATE_REQUIRED;
94
- }
95
- else {
96
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_IS_AVAILABLE;
97
- }
98
- }
99
- else {
100
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_NOT_AVAILABLE;
101
- }
102
- }
103
- catch (error) {
104
- RaftLog_1.default.debug(`checkForUpdate failed ${error}`);
105
- }
106
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_CANT_REACH_SERVER;
107
- }
108
- async _isUpdateRequired(latestVersion, systemInfo) {
109
- this._updateESPRequired = false;
110
- this._updateElemsRequired = false;
111
- // Perform the version check
112
- this._updateESPRequired = RaftUtils_1.default.isVersionGreater(latestVersion.firmwareVersion, systemInfo.SystemVersion);
113
- // Test ONLY pretend an update is needed
114
- if (this.TEST_PRETEND_INITIAL_VERSIONS_DIFFER) {
115
- this._updateESPRequired = true;
116
- }
117
- // TODO: check if elem updates are required using elemsUpdatesRequired()
118
- // Check if a previous hw-elem update didn't complete - but no point if we would update anyway
119
- if (!this._updateESPRequired) {
120
- try {
121
- const elUpdRslt = await this._msgHandler.sendRICRESTURL("hwfwupd");
122
- // Check result
123
- this._updateElemsRequired =
124
- elUpdRslt.rslt === "ok" && elUpdRslt.st.i === 1;
125
- // Debug
126
- if (this._updateElemsRequired) {
127
- RaftLog_1.default.debug("isUpdateRequired - prev incomplete");
128
- }
129
- else {
130
- RaftLog_1.default.debug("isUpdateRequired - prev complete");
131
- }
132
- // Test ONLY pretend an element update is needed
133
- if (this.TEST_PRETEND_ELEM_UPDATE_REQD) {
134
- this._updateElemsRequired = true;
135
- }
136
- }
137
- catch (error) {
138
- RaftLog_1.default.debug(`isUpdateRequired - failed to get hw-elem firmware update status ${error}`);
139
- }
140
- }
141
- else {
142
- this._updateElemsRequired = true;
143
- }
144
- return this._updateESPRequired || this._updateElemsRequired;
145
- }
146
- // Mark: Firmware update ------------------------------------------------------------------------------------------------
147
- elemUpdateRequired(expectedVersion, actualVersion, dtid, addr, elemType) {
148
- if (elemType != "SmartServo" && elemType != "RSAddOn")
149
- return false;
150
- const outdated = RaftUtils_1.default.isVersionGreater(expectedVersion, actualVersion);
151
- if (!outdated)
152
- return false;
153
- // if stm32, we only want to update the base elems
154
- const stm32_dtid_mask = 0xFFFFFF00;
155
- const stm32_dtid_id = 0x00000100;
156
- const stm32_base_elems = [0x10, 0x13, 0x16];
157
- if ((dtid & stm32_dtid_mask) == stm32_dtid_id) {
158
- return stm32_base_elems.includes(addr);
159
- }
160
- return true;
161
- }
162
- getExpectedVersion(firmwareVersions, dtid) {
163
- if (Object.prototype.hasOwnProperty.call(firmwareVersions["dtid"], dtid)) {
164
- return firmwareVersions["dtid"][dtid]["version"];
165
- }
166
- return null;
167
- }
168
- async elemUpdatesRequired() {
169
- const elemsToUpdate = [];
170
- const firmwareVersionsUrl = `${this._firmwareBaseURL}/firmware/firmwareVersions.json`;
171
- // get elem firmware expected versions
172
- const firmwareVersionResponse = await fetch(firmwareVersionsUrl);
173
- if (!firmwareVersionResponse.ok)
174
- return null;
175
- const firmwareVersionsJson = await firmwareVersionResponse.json();
176
- RaftLog_1.default.debug(`firmwareVersions response ${JSON.stringify(firmwareVersionsJson)}`);
177
- // get connected elements
178
- const hwstatus = await this._msgHandler.sendRICRESTURL("hwstatus");
179
- RaftLog_1.default.debug(`hwstatus response: ${JSON.stringify(hwstatus)}`);
180
- const hwElems = hwstatus["hw"];
181
- // TODO: check if hwstatus is reporting versions as "0.0.0", if so pause and retry as robot is probably still starting up
182
- for (const elem in hwElems) {
183
- // TODO: use RaftHWElem type
184
- const dtid = parseInt(hwElems[elem]["whoAmITypeCode"], 16);
185
- const expectedVersion = this.getExpectedVersion(firmwareVersionsJson, dtid);
186
- const actualVersion = hwElems[elem]["versionStr"];
187
- const addr = parseInt(hwElems[elem]["addr"], 16);
188
- const elemType = hwElems[elem]["type"];
189
- const elemName = hwElems[elem]["name"];
190
- RaftLog_1.default.debug(`hwElem ${elemName} dtid ${dtid} addr ${addr} type ${elemType} expectedVersion ${expectedVersion} actual version ${actualVersion}`);
191
- if (expectedVersion) {
192
- hwElems[elem]["expectedVersion"] = expectedVersion;
193
- if (this.elemUpdateRequired(expectedVersion, actualVersion, dtid, addr, elemType))
194
- elemsToUpdate.push(hwElems[elem]);
195
- }
196
- }
197
- return elemsToUpdate;
198
- }
199
- async firmwareUpdate() {
200
- var _a;
201
- // Check valid
202
- if (this._latestVersionInfo === null)
203
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_NOT_CONFIGURED;
204
- // save Raft info for later restarts
205
- const raftSystemInfo = this._raftSystemUtils.getCachedSystemInfo();
206
- if (this._raftChannel && raftSystemInfo !== null) {
207
- const deviceInfo = this._raftChannel.getConnectedLocator();
208
- this._idToConnectTo = deviceInfo.id;
209
- // TODO - decide what to do with this - used to say "Marty"
210
- this._nameToConnectTo = deviceInfo.name || "Raft";
211
- //Decide what to do with RICHwRevNo - should use HwRev if it exists
212
- // Convert raftSystemInfo.RicHwRevNo to a number
213
- const hwRev = raftSystemInfo.RicHwRevNo;
214
- this._ricHwRevNo = hwRev === undefined ? 0 : (typeof hwRev === "string" ? parseInt(hwRev) : hwRev);
215
- RaftLog_1.default.debug("iDToConnectTo " + this._idToConnectTo);
216
- RaftLog_1.default.debug("nameToConnectTo " + this._nameToConnectTo);
217
- RaftLog_1.default.debug("HW Rev " + this._ricHwRevNo.toString());
218
- }
219
- else {
220
- RaftLog_1.default.debug("firmwareUpdate failed to get Raft info, either no channel or no system info");
221
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_FAILED;
222
- }
223
- // Update started
224
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_STARTED);
225
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_PROGRESS, {
226
- stage: "Downloading firmware",
227
- progress: 0,
228
- updatingFilesystem: false,
229
- });
230
- // parse version file to extract only "ota" files
231
- const firmwareList = [];
232
- let mainFwInfo = null;
233
- this._latestVersionInfo.files.forEach((fileInfo) => {
234
- if (fileInfo.updaters.indexOf("ota") != -1) {
235
- fileInfo.downloadUrl = fileInfo.firmware || fileInfo.downloadUrl;
236
- if (fileInfo.elemType === this._firmwareTypeStrForMainFw) {
237
- mainFwInfo = fileInfo;
238
- }
239
- else {
240
- firmwareList.push(fileInfo);
241
- }
242
- RaftLog_1.default.debug(`fwUpdate selected file ${fileInfo.destname} for download`);
243
- }
244
- });
245
- // Add the main firware if it is required
246
- if (this._updateESPRequired && mainFwInfo != null) {
247
- firmwareList.unshift(mainFwInfo); // add to front of array so it's downloaded first
248
- }
249
- // Binary data downloaded from the internet
250
- const firmwareData = new Array();
251
- // Iterate through the firmware entities
252
- const numFw = firmwareList.length;
253
- try {
254
- for (let fwIdx = 0; fwIdx < firmwareList.length; fwIdx++) {
255
- // Download the firmware
256
- RaftLog_1.default.debug(`fwUpdate downloading file URI ${firmwareList[fwIdx].downloadUrl}`);
257
- const downloadResult = await this._fileDownloader(firmwareList[fwIdx].downloadUrl, (received, total) => {
258
- const currentProgress = ((fwIdx + received / total) / numFw) *
259
- this._progressAfterDownload;
260
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_PROGRESS, {
261
- stage: "Downloading firmware",
262
- progress: currentProgress,
263
- updatingFilesystem: false,
264
- });
265
- });
266
- if (downloadResult.downloadedOk && downloadResult.fileData != null) {
267
- firmwareData.push(downloadResult.fileData);
268
- }
269
- else {
270
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_FAILED);
271
- throw Error("file download res null");
272
- }
273
- }
274
- }
275
- catch (error) {
276
- RaftLog_1.default.debug(`fwUpdate error ${error}`);
277
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_FAILED);
278
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_FAILED;
279
- }
280
- // Test ONLY truncate the main firmware
281
- if (this._updateESPRequired &&
282
- mainFwInfo != null &&
283
- this.TEST_TRUNCATE_ESP_FILE) {
284
- firmwareData[0] = new Uint8Array(500);
285
- }
286
- // Calculate total length of data
287
- let totalBytes = 0;
288
- for (const fileData of firmwareData) {
289
- totalBytes += fileData.length;
290
- }
291
- // Debug
292
- RaftLog_1.default.debug(`fwUpdate got ok ${firmwareData.length} files total ${totalBytes} bytes`);
293
- // Start uploading
294
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_PROGRESS, {
295
- stage: "Starting firmware upload",
296
- progress: this._progressAfterDownload,
297
- updatingFilesystem: false,
298
- });
299
- // Upload each file
300
- let updateStage = "Uploading new firmware\nThis may take a while, please be patient";
301
- let updatingFilesystem = false;
302
- try {
303
- let sentBytes = 0;
304
- for (let fwIdx = 0; fwIdx < firmwareData.length; fwIdx++) {
305
- RaftLog_1.default.debug(`fwUpdate uploading file name ${firmwareList[fwIdx].destname} len ${firmwareData[fwIdx].length}`);
306
- let updatingItemType = RaftTypes_1.RaftFileSendType.NORMAL_FILE;
307
- if (firmwareList[fwIdx].elemType === this._firmwareTypeStrForMainFw) {
308
- updatingItemType = RaftTypes_1.RaftFileSendType.FIRMWARE_UPDATE;
309
- }
310
- let percComplete = (sentBytes / totalBytes) * this._progressDuringUpload +
311
- this._progressAfterDownload;
312
- if (!updatingFilesystem &&
313
- updatingItemType == RaftTypes_1.RaftFileSendType.NORMAL_FILE) {
314
- // start of filesystem updates
315
- updateStage =
316
- "Updating system files\nThis may take a while, please be patient\nUpdate cannot be cancelled during this stage\n";
317
- updatingFilesystem = true;
318
- // emit event so app can deactivate cancel button
319
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_PROGRESS, {
320
- stage: updateStage,
321
- progress: percComplete,
322
- updatingFilesystem: updatingFilesystem,
323
- });
324
- // TODO - Decide how to handle this
325
- if (this._ricHwRevNo == 1) {
326
- // the spiffs filesystem used on rev 1 doesn't delete files properly and has issues being more than 75% full
327
- // it must be formatted to prevent issues after multiple OTA updates
328
- // Reformat filesystem. This will take a few seconds so set a long timeout for the response
329
- RaftLog_1.default.debug(`Beginning file system update. Reformatting FS.`);
330
- await this._msgHandler.sendRICRESTURL("reformatfs", undefined, 15000);
331
- // trigger and wait for reboot
332
- RaftLog_1.default.debug(`Restarting RIC`);
333
- try {
334
- await this._msgHandler.sendRICRESTURL("reset");
335
- }
336
- catch (error) {
337
- RaftLog_1.default.debug(`fwUpdate reset failed ${error}`);
338
- }
339
- if (!(await this.waitForRestart(percComplete))) {
340
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_FAILED);
341
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_FAILED;
342
- }
343
- }
344
- }
345
- if (updatingItemType == RaftTypes_1.RaftFileSendType.FIRMWARE_UPDATE &&
346
- this.TEST_SKIP_FW_UPDATE) {
347
- RaftLog_1.default.debug("fwUpdate: Skipping FW update");
348
- }
349
- else {
350
- await this.fileSend(firmwareList[fwIdx].destname, updatingItemType, firmwareData[fwIdx], (_, __, progress) => {
351
- let percComplete = ((sentBytes + progress * firmwareData[fwIdx].length) /
352
- totalBytes) *
353
- this._progressDuringUpload +
354
- this._progressAfterDownload;
355
- if (updatingItemType == RaftTypes_1.RaftFileSendType.NORMAL_FILE)
356
- percComplete += this._progressDuringRestart * 2;
357
- if (percComplete > 1.0)
358
- percComplete = 1.0;
359
- RaftLog_1.default.debug(`fwUpdate progress ${progress.toFixed(2)} sent ${sentBytes} len ${firmwareData[fwIdx].length} total ${totalBytes} propComplete ${percComplete.toFixed(2)}`);
360
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_PROGRESS, {
361
- stage: updateStage,
362
- progress: percComplete,
363
- updatingFilesystem: updatingFilesystem,
364
- });
365
- });
366
- }
367
- sentBytes += firmwareData[fwIdx].length;
368
- if (updatingItemType == RaftTypes_1.RaftFileSendType.FIRMWARE_UPDATE) {
369
- percComplete =
370
- (sentBytes / totalBytes) * this._progressDuringUpload +
371
- this._progressAfterDownload;
372
- // if the element was firmware, Raft app will now restart automatically
373
- if (!(await this.waitForRestart(percComplete, (_a = this._latestVersionInfo) === null || _a === void 0 ? void 0 : _a.firmwareVersion))) {
374
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_FAILED);
375
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_FAILED;
376
- }
377
- }
378
- }
379
- }
380
- catch (error) {
381
- RaftLog_1.default.debug(`fwUpdate error ${error}`);
382
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_FAILED);
383
- return RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_FAILED;
384
- }
385
- // TODO: check this is working
386
- const allElemsUpdatedOk = await this.updateElems();
387
- /*
388
- // Issue requests for hw-elem firmware updates
389
- let elemFwIdx = 0;
390
- let allElemsUpdatedOk = true;
391
- for (const elemFw of firmwareList) {
392
- // Update progress
393
- const percComplete =
394
- this._progressAfterUpload +
395
- ((1 - this._progressAfterUpload) * elemFwIdx) / firmwareList.length;
396
- this._eventListener(RaftUpdateEvent.UPDATE_PROGRESS, {
397
- stage: "Updating elements",
398
- progress: percComplete,
399
- updatingFilesystem: true,
400
- });
401
- elemFwIdx++;
402
-
403
- // Check element is not main
404
- if (elemFw.elemType === this._firmwareTypeStrForMainFw) continue;
405
-
406
- // Non-firmware elemTypes
407
- if (this._nonFirmwareElemTypes.includes(elemFw.elemType)) continue;
408
-
409
- await this.updateElem(elemFw);
410
- }
411
- */
412
- // Done update
413
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_PROGRESS, {
414
- stage: "Finished",
415
- progress: 1,
416
- updatingFilesystem: false,
417
- });
418
- let updateResult = RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_SUCCESS_ALL;
419
- if (allElemsUpdatedOk) {
420
- this._eventListener(updateResult, this._raftSystemUtils.getCachedSystemInfo());
421
- }
422
- else {
423
- updateResult = RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_SUCCESS_MAIN_ONLY;
424
- this._eventListener(updateResult, this._raftSystemUtils.getCachedSystemInfo());
425
- }
426
- return updateResult;
427
- }
428
- async updateElems(elemsToUpdate = null) {
429
- let allElemsUpdatedOk = true;
430
- if (elemsToUpdate === null)
431
- elemsToUpdate = await this.elemUpdatesRequired();
432
- if (elemsToUpdate === null)
433
- return false;
434
- let progress = this._progressAfterDownload +
435
- this._progressDuringUpload +
436
- 2 * this._progressDuringRestart;
437
- const progressPerElem = (1 - progress) / elemsToUpdate.length;
438
- const updatedDtids = [];
439
- for (const elem in elemsToUpdate) {
440
- const dtid = parseInt(elemsToUpdate[elem]["whoAmITypeCode"], 16);
441
- const expectedVersion = elemsToUpdate[elem]["expectedVersion"];
442
- const actualVersion = elemsToUpdate[elem]["versionStr"];
443
- const elemType = elemsToUpdate[elem]["type"];
444
- const elemName = elemsToUpdate[elem]["name"];
445
- RaftLog_1.default.debug(`hwElem ${elemsToUpdate[elem]["name"]} dtid ${dtid} type ${elemType} expectedVersion ${expectedVersion} actual version ${actualVersion}`);
446
- if (expectedVersion) {
447
- // only need to send each firmware file once
448
- const sendFile = updatedDtids.includes(dtid) ? false : true;
449
- if (!await this.updateHWElem(elemName, dtid, elemType, expectedVersion, sendFile))
450
- allElemsUpdatedOk = false;
451
- updatedDtids.push(dtid);
452
- progress += progressPerElem;
453
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_PROGRESS, {
454
- stage: "Updating elements",
455
- progress: progress,
456
- updatingFilesystem: true,
457
- });
458
- }
459
- }
460
- return allElemsUpdatedOk;
461
- }
462
- async updateHWElem(elemName, dtid, elemType, expectedVersion, sendFile) {
463
- const dtidStr = dtid.toString(16).padStart(8, "0");
464
- const destFwFilename = `fw${dtidStr}.rfw`;
465
- if (sendFile) {
466
- const firmwareUrl = `${this._firmwareBaseURL}/firmware/${dtidStr}/fw${dtidStr}-${expectedVersion}.rfw`;
467
- const firmware = await this._fileDownloader(firmwareUrl, (received, total) => { RaftLog_1.default.debug(`download received ${received} of total ${total}`); });
468
- if (!firmware.downloadedOk || !firmware.fileData)
469
- return false;
470
- if (!await this.fileSend(destFwFilename, RaftTypes_1.RaftFileSendType.NORMAL_FILE, firmware.fileData, (sent, total, progress) => { console.log(`sent ${sent} total ${total} progress ${progress}`); }))
471
- return false;
472
- }
473
- // double check file on Raft has the correct version
474
- const fwResp = await this._msgHandler.sendRICRESTURL(`hwfwupd//${destFwFilename}`);
475
- if (fwResp.st.v != expectedVersion)
476
- return false;
477
- const fwInfo = {
478
- elemType: elemType,
479
- destname: destFwFilename,
480
- version: "",
481
- md5: "",
482
- releaseNotes: "",
483
- comments: "",
484
- updaters: [],
485
- downloadUrl: ""
486
- };
487
- return await this.updateElem(fwInfo, elemName);
488
- }
489
- async updateElem(elemFw, elemNameOrAll = "all") {
490
- // Start hw-elem update
491
- const updateCmd = `hwfwupd/${elemFw.elemType}/${elemFw.destname}/${elemNameOrAll}`;
492
- try {
493
- await this._msgHandler.sendRICRESTURL(updateCmd);
494
- }
495
- catch (error) {
496
- RaftLog_1.default.debug(`fwUpdate failed to start hw-elem firmware update cmd ${updateCmd} error ${error}`);
497
- return false;
498
- }
499
- let allElemsUpdatedOk = false;
500
- // Check the status
501
- for (let updateCheckLoop = 0; updateCheckLoop < this.ELEM_FW_CHECK_LOOPS; updateCheckLoop++) {
502
- try {
503
- // Wait for process to start on ESP32
504
- await new Promise((resolve) => setTimeout(resolve, 5000));
505
- // Get result (or status)
506
- const elUpdRslt = await this._msgHandler.sendRICRESTURL("hwfwupd");
507
- // Check result
508
- if (elUpdRslt.rslt === "ok" &&
509
- (elUpdRslt.st.s === "idle" || elUpdRslt.st.s === "done")) {
510
- RaftLog_1.default.debug(`fwUpdate hw-elem firmware updated ok - status ${elUpdRslt.st.s} rsltmsg ${elUpdRslt.st.m}`);
511
- // Check if any update outstanding (incomplete === 0)
512
- allElemsUpdatedOk = elUpdRslt.st.i === 0;
513
- break;
514
- }
515
- }
516
- catch (error) {
517
- RaftLog_1.default.debug(`failed to get hw-elem firmware update status ${error}`);
518
- }
519
- }
520
- return allElemsUpdatedOk;
521
- }
522
- async manualReconnect() {
523
- var _a;
524
- return (_a = this._raftChannel) === null || _a === void 0 ? void 0 : _a.connect({
525
- name: this._nameToConnectTo,
526
- localName: this._nameToConnectTo,
527
- id: this._idToConnectTo || "",
528
- rssi: 0,
529
- }, {});
530
- }
531
- async waitForRestart(percComplete, checkFwVersion = null) {
532
- RaftLog_1.default.debug(`fwUpdate: Waiting for restart. percComplete ${percComplete}, checkFwVersion: ${checkFwVersion}`);
533
- // sending the appropriate disconnect event to the UI so it knows that the device is disconnected
534
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_DISCONNECTED);
535
- // Wait for firmware update to complete, restart to occur
536
- // and BLE reconnection to happen
537
- const waitTime = 5000;
538
- const iterations = 3;
539
- for (let i = 0; i < iterations; i++) {
540
- await new Promise((resolve) => setTimeout(resolve, waitTime));
541
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_PROGRESS, {
542
- stage: "Restarting " + (this._systemType ? this._systemType.nameForDialogs : ""),
543
- progress: percComplete + (this._progressDuringRestart * i) / 3,
544
- updatingFilesystem: true,
545
- });
546
- RaftLog_1.default.debug("fwUpdate waiting for reset, seconds: " +
547
- i * waitTime +
548
- " / " +
549
- iterations * waitTime);
550
- }
551
- // Attempt to get status from main ESP32 update
552
- // The ESP32 will power cycle at this point so we need to wait a while
553
- let versionConfirmed = false;
554
- for (let fwUpdateCheckCount = 0; fwUpdateCheckCount < this.FW_UPDATE_CHECKS_BEFORE_ASSUME_FAILED; fwUpdateCheckCount++) {
555
- try {
556
- // Get version
557
- RaftLog_1.default.debug(`fwUpdate attempting to get Raft version attempt ${fwUpdateCheckCount}`);
558
- const systemInfo = await this._raftSystemUtils.getSystemInfo(true);
559
- RaftLog_1.default.debug(`fwUpdate version rslt "${systemInfo.rslt}" System Version ${systemInfo.SystemVersion}`);
560
- if (systemInfo.rslt !== "ok") {
561
- let shouldContiue = true; // if this is not the last attempt, or if the manual reconnect fails, we should continue the loop
562
- if (fwUpdateCheckCount === this.FW_UPDATE_CHECKS_BEFORE_ASSUME_FAILED - 1) {
563
- // we have failed to get the version after the last attempt, so we need to fallback to manually reconnecting
564
- const didConnect = await this.manualReconnect();
565
- if (didConnect)
566
- shouldContiue = false;
567
- }
568
- if (shouldContiue)
569
- continue;
570
- }
571
- // at this point we are connected to BLE again, so we can send to the UI the appropriate events
572
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_RECONNECTED);
573
- if (checkFwVersion != null) {
574
- // Check version
575
- versionConfirmed = RaftUtils_1.default.isVersionEqual(checkFwVersion, systemInfo.SystemVersion);
576
- RaftLog_1.default.debug(`fwUpdate got version rslt ${versionConfirmed}`);
577
- }
578
- else {
579
- versionConfirmed = true;
580
- }
581
- // Test fiddle to say it worked!
582
- if (this.TEST_PRETEND_FINAL_VERSIONS_MATCH) {
583
- versionConfirmed = true;
584
- }
585
- break;
586
- }
587
- catch (error) {
588
- RaftLog_1.default.debug(`fwUpdate failed to get version attempt', ${fwUpdateCheckCount} error ${error}`);
589
- }
590
- }
591
- return versionConfirmed;
592
- }
593
- async firmwareUpdateCancel() {
594
- this._eventListener(RaftUpdateEvents_1.RaftUpdateEvent.UPDATE_CANCELLING);
595
- await this.fileSendCancel();
596
- }
597
- // Mark: File Transfer ------------------------------------------------------------------------------------
598
- /**
599
- *
600
- * fileSend - start file transfer
601
- * @param fileName name of file to send
602
- * @param fileType normal file or firmware
603
- * @param fileDest destination on the system (fs or fw generally)
604
- * @param fileContents contenst of the file (binary object)
605
- * @returns Promise<boolean>
606
- *
607
- */
608
- async fileSend(fileName, fileType, fileContents, progressCallback) {
609
- // Get the destination
610
- let fileDest = this._systemType ? this._systemType.normalFileDestName : "fs";
611
- if (fileType === RaftTypes_1.RaftFileSendType.FIRMWARE_UPDATE) {
612
- fileDest = this._systemType ? this._systemType.firmwareDestName : "fw";
613
- }
614
- return await this._raftFileHandler.fileSend(fileName, fileType, fileDest, fileContents, progressCallback);
615
- }
616
- fileSendCancel() {
617
- return this._raftFileHandler.fileSendCancel();
618
- }
619
- }
620
- exports.default = RICUpdateManager;
621
- //# sourceMappingURL=RaftUpdateManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RaftUpdateManager.js","sourceRoot":"","sources":["../../src/RaftUpdateManager.ts"],"names":[],"mappings":"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"}