@robdobsn/raftjs 1.8.5 → 1.11.5

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 (240) hide show
  1. package/.editorconfig +14 -0
  2. package/.gitattributes +11 -0
  3. package/.nvmrc +1 -0
  4. package/TODO.md +1 -0
  5. package/dist/react-native/RaftAttributeHandler.d.ts +14 -0
  6. package/dist/react-native/RaftAttributeHandler.js +375 -0
  7. package/dist/react-native/RaftAttributeHandler.js.map +1 -0
  8. package/dist/react-native/RaftChannel.d.ts +20 -0
  9. package/dist/react-native/RaftChannel.js +12 -0
  10. package/dist/react-native/RaftChannel.js.map +1 -0
  11. package/dist/react-native/RaftChannelBLE.native.d.ts +95 -0
  12. package/dist/react-native/RaftChannelBLE.native.js +483 -0
  13. package/dist/react-native/RaftChannelBLE.native.js.map +1 -0
  14. package/dist/react-native/RaftChannelBLE.web.d.ts +40 -0
  15. package/dist/react-native/RaftChannelBLE.web.js +302 -0
  16. package/dist/react-native/RaftChannelBLE.web.js.map +1 -0
  17. package/dist/react-native/RaftChannelBLEFactory.d.ts +10 -0
  18. package/dist/react-native/RaftChannelBLEFactory.js +17 -0
  19. package/dist/react-native/RaftChannelBLEFactory.js.map +1 -0
  20. package/dist/react-native/RaftChannelBLEScanner.native.d.ts +18 -0
  21. package/dist/react-native/RaftChannelBLEScanner.native.js +138 -0
  22. package/dist/react-native/RaftChannelBLEScanner.native.js.map +1 -0
  23. package/dist/react-native/RaftChannelSimulated.d.ts +42 -0
  24. package/dist/react-native/RaftChannelSimulated.js +1001 -0
  25. package/dist/react-native/RaftChannelSimulated.js.map +1 -0
  26. package/dist/react-native/RaftChannelWebSerial.d.ts +39 -0
  27. package/dist/react-native/RaftChannelWebSerial.js +329 -0
  28. package/dist/react-native/RaftChannelWebSerial.js.map +1 -0
  29. package/dist/react-native/RaftChannelWebSocket.d.ts +30 -0
  30. package/dist/react-native/RaftChannelWebSocket.js +222 -0
  31. package/dist/react-native/RaftChannelWebSocket.js.map +1 -0
  32. package/dist/react-native/RaftCommsStats.d.ts +39 -0
  33. package/dist/react-native/RaftCommsStats.js +128 -0
  34. package/dist/react-native/RaftCommsStats.js.map +1 -0
  35. package/dist/react-native/RaftConnEvents.d.ts +39 -0
  36. package/dist/react-native/RaftConnEvents.js +54 -0
  37. package/dist/react-native/RaftConnEvents.js.map +1 -0
  38. package/dist/react-native/RaftConnector.d.ts +257 -0
  39. package/dist/react-native/RaftConnector.js +671 -0
  40. package/dist/react-native/RaftConnector.js.map +1 -0
  41. package/dist/react-native/RaftCustomAttrHandler.d.ts +6 -0
  42. package/dist/react-native/RaftCustomAttrHandler.js +93 -0
  43. package/dist/react-native/RaftCustomAttrHandler.js.map +1 -0
  44. package/dist/react-native/RaftDeviceInfo.d.ts +71 -0
  45. package/dist/react-native/RaftDeviceInfo.js +50 -0
  46. package/dist/react-native/RaftDeviceInfo.js.map +1 -0
  47. package/dist/react-native/RaftDeviceManager.d.ts +73 -0
  48. package/dist/react-native/RaftDeviceManager.js +812 -0
  49. package/dist/react-native/RaftDeviceManager.js.map +1 -0
  50. package/dist/react-native/RaftDeviceMgrIF.d.ts +19 -0
  51. package/dist/react-native/RaftDeviceMgrIF.js +11 -0
  52. package/dist/react-native/RaftDeviceMgrIF.js.map +1 -0
  53. package/dist/react-native/RaftDeviceMsg.d.ts +9 -0
  54. package/dist/react-native/RaftDeviceMsg.js +11 -0
  55. package/dist/react-native/RaftDeviceMsg.js.map +1 -0
  56. package/dist/react-native/RaftDeviceStates.d.ts +55 -0
  57. package/dist/react-native/RaftDeviceStates.js +81 -0
  58. package/dist/react-native/RaftDeviceStates.js.map +1 -0
  59. package/dist/react-native/RaftFileHandler.d.ts +52 -0
  60. package/dist/react-native/RaftFileHandler.js +502 -0
  61. package/dist/react-native/RaftFileHandler.js.map +1 -0
  62. package/dist/react-native/RaftLog.d.ts +22 -0
  63. package/dist/react-native/RaftLog.js +63 -0
  64. package/dist/react-native/RaftLog.js.map +1 -0
  65. package/dist/react-native/RaftMiniHDLC.d.ts +18 -0
  66. package/dist/react-native/RaftMiniHDLC.js +383 -0
  67. package/dist/react-native/RaftMiniHDLC.js.map +1 -0
  68. package/dist/react-native/RaftMsgHandler.d.ts +62 -0
  69. package/dist/react-native/RaftMsgHandler.js +511 -0
  70. package/dist/react-native/RaftMsgHandler.js.map +1 -0
  71. package/dist/react-native/RaftMsgTrackInfo.d.ts +17 -0
  72. package/dist/react-native/RaftMsgTrackInfo.js +42 -0
  73. package/dist/react-native/RaftMsgTrackInfo.js.map +1 -0
  74. package/dist/react-native/RaftProtocolDefs.d.ts +30 -0
  75. package/dist/react-native/RaftProtocolDefs.js +48 -0
  76. package/dist/react-native/RaftProtocolDefs.js.map +1 -0
  77. package/dist/react-native/RaftPublish.d.ts +2 -0
  78. package/dist/react-native/RaftPublish.js +81 -0
  79. package/dist/react-native/RaftPublish.js.map +1 -0
  80. package/dist/react-native/RaftStreamHandler.d.ts +49 -0
  81. package/dist/react-native/RaftStreamHandler.js +324 -0
  82. package/dist/react-native/RaftStreamHandler.js.map +1 -0
  83. package/dist/react-native/RaftStruct.d.ts +3 -0
  84. package/dist/react-native/RaftStruct.js +258 -0
  85. package/dist/react-native/RaftStruct.js.map +1 -0
  86. package/dist/react-native/RaftSysTypeManager.d.ts +16 -0
  87. package/dist/react-native/RaftSysTypeManager.js +78 -0
  88. package/dist/react-native/RaftSysTypeManager.js.map +1 -0
  89. package/dist/react-native/RaftSystemType.d.ts +30 -0
  90. package/dist/react-native/RaftSystemType.js +3 -0
  91. package/dist/react-native/RaftSystemType.js.map +1 -0
  92. package/dist/react-native/RaftSystemUtils.d.ts +152 -0
  93. package/dist/react-native/RaftSystemUtils.js +463 -0
  94. package/dist/react-native/RaftSystemUtils.js.map +1 -0
  95. package/dist/react-native/RaftTypes.d.ts +216 -0
  96. package/dist/react-native/RaftTypes.js +153 -0
  97. package/dist/react-native/RaftTypes.js.map +1 -0
  98. package/dist/react-native/RaftUpdateEvents.d.ts +33 -0
  99. package/dist/react-native/RaftUpdateEvents.js +46 -0
  100. package/dist/react-native/RaftUpdateEvents.js.map +1 -0
  101. package/dist/react-native/RaftUpdateManager.d.ts +61 -0
  102. package/dist/react-native/RaftUpdateManager.js +621 -0
  103. package/dist/react-native/RaftUpdateManager.js.map +1 -0
  104. package/dist/react-native/RaftUtils.d.ts +128 -0
  105. package/dist/react-native/RaftUtils.js +487 -0
  106. package/dist/react-native/RaftUtils.js.map +1 -0
  107. package/dist/react-native/RaftWifiTypes.d.ts +23 -0
  108. package/dist/react-native/RaftWifiTypes.js +43 -0
  109. package/dist/react-native/RaftWifiTypes.js.map +1 -0
  110. package/dist/react-native/main.d.ts +27 -0
  111. package/dist/react-native/main.js +52 -0
  112. package/dist/react-native/main.js.map +1 -0
  113. package/dist/web/RaftAttributeHandler.js +1 -1
  114. package/dist/web/RaftAttributeHandler.js.map +1 -1
  115. package/dist/web/RaftChannelBLE.web.js +8 -6
  116. package/dist/web/RaftChannelBLE.web.js.map +1 -1
  117. package/dist/web/RaftChannelSimulated.d.ts +10 -0
  118. package/dist/web/RaftChannelSimulated.js +665 -82
  119. package/dist/web/RaftChannelSimulated.js.map +1 -1
  120. package/dist/web/RaftChannelWebSerial.js +2 -2
  121. package/dist/web/RaftChannelWebSerial.js.map +1 -1
  122. package/dist/web/RaftChannelWebSocket.js +16 -1
  123. package/dist/web/RaftChannelWebSocket.js.map +1 -1
  124. package/dist/web/RaftConnector.d.ts +12 -1
  125. package/dist/web/RaftConnector.js +45 -9
  126. package/dist/web/RaftConnector.js.map +1 -1
  127. package/dist/web/RaftCustomAttrHandler.d.ts +2 -0
  128. package/dist/web/RaftCustomAttrHandler.js +54 -26
  129. package/dist/web/RaftCustomAttrHandler.js.map +1 -1
  130. package/dist/web/RaftDeviceInfo.d.ts +3 -1
  131. package/dist/web/RaftDeviceInfo.js +17 -3
  132. package/dist/web/RaftDeviceInfo.js.map +1 -1
  133. package/dist/web/RaftDeviceManager.d.ts +32 -2
  134. package/dist/web/RaftDeviceManager.js +307 -74
  135. package/dist/web/RaftDeviceManager.js.map +1 -1
  136. package/dist/web/RaftDeviceMgrIF.d.ts +5 -1
  137. package/dist/web/RaftDeviceStates.d.ts +20 -2
  138. package/dist/web/RaftDeviceStates.js +25 -4
  139. package/dist/web/RaftDeviceStates.js.map +1 -1
  140. package/dist/web/RaftMsgHandler.js.map +1 -1
  141. package/dist/web/RaftPublish.d.ts +2 -0
  142. package/dist/web/RaftPublish.js +81 -0
  143. package/dist/web/RaftPublish.js.map +1 -0
  144. package/dist/web/RaftStreamHandler.d.ts +11 -0
  145. package/dist/web/RaftStreamHandler.js +68 -1
  146. package/dist/web/RaftStreamHandler.js.map +1 -1
  147. package/dist/web/RaftStruct.js +197 -147
  148. package/dist/web/RaftStruct.js.map +1 -1
  149. package/dist/web/RaftSystemUtils.d.ts +17 -1
  150. package/dist/web/RaftSystemUtils.js +51 -0
  151. package/dist/web/RaftSystemUtils.js.map +1 -1
  152. package/dist/web/RaftTypes.d.ts +21 -0
  153. package/dist/web/RaftTypes.js.map +1 -1
  154. package/dist/web/RaftUpdateManager.js +1 -1
  155. package/dist/web/RaftUpdateManager.js.map +1 -1
  156. package/dist/web/RaftUtils.d.ts +2 -0
  157. package/dist/web/RaftUtils.js +20 -0
  158. package/dist/web/RaftUtils.js.map +1 -1
  159. package/dist/web/main.d.ts +2 -0
  160. package/dist/web/main.js +1 -0
  161. package/dist/web/main.js.map +1 -1
  162. package/eslint.config.mjs +33 -0
  163. package/examples/dashboard/package.json +36 -0
  164. package/examples/dashboard/src/CommandPanel.tsx +147 -0
  165. package/examples/dashboard/src/ConnManager.ts +166 -0
  166. package/examples/dashboard/src/DeviceActionsForm.tsx +133 -0
  167. package/examples/dashboard/src/DeviceAttrsForm.tsx +49 -0
  168. package/examples/dashboard/src/DeviceLineChart.tsx +163 -0
  169. package/examples/dashboard/src/DevicePanel.tsx +247 -0
  170. package/examples/dashboard/src/DeviceStatsPanel.tsx +65 -0
  171. package/examples/dashboard/src/DevicesPanel.tsx +69 -0
  172. package/examples/dashboard/src/DispLedGrid.tsx +110 -0
  173. package/examples/dashboard/src/DispOneLed.tsx +20 -0
  174. package/examples/dashboard/src/LatencyTest.ts +130 -0
  175. package/examples/dashboard/src/LatencyTestPanel.tsx +92 -0
  176. package/examples/dashboard/src/Main.tsx +234 -0
  177. package/examples/dashboard/src/SettingsManager.ts +67 -0
  178. package/examples/dashboard/src/SettingsScreen.tsx +179 -0
  179. package/examples/dashboard/src/StatusPanel.tsx +71 -0
  180. package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +170 -0
  181. package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +125 -0
  182. package/examples/dashboard/src/SystemTypeGeneric/StateInfoGeneric.ts +38 -0
  183. package/examples/dashboard/src/SystemTypeGeneric/SystemTypeGeneric.ts +125 -0
  184. package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +70 -0
  185. package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +33 -0
  186. package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +342 -0
  187. package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +170 -0
  188. package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +123 -0
  189. package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +207 -0
  190. package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +464 -0
  191. package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +146 -0
  192. package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +105 -0
  193. package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +371 -0
  194. package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +20 -0
  195. package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +119 -0
  196. package/examples/dashboard/src/index.html +15 -0
  197. package/examples/dashboard/src/index.tsx +13 -0
  198. package/examples/dashboard/src/styles.css +570 -0
  199. package/examples/dashboard/tsconfig.json +18 -0
  200. package/jest.config.js +11 -0
  201. package/package.json +49 -52
  202. package/src/RaftAttributeHandler.ts +450 -0
  203. package/src/RaftChannel.ts +32 -0
  204. package/src/RaftChannelBLE.native.ts +617 -0
  205. package/src/RaftChannelBLE.web.ts +374 -0
  206. package/src/RaftChannelBLEFactory.ts +13 -0
  207. package/src/RaftChannelBLEScanner.native.ts +184 -0
  208. package/src/RaftChannelSimulated.ts +1177 -0
  209. package/src/RaftChannelWebSerial.ts +420 -0
  210. package/src/RaftChannelWebSocket.ts +272 -0
  211. package/src/RaftCommsStats.ts +142 -0
  212. package/src/RaftConnEvents.ts +58 -0
  213. package/src/RaftConnector.ts +806 -0
  214. package/src/RaftCustomAttrHandler.ts +117 -0
  215. package/src/RaftDeviceInfo.ts +125 -0
  216. package/src/RaftDeviceManager.ts +1014 -0
  217. package/src/RaftDeviceMgrIF.ts +37 -0
  218. package/src/RaftDeviceMsg.ts +20 -0
  219. package/src/RaftDeviceStates.ts +122 -0
  220. package/src/RaftFileHandler.ts +668 -0
  221. package/src/RaftLog.ts +70 -0
  222. package/src/RaftMiniHDLC.ts +396 -0
  223. package/src/RaftMsgHandler.ts +812 -0
  224. package/src/RaftMsgTrackInfo.ts +51 -0
  225. package/src/RaftProtocolDefs.ts +46 -0
  226. package/src/RaftPublish.ts +92 -0
  227. package/src/RaftStreamHandler.ts +412 -0
  228. package/src/RaftStruct.ts +282 -0
  229. package/src/RaftSysTypeManager.ts +87 -0
  230. package/src/RaftSystemType.ts +34 -0
  231. package/src/RaftSystemUtils.ts +548 -0
  232. package/src/RaftTypes.ts +306 -0
  233. package/src/RaftUpdateEvents.ts +48 -0
  234. package/src/RaftUpdateManager.ts +781 -0
  235. package/src/RaftUtils.ts +514 -0
  236. package/src/RaftWifiTypes.ts +36 -0
  237. package/src/main.ts +40 -0
  238. package/testdata/TestDeviceTypeRecs.json +492 -0
  239. package/tsconfig.json +30 -0
  240. package/tsconfig.react-native.json +29 -0
@@ -0,0 +1,302 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RaftChannelBLE
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 RaftConnEvents_1 = require("./RaftConnEvents");
14
+ const RaftLog_1 = tslib_1.__importDefault(require("./RaftLog"));
15
+ const RaftUtils_1 = tslib_1.__importDefault(require("./RaftUtils"));
16
+ class RaftChannelBLE {
17
+ constructor() {
18
+ // Default command and response UUIDs
19
+ this._cmdUUID = 'aa76677e-9cfd-4626-a510-0d305be57c8e';
20
+ this._respUUID = 'aa76677e-9cfd-4626-a510-0d305be57c8f';
21
+ this._serviceUUIDs = ['aa76677e-9cfd-4626-a510-0d305be57c8d', 'da903f65-d5c2-4f4d-a065-d1aade7af874'];
22
+ // Device and characteristics
23
+ this._bleDevice = null;
24
+ this._characteristicTx = null;
25
+ this._characteristicRx = null;
26
+ // Message handler
27
+ this._raftMsgHandler = null;
28
+ // Conn event fn
29
+ this._onConnEvent = null;
30
+ // Last message tx time
31
+ this._msgTxTimeLast = Date.now();
32
+ this._msgTxMinTimeBetweenMs = 1;
33
+ this.maxRetries = 1;
34
+ // Connected flag and retries
35
+ this._isConnected = false;
36
+ this._maxConnRetries = 3;
37
+ // Event listener fn
38
+ this._eventListenerFn = null;
39
+ // File Handler parameters
40
+ this._requestedBatchAckSize = 10;
41
+ this._requestedFileBlockSize = 500;
42
+ }
43
+ fhBatchAckSize() {
44
+ return this._requestedBatchAckSize;
45
+ }
46
+ fhFileBlockSize() {
47
+ return this._requestedFileBlockSize;
48
+ }
49
+ // Set message handler
50
+ setMsgHandler(raftMsgHandler) {
51
+ this._raftMsgHandler = raftMsgHandler;
52
+ }
53
+ requiresSubscription() {
54
+ return true;
55
+ }
56
+ // RICREST command before disconnect
57
+ ricRestCmdBeforeDisconnect() {
58
+ return "bledisconnect";
59
+ }
60
+ // isEnabled
61
+ isEnabled() {
62
+ if (navigator.bluetooth) {
63
+ RaftLog_1.default.warn("Web Bluetooth is supported in your browser.");
64
+ return true;
65
+ }
66
+ else {
67
+ window.alert("Web Bluetooth API is not available.\n" +
68
+ 'Please make sure the "Experimental Web Platform features" flag is enabled.');
69
+ return false;
70
+ }
71
+ }
72
+ // isConnected
73
+ isConnected() {
74
+ return this._bleDevice !== null && this._isConnected;
75
+ }
76
+ // Set onConnEvent handler
77
+ setOnConnEvent(connEventFn) {
78
+ this._onConnEvent = connEventFn;
79
+ }
80
+ // Disconnection event
81
+ onDisconnected(event) {
82
+ const device = event.target;
83
+ RaftLog_1.default.debug(`RaftChannelBLE.onDisconnected ${device.name}`);
84
+ if (this._bleDevice && this._eventListenerFn) {
85
+ this._bleDevice.removeEventListener("gattserverdisconnected", this._eventListenerFn);
86
+ }
87
+ this._isConnected = false;
88
+ if (this._onConnEvent) {
89
+ this._onConnEvent(RaftConnEvents_1.RaftConnEvent.CONN_DISCONNECTED);
90
+ }
91
+ }
92
+ // Get connected locator
93
+ getConnectedLocator() {
94
+ return this._bleDevice || "";
95
+ }
96
+ // Connect to a device
97
+ async connect(locator, _connectorOptions) {
98
+ // RaftLog.debug(`Selected device: ${deviceID}`);
99
+ this._bleDevice = locator;
100
+ if (this._bleDevice && this._bleDevice.gatt) {
101
+ try {
102
+ // Connect
103
+ for (let connRetry = 0; connRetry < this._maxConnRetries; connRetry++) {
104
+ // Connect
105
+ const connTimeoutMs = _connectorOptions.connTimeoutMs || 5000;
106
+ await RaftUtils_1.default.withTimeout(connTimeoutMs, this._bleDevice.gatt.connect());
107
+ RaftLog_1.default.debug(`RaftChannelBLE.connect - ${this._bleDevice.gatt.connected ? "OK" : "FAILED"} attempt ${connRetry + 1} connection to device ${this._bleDevice.name}`);
108
+ if (this._bleDevice.gatt.connected) {
109
+ // Delay a bit
110
+ await new Promise(resolve => setTimeout(resolve, 100));
111
+ // Get service
112
+ try {
113
+ let service = null;
114
+ // iterate over known services
115
+ for (const serviceUUID of this._serviceUUIDs) {
116
+ try {
117
+ service = await this._bleDevice.gatt.getPrimaryService(serviceUUID);
118
+ if (service) {
119
+ break;
120
+ }
121
+ }
122
+ catch (error) {
123
+ RaftLog_1.default.warn(`RaftChannelBLE.connect - cannot get primary service ${error}`);
124
+ }
125
+ }
126
+ if (!service) {
127
+ RaftLog_1.default.warn(`RaftChannelBLE.connect - cannot get primary service - giving up`);
128
+ return false;
129
+ }
130
+ RaftLog_1.default.debug(`RaftChannelBLE.connect - found service: ${service.uuid}`);
131
+ try {
132
+ // Get Tx and Rx characteristics
133
+ this._characteristicTx = await service.getCharacteristic(this._cmdUUID);
134
+ RaftLog_1.default.debug(`RaftChannelBLE.connect - found char ${this._characteristicTx.uuid}`);
135
+ this._characteristicRx = await service.getCharacteristic(this._respUUID);
136
+ RaftLog_1.default.debug(`RaftChannelBLE.connect - found char ${this._characteristicRx.uuid}`);
137
+ // Notifications of received messages
138
+ try {
139
+ await this._characteristicRx.startNotifications();
140
+ RaftLog_1.default.debug("RaftChannelBLE.connect - notifications started");
141
+ this._characteristicRx.addEventListener("characteristicvaluechanged", this._onMsgRx.bind(this));
142
+ }
143
+ catch (error) {
144
+ RaftLog_1.default.debug("RaftChannelBLE.connnect - addEventListener failed " + error);
145
+ }
146
+ // Connected ok
147
+ RaftLog_1.default.debug(`RaftChannelBLE.connect ${this._bleDevice.name}`);
148
+ // Add disconnect listener
149
+ this._eventListenerFn = this.onDisconnected.bind(this);
150
+ this._bleDevice.addEventListener("gattserverdisconnected", this._eventListenerFn);
151
+ // Connected
152
+ this._isConnected = true;
153
+ return true;
154
+ }
155
+ catch (error) {
156
+ RaftLog_1.default.warn(`RaftChannelBLE.connect - cannot find characteristic: ${error}`);
157
+ }
158
+ }
159
+ catch (error) {
160
+ if (connRetry === this._maxConnRetries - 1) {
161
+ RaftLog_1.default.warn(`RaftChannelBLE.connect - cannot get primary service ${error} - attempt #${connRetry + 1} - giving up`);
162
+ }
163
+ else {
164
+ RaftLog_1.default.debug(`RaftChannelBLE.connect - cannot get primary service - attempt #${connRetry + 1} ${error}`);
165
+ }
166
+ }
167
+ }
168
+ }
169
+ }
170
+ catch (error) {
171
+ RaftLog_1.default.warn(`RaftChannelBLE.connect - cannot connect ${error}`);
172
+ }
173
+ // Disconnect
174
+ if (this._bleDevice &&
175
+ this._bleDevice.gatt &&
176
+ this._bleDevice.gatt.connected) {
177
+ try {
178
+ await this._bleDevice.gatt.disconnect();
179
+ }
180
+ catch (error) {
181
+ RaftLog_1.default.warn(`RaftChannelBLE.connect - cannot disconnect ${error}`);
182
+ }
183
+ }
184
+ }
185
+ return false;
186
+ }
187
+ // Disconnect
188
+ async disconnect() {
189
+ if (this._bleDevice && this._bleDevice.gatt) {
190
+ try {
191
+ RaftLog_1.default.debug(`RaftChannelBLE.disconnect GATT`);
192
+ await this._bleDevice.gatt.disconnect();
193
+ }
194
+ catch (error) {
195
+ RaftLog_1.default.debug(`RaftChannelBLE.disconnect ${error}`);
196
+ }
197
+ }
198
+ }
199
+ pauseConnection(pause) {
200
+ RaftLog_1.default.verbose(`pauseConnection ${pause} - no effect for this channel type`);
201
+ return;
202
+ }
203
+ // Handle notifications
204
+ _onMsgRx(event) {
205
+ // Get characteristic
206
+ const characteristic = event.target;
207
+ // Get value
208
+ const value = characteristic.value;
209
+ if (value !== undefined) {
210
+ const msg = new Uint8Array(value.buffer);
211
+ // Handle message
212
+ if (this._raftMsgHandler) {
213
+ try {
214
+ this._raftMsgHandler.handleNewRxMsg(msg);
215
+ }
216
+ catch (error) {
217
+ RaftLog_1.default.debug(`RaftChannelBLE.onMsgRx ${error}`);
218
+ }
219
+ }
220
+ }
221
+ }
222
+ // Send a message
223
+ async sendTxMsg(msg
224
+ // _sendWithResponse: boolean
225
+ ) {
226
+ // Check valid
227
+ if (this._bleDevice === null) {
228
+ return false;
229
+ }
230
+ // Retry upto maxRetries
231
+ for (let retryIdx = 0; retryIdx < this.maxRetries; retryIdx++) {
232
+ // Check for min time between messages
233
+ while (Date.now() - this._msgTxTimeLast < this._msgTxMinTimeBetweenMs) {
234
+ await new Promise((resolve) => setTimeout(resolve, 5));
235
+ }
236
+ this._msgTxTimeLast = Date.now();
237
+ // Write to the characteristic
238
+ try {
239
+ if (this._characteristicTx) {
240
+ const bs = RaftUtils_1.default.toBufferSource(msg);
241
+ if (this._characteristicTx.writeValueWithoutResponse) {
242
+ await this._characteristicTx.writeValueWithoutResponse(bs);
243
+ }
244
+ else if (this._characteristicTx.writeValue) {
245
+ await this._characteristicTx.writeValue(bs);
246
+ }
247
+ else if (this._characteristicTx.writeValueWithResponse) {
248
+ await this._characteristicTx.writeValueWithResponse(bs);
249
+ }
250
+ }
251
+ break;
252
+ }
253
+ catch (error) {
254
+ if (retryIdx === this.maxRetries - 1) {
255
+ RaftLog_1.default.info(`RaftChannelBLE.sendTxMsg ${error} retried ${retryIdx} times`);
256
+ }
257
+ }
258
+ }
259
+ return true;
260
+ }
261
+ // Send message without awaiting response
262
+ async sendTxMsgNoAwait(msg
263
+ // _sendWithResponse: boolean
264
+ ) {
265
+ // Check valid
266
+ if (this._bleDevice === null) {
267
+ return false;
268
+ }
269
+ // Check for min time between messages
270
+ while (Date.now() - this._msgTxTimeLast < this._msgTxMinTimeBetweenMs) {
271
+ await new Promise((resolve) => setTimeout(resolve, 5));
272
+ }
273
+ this._msgTxTimeLast = Date.now();
274
+ // Write to the characteristic
275
+ if (this._characteristicTx) {
276
+ const bs = RaftUtils_1.default.toBufferSource(msg);
277
+ if (this._characteristicTx.writeValueWithoutResponse) {
278
+ this._characteristicTx.writeValueWithoutResponse(bs);
279
+ }
280
+ else if (this._characteristicTx.writeValue) {
281
+ this._characteristicTx.writeValue(bs);
282
+ }
283
+ else if (this._characteristicTx.writeValueWithResponse) {
284
+ this._characteristicTx.writeValueWithResponse(bs);
285
+ }
286
+ return true;
287
+ }
288
+ return false;
289
+ }
290
+ // Method used for testing and simulation should never be called
291
+ sendTxMsgRaw() {
292
+ RaftLog_1.default.debug(`sendTxMsgRaw - not implemented`);
293
+ return false;
294
+ }
295
+ // Method used for testing and simulation should never be called
296
+ sendTxMsgRawAndWaitForReply() {
297
+ RaftLog_1.default.debug(`sendTxMsgRawAndWaitForReply - not implemented`);
298
+ return null;
299
+ }
300
+ }
301
+ exports.default = RaftChannelBLE;
302
+ //# sourceMappingURL=RaftChannelBLE.web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftChannelBLE.web.js","sourceRoot":"","sources":["../../src/RaftChannelBLE.web.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @description
3
+ * This file is used to create a new instance of the RaftChannelBLE class.
4
+ * RaftChannelBLE exists in 2 files: RaftChannelBLE.native.ts and RaftChannelBLE.web.ts
5
+ * each of these files contains the same class but with different implementations (native and web).
6
+ * The import statement at the top of the file will import the correct implementation based on the platform
7
+ * (depending on the build configuration).
8
+ */
9
+ import RaftChannelBLE from './RaftChannelBLE';
10
+ export declare function createBLEChannel(): typeof RaftChannelBLE;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createBLEChannel = createBLEChannel;
4
+ const tslib_1 = require("tslib");
5
+ /**
6
+ * @description
7
+ * This file is used to create a new instance of the RaftChannelBLE class.
8
+ * RaftChannelBLE exists in 2 files: RaftChannelBLE.native.ts and RaftChannelBLE.web.ts
9
+ * each of these files contains the same class but with different implementations (native and web).
10
+ * The import statement at the top of the file will import the correct implementation based on the platform
11
+ * (depending on the build configuration).
12
+ */
13
+ const RaftChannelBLE_1 = tslib_1.__importDefault(require("./RaftChannelBLE"));
14
+ function createBLEChannel() {
15
+ return RaftChannelBLE_1.default;
16
+ }
17
+ //# sourceMappingURL=RaftChannelBLEFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftChannelBLEFactory.js","sourceRoot":"","sources":["../../src/RaftChannelBLEFactory.ts"],"names":[],"mappings":";;AAUA,4CAEC;;AAZD;;;;;;;GAOG;AACH,8EAA8C;AAE9C,SAAgB,gBAAgB;IAC9B,OAAO,wBAAc,CAAC;AACxB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { BleManager, Device, BleError } from 'react-native-ble-plx';
2
+ import { DiscoveredDevice } from './RaftTypes';
3
+ import { RaftConnEventFn } from './RaftConnEvents';
4
+ export default class RaftChannelBLEScanner {
5
+ _bleManager: BleManager;
6
+ _defaultUUIDsOfServicesToScanFor: Array<string>;
7
+ _discoveredDevices: DiscoveredDevice[];
8
+ static _scanInProgress: boolean;
9
+ _discoveryTimeMs: number;
10
+ _eventCallback: RaftConnEventFn;
11
+ constructor(bleManager: BleManager, uuidsOfServicesToScanFor: Array<string>, eventCallback: RaftConnEventFn);
12
+ getDiscoveredDevices(): DiscoveredDevice[];
13
+ isScanInProgress(): boolean;
14
+ scanningStart(uuids: string[]): Promise<boolean>;
15
+ scanningStop(): void;
16
+ _discoveryFoundCB(error: BleError | null, scannedDevice: Device | null): void;
17
+ _discoverySetTimeLimit(timeLimitMs: number): void;
18
+ }
@@ -0,0 +1,138 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RaftChannelBLEScanner.native.ts
5
+ // Communications Connector for RaftJS
6
+ //
7
+ // Rob Dobson 2022-24
8
+ // (C) Robotical 2022-24
9
+ //
10
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ const tslib_1 = require("tslib");
13
+ const RaftTypes_1 = require("./RaftTypes");
14
+ const RaftLog_1 = tslib_1.__importDefault(require("./RaftLog"));
15
+ const RaftConnEvents_1 = require("./RaftConnEvents");
16
+ class RaftChannelBLEScanner {
17
+ constructor(bleManager, uuidsOfServicesToScanFor, eventCallback) {
18
+ // Services to scan for
19
+ this._defaultUUIDsOfServicesToScanFor = [];
20
+ // Scanned devices found on BLE
21
+ this._discoveredDevices = [];
22
+ // Time to scan for
23
+ this._discoveryTimeMs = 10000;
24
+ this._bleManager = bleManager;
25
+ this._defaultUUIDsOfServicesToScanFor = uuidsOfServicesToScanFor;
26
+ this._eventCallback = eventCallback;
27
+ }
28
+ // Get discovered Devices
29
+ getDiscoveredDevices() {
30
+ return this._discoveredDevices;
31
+ }
32
+ // Check is a scan is in progress
33
+ isScanInProgress() {
34
+ return RaftChannelBLEScanner._scanInProgress;
35
+ }
36
+ async scanningStart(uuids) {
37
+ // Handle discovery
38
+ RaftLog_1.default.debug('Starting Scanning...');
39
+ // Clear list
40
+ this._discoveredDevices = [];
41
+ // Disconnect any connections
42
+ RaftChannelBLEScanner._scanInProgress = true;
43
+ // Start scan
44
+ try {
45
+ this._bleManager.startDeviceScan(uuids.length > 0 ? uuids : this._defaultUUIDsOfServicesToScanFor, { allowDuplicates: true }, (error, device) => {
46
+ // RaftLog.debug(`discoveryFoundCB error ${error}`);
47
+ this._discoveryFoundCB(error, device);
48
+ });
49
+ }
50
+ catch (e) {
51
+ RaftLog_1.default.warn(`Error starting scan ${e}`);
52
+ return false;
53
+ }
54
+ // Set a time limit
55
+ this._discoverySetTimeLimit(this._discoveryTimeMs);
56
+ return true;
57
+ }
58
+ scanningStop() {
59
+ RaftLog_1.default.debug('scanningStop');
60
+ // Emit finished if we were scanning
61
+ RaftLog_1.default.debug(`IS SCANNING IN PROGRESS: ${RaftChannelBLEScanner._scanInProgress}`);
62
+ if (RaftChannelBLEScanner._scanInProgress) {
63
+ RaftLog_1.default.debug(`sending BLE_SCANNING_FINISHED event`);
64
+ this._eventCallback(RaftConnEvents_1.RaftConnEvent.BLE_SCANNING_FINISHED, { discoveredDevices: this._discoveredDevices });
65
+ }
66
+ // Cancel scanning
67
+ this._bleManager.stopDeviceScan();
68
+ RaftChannelBLEScanner._scanInProgress = false;
69
+ }
70
+ // Callback from BLE-PLX library on device discovered
71
+ _discoveryFoundCB(error, scannedDevice) {
72
+ if (error) {
73
+ //RaftLog.warn(`⚠️ Scan Error >> ${error.toString()}`);
74
+ RaftLog_1.default.warn(`⚠️ Scan Error >> ${JSON.stringify(error)}`);
75
+ // Event if we were scanning
76
+ if (RaftChannelBLEScanner._scanInProgress) {
77
+ this._eventCallback(RaftConnEvents_1.RaftConnEvent.BLE_SCANNING_FINISHED, {
78
+ discoveredDevices: this._discoveredDevices,
79
+ });
80
+ RaftChannelBLEScanner._scanInProgress = false;
81
+ }
82
+ return;
83
+ }
84
+ // See if already in the list
85
+ const deviceAlreadyFound = this._discoveredDevices.find(item => item.id === scannedDevice.id);
86
+ RaftLog_1.default.debug(`✅ Scanning... >> ${scannedDevice}`);
87
+ if (deviceAlreadyFound) {
88
+ // update the rssi value if it's not 127
89
+ if (scannedDevice.rssi !== null && scannedDevice.rssi !== 127) {
90
+ deviceAlreadyFound._rssi = scannedDevice.rssi;
91
+ this._eventCallback(RaftConnEvents_1.RaftConnEvent.BLE_DEVICE_FOUND, {
92
+ discoveredDevice: deviceAlreadyFound
93
+ });
94
+ }
95
+ return;
96
+ }
97
+ if (scannedDevice !== null) {
98
+ if (!scannedDevice.localName) {
99
+ // if the name of the device is null, don't add this device
100
+ // the first time round. Second time this device comes up
101
+ // will have all the needed info
102
+ return;
103
+ }
104
+ const newDiscoveredDevice = new RaftTypes_1.DiscoveredDevice(scannedDevice.localName !== null ? scannedDevice.localName : '', scannedDevice.name !== null ? scannedDevice.name : '', scannedDevice.id, scannedDevice.rssi !== null ? scannedDevice.rssi : -150, scannedDevice.serviceUUIDs);
105
+ this._discoveredDevices.push(newDiscoveredDevice);
106
+ // send the newly found ric to the state so it can pop-up on the front-end
107
+ this._eventCallback(RaftConnEvents_1.RaftConnEvent.BLE_DEVICE_FOUND, {
108
+ discoveredDevice: newDiscoveredDevice
109
+ });
110
+ }
111
+ RaftLog_1.default.debug(`🤖 Scanned RICs >> ${this._discoveredDevices}`);
112
+ }
113
+ // Time-limit on device scanning
114
+ _discoverySetTimeLimit(timeLimitMs) {
115
+ setTimeout(() => {
116
+ // Stop scanning
117
+ this._bleManager.stopDeviceScan();
118
+ // Check we were scanning
119
+ if (RaftChannelBLEScanner._scanInProgress) {
120
+ // Sort by signal strength
121
+ // this._discoveredDevices.sort((a, b) => {
122
+ // return b!.rssi! - a!.rssi!;
123
+ // });
124
+ // Debug
125
+ const msg = `🤖 ${this._discoveredDevices.length} RICs found! Choose one to connect`;
126
+ RaftLog_1.default.debug(msg);
127
+ // Finished event
128
+ this._eventCallback(RaftConnEvents_1.RaftConnEvent.BLE_SCANNING_FINISHED, {
129
+ discoveredDevices: this._discoveredDevices,
130
+ });
131
+ }
132
+ RaftChannelBLEScanner._scanInProgress = false;
133
+ }, timeLimitMs);
134
+ }
135
+ }
136
+ RaftChannelBLEScanner._scanInProgress = false;
137
+ exports.default = RaftChannelBLEScanner;
138
+ //# sourceMappingURL=RaftChannelBLEScanner.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftChannelBLEScanner.native.js","sourceRoot":"","sources":["../../src/RaftChannelBLEScanner.native.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import RaftChannel from "./RaftChannel";
2
+ import RaftMsgHandler from "./RaftMsgHandler";
3
+ import { RaftConnEventFn } from "./RaftConnEvents";
4
+ import { ConnectorOptions } from "./RaftSystemType";
5
+ export default class RaftChannelSimulated implements RaftChannel {
6
+ private _raftMsgHandler;
7
+ private _isConnected;
8
+ private _simulatedDeviceInfo;
9
+ private _simulatedDeviceInfoTimers;
10
+ private _simulatedDeviceInfoTimeMs;
11
+ private _onConnEvent;
12
+ private _requestedBatchAckSize;
13
+ private _requestedFileBlockSize;
14
+ fhBatchAckSize(): number;
15
+ fhFileBlockSize(): number;
16
+ isConnected(): boolean;
17
+ setMsgHandler(raftMsgHandler: RaftMsgHandler): void;
18
+ requiresSubscription(): boolean;
19
+ ricRestCmdBeforeDisconnect(): string | null;
20
+ setOnConnEvent(connEventFn: RaftConnEventFn): void;
21
+ getConnectedLocator(): string | object;
22
+ connect(locator: string | object, connectorOptions: ConnectorOptions): Promise<boolean>;
23
+ disconnect(): Promise<void>;
24
+ pauseConnection(pause: boolean): void;
25
+ sendTxMsg(msg: Uint8Array, sendWithResponse: boolean): Promise<boolean>;
26
+ sendTxMsgNoAwait(msg: Uint8Array, sendWithResponse: boolean): Promise<boolean>;
27
+ sendTxMsgRaw(msg: string): boolean;
28
+ sendTxMsgRawAndWaitForReply<T>(msgPayload: Uint8Array): T;
29
+ private _createSimulatedDeviceInfoMsg;
30
+ private _parseAttrType;
31
+ private _generateAttributeScaledValues;
32
+ private _generateThermalGridValues;
33
+ private _fillCustomRawData;
34
+ private _getGridDimensions;
35
+ private _prepareRawValue;
36
+ private _writeRawValueToBuffer;
37
+ private _byteSizeForType;
38
+ private _clampRawValue;
39
+ private _isFloatType;
40
+ private _bytesToHexStr;
41
+ private _deviceTypeInfo;
42
+ }