@robotical/raftjs 1.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) 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 +13 -0
  6. package/TODO.md +1 -0
  7. package/dist/react-native/RaftAttributeHandler.d.ts +12 -0
  8. package/dist/react-native/RaftAttributeHandler.js +241 -0
  9. package/dist/react-native/RaftAttributeHandler.js.map +1 -0
  10. package/dist/react-native/RaftChannel.d.ts +18 -0
  11. package/dist/react-native/RaftChannel.js +12 -0
  12. package/dist/react-native/RaftChannel.js.map +1 -0
  13. package/dist/react-native/RaftChannelBLE.native.d.ts +93 -0
  14. package/dist/react-native/RaftChannelBLE.native.js +455 -0
  15. package/dist/react-native/RaftChannelBLE.native.js.map +1 -0
  16. package/dist/react-native/RaftChannelBLE.web.d.ts +39 -0
  17. package/dist/react-native/RaftChannelBLE.web.js +294 -0
  18. package/dist/react-native/RaftChannelBLE.web.js.map +1 -0
  19. package/dist/react-native/RaftChannelBLEFactory.d.ts +10 -0
  20. package/dist/react-native/RaftChannelBLEFactory.js +17 -0
  21. package/dist/react-native/RaftChannelBLEFactory.js.map +1 -0
  22. package/dist/react-native/RaftChannelBLEScanner.native.d.ts +18 -0
  23. package/dist/react-native/RaftChannelBLEScanner.native.js +146 -0
  24. package/dist/react-native/RaftChannelBLEScanner.native.js.map +1 -0
  25. package/dist/react-native/RaftChannelWebSerial.d.ts +37 -0
  26. package/dist/react-native/RaftChannelWebSerial.js +320 -0
  27. package/dist/react-native/RaftChannelWebSerial.js.map +1 -0
  28. package/dist/react-native/RaftChannelWebSocket.d.ts +28 -0
  29. package/dist/react-native/RaftChannelWebSocket.js +197 -0
  30. package/dist/react-native/RaftChannelWebSocket.js.map +1 -0
  31. package/dist/react-native/RaftCommsStats.d.ts +39 -0
  32. package/dist/react-native/RaftCommsStats.js +128 -0
  33. package/dist/react-native/RaftCommsStats.js.map +1 -0
  34. package/dist/react-native/RaftConnEvents.d.ts +39 -0
  35. package/dist/react-native/RaftConnEvents.js +54 -0
  36. package/dist/react-native/RaftConnEvents.js.map +1 -0
  37. package/dist/react-native/RaftConnector.d.ts +245 -0
  38. package/dist/react-native/RaftConnector.js +614 -0
  39. package/dist/react-native/RaftConnector.js.map +1 -0
  40. package/dist/react-native/RaftCustomAttrHandler.d.ts +4 -0
  41. package/dist/react-native/RaftCustomAttrHandler.js +50 -0
  42. package/dist/react-native/RaftCustomAttrHandler.js.map +1 -0
  43. package/dist/react-native/RaftDeviceInfo.d.ts +59 -0
  44. package/dist/react-native/RaftDeviceInfo.js +36 -0
  45. package/dist/react-native/RaftDeviceInfo.js.map +1 -0
  46. package/dist/react-native/RaftDeviceManager.d.ts +35 -0
  47. package/dist/react-native/RaftDeviceManager.js +353 -0
  48. package/dist/react-native/RaftDeviceManager.js.map +1 -0
  49. package/dist/react-native/RaftDeviceMgrIF.d.ts +12 -0
  50. package/dist/react-native/RaftDeviceMgrIF.js +11 -0
  51. package/dist/react-native/RaftDeviceMgrIF.js.map +1 -0
  52. package/dist/react-native/RaftDeviceMsg.d.ts +9 -0
  53. package/dist/react-native/RaftDeviceMsg.js +11 -0
  54. package/dist/react-native/RaftDeviceMsg.js.map +1 -0
  55. package/dist/react-native/RaftDeviceStates.d.ts +33 -0
  56. package/dist/react-native/RaftDeviceStates.js +60 -0
  57. package/dist/react-native/RaftDeviceStates.js.map +1 -0
  58. package/dist/react-native/RaftFileHandler.d.ts +52 -0
  59. package/dist/react-native/RaftFileHandler.js +502 -0
  60. package/dist/react-native/RaftFileHandler.js.map +1 -0
  61. package/dist/react-native/RaftLog.d.ts +22 -0
  62. package/dist/react-native/RaftLog.js +63 -0
  63. package/dist/react-native/RaftLog.js.map +1 -0
  64. package/dist/react-native/RaftMiniHDLC.d.ts +18 -0
  65. package/dist/react-native/RaftMiniHDLC.js +383 -0
  66. package/dist/react-native/RaftMiniHDLC.js.map +1 -0
  67. package/dist/react-native/RaftMsgHandler.d.ts +57 -0
  68. package/dist/react-native/RaftMsgHandler.js +480 -0
  69. package/dist/react-native/RaftMsgHandler.js.map +1 -0
  70. package/dist/react-native/RaftMsgTrackInfo.d.ts +17 -0
  71. package/dist/react-native/RaftMsgTrackInfo.js +42 -0
  72. package/dist/react-native/RaftMsgTrackInfo.js.map +1 -0
  73. package/dist/react-native/RaftProtocolDefs.d.ts +30 -0
  74. package/dist/react-native/RaftProtocolDefs.js +48 -0
  75. package/dist/react-native/RaftProtocolDefs.js.map +1 -0
  76. package/dist/react-native/RaftStreamHandler.d.ts +38 -0
  77. package/dist/react-native/RaftStreamHandler.js +257 -0
  78. package/dist/react-native/RaftStreamHandler.js.map +1 -0
  79. package/dist/react-native/RaftSystemType.d.ts +25 -0
  80. package/dist/react-native/RaftSystemType.js +3 -0
  81. package/dist/react-native/RaftSystemType.js.map +1 -0
  82. package/dist/react-native/RaftSystemUtils.d.ts +136 -0
  83. package/dist/react-native/RaftSystemUtils.js +410 -0
  84. package/dist/react-native/RaftSystemUtils.js.map +1 -0
  85. package/dist/react-native/RaftTypes.d.ts +195 -0
  86. package/dist/react-native/RaftTypes.js +190 -0
  87. package/dist/react-native/RaftTypes.js.map +1 -0
  88. package/dist/react-native/RaftUpdateEvents.d.ts +33 -0
  89. package/dist/react-native/RaftUpdateEvents.js +46 -0
  90. package/dist/react-native/RaftUpdateEvents.js.map +1 -0
  91. package/dist/react-native/RaftUpdateManager.d.ts +61 -0
  92. package/dist/react-native/RaftUpdateManager.js +618 -0
  93. package/dist/react-native/RaftUpdateManager.js.map +1 -0
  94. package/dist/react-native/RaftUtils.d.ts +125 -0
  95. package/dist/react-native/RaftUtils.js +454 -0
  96. package/dist/react-native/RaftUtils.js.map +1 -0
  97. package/dist/react-native/RaftWifiTypes.d.ts +23 -0
  98. package/dist/react-native/RaftWifiTypes.js +43 -0
  99. package/dist/react-native/RaftWifiTypes.js.map +1 -0
  100. package/dist/react-native/main.d.ts +22 -0
  101. package/dist/react-native/main.js +48 -0
  102. package/dist/react-native/main.js.map +1 -0
  103. package/dist/web/RaftAttributeHandler.d.ts +12 -0
  104. package/dist/web/RaftAttributeHandler.js +241 -0
  105. package/dist/web/RaftAttributeHandler.js.map +1 -0
  106. package/dist/web/RaftChannel.d.ts +18 -0
  107. package/dist/web/RaftChannel.js +12 -0
  108. package/dist/web/RaftChannel.js.map +1 -0
  109. package/dist/web/RaftChannelBLE.web.d.ts +39 -0
  110. package/dist/web/RaftChannelBLE.web.js +294 -0
  111. package/dist/web/RaftChannelBLE.web.js.map +1 -0
  112. package/dist/web/RaftChannelBLEFactory.d.ts +10 -0
  113. package/dist/web/RaftChannelBLEFactory.js +17 -0
  114. package/dist/web/RaftChannelBLEFactory.js.map +1 -0
  115. package/dist/web/RaftChannelWebSerial.d.ts +37 -0
  116. package/dist/web/RaftChannelWebSerial.js +320 -0
  117. package/dist/web/RaftChannelWebSerial.js.map +1 -0
  118. package/dist/web/RaftChannelWebSocket.d.ts +28 -0
  119. package/dist/web/RaftChannelWebSocket.js +197 -0
  120. package/dist/web/RaftChannelWebSocket.js.map +1 -0
  121. package/dist/web/RaftCommsStats.d.ts +39 -0
  122. package/dist/web/RaftCommsStats.js +128 -0
  123. package/dist/web/RaftCommsStats.js.map +1 -0
  124. package/dist/web/RaftConnEvents.d.ts +39 -0
  125. package/dist/web/RaftConnEvents.js +54 -0
  126. package/dist/web/RaftConnEvents.js.map +1 -0
  127. package/dist/web/RaftConnector.d.ts +245 -0
  128. package/dist/web/RaftConnector.js +614 -0
  129. package/dist/web/RaftConnector.js.map +1 -0
  130. package/dist/web/RaftCustomAttrHandler.d.ts +4 -0
  131. package/dist/web/RaftCustomAttrHandler.js +50 -0
  132. package/dist/web/RaftCustomAttrHandler.js.map +1 -0
  133. package/dist/web/RaftDeviceInfo.d.ts +59 -0
  134. package/dist/web/RaftDeviceInfo.js +36 -0
  135. package/dist/web/RaftDeviceInfo.js.map +1 -0
  136. package/dist/web/RaftDeviceManager.d.ts +35 -0
  137. package/dist/web/RaftDeviceManager.js +353 -0
  138. package/dist/web/RaftDeviceManager.js.map +1 -0
  139. package/dist/web/RaftDeviceMgrIF.d.ts +12 -0
  140. package/dist/web/RaftDeviceMgrIF.js +11 -0
  141. package/dist/web/RaftDeviceMgrIF.js.map +1 -0
  142. package/dist/web/RaftDeviceMsg.d.ts +9 -0
  143. package/dist/web/RaftDeviceMsg.js +11 -0
  144. package/dist/web/RaftDeviceMsg.js.map +1 -0
  145. package/dist/web/RaftDeviceStates.d.ts +33 -0
  146. package/dist/web/RaftDeviceStates.js +60 -0
  147. package/dist/web/RaftDeviceStates.js.map +1 -0
  148. package/dist/web/RaftFileHandler.d.ts +52 -0
  149. package/dist/web/RaftFileHandler.js +502 -0
  150. package/dist/web/RaftFileHandler.js.map +1 -0
  151. package/dist/web/RaftLog.d.ts +22 -0
  152. package/dist/web/RaftLog.js +63 -0
  153. package/dist/web/RaftLog.js.map +1 -0
  154. package/dist/web/RaftMiniHDLC.d.ts +18 -0
  155. package/dist/web/RaftMiniHDLC.js +383 -0
  156. package/dist/web/RaftMiniHDLC.js.map +1 -0
  157. package/dist/web/RaftMsgHandler.d.ts +57 -0
  158. package/dist/web/RaftMsgHandler.js +480 -0
  159. package/dist/web/RaftMsgHandler.js.map +1 -0
  160. package/dist/web/RaftMsgTrackInfo.d.ts +17 -0
  161. package/dist/web/RaftMsgTrackInfo.js +42 -0
  162. package/dist/web/RaftMsgTrackInfo.js.map +1 -0
  163. package/dist/web/RaftProtocolDefs.d.ts +30 -0
  164. package/dist/web/RaftProtocolDefs.js +48 -0
  165. package/dist/web/RaftProtocolDefs.js.map +1 -0
  166. package/dist/web/RaftStreamHandler.d.ts +38 -0
  167. package/dist/web/RaftStreamHandler.js +257 -0
  168. package/dist/web/RaftStreamHandler.js.map +1 -0
  169. package/dist/web/RaftSystemType.d.ts +25 -0
  170. package/dist/web/RaftSystemType.js +3 -0
  171. package/dist/web/RaftSystemType.js.map +1 -0
  172. package/dist/web/RaftSystemUtils.d.ts +136 -0
  173. package/dist/web/RaftSystemUtils.js +410 -0
  174. package/dist/web/RaftSystemUtils.js.map +1 -0
  175. package/dist/web/RaftTypes.d.ts +195 -0
  176. package/dist/web/RaftTypes.js +190 -0
  177. package/dist/web/RaftTypes.js.map +1 -0
  178. package/dist/web/RaftUpdateEvents.d.ts +33 -0
  179. package/dist/web/RaftUpdateEvents.js +46 -0
  180. package/dist/web/RaftUpdateEvents.js.map +1 -0
  181. package/dist/web/RaftUpdateManager.d.ts +61 -0
  182. package/dist/web/RaftUpdateManager.js +618 -0
  183. package/dist/web/RaftUpdateManager.js.map +1 -0
  184. package/dist/web/RaftUtils.d.ts +125 -0
  185. package/dist/web/RaftUtils.js +454 -0
  186. package/dist/web/RaftUtils.js.map +1 -0
  187. package/dist/web/RaftWifiTypes.d.ts +23 -0
  188. package/dist/web/RaftWifiTypes.js +43 -0
  189. package/dist/web/RaftWifiTypes.js.map +1 -0
  190. package/dist/web/main.d.ts +22 -0
  191. package/dist/web/main.js +48 -0
  192. package/dist/web/main.js.map +1 -0
  193. package/eslint.config.mjs +33 -0
  194. package/examples/dashboard/package.json +43 -0
  195. package/examples/dashboard/src/CommandPanel.tsx +147 -0
  196. package/examples/dashboard/src/ConnManager.ts +85 -0
  197. package/examples/dashboard/src/DeviceActionsForm.tsx +133 -0
  198. package/examples/dashboard/src/DeviceAttrsForm.tsx +49 -0
  199. package/examples/dashboard/src/DeviceLineChart.tsx +139 -0
  200. package/examples/dashboard/src/DevicePanel.tsx +135 -0
  201. package/examples/dashboard/src/DevicesPanel.tsx +57 -0
  202. package/examples/dashboard/src/DispLedGrid.tsx +110 -0
  203. package/examples/dashboard/src/DispOneLed.tsx +20 -0
  204. package/examples/dashboard/src/Main.tsx +106 -0
  205. package/examples/dashboard/src/StatusPanel.tsx +71 -0
  206. package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +157 -0
  207. package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +84 -0
  208. package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +70 -0
  209. package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +33 -0
  210. package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +342 -0
  211. package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +170 -0
  212. package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +123 -0
  213. package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +207 -0
  214. package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +464 -0
  215. package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +146 -0
  216. package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +78 -0
  217. package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +371 -0
  218. package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +20 -0
  219. package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +116 -0
  220. package/examples/dashboard/src/index.html +15 -0
  221. package/examples/dashboard/src/index.tsx +15 -0
  222. package/examples/dashboard/src/styles.css +386 -0
  223. package/examples/dashboard/tsconfig.json +18 -0
  224. package/jest.config.js +11 -0
  225. package/package.json +59 -0
  226. package/src/RaftAttributeHandler.ts +289 -0
  227. package/src/RaftChannel.ts +30 -0
  228. package/src/RaftChannelBLE.native.ts +583 -0
  229. package/src/RaftChannelBLE.web.ts +362 -0
  230. package/src/RaftChannelBLEFactory.ts +13 -0
  231. package/src/RaftChannelBLEScanner.native.ts +190 -0
  232. package/src/RaftChannelWebSerial.ts +409 -0
  233. package/src/RaftChannelWebSocket.ts +245 -0
  234. package/src/RaftCommsStats.ts +142 -0
  235. package/src/RaftConnEvents.ts +58 -0
  236. package/src/RaftConnector.ts +737 -0
  237. package/src/RaftCustomAttrHandler.ts +54 -0
  238. package/src/RaftDeviceInfo.ts +98 -0
  239. package/src/RaftDeviceManager.ts +436 -0
  240. package/src/RaftDeviceMgrIF.ts +28 -0
  241. package/src/RaftDeviceMsg.ts +20 -0
  242. package/src/RaftDeviceStates.ts +88 -0
  243. package/src/RaftFileHandler.ts +668 -0
  244. package/src/RaftLog.ts +70 -0
  245. package/src/RaftMiniHDLC.ts +396 -0
  246. package/src/RaftMsgHandler.ts +778 -0
  247. package/src/RaftMsgTrackInfo.ts +51 -0
  248. package/src/RaftProtocolDefs.ts +46 -0
  249. package/src/RaftStreamHandler.ts +328 -0
  250. package/src/RaftSystemType.ts +29 -0
  251. package/src/RaftSystemUtils.ts +487 -0
  252. package/src/RaftTypes.ts +281 -0
  253. package/src/RaftUpdateEvents.ts +48 -0
  254. package/src/RaftUpdateManager.ts +778 -0
  255. package/src/RaftUtils.ts +484 -0
  256. package/src/RaftWifiTypes.ts +36 -0
  257. package/src/main.ts +36 -0
  258. package/testdata/TestDeviceTypeRecs.json +492 -0
  259. package/tsconfig.json +30 -0
  260. package/tsconfig.react-native.json +29 -0
@@ -0,0 +1,294 @@
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
+ // Device and characteristics
19
+ this._bleDevice = null;
20
+ this._characteristicTx = null;
21
+ this._characteristicRx = null;
22
+ // Message handler
23
+ this._raftMsgHandler = null;
24
+ // Conn event fn
25
+ this._onConnEvent = null;
26
+ // Last message tx time
27
+ this._msgTxTimeLast = Date.now();
28
+ this._msgTxMinTimeBetweenMs = 1;
29
+ this.maxRetries = 1;
30
+ // Connected flag and retries
31
+ this._isConnected = false;
32
+ this._maxConnRetries = 3;
33
+ // Event listener fn
34
+ this._eventListenerFn = null;
35
+ // File Handler parameters
36
+ this._requestedBatchAckSize = 10;
37
+ this._requestedFileBlockSize = 500;
38
+ }
39
+ fhBatchAckSize() {
40
+ return this._requestedBatchAckSize;
41
+ }
42
+ fhFileBlockSize() {
43
+ return this._requestedFileBlockSize;
44
+ }
45
+ // Set message handler
46
+ setMsgHandler(raftMsgHandler) {
47
+ this._raftMsgHandler = raftMsgHandler;
48
+ }
49
+ requiresSubscription() {
50
+ return true;
51
+ }
52
+ // RICREST command before disconnect
53
+ ricRestCmdBeforeDisconnect() {
54
+ // NT: Sending blerestart *before* disconnecting results in timeout issues as the device is no longer connected when we try to actually disconnect
55
+ // suggested fix: allow callaback command to be sent after disconnect on the fw side
56
+ // return "blerestart";
57
+ return null;
58
+ }
59
+ // isEnabled
60
+ isEnabled() {
61
+ if (navigator.bluetooth) {
62
+ RaftLog_1.default.error("Web Bluetooth is supported in your browser.");
63
+ return true;
64
+ }
65
+ else {
66
+ window.alert("Web Bluetooth API is not available.\n" +
67
+ 'Please make sure the "Experimental Web Platform features" flag is enabled.');
68
+ return false;
69
+ }
70
+ }
71
+ // isConnected
72
+ isConnected() {
73
+ return this._bleDevice !== null && this._isConnected;
74
+ }
75
+ // Set onConnEvent handler
76
+ setOnConnEvent(connEventFn) {
77
+ this._onConnEvent = connEventFn;
78
+ }
79
+ // Disconnection event
80
+ onDisconnected(event) {
81
+ const device = event.target;
82
+ RaftLog_1.default.debug(`RaftChannelBLE.onDisconnected ${device.name}`);
83
+ if (this._bleDevice) {
84
+ this._bleDevice.removeEventListener("gattserverdisconnected", this._eventListenerFn);
85
+ }
86
+ this._isConnected = false;
87
+ if (this._onConnEvent) {
88
+ this._onConnEvent(RaftConnEvents_1.RaftConnEvent.CONN_DISCONNECTED);
89
+ }
90
+ }
91
+ // Get connected locator
92
+ getConnectedLocator() {
93
+ return this._bleDevice || "";
94
+ }
95
+ // Connect to a device
96
+ async connect(locator, _connectorOptions) {
97
+ // RaftLog.debug(`Selected device: ${deviceID}`);
98
+ this._bleDevice = locator;
99
+ if (this._bleDevice && this._bleDevice.gatt) {
100
+ try {
101
+ // Connect
102
+ for (let connRetry = 0; connRetry < this._maxConnRetries; connRetry++) {
103
+ // Connect
104
+ const connTimeoutMs = _connectorOptions.connTimeoutMs || 5000;
105
+ await RaftUtils_1.default.withTimeout(connTimeoutMs, this._bleDevice.gatt.connect());
106
+ RaftLog_1.default.debug(`RaftChannelBLE.connect - ${this._bleDevice.gatt.connected ? "OK" : "FAILED"} attempt ${connRetry + 1} connection to device ${this._bleDevice.name}`);
107
+ if (this._bleDevice.gatt.connected) {
108
+ // Delay a bit
109
+ await new Promise(resolve => setTimeout(resolve, 100));
110
+ // Get service
111
+ try {
112
+ let service = null;
113
+ // iterate over known services
114
+ for (const serviceUUID of [RaftChannelBLE.CogServiceUUID, RaftChannelBLE.RICServiceUUID]) {
115
+ try {
116
+ service = await this._bleDevice.gatt.getPrimaryService(serviceUUID);
117
+ if (service) {
118
+ break;
119
+ }
120
+ }
121
+ catch (error) {
122
+ RaftLog_1.default.warn(`RaftChannelBLE.connect - cannot get primary service ${error}`);
123
+ }
124
+ }
125
+ if (!service) {
126
+ RaftLog_1.default.error(`RaftChannelBLE.connect - cannot get primary service - giving up`);
127
+ return false;
128
+ }
129
+ RaftLog_1.default.debug(`RaftChannelBLE.connect - found service: ${service.uuid}`);
130
+ try {
131
+ // Get Tx and Rx characteristics
132
+ this._characteristicTx = await service.getCharacteristic(RaftChannelBLE.CmdUUID);
133
+ RaftLog_1.default.debug(`RaftChannelBLE.connect - found char ${this._characteristicTx.uuid}`);
134
+ this._characteristicRx = await service.getCharacteristic(RaftChannelBLE.RespUUID);
135
+ RaftLog_1.default.debug(`RaftChannelBLE.connect - found char ${this._characteristicRx.uuid}`);
136
+ // Notifications of received messages
137
+ try {
138
+ await this._characteristicRx.startNotifications();
139
+ RaftLog_1.default.debug("RaftChannelBLE.connect - notifications started");
140
+ this._characteristicRx.addEventListener("characteristicvaluechanged", this._onMsgRx.bind(this));
141
+ }
142
+ catch (error) {
143
+ RaftLog_1.default.debug("RaftChannelBLE.connnect - addEventListener failed " + error);
144
+ }
145
+ // Connected ok
146
+ RaftLog_1.default.debug(`RaftChannelBLE.connect ${this._bleDevice.name}`);
147
+ // Add disconnect listener
148
+ this._eventListenerFn = this.onDisconnected.bind(this);
149
+ this._bleDevice.addEventListener("gattserverdisconnected", this._eventListenerFn);
150
+ // Connected
151
+ this._isConnected = true;
152
+ return true;
153
+ }
154
+ catch (error) {
155
+ RaftLog_1.default.error(`RaftChannelBLE.connect - cannot find characteristic: ${error}`);
156
+ }
157
+ }
158
+ catch (error) {
159
+ if (connRetry === this._maxConnRetries - 1) {
160
+ RaftLog_1.default.error(`RaftChannelBLE.connect - cannot get primary service ${error} - attempt #${connRetry + 1} - giving up`);
161
+ }
162
+ else {
163
+ RaftLog_1.default.debug(`RaftChannelBLE.connect - cannot get primary service - attempt #${connRetry + 1} ${error}`);
164
+ }
165
+ }
166
+ }
167
+ }
168
+ }
169
+ catch (error) {
170
+ RaftLog_1.default.warn(`RaftChannelBLE.connect - cannot connect ${error}`);
171
+ }
172
+ // Disconnect
173
+ if (this._bleDevice &&
174
+ this._bleDevice.gatt &&
175
+ this._bleDevice.gatt.connected) {
176
+ try {
177
+ await this._bleDevice.gatt.disconnect();
178
+ }
179
+ catch (error) {
180
+ RaftLog_1.default.warn(`RaftChannelBLE.connect - cannot disconnect ${error}`);
181
+ }
182
+ }
183
+ }
184
+ return false;
185
+ }
186
+ // Disconnect
187
+ async disconnect() {
188
+ if (this._bleDevice && this._bleDevice.gatt) {
189
+ try {
190
+ RaftLog_1.default.debug(`RaftChannelBLE.disconnect GATT`);
191
+ await this._bleDevice.gatt.disconnect();
192
+ }
193
+ catch (error) {
194
+ RaftLog_1.default.debug(`RaftChannelBLE.disconnect ${error}`);
195
+ }
196
+ }
197
+ }
198
+ pauseConnection(pause) {
199
+ RaftLog_1.default.verbose(`pauseConnection ${pause} - no effect for this channel type`);
200
+ return;
201
+ }
202
+ // Handle notifications
203
+ _onMsgRx(event) {
204
+ // Get characteristic
205
+ const characteristic = event.target;
206
+ // Get value
207
+ const value = characteristic.value;
208
+ if (value !== undefined) {
209
+ const msg = new Uint8Array(value.buffer);
210
+ // Handle message
211
+ if (this._raftMsgHandler) {
212
+ try {
213
+ this._raftMsgHandler.handleNewRxMsg(msg);
214
+ }
215
+ catch (error) {
216
+ RaftLog_1.default.debug(`RaftChannelBLE.onMsgRx ${error}`);
217
+ }
218
+ }
219
+ }
220
+ }
221
+ // Send a message
222
+ async sendTxMsg(msg
223
+ // _sendWithResponse: boolean
224
+ ) {
225
+ // Check valid
226
+ if (this._bleDevice === null) {
227
+ return false;
228
+ }
229
+ // Retry upto maxRetries
230
+ for (let retryIdx = 0; retryIdx < this.maxRetries; retryIdx++) {
231
+ // Check for min time between messages
232
+ while (Date.now() - this._msgTxTimeLast < this._msgTxMinTimeBetweenMs) {
233
+ await new Promise((resolve) => setTimeout(resolve, 5));
234
+ }
235
+ this._msgTxTimeLast = Date.now();
236
+ // Write to the characteristic
237
+ try {
238
+ if (this._characteristicTx) {
239
+ if (this._characteristicTx.writeValueWithoutResponse) {
240
+ await this._characteristicTx.writeValueWithoutResponse(msg);
241
+ }
242
+ else if (this._characteristicTx.writeValue) {
243
+ await this._characteristicTx.writeValue(msg);
244
+ }
245
+ else if (this._characteristicTx.writeValueWithResponse) {
246
+ await this._characteristicTx.writeValueWithResponse(msg);
247
+ }
248
+ }
249
+ break;
250
+ }
251
+ catch (error) {
252
+ if (retryIdx === this.maxRetries - 1) {
253
+ RaftLog_1.default.info(`RaftChannelBLE.sendTxMsg ${error} retried ${retryIdx} times`);
254
+ }
255
+ }
256
+ }
257
+ return true;
258
+ }
259
+ // Send message without awaiting response
260
+ async sendTxMsgNoAwait(msg
261
+ // _sendWithResponse: boolean
262
+ ) {
263
+ // Check valid
264
+ if (this._bleDevice === null) {
265
+ return false;
266
+ }
267
+ // Check for min time between messages
268
+ while (Date.now() - this._msgTxTimeLast < this._msgTxMinTimeBetweenMs) {
269
+ await new Promise((resolve) => setTimeout(resolve, 5));
270
+ }
271
+ this._msgTxTimeLast = Date.now();
272
+ // Write to the characteristic
273
+ if (this._characteristicTx) {
274
+ if (this._characteristicTx.writeValueWithoutResponse) {
275
+ this._characteristicTx.writeValueWithoutResponse(msg);
276
+ }
277
+ else if (this._characteristicTx.writeValue) {
278
+ this._characteristicTx.writeValue(msg);
279
+ }
280
+ else if (this._characteristicTx.writeValueWithResponse) {
281
+ this._characteristicTx.writeValueWithResponse(msg);
282
+ }
283
+ return true;
284
+ }
285
+ return false;
286
+ }
287
+ }
288
+ // BLE UUIDS
289
+ RaftChannelBLE.RICServiceUUID = "aa76677e-9cfd-4626-a510-0d305be57c8d";
290
+ RaftChannelBLE.CogServiceUUID = "da903f65-d5c2-4f4d-a065-d1aade7af874";
291
+ RaftChannelBLE.CmdUUID = "aa76677e-9cfd-4626-a510-0d305be57c8e";
292
+ RaftChannelBLE.RespUUID = "aa76677e-9cfd-4626-a510-0d305be57c8f";
293
+ exports.default = RaftChannelBLE;
294
+ //# 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 { DiscoveredRIC } from './RaftTypes';
3
+ import { RaftConnEventFn } from './RaftConnEvents';
4
+ export default class RICBLEScanner {
5
+ _bleManager: BleManager;
6
+ _uuidsOfServicesToScanFor: Array<string>;
7
+ _discoveredRICs: DiscoveredRIC[];
8
+ static _scanInProgress: boolean;
9
+ _discoveryTimeMs: number;
10
+ _eventCallback: RaftConnEventFn;
11
+ constructor(bleManager: BleManager, uuidsOfServicesToScanFor: Array<string>, eventCallback: RaftConnEventFn);
12
+ getDiscoveredRICs(): DiscoveredRIC[];
13
+ isScanInProgress(): boolean;
14
+ scanningStart(uuid?: string): Promise<boolean>;
15
+ scanningStop(): void;
16
+ _discoveryFoundCB(error: BleError | null, scannedDevice: Device | null): void;
17
+ _discoverySetTimeLimit(timeLimitMs: number): void;
18
+ }
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RICBLEScanner
5
+ // Communications Connector for RIC V2
6
+ //
7
+ // RIC V2
8
+ // Rob Dobson 2022
9
+ // (C) Robotical 2022
10
+ //
11
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ const tslib_1 = require("tslib");
14
+ const RaftTypes_1 = require("./RaftTypes");
15
+ const RaftLog_1 = tslib_1.__importDefault(require("./RaftLog"));
16
+ const RaftConnEvents_1 = require("./RaftConnEvents");
17
+ class RICBLEScanner {
18
+ constructor(bleManager, uuidsOfServicesToScanFor, eventCallback) {
19
+ // Services to scan for
20
+ this._uuidsOfServicesToScanFor = [];
21
+ // Scanned devices found on BLE
22
+ this._discoveredRICs = [];
23
+ // Time to scan for
24
+ this._discoveryTimeMs = 10000;
25
+ this._bleManager = bleManager;
26
+ this._uuidsOfServicesToScanFor = uuidsOfServicesToScanFor;
27
+ this._eventCallback = eventCallback;
28
+ }
29
+ // Get discovered RICs
30
+ getDiscoveredRICs() {
31
+ return this._discoveredRICs;
32
+ }
33
+ // Check is a scan is in progress
34
+ isScanInProgress() {
35
+ return RICBLEScanner._scanInProgress;
36
+ }
37
+ async scanningStart(uuid) {
38
+ let uuidsOfServicesToScanFor = [];
39
+ if (uuid) {
40
+ uuidsOfServicesToScanFor.push(uuid);
41
+ }
42
+ else {
43
+ uuidsOfServicesToScanFor = this._uuidsOfServicesToScanFor;
44
+ }
45
+ // Handle discovery
46
+ RaftLog_1.default.debug('Starting Scanning...');
47
+ // Clear list
48
+ this._discoveredRICs = [];
49
+ // Disconnect any connections
50
+ RICBLEScanner._scanInProgress = true;
51
+ // Start scan
52
+ try {
53
+ this._bleManager.startDeviceScan(uuidsOfServicesToScanFor, { allowDuplicates: true }, (error, device) => {
54
+ // RaftLog.debug(`discoveryFoundCB error ${error}`);
55
+ this._discoveryFoundCB(error, device);
56
+ });
57
+ }
58
+ catch (e) {
59
+ RaftLog_1.default.warn(`Error starting scan ${e}`);
60
+ return false;
61
+ }
62
+ // Set a time limit
63
+ this._discoverySetTimeLimit(this._discoveryTimeMs);
64
+ return true;
65
+ }
66
+ scanningStop() {
67
+ RaftLog_1.default.debug('scanningStop');
68
+ // Emit finished if we were scanning
69
+ RaftLog_1.default.debug(`IS SCANNING IN PROGRESS: ${RICBLEScanner._scanInProgress}`);
70
+ if (RICBLEScanner._scanInProgress) {
71
+ RaftLog_1.default.debug(`sending BLE_SCANNING_FINISHED event`);
72
+ this._eventCallback(RaftConnEvents_1.RaftConnEvent.BLE_SCANNING_FINISHED, { discoveredRICs: this._discoveredRICs });
73
+ }
74
+ // Cancel scanning
75
+ this._bleManager.stopDeviceScan();
76
+ RICBLEScanner._scanInProgress = false;
77
+ }
78
+ // Callback from BLE-PLX library on device discovered
79
+ _discoveryFoundCB(error, scannedDevice) {
80
+ if (error) {
81
+ //RaftLog.warn(`⚠️ Scan Error >> ${error.toString()}`);
82
+ RaftLog_1.default.warn(`⚠️ Scan Error >> ${JSON.stringify(error)}`);
83
+ // Event if we were scanning
84
+ if (RICBLEScanner._scanInProgress) {
85
+ this._eventCallback(RaftConnEvents_1.RaftConnEvent.BLE_SCANNING_FINISHED, {
86
+ discoveredRICs: this._discoveredRICs,
87
+ });
88
+ RICBLEScanner._scanInProgress = false;
89
+ }
90
+ return;
91
+ }
92
+ // See if already in the list
93
+ const ricAlreadyFound = this._discoveredRICs.find(item => item.id === scannedDevice.id);
94
+ RaftLog_1.default.debug(`✅ Scanning... >> ${scannedDevice}`);
95
+ if (ricAlreadyFound) {
96
+ // update the rssi value if it's not 127
97
+ if (scannedDevice.rssi !== null && scannedDevice.rssi !== 127) {
98
+ ricAlreadyFound._rssi = scannedDevice.rssi;
99
+ this._eventCallback(RaftConnEvents_1.RaftConnEvent.BLE_DEVICE_FOUND, {
100
+ discoveredRIC: ricAlreadyFound
101
+ });
102
+ }
103
+ return;
104
+ }
105
+ if (scannedDevice !== null) {
106
+ if (!scannedDevice.localName) {
107
+ // if the name of the device is null, don't add this device
108
+ // the first time round. Second time this device comes up
109
+ // will have all the needed info
110
+ return;
111
+ }
112
+ const newDiscoveredRic = new RaftTypes_1.DiscoveredRIC(scannedDevice.localName !== null ? scannedDevice.localName : '', scannedDevice.name !== null ? scannedDevice.name : '', scannedDevice.id, scannedDevice.rssi !== null ? scannedDevice.rssi : -150);
113
+ this._discoveredRICs.push(newDiscoveredRic);
114
+ // send the newly found ric to the state so it can pop-up on the front-end
115
+ this._eventCallback(RaftConnEvents_1.RaftConnEvent.BLE_DEVICE_FOUND, {
116
+ discoveredRIC: newDiscoveredRic
117
+ });
118
+ }
119
+ RaftLog_1.default.debug(`🤖 Scanned RICs >> ${this._discoveredRICs}`);
120
+ }
121
+ // Time-limit on device scanning
122
+ _discoverySetTimeLimit(timeLimitMs) {
123
+ setTimeout(() => {
124
+ // Stop scanning
125
+ this._bleManager.stopDeviceScan();
126
+ // Check we were scanning
127
+ if (RICBLEScanner._scanInProgress) {
128
+ // Sort by signal strength
129
+ // this._discoveredRICs.sort((a, b) => {
130
+ // return b!.rssi! - a!.rssi!;
131
+ // });
132
+ // Debug
133
+ const msg = `🤖 ${this._discoveredRICs.length} RICs found! Choose one to connect`;
134
+ RaftLog_1.default.debug(msg);
135
+ // Finished event
136
+ this._eventCallback(RaftConnEvents_1.RaftConnEvent.BLE_SCANNING_FINISHED, {
137
+ discoveredRICs: this._discoveredRICs,
138
+ });
139
+ }
140
+ RICBLEScanner._scanInProgress = false;
141
+ }, timeLimitMs);
142
+ }
143
+ }
144
+ RICBLEScanner._scanInProgress = false;
145
+ exports.default = RICBLEScanner;
146
+ //# sourceMappingURL=RaftChannelBLEScanner.native.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftChannelBLEScanner.native.js","sourceRoot":"","sources":["../../src/RaftChannelBLEScanner.native.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,gBAAgB;AAChB,sCAAsC;AACtC,EAAE;AACF,SAAS;AACT,kBAAkB;AAClB,qBAAqB;AACrB,EAAE;AACF,iHAAiH;;;AAOjH,2CAA4C;AAC5C,gEAAgC;AAChC,qDAAkE;AAElE,MAAqB,aAAa;IAkBhC,YAAY,UAAsB,EAAE,wBAAuC,EAAE,aAA8B;QAb3G,uBAAuB;QACvB,8BAAyB,GAAkB,EAAE,CAAC;QAE9C,+BAA+B;QAC/B,oBAAe,GAAoB,EAAE,CAAC;QAGtC,mBAAmB;QACnB,qBAAgB,GAAG,KAAK,CAAC;QAMvB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,yBAAyB,GAAG,wBAAwB,CAAC;QAC1D,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;IACtC,CAAC;IAED,sBAAsB;IACtB,iBAAiB;QACf,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED,iCAAiC;IACjC,gBAAgB;QACd,OAAO,aAAa,CAAC,eAAe,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,IAAa;QAC/B,IAAI,wBAAwB,GAAa,EAAE,CAAC;QAC5C,IAAI,IAAI,EAAE,CAAC;YACT,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,wBAAwB,GAAG,IAAI,CAAC,yBAAyB,CAAC;QAC5D,CAAC;QACD,mBAAmB;QACnB,iBAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;QAEtC,aAAa;QACb,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAE1B,6BAA6B;QAC7B,aAAa,CAAC,eAAe,GAAG,IAAI,CAAC;QAErC,aAAa;QACb,IAAI,CAAC;YACH,IAAI,CAAC,WAAW,CAAC,eAAe,CAC9B,wBAAwB,EACxB,EAAE,eAAe,EAAE,IAAI,EAAE,EACzB,CAAC,KAAsB,EAAE,MAAqB,EAAE,EAAE;gBAChD,oDAAoD;gBACpD,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACxC,CAAC,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,iBAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;YACzC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,mBAAmB;QACnB,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY;QAEV,iBAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;QAE9B,oCAAoC;QACpC,iBAAO,CAAC,KAAK,CAAC,4BAA4B,aAAa,CAAC,eAAe,EAAE,CAAC,CAAC;QAC3E,IAAI,aAAa,CAAC,eAAe,EAAE,CAAC;YAClC,iBAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,IAAI,CAAC,cAAc,CAAC,8BAAa,CAAC,qBAAqB,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QACrG,CAAC;QAED,kBAAkB;QAClB,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;QAClC,aAAa,CAAC,eAAe,GAAG,KAAK,CAAC;IACxC,CAAC;IAED,qDAAqD;IACrD,iBAAiB,CACf,KAAsB,EACtB,aAA4B;QAE5B,IAAI,KAAK,EAAE,CAAC;YACV,uDAAuD;YACvD,iBAAO,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1D,4BAA4B;YAC5B,IAAI,aAAa,CAAC,eAAe,EAAE,CAAC;gBAClC,IAAI,CAAC,cAAc,CAAC,8BAAa,CAAC,qBAAqB,EAAE;oBACvD,cAAc,EAAE,IAAI,CAAC,eAAe;iBACrC,CAAC,CAAC;gBACH,aAAa,CAAC,eAAe,GAAG,KAAK,CAAC;YACxC,CAAC;YACD,OAAO;QACT,CAAC;QAED,6BAA6B;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAC/C,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,aAAc,CAAC,EAAE,CACtC,CAAC;QAEF,iBAAO,CAAC,KAAK,CAAC,oBAAoB,aAAa,EAAE,CAAC,CAAC;QAEnD,IAAI,eAAe,EAAE,CAAC;YACpB,wCAAwC;YACxC,IAAI,aAAc,CAAC,IAAI,KAAK,IAAI,IAAI,aAAc,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAChE,eAAe,CAAC,KAAK,GAAG,aAAc,CAAC,IAAI,CAAC;gBAC5C,IAAI,CAAC,cAAc,CAAC,8BAAa,CAAC,gBAAgB,EAAE;oBAClD,aAAa,EAAE,eAAe;iBAC/B,CAAC,CAAC;YACL,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,aAAa,KAAK,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC;gBAC7B,2DAA2D;gBAC3D,yDAAyD;gBACzD,gCAAgC;gBAChC,OAAO;YACT,CAAC;YACD,MAAM,gBAAgB,GAAG,IAAI,yBAAa,CACxC,aAAa,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAC/D,aAAa,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EACrD,aAAa,CAAC,EAAE,EAChB,aAAa,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CACxD,CAAC;YACF,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC5C,0EAA0E;YAC1E,IAAI,CAAC,cAAc,CAAC,8BAAa,CAAC,gBAAgB,EAAE;gBAClD,aAAa,EAAE,gBAAgB;aAChC,CAAC,CAAC;QACL,CAAC;QACD,iBAAO,CAAC,KAAK,CAAC,sBAAsB,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,gCAAgC;IAChC,sBAAsB,CAAC,WAAmB;QACxC,UAAU,CAAC,GAAG,EAAE;YACd,gBAAgB;YAChB,IAAI,CAAC,WAAW,CAAC,cAAc,EAAE,CAAC;YAElC,yBAAyB;YACzB,IAAI,aAAa,CAAC,eAAe,EAAE,CAAC;gBAClC,0BAA0B;gBAC1B,wCAAwC;gBACxC,gCAAgC;gBAChC,MAAM;gBAEN,QAAQ;gBACR,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,oCAAoC,CAAC;gBAClF,iBAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEnB,iBAAiB;gBACjB,IAAI,CAAC,cAAc,CAAC,8BAAa,CAAC,qBAAqB,EAAE;oBACvD,cAAc,EAAE,IAAI,CAAC,eAAe;iBACrC,CAAC,CAAC;YACL,CAAC;YACD,aAAa,CAAC,eAAe,GAAG,KAAK,CAAC;QACxC,CAAC,EAAE,WAAW,CAAC,CAAC;IAClB,CAAC;;AA9JM,6BAAe,GAAG,KAAK,AAAR,CAAS;kBAVZ,aAAa"}
@@ -0,0 +1,37 @@
1
+ import RaftChannel from "./RaftChannel";
2
+ import RaftMsgHandler from "./RaftMsgHandler";
3
+ import { RaftConnEventFn } from "./RaftConnEvents";
4
+ import { ConnectorOptions } from "./RaftSystemType";
5
+ export default class RaftChannelWebSerial implements RaftChannel {
6
+ private _raftMsgHandler;
7
+ private _port;
8
+ private _reader?;
9
+ private _isConnected;
10
+ private _connPaused;
11
+ private _serialBuffer;
12
+ private _escapeSeqCode;
13
+ private _OVERASCII_ESCAPE_1;
14
+ private _OVERASCII_ESCAPE_2;
15
+ private _OVERASCII_ESCAPE_3;
16
+ private _OVERASCII_MOD_CODE;
17
+ private _onConnEvent;
18
+ private _requestedBatchAckSize;
19
+ private _requestedFileBlockSize;
20
+ fhBatchAckSize(): number;
21
+ fhFileBlockSize(): number;
22
+ isConnected(): boolean;
23
+ setMsgHandler(raftMsgHandler: RaftMsgHandler): void;
24
+ requiresSubscription(): boolean;
25
+ ricRestCmdBeforeDisconnect(): string | null;
26
+ setOnConnEvent(connEventFn: RaftConnEventFn): void;
27
+ getConnectedLocator(): string | object;
28
+ connect(locator: string | object, _connectorOptions: ConnectorOptions): Promise<boolean>;
29
+ disconnect(): Promise<void>;
30
+ pauseConnection(pause: boolean): void;
31
+ private _overasciiDecodeByte;
32
+ private _overasciiEncode;
33
+ _onMsgRx(msg: Uint8Array | null): void;
34
+ sendTxMsg(msg: Uint8Array, sendWithResponse: boolean): Promise<boolean>;
35
+ sendTxMsgNoAwait(msg: Uint8Array, sendWithResponse: boolean): Promise<boolean>;
36
+ _readLoop(): Promise<void>;
37
+ }