@robdobsn/raftjs 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/.editorconfig +14 -0
  2. package/.gitattributes +11 -0
  3. package/.nvmrc +1 -0
  4. package/LICENSE +22 -0
  5. package/README.md +11 -0
  6. package/TODO.md +1 -0
  7. package/dist/RaftAttributeHandler.d.ts +12 -0
  8. package/dist/RaftAttributeHandler.js +241 -0
  9. package/dist/RaftAttributeHandler.js.map +1 -0
  10. package/dist/RaftChannel.d.ts +18 -0
  11. package/dist/RaftChannel.js +12 -0
  12. package/dist/RaftChannel.js.map +1 -0
  13. package/dist/RaftChannelWebBLE.d.ts +38 -0
  14. package/dist/RaftChannelWebBLE.js +274 -0
  15. package/dist/RaftChannelWebBLE.js.map +1 -0
  16. package/dist/RaftChannelWebSerial.d.ts +37 -0
  17. package/dist/RaftChannelWebSerial.js +319 -0
  18. package/dist/RaftChannelWebSerial.js.map +1 -0
  19. package/dist/RaftChannelWebSocket.d.ts +28 -0
  20. package/dist/RaftChannelWebSocket.js +197 -0
  21. package/dist/RaftChannelWebSocket.js.map +1 -0
  22. package/dist/RaftCommsStats.d.ts +39 -0
  23. package/dist/RaftCommsStats.js +128 -0
  24. package/dist/RaftCommsStats.js.map +1 -0
  25. package/dist/RaftConnEvents.d.ts +31 -0
  26. package/dist/RaftConnEvents.js +44 -0
  27. package/dist/RaftConnEvents.js.map +1 -0
  28. package/dist/RaftConnector.d.ts +242 -0
  29. package/dist/RaftConnector.js +613 -0
  30. package/dist/RaftConnector.js.map +1 -0
  31. package/dist/RaftCustomAttrHandler.d.ts +4 -0
  32. package/dist/RaftCustomAttrHandler.js +50 -0
  33. package/dist/RaftCustomAttrHandler.js.map +1 -0
  34. package/dist/RaftDeviceInfo.d.ts +64 -0
  35. package/dist/RaftDeviceInfo.js +36 -0
  36. package/dist/RaftDeviceInfo.js.map +1 -0
  37. package/dist/RaftDeviceManager.d.ts +37 -0
  38. package/dist/RaftDeviceManager.js +450 -0
  39. package/dist/RaftDeviceManager.js.map +1 -0
  40. package/dist/RaftDeviceMsg.d.ts +9 -0
  41. package/dist/RaftDeviceMsg.js +11 -0
  42. package/dist/RaftDeviceMsg.js.map +1 -0
  43. package/dist/RaftDeviceStates.d.ts +33 -0
  44. package/dist/RaftDeviceStates.js +60 -0
  45. package/dist/RaftDeviceStates.js.map +1 -0
  46. package/dist/RaftFileHandler.d.ts +52 -0
  47. package/dist/RaftFileHandler.js +502 -0
  48. package/dist/RaftFileHandler.js.map +1 -0
  49. package/dist/RaftLog.d.ts +22 -0
  50. package/dist/RaftLog.js +63 -0
  51. package/dist/RaftLog.js.map +1 -0
  52. package/dist/RaftMiniHDLC.d.ts +18 -0
  53. package/dist/RaftMiniHDLC.js +383 -0
  54. package/dist/RaftMiniHDLC.js.map +1 -0
  55. package/dist/RaftMsgHandler.d.ts +57 -0
  56. package/dist/RaftMsgHandler.js +480 -0
  57. package/dist/RaftMsgHandler.js.map +1 -0
  58. package/dist/RaftMsgTrackInfo.d.ts +17 -0
  59. package/dist/RaftMsgTrackInfo.js +42 -0
  60. package/dist/RaftMsgTrackInfo.js.map +1 -0
  61. package/dist/RaftProtocolDefs.d.ts +30 -0
  62. package/dist/RaftProtocolDefs.js +48 -0
  63. package/dist/RaftProtocolDefs.js.map +1 -0
  64. package/dist/RaftStreamHandler.d.ts +38 -0
  65. package/dist/RaftStreamHandler.js +257 -0
  66. package/dist/RaftStreamHandler.js.map +1 -0
  67. package/dist/RaftSystemType.d.ts +21 -0
  68. package/dist/RaftSystemType.js +3 -0
  69. package/dist/RaftSystemType.js.map +1 -0
  70. package/dist/RaftSystemUtils.d.ts +136 -0
  71. package/dist/RaftSystemUtils.js +410 -0
  72. package/dist/RaftSystemUtils.js.map +1 -0
  73. package/dist/RaftTypes.d.ts +184 -0
  74. package/dist/RaftTypes.js +157 -0
  75. package/dist/RaftTypes.js.map +1 -0
  76. package/dist/RaftUpdateEvents.d.ts +33 -0
  77. package/dist/RaftUpdateEvents.js +46 -0
  78. package/dist/RaftUpdateEvents.js.map +1 -0
  79. package/dist/RaftUpdateManager.d.ts +61 -0
  80. package/dist/RaftUpdateManager.js +618 -0
  81. package/dist/RaftUpdateManager.js.map +1 -0
  82. package/dist/RaftUtils.d.ts +125 -0
  83. package/dist/RaftUtils.js +454 -0
  84. package/dist/RaftUtils.js.map +1 -0
  85. package/dist/RaftWifiTypes.d.ts +23 -0
  86. package/dist/RaftWifiTypes.js +43 -0
  87. package/dist/RaftWifiTypes.js.map +1 -0
  88. package/dist/TestDataGen.d.ts +7 -0
  89. package/dist/TestDataGen.js +133 -0
  90. package/dist/TestDataGen.js.map +1 -0
  91. package/dist/main.d.ts +18 -0
  92. package/dist/main.js +42 -0
  93. package/dist/main.js.map +1 -0
  94. package/eslint.config.mjs +33 -0
  95. package/examples/dashboard/package.json +39 -0
  96. package/examples/dashboard/src/ConnManager.ts +86 -0
  97. package/examples/dashboard/src/Main.tsx +100 -0
  98. package/examples/dashboard/src/StatusScreen.tsx +72 -0
  99. package/examples/dashboard/src/SystemTypeCog/CogStateInfo.ts +144 -0
  100. package/examples/dashboard/src/SystemTypeCog/SystemTypeCog.ts +77 -0
  101. package/examples/dashboard/src/SystemTypeMarty/RICAddOn.ts +70 -0
  102. package/examples/dashboard/src/SystemTypeMarty/RICAddOnBase.ts +33 -0
  103. package/examples/dashboard/src/SystemTypeMarty/RICAddOnManager.ts +342 -0
  104. package/examples/dashboard/src/SystemTypeMarty/RICCommsStats.ts +170 -0
  105. package/examples/dashboard/src/SystemTypeMarty/RICHWElem.ts +123 -0
  106. package/examples/dashboard/src/SystemTypeMarty/RICLEDPatternChecker.ts +207 -0
  107. package/examples/dashboard/src/SystemTypeMarty/RICROSSerial.ts +464 -0
  108. package/examples/dashboard/src/SystemTypeMarty/RICServoFaultDetector.ts +146 -0
  109. package/examples/dashboard/src/SystemTypeMarty/RICStateInfo.ts +32 -0
  110. package/examples/dashboard/src/SystemTypeMarty/RICSystemUtils.ts +371 -0
  111. package/examples/dashboard/src/SystemTypeMarty/RICTypes.ts +20 -0
  112. package/examples/dashboard/src/SystemTypeMarty/SystemTypeMarty.ts +113 -0
  113. package/examples/dashboard/src/index.html +15 -0
  114. package/examples/dashboard/src/index.tsx +15 -0
  115. package/examples/dashboard/src/styles.css +122 -0
  116. package/examples/dashboard/tsconfig.json +18 -0
  117. package/jest.config.js +11 -0
  118. package/package.json +50 -0
  119. package/src/RaftAttributeHandler.ts +289 -0
  120. package/src/RaftChannel.ts +30 -0
  121. package/src/RaftChannelWebBLE.ts +342 -0
  122. package/src/RaftChannelWebSerial.ts +408 -0
  123. package/src/RaftChannelWebSocket.ts +245 -0
  124. package/src/RaftCommsStats.ts +142 -0
  125. package/src/RaftConnEvents.ts +46 -0
  126. package/src/RaftConnector.ts +745 -0
  127. package/src/RaftCustomAttrHandler.ts +54 -0
  128. package/src/RaftDeviceInfo.ts +104 -0
  129. package/src/RaftDeviceManager.ts +542 -0
  130. package/src/RaftDeviceMsg.ts +20 -0
  131. package/src/RaftDeviceStates.ts +89 -0
  132. package/src/RaftFileHandler.ts +668 -0
  133. package/src/RaftLog.ts +70 -0
  134. package/src/RaftMiniHDLC.ts +396 -0
  135. package/src/RaftMsgHandler.ts +778 -0
  136. package/src/RaftMsgTrackInfo.ts +51 -0
  137. package/src/RaftProtocolDefs.ts +46 -0
  138. package/src/RaftStreamHandler.ts +328 -0
  139. package/src/RaftSystemType.ts +25 -0
  140. package/src/RaftSystemUtils.ts +487 -0
  141. package/src/RaftTypes.ts +250 -0
  142. package/src/RaftUpdateEvents.ts +48 -0
  143. package/src/RaftUpdateManager.ts +778 -0
  144. package/src/RaftUtils.ts +484 -0
  145. package/src/RaftWifiTypes.ts +36 -0
  146. package/src/TestDataGen.ts +157 -0
  147. package/src/main.ts +28 -0
  148. package/testdata/TestDeviceTypeRecs.json +492 -0
  149. package/tsconfig.json +27 -0
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // Raft Protocol Definitions
5
+ // Part of RaftJS
6
+ //
7
+ // Rob Dobson & Chris Greening 2020-2024
8
+ // (C) 2020-2024 All rights reserved
9
+ //
10
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RaftCommsMsgProtocol = exports.RaftCommsMsgTypeCode = exports.RICRESTElemCode = exports.RICREST_BRIDGE_PAYLOAD_POS = exports.RICREST_BRIDGE_ID_POS = exports.RICREST_FILEBLOCK_PAYLOAD_POS = exports.RICREST_FILEBLOCK_FILEPOS_POS_BYTES = exports.RICREST_FILEBLOCK_FILEPOS_POS = exports.RICREST_FILEBLOCK_CHANNEL_POS = exports.RICREST_HEADER_PAYLOAD_POS = exports.RICREST_REST_ELEM_CODE_POS = exports.RICSERIAL_PAYLOAD_POS = exports.RICSERIAL_PROTOCOL_POS = exports.RICSERIAL_MSG_NUM_POS = void 0;
13
+ // RIC Protocols
14
+ exports.RICSERIAL_MSG_NUM_POS = 0;
15
+ exports.RICSERIAL_PROTOCOL_POS = 1;
16
+ exports.RICSERIAL_PAYLOAD_POS = 2;
17
+ exports.RICREST_REST_ELEM_CODE_POS = 0;
18
+ exports.RICREST_HEADER_PAYLOAD_POS = 1;
19
+ exports.RICREST_FILEBLOCK_CHANNEL_POS = 0;
20
+ exports.RICREST_FILEBLOCK_FILEPOS_POS = 0;
21
+ exports.RICREST_FILEBLOCK_FILEPOS_POS_BYTES = 4;
22
+ exports.RICREST_FILEBLOCK_PAYLOAD_POS = 4;
23
+ exports.RICREST_BRIDGE_ID_POS = 2;
24
+ exports.RICREST_BRIDGE_PAYLOAD_POS = 3;
25
+ // Protocol enums
26
+ var RICRESTElemCode;
27
+ (function (RICRESTElemCode) {
28
+ RICRESTElemCode[RICRESTElemCode["RICREST_ELEM_CODE_URL"] = 0] = "RICREST_ELEM_CODE_URL";
29
+ RICRESTElemCode[RICRESTElemCode["RICREST_ELEM_CODE_CMDRESPJSON"] = 1] = "RICREST_ELEM_CODE_CMDRESPJSON";
30
+ RICRESTElemCode[RICRESTElemCode["RICREST_ELEM_CODE_BODY"] = 2] = "RICREST_ELEM_CODE_BODY";
31
+ RICRESTElemCode[RICRESTElemCode["RICREST_ELEM_CODE_COMMAND_FRAME"] = 3] = "RICREST_ELEM_CODE_COMMAND_FRAME";
32
+ RICRESTElemCode[RICRESTElemCode["RICREST_ELEM_CODE_FILEBLOCK"] = 4] = "RICREST_ELEM_CODE_FILEBLOCK";
33
+ })(RICRESTElemCode || (exports.RICRESTElemCode = RICRESTElemCode = {}));
34
+ var RaftCommsMsgTypeCode;
35
+ (function (RaftCommsMsgTypeCode) {
36
+ RaftCommsMsgTypeCode[RaftCommsMsgTypeCode["MSG_TYPE_COMMAND"] = 0] = "MSG_TYPE_COMMAND";
37
+ RaftCommsMsgTypeCode[RaftCommsMsgTypeCode["MSG_TYPE_RESPONSE"] = 1] = "MSG_TYPE_RESPONSE";
38
+ RaftCommsMsgTypeCode[RaftCommsMsgTypeCode["MSG_TYPE_PUBLISH"] = 2] = "MSG_TYPE_PUBLISH";
39
+ RaftCommsMsgTypeCode[RaftCommsMsgTypeCode["MSG_TYPE_REPORT"] = 3] = "MSG_TYPE_REPORT";
40
+ })(RaftCommsMsgTypeCode || (exports.RaftCommsMsgTypeCode = RaftCommsMsgTypeCode = {}));
41
+ var RaftCommsMsgProtocol;
42
+ (function (RaftCommsMsgProtocol) {
43
+ RaftCommsMsgProtocol[RaftCommsMsgProtocol["MSG_PROTOCOL_ROSSERIAL"] = 0] = "MSG_PROTOCOL_ROSSERIAL";
44
+ RaftCommsMsgProtocol[RaftCommsMsgProtocol["MSG_PROTOCOL_RESERVED_1"] = 1] = "MSG_PROTOCOL_RESERVED_1";
45
+ RaftCommsMsgProtocol[RaftCommsMsgProtocol["MSG_PROTOCOL_RICREST"] = 2] = "MSG_PROTOCOL_RICREST";
46
+ RaftCommsMsgProtocol[RaftCommsMsgProtocol["MSG_PROTOCOL_BRIDGE_RICREST"] = 3] = "MSG_PROTOCOL_BRIDGE_RICREST";
47
+ })(RaftCommsMsgProtocol || (exports.RaftCommsMsgProtocol = RaftCommsMsgProtocol = {}));
48
+ //# sourceMappingURL=RaftProtocolDefs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftProtocolDefs.js","sourceRoot":"","sources":["../src/RaftProtocolDefs.ts"],"names":[],"mappings":";AAAA,iHAAiH;AACjH,EAAE;AACF,4BAA4B;AAC5B,iBAAiB;AACjB,EAAE;AACF,wCAAwC;AACxC,oCAAoC;AACpC,EAAE;AACF,iHAAiH;;;AAEjH,gBAAgB;AACH,QAAA,qBAAqB,GAAG,CAAC,CAAC;AAC1B,QAAA,sBAAsB,GAAG,CAAC,CAAC;AAC3B,QAAA,qBAAqB,GAAG,CAAC,CAAC;AAC1B,QAAA,0BAA0B,GAAG,CAAC,CAAC;AAC/B,QAAA,0BAA0B,GAAG,CAAC,CAAC;AAC/B,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAClC,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAClC,QAAA,mCAAmC,GAAG,CAAC,CAAC;AACxC,QAAA,6BAA6B,GAAG,CAAC,CAAC;AAClC,QAAA,qBAAqB,GAAG,CAAC,CAAC;AAC1B,QAAA,0BAA0B,GAAG,CAAC,CAAC;AAE5C,iBAAiB;AACjB,IAAY,eAMX;AAND,WAAY,eAAe;IACzB,uFAAqB,CAAA;IACrB,uGAA6B,CAAA;IAC7B,yFAAsB,CAAA;IACtB,2GAA+B,CAAA;IAC/B,mGAA2B,CAAA;AAC7B,CAAC,EANW,eAAe,+BAAf,eAAe,QAM1B;AAED,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC9B,uFAAgB,CAAA;IAChB,yFAAiB,CAAA;IACjB,uFAAgB,CAAA;IAChB,qFAAe,CAAA;AACjB,CAAC,EALW,oBAAoB,oCAApB,oBAAoB,QAK/B;AAED,IAAY,oBAKX;AALD,WAAY,oBAAoB;IAC9B,mGAA0B,CAAA;IAC1B,qGAA2B,CAAA;IAC3B,+FAAwB,CAAA;IACxB,6GAA+B,CAAA;AACjC,CAAC,EALW,oBAAoB,oCAApB,oBAAoB,QAK/B"}
@@ -0,0 +1,38 @@
1
+ import RaftMsgHandler from './RaftMsgHandler';
2
+ import RaftCommsStats from './RaftCommsStats';
3
+ import RaftConnector from './RaftConnector';
4
+ export default class RaftStreamHandler {
5
+ private _streamID;
6
+ DEFAULT_MAX_BLOCK_SIZE: number;
7
+ private _maxBlockSize;
8
+ private _msgHandler;
9
+ private _commsStats;
10
+ private _raftConnector;
11
+ private _soktoReceived;
12
+ private _soktoPos;
13
+ private _streamIsStarting;
14
+ private _lastStreamStartTime;
15
+ private _isStreaming;
16
+ private _isPaused;
17
+ private _streamBuffer;
18
+ private _audioDuration;
19
+ private _audioByteRate;
20
+ private _streamPos;
21
+ private _numBlocksWithoutPause;
22
+ private _legacySoktoMode;
23
+ private soundFinishPoint;
24
+ constructor(msgHandler: RaftMsgHandler, commsStats: RaftCommsStats, raftConnector: RaftConnector);
25
+ setNumBlocksWithoutPause(numBlocks: number): void;
26
+ setLegacySoktoMode(legacyMode: boolean): void;
27
+ streamAudio(streamContents: Uint8Array, clearExisting: boolean, audioDuration: number): void;
28
+ streamCancel(): Promise<void>;
29
+ isStreamStarting(): boolean;
30
+ clearFinishPointTimeout(): void;
31
+ streamingPerformanceChecker(): void;
32
+ private _sendStreamStartMsg;
33
+ get maxBlockSize(): number;
34
+ set maxBlockSize(maxBlockSize: number);
35
+ private _sendStreamEndMsg;
36
+ private _sendStreamBuffer;
37
+ onSoktoMsg(soktoPos: number): void;
38
+ }
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
3
+ //
4
+ // RafStreamHandler
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 RaftConnEvents_1 = require("./RaftConnEvents");
16
+ const RaftProtocolDefs_1 = require("./RaftProtocolDefs");
17
+ class RaftStreamHandler {
18
+ constructor(msgHandler, commsStats, raftConnector) {
19
+ // Queue of audio stream requests
20
+ /*
21
+ private _streamAudioQueue: {
22
+ streamContents: Uint8Array;
23
+ audioDuration: number;
24
+ }[] = [];
25
+ */
26
+ // Stream state
27
+ this._streamID = null;
28
+ this.DEFAULT_MAX_BLOCK_SIZE = 475;
29
+ this._maxBlockSize = this.DEFAULT_MAX_BLOCK_SIZE;
30
+ // Flow control
31
+ this._soktoReceived = false;
32
+ this._soktoPos = 0;
33
+ this._streamIsStarting = false;
34
+ this._lastStreamStartTime = 0;
35
+ this._isStreaming = false;
36
+ this._isPaused = false;
37
+ this._streamBuffer = new Uint8Array();
38
+ this._audioDuration = 0;
39
+ this._audioByteRate = 0;
40
+ this._streamPos = 0;
41
+ this._numBlocksWithoutPause = 15;
42
+ this._legacySoktoMode = false;
43
+ // soundFinishPoint timer
44
+ this.soundFinishPoint = null;
45
+ this._raftConnector = raftConnector;
46
+ this._msgHandler = msgHandler;
47
+ this._commsStats = commsStats;
48
+ this.onSoktoMsg = this.onSoktoMsg.bind(this);
49
+ }
50
+ setNumBlocksWithoutPause(numBlocks) {
51
+ this._numBlocksWithoutPause = numBlocks;
52
+ }
53
+ setLegacySoktoMode(legacyMode) {
54
+ RaftLog_1.default.debug(`Setting legacy sokto mode to ${legacyMode}`);
55
+ this._legacySoktoMode = legacyMode;
56
+ }
57
+ // Start streaming audio
58
+ streamAudio(streamContents, clearExisting, audioDuration) {
59
+ if (!clearExisting)
60
+ RaftLog_1.default.debug(`only clearExisting = true is supported right now.`);
61
+ // TODO - if clearExisting is not set, form a queue
62
+ if (this._streamIsStarting || this._lastStreamStartTime > (Date.now() - 500)) {
63
+ RaftLog_1.default.error(`Unable to start sound, too soon since last request`);
64
+ return;
65
+ }
66
+ this._isPaused = true;
67
+ this._streamIsStarting = true;
68
+ this._lastStreamStartTime = Date.now();
69
+ this._soktoReceived = false;
70
+ this._soktoPos = 0;
71
+ this._streamPos = 0;
72
+ this._streamBuffer = streamContents;
73
+ this._audioDuration = audioDuration;
74
+ this._audioByteRate = (streamContents.length / audioDuration) * 1000;
75
+ this.clearFinishPointTimeout();
76
+ this._sendStreamStartMsg("audio.mp3", "streamaudio", RaftTypes_1.RaftStreamType.REAL_TIME_STREAM, streamContents).then((result) => {
77
+ this._isPaused = false;
78
+ this._streamIsStarting = false;
79
+ if (!result) {
80
+ RaftLog_1.default.error(`Unable to start stream. ufStart message send failed`);
81
+ return;
82
+ }
83
+ //this.streamingPerformanceChecker();
84
+ if (!this._isStreaming) {
85
+ this._isStreaming = true;
86
+ this._sendStreamBuffer();
87
+ }
88
+ });
89
+ }
90
+ async streamCancel() {
91
+ this._streamBuffer = new Uint8Array();
92
+ this.clearFinishPointTimeout();
93
+ }
94
+ isStreamStarting() {
95
+ return this._streamIsStarting;
96
+ }
97
+ clearFinishPointTimeout() {
98
+ if (this.soundFinishPoint) {
99
+ clearTimeout(this.soundFinishPoint);
100
+ this.soundFinishPoint = null;
101
+ }
102
+ }
103
+ streamingPerformanceChecker() {
104
+ if (this._audioDuration) {
105
+ this.clearFinishPointTimeout();
106
+ this.soundFinishPoint = setTimeout(() => {
107
+ // if the streaming hasn't finished before the end of the audio
108
+ // we can assume we are having streaming issues
109
+ // publish event in case we are having issues
110
+ this._raftConnector.onConnEvent(RaftConnEvents_1.RaftConnEvent.CONN_STREAMING_ISSUE);
111
+ this.clearFinishPointTimeout();
112
+ }, this._audioDuration + 500);
113
+ }
114
+ }
115
+ // Send the start message
116
+ async _sendStreamStartMsg(streamName, targetEndpoint, streamTypeEnum, streamContents) {
117
+ // Stream start command message
118
+ const streamType = 'rtstream';
119
+ const cmdMsg = `{"cmdName":"ufStart","reqStr":"ufStart","fileType":"${streamType}","fileName":"${streamName}","endpoint":"${targetEndpoint}","fileLen":${streamContents.length}}`;
120
+ // Debug
121
+ RaftLog_1.default.debug(`sendStreamStartMsg ${cmdMsg}`);
122
+ // Send
123
+ let streamStartResp = null;
124
+ try {
125
+ streamStartResp = await this._msgHandler.sendRICREST(cmdMsg, RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_COMMAND_FRAME);
126
+ }
127
+ catch (err) {
128
+ RaftLog_1.default.error(`sendStreamStartMsg error ${err}`);
129
+ return false;
130
+ }
131
+ // Extract params
132
+ if (streamStartResp && (streamStartResp.rslt === 'ok')) {
133
+ this._streamID = streamStartResp.streamID;
134
+ this._maxBlockSize = streamStartResp.maxBlockSize || this.DEFAULT_MAX_BLOCK_SIZE;
135
+ this.streamingPerformanceChecker();
136
+ RaftLog_1.default.verbose(`sendStreamStartMsg streamID ${this._streamID} maxBlockSize ${this._maxBlockSize} streamType ${streamTypeEnum}`);
137
+ }
138
+ else {
139
+ RaftLog_1.default.warn(`sendStreamStartMsg failed ${streamStartResp ? streamStartResp.rslt : 'no response'}`);
140
+ return false;
141
+ }
142
+ return true;
143
+ }
144
+ get maxBlockSize() {
145
+ return this._maxBlockSize;
146
+ }
147
+ set maxBlockSize(maxBlockSize) {
148
+ this._maxBlockSize = maxBlockSize;
149
+ this.DEFAULT_MAX_BLOCK_SIZE = maxBlockSize;
150
+ }
151
+ async _sendStreamEndMsg(streamID) {
152
+ if (streamID === null) {
153
+ return false;
154
+ }
155
+ // Stram end command message
156
+ const cmdMsg = `{"cmdName":"ufEnd","reqStr":"ufEnd","streamID":${streamID}}`;
157
+ // Debug
158
+ RaftLog_1.default.debug(`sendStreamEndMsg ${cmdMsg}`);
159
+ // Send
160
+ let streamEndResp = null;
161
+ try {
162
+ streamEndResp = await this._msgHandler.sendRICREST(cmdMsg, RaftProtocolDefs_1.RICRESTElemCode.RICREST_ELEM_CODE_COMMAND_FRAME);
163
+ }
164
+ catch (err) {
165
+ RaftLog_1.default.error(`sendStreamEndMsg error ${err}`);
166
+ return false;
167
+ }
168
+ return streamEndResp.rslt === 'ok';
169
+ }
170
+ /*
171
+ private async _sendAudioStopMsg(): Promise<RaftOKFail> {
172
+ const cmdMsg = `{"cmdName":"audio/stop"}`;
173
+
174
+ // Debug
175
+ RaftLog.debug(`sendAudioStopMsg ${cmdMsg}`);
176
+
177
+ // Send
178
+ return this._msgHandler.sendRICREST<RaftOKFail>(
179
+ cmdMsg,
180
+ RICRESTElemCode.RICREST_ELEM_CODE_COMMAND_FRAME,
181
+ );
182
+ }
183
+
184
+
185
+ private async _sendStreamCancelMsg(): Promise<RaftOKFail> {
186
+ // File cancel command message
187
+ const cmdMsg = `{"cmdName":"ufCancel","reqStr":"ufCancel","streamID":${this._streamID}}`;
188
+
189
+ // Debug
190
+ RaftLog.debug(`sendStreamCancelMsg ${cmdMsg}`);
191
+
192
+ // Send
193
+ return this._msgHandler.sendRICREST<RaftOKFail>(
194
+ cmdMsg,
195
+ RICRESTElemCode.RICREST_ELEM_CODE_COMMAND_FRAME,
196
+ );
197
+ }
198
+ */
199
+ async _sendStreamBuffer() {
200
+ const streamStartTime = Date.now();
201
+ // Check streamID is valid
202
+ if (this._streamID === null) {
203
+ return false;
204
+ }
205
+ let blockNum = 0;
206
+ // Send stream blocks
207
+ while (this._soktoPos < this._streamBuffer.length || this._isPaused) {
208
+ if (this._isPaused) {
209
+ await new Promise((resolve) => setTimeout(resolve, 5));
210
+ continue;
211
+ }
212
+ // Check for new sokto
213
+ if (this._soktoReceived) {
214
+ if (this._legacySoktoMode)
215
+ this._streamPos = this._soktoPos;
216
+ // apart from when in legacy mode, the sokto message is now informational only,
217
+ // to allow the central to slow down sending of data if it is swamping the peripheral
218
+ RaftLog_1.default.verbose(`sendStreamContents ${Date.now() - streamStartTime}ms soktoReceived for ${this._streamPos}`);
219
+ this._soktoReceived = false;
220
+ // receiving an sokto message before the completion of the stream means that the streaming is not keeping up
221
+ this._raftConnector.onConnEvent(RaftConnEvents_1.RaftConnEvent.CONN_STREAMING_ISSUE);
222
+ }
223
+ // Send stream block
224
+ const blockSize = Math.min(this._streamBuffer.length - this._streamPos, this._maxBlockSize);
225
+ const block = this._streamBuffer.slice(this._streamPos, this._streamPos + blockSize);
226
+ if (block.length > 0) {
227
+ const sentOk = await this._msgHandler.sendStreamBlock(block, this._streamPos, this._streamID);
228
+ this._commsStats.recordStreamBytes(block.length);
229
+ RaftLog_1.default.verbose(`sendStreamContents ${sentOk ? "OK" : "FAILED"} ${Date.now() - streamStartTime}ms pos ${this._streamPos} ${blockSize} ${block.length} ${this._soktoPos}`);
230
+ if (!sentOk) {
231
+ return false;
232
+ }
233
+ this._streamPos += blockSize;
234
+ blockNum += 1;
235
+ if (this._audioByteRate && blockNum > this._numBlocksWithoutPause) {
236
+ const pauseTime = ((blockSize / this._audioByteRate) * 1000) - 10;
237
+ RaftLog_1.default.verbose(`Pausing for ${pauseTime} ms between audio packets. Bit rate ${this._audioByteRate * 8}`);
238
+ await new Promise((resolve) => setTimeout(resolve, pauseTime));
239
+ }
240
+ }
241
+ // Wait to ensure we don't hog the CPU
242
+ await new Promise((resolve) => setTimeout(resolve, 1));
243
+ }
244
+ this._isStreaming = false;
245
+ this.clearFinishPointTimeout();
246
+ await this._sendStreamEndMsg(this._streamID);
247
+ return true;
248
+ }
249
+ onSoktoMsg(soktoPos) {
250
+ // Get how far we've progressed in file
251
+ this._soktoPos = soktoPos;
252
+ this._soktoReceived = true;
253
+ RaftLog_1.default.debug(`onSoktoMsg received file up to ${this._soktoPos}`);
254
+ }
255
+ }
256
+ exports.default = RaftStreamHandler;
257
+ //# sourceMappingURL=RaftStreamHandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftStreamHandler.js","sourceRoot":"","sources":["../src/RaftStreamHandler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import RaftSystemUtils from "./RaftSystemUtils";
2
+ import { RaftEventFn } from "./RaftTypes";
3
+ export type RaftSubscribeForUpdatesCBType = (systemUtils: RaftSystemUtils, enable: boolean) => Promise<void>;
4
+ export type RaftStateIsInvalidCBType = () => void;
5
+ export type RaftRxOtherMsgType = (payload: Uint8Array, _frameTimeMs: number) => void;
6
+ export interface ConnectorOptions {
7
+ wsSuffix?: string;
8
+ connTimeoutMs?: number;
9
+ }
10
+ export interface RaftSystemType {
11
+ nameForDialogs: string;
12
+ defaultWiFiHostname: string;
13
+ firmwareDestName: string;
14
+ normalFileDestName: string;
15
+ connectorOptions: ConnectorOptions;
16
+ setup: (systemUtils: RaftSystemUtils, onEvent: RaftEventFn | null) => void;
17
+ subscribeForUpdates: RaftSubscribeForUpdatesCBType | null;
18
+ stateIsInvalid: RaftStateIsInvalidCBType | null;
19
+ rxOtherMsgType: RaftRxOtherMsgType | null;
20
+ }
21
+ export type RaftGetSystemTypeCBType = (systemUtils: RaftSystemUtils) => Promise<RaftSystemType | null>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=RaftSystemType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RaftSystemType.js","sourceRoot":"","sources":["../src/RaftSystemType.ts"],"names":[],"mappings":""}
@@ -0,0 +1,136 @@
1
+ import { RaftWifiConnStatus } from "./RaftWifiTypes";
2
+ import RaftMsgHandler from "./RaftMsgHandler";
3
+ import { RaftFileList, RaftFriendlyName, RaftOKFail, RaftSysModInfoBLEMan, RaftSystemInfo, RaftWifiScanResults } from "./RaftTypes";
4
+ export default class RaftSystemUtils {
5
+ private _msgHandler;
6
+ private _systemInfo;
7
+ private _friendlyName;
8
+ private _wifiConnStatus;
9
+ private _defaultWiFiHostname;
10
+ private _maxSecsToWaitForWiFiConn;
11
+ /**
12
+ * constructor
13
+ * @param raftMsgHandler
14
+ */
15
+ constructor(raftMsgHandler: RaftMsgHandler);
16
+ /**
17
+ * getMsgHandler
18
+ * @returns RaftMsgHandler
19
+ */
20
+ getMsgHandler(): RaftMsgHandler;
21
+ /**
22
+ * setDefaultWiFiHostname
23
+ * @param defaultWiFiHostname
24
+ */
25
+ setDefaultWiFiHostname(defaultWiFiHostname: string): void;
26
+ /**
27
+ * getFriendlyName
28
+ *
29
+ * @returns friendly name
30
+ */
31
+ getFriendlyName(): RaftFriendlyName | null;
32
+ /**
33
+ * invalidate
34
+ */
35
+ invalidate(): void;
36
+ /**
37
+ * retrieveInfo - get system info
38
+ * @returns Promise<RaftSystemInfo>
39
+ *
40
+ */
41
+ retrieveInfo(): Promise<boolean>;
42
+ /**
43
+ *
44
+ * getSystemInfo
45
+ * @param forceGet - true to force a get from the raft app
46
+ * @returns Promise<RaftSystemInfo>
47
+ *
48
+ */
49
+ getSystemInfo(forceGet?: boolean): Promise<RaftSystemInfo>;
50
+ /**
51
+ *
52
+ * setRaftName
53
+ * @param newName name to refer to Raft - used for BLE advertising
54
+ * @returns Promise<boolean> true if successful
55
+ *
56
+ */
57
+ setRaftName(newName: string): Promise<boolean>;
58
+ /**
59
+ *
60
+ * getRaftName
61
+ * @param forceGet - true to force a get from the raft app
62
+ * @returns Promise<RaftNameResponse> (object containing rslt)
63
+ *
64
+ */
65
+ getRaftName(forceGet?: boolean): Promise<RaftFriendlyName>;
66
+ /**
67
+ *
68
+ * getFileList - get list of files on file system
69
+ * @returns Promise<RaftFileList>
70
+ *
71
+ */
72
+ getFileList(): Promise<RaftFileList>;
73
+ /**
74
+ *
75
+ * Get BLEMan sysmod info
76
+ *
77
+ * @returns RaftSysModInfoBLEMan
78
+ *
79
+ */
80
+ getSysModInfoBLEMan(): Promise<RaftSysModInfoBLEMan | null>;
81
+ /**
82
+ * Get hostname of connected WiFi
83
+ *
84
+ * @return string - hostname of connected WiFi
85
+ *
86
+ */
87
+ _getHostnameFromFriendlyName(): string;
88
+ /**
89
+ * Get Wifi connection status
90
+ *
91
+ * @return boolean - true if connected
92
+ *
93
+ */
94
+ getWiFiConnStatus(): Promise<boolean | null>;
95
+ /**
96
+ * pause Wifi connection
97
+ *
98
+ * @param boolean - true to pause, false to resume
99
+ * @return boolean - true if successful
100
+ *
101
+ */
102
+ pauseWifiConnection(pause: boolean): Promise<boolean>;
103
+ /**
104
+ * Connect to WiFi
105
+ *
106
+ * @param string - WiFi SSID
107
+ * @param string - WiFi password
108
+ * @return boolean - true if successful
109
+ *
110
+ */
111
+ wifiConnect(ssid: string, password: string): Promise<boolean>;
112
+ /**
113
+ * Disconnect WiFi
114
+ *
115
+ * @return boolean - true if successful
116
+ *
117
+ */
118
+ wifiDisconnect(): Promise<boolean>;
119
+ /**
120
+ * WiFiScan start
121
+ *
122
+ * @return boolean - true if successful
123
+ *
124
+ */
125
+ wifiScanStart(): Promise<boolean>;
126
+ /**
127
+ * WiFiScan get results
128
+ *
129
+ * @return boolean - false if unsuccessful, otherwise the results of the promise
130
+ *
131
+ */
132
+ wifiScanResults(): Promise<boolean | RaftOKFail | RaftWifiScanResults>;
133
+ getCachedSystemInfo(): RaftSystemInfo | null;
134
+ getCachedRaftName(): RaftFriendlyName | null;
135
+ getCachedWifiStatus(): RaftWifiConnStatus;
136
+ }