@canboat/canboatjs 3.16.3 → 3.16.4

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.
@@ -14,4 +14,5 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  export declare function ActisenseStream(this: any, options: any): any;
17
+ export declare function composeMessage(command: number, buffer: Buffer, len: number): Buffer<ArrayBuffer>;
17
18
  //# sourceMappingURL=actisense-serial.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"actisense-serial.d.ts","sourceRoot":"","sources":["../lib/actisense-serial.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA0CH,wBAAgB,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAkCtD"}
1
+ {"version":3,"file":"actisense-serial.d.ts","sourceRoot":"","sources":["../lib/actisense-serial.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA8CH,wBAAgB,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,OAkCtD;AAqbD,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,uBA+B1E"}
@@ -19,6 +19,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
19
19
  };
20
20
  Object.defineProperty(exports, "__esModule", { value: true });
21
21
  exports.ActisenseStream = ActisenseStream;
22
+ exports.composeMessage = composeMessage;
22
23
  const utilities_1 = require("./utilities");
23
24
  const util_1 = require("util");
24
25
  const stream_1 = require("stream");
@@ -35,13 +36,17 @@ const DLE = 0x10; /* Start pto encode a STX or ETX send DLE+STX or DLE+ETX */
35
36
  const ESC = 0x1b; /* Escape */
36
37
  /* Actisense message structure is:
37
38
 
38
- DLE STX <command> <len> [<data> ...] <checksum> DLE ETX
39
+ DLE STX <command> <len> [<data> ...] <checksum> DLE ETX
39
40
 
40
- <command> is a byte from the list below.
41
- In <data> any DLE characters are double escaped (DLE DLE).
42
- <len> encodes the unescaped length.
43
- <checksum> is such that the sum of all unescaped data bytes plus the command
44
- byte plus the length adds up to zero, modulo 256.
41
+ Byte stuffing: any DLE (0x10) byte appearing in <len>, <data>, or
42
+ <checksum> is duplicated on the wire (written as DLE DLE). The
43
+ leading DLE STX and trailing DLE ETX are framing markers and are
44
+ never stuffed.
45
+ <command> is a byte from the list below and is written as-is.
46
+ <len> is the payload length in bytes — the number of <data> bytes
47
+ before byte stuffing.
48
+ <checksum> is chosen so command + len + all unescaped <data> bytes +
49
+ checksum is 0 modulo 256.
45
50
  */
46
51
  const N2K_MSG_RECEIVED = 0x93; /* Receive standard N2K message */
47
52
  const N2K_MSG_SEND = 0x94; /* Send N2K message */
@@ -495,9 +500,11 @@ function composeMessage(command, buffer, len) {
495
500
  out.writeUint8(DLE);
496
501
  out.writeUint8(STX);
497
502
  out.writeUint8(command);
498
- const lenPos = out.byteIndex;
499
- out.writeUint8(0); //length. will update later
500
- let crc = command;
503
+ out.writeUint8(len);
504
+ if (len == DLE) {
505
+ out.writeUint8(DLE);
506
+ }
507
+ let crc = addUInt8(command, len);
501
508
  for (let i = 0; i < len; i++) {
502
509
  const c = buffer.readUInt8(i);
503
510
  if (c == DLE) {
@@ -506,12 +513,13 @@ function composeMessage(command, buffer, len) {
506
513
  out.writeUint8(c);
507
514
  crc = addUInt8(crc, c);
508
515
  }
509
- crc = addUInt8(crc, len);
510
- out.writeUint8(256 - crc);
516
+ const checksum = (256 - crc) & 0xff;
517
+ if (checksum == DLE) {
518
+ out.writeUint8(DLE);
519
+ }
520
+ out.writeUint8(checksum);
511
521
  out.writeUint8(DLE);
512
522
  out.writeUint8(ETX);
513
- out.view.buffer.writeUInt8(len, lenPos);
514
- //that.debug(`command ${out.view.buffer[2]} ${lenPos} ${len} ${out.view.buffer[lenPos]} ${out.view.buffer.length} ${out.byteIndex}`)
515
523
  return out.view.buffer.slice(0, out.byteIndex);
516
524
  }
517
525
  function parseInput(msg) {
@@ -1 +1 @@
1
- {"version":3,"file":"actisense-serial.js","sourceRoot":"","sources":["../lib/actisense-serial.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;;;;;AA0CH,0CAkCC;AAzED,2CAAyC;AACzC,+BAA+B;AAC/B,mCAAkC;AAClC,2CAA+C;AAC/C,mCAA+B;AAC/B,2CAA6C;AAC7C,mCAA6C;AAC7C,oDAAsB;AACtB,uCAA6C;AAE7C,qDAAqD;AAErD,MAAM,GAAG,GAAG,IAAI,CAAA,CAAC,kBAAkB;AACnC,MAAM,GAAG,GAAG,IAAI,CAAA,CAAC,gBAAgB;AACjC,MAAM,GAAG,GAAG,IAAI,CAAA,CAAC,2DAA2D;AAC5E,MAAM,GAAG,GAAG,IAAI,CAAA,CAAC,YAAY;AAE7B;;;;;;;;;EASE;AAEF,MAAM,gBAAgB,GAAG,IAAI,CAAA,CAAC,kCAAkC;AAChE,MAAM,YAAY,GAAG,IAAI,CAAA,CAAC,sBAAsB;AAChD,MAAM,gBAAgB,GAAG,IAAI,CAAA,CAAC,kCAAkC;AAChE,MAAM,YAAY,GAAG,IAAI,CAAA,CAAC,sBAAsB;AAEhD,MAAM,SAAS,GAAG,CAAC,CAAA;AACnB,MAAM,UAAU,GAAG,CAAC,CAAA;AACpB,MAAM,WAAW,GAAG,CAAC,CAAA;AAErB,MAAM,eAAe,GAAG,IAAI,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;AAE1D,SAAgB,eAAe,CAAY,OAAY;IACrD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,IAAK,eAAuB,CAAC,OAAO,CAAC,CAAA;IAC9C,CAAC;IAED,IAAI,CAAC,QAAQ,GAAG,IAAA,uBAAW,EAAC,mBAAmB,EAAE,OAAO,CAAC,CAAA;IACzD,IAAI,CAAC,KAAK,GAAG,IAAA,uBAAW,EAAC,4BAA4B,EAAE,OAAO,CAAC,CAAA;IAE/D,kBAAS,CAAC,IAAI,CAAC,IAAI,EAAE;QACnB,UAAU,EAAE,IAAI;KACjB,CAAC,CAAA;IAEF,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAA;IAElC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAA;IAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IAClB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACtB,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAA;IAE3B,IAAI,CAAC,YAAY,GAAG,2BAAmB,CAAA;IACvC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;QAC9B,IAAI,CAAC,YAAY,GAAG,gBAAC,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAA;IAC3E,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAA;IAE1C,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAA;IAC5C,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACtC,IAAI,CAAC,OAAO,CAAC,sBAAsB,GAAG,KAAK,CAAA;IAC7C,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAA;AACd,CAAC;AAED,IAAA,eAAQ,EAAC,eAAe,EAAE,kBAAS,CAAC,CAAA;AAEpC,eAAe,CAAC,SAAS,CAAC,KAAK,GAAG;IAChC,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACxB,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;IACpB,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;QAC7B,OAAM;IACR,CAAC;IAED,MAAM,iBAAiB,GACrB,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB;QACpD,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QAClE,CAAC;QACH,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAA;IACd,MAAM,gBAAgB,GACpB,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB;QACnD,CAAC,CAAC,CAAC,GAAW,EAAE,EAAE;YACd,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QACjE,CAAC;QACH,CAAC,CAAC,GAAG,EAAE,GAAE,CAAC,CAAA;IACd,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAA;IAE1C,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC/B,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;IACrB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;IACnB,IAAI,CAAC,KAAK,GAAG,SAAS,CAAA;IAEtB,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;QAC/C,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;IAC5B,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,iEAAiE;YACjE,MAAM,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;YAC5C,IAAI,CAAC,MAAM,GAAG,IAAI,UAAU,CAAC;gBAC3B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;gBACzB,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM;aAC1C,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,gBAAgB,CAAC,iCAAiC,CAAC,CAAA;YACnD,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YAClB,OAAM;QACR,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACtC,IAAI,CAAC;gBACH,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;YACtB,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACpB,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;YACrB,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,EAAE;gBAClC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,EAAE,CAAC,CAAA;gBAC/B,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;gBACzB,GAAG,GAAG,cAAc,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;gBACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACtB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC5D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAA;gBAC3D,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;oBACvC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;iBACpC,CAAC,CAAA;YACJ,CAAC,CAAA;YAED,MAAM,WAAW,GAAG,CAAC,GAAQ,EAAE,EAAE;gBAC/B,MAAM,IAAI,GAAG,IAAA,aAAK,EAAC,GAAG,CAAC,CAAA;gBACvB,MAAM,SAAS,GAAG,IAAA,2BAAe,EAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAA;gBACvE,IAAI,CAAC,QAAQ,CAAC,WAAW,SAAS,EAAE,CAAC,CAAA;gBACrC,IAAI,GAAG,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;gBAC/B,GAAG,GAAG,cAAc,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;gBACnD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACtB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC5D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAA;gBACjE,CAAC;gBACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,iBAAiB,EAAE;oBACvC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;iBACpC,CAAC,CAAA;YACJ,CAAC,CAAA;YAED,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC;iBACvD,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;YACvC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,EAAE;gBAClC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAW,EAAE,EAAE;oBACzC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBACtB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;4BAC5B,WAAW,CAAC,GAAG,CAAC,CAAA;wBAClB,CAAC;6BAAM,CAAC;4BACN,WAAW,CAAC,GAAG,CAAC,CAAA;wBAClB,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,MAAM,aAAa,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,iBAAiB,CAAC;iBACnE,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAA;YACvC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,EAAE;gBACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAQ,EAAE,EAAE;oBACtC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;wBACtB,WAAW,CAAC,GAAG,CAAC,CAAA;oBAClB,CAAC;gBACH,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;QAEzB,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,EAAE;YACnC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAC7B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAChB,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC1B,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC3B,gBAAgB,CAAC,yBAAyB,CAAC,CAAA;YAC3C,uBAAuB;YACvB,IAAI,CAAC,iBAAiB,EAAE,CAAA;QAC1B,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YAC1B,IAAI,CAAC;gBACH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;gBAC1B,iBAAiB,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;gBACxD,MAAM,GAAG,GAAG,cAAc,CACxB,YAAY,EACZ,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,EAC5B,eAAe,CAAC,MAAM,CACvB,CAAA;gBACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;gBAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBACtB,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;gBAClC,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAA;gBAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;oBACxC,YAAY,CAAC,IAAI,CAAC,CAAA;gBACpB,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,GAAG,EAAE;wBACd,IAAI,IAAI,CAAC,kBAAkB,KAAK,KAAK,EAAE,CAAC;4BACtC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;4BACtC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;4BAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;wBACxB,CAAC;oBACH,CAAC,EAAE,IAAI,CAAC,CAAA;gBACV,CAAC;YACH,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAC7B,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAClB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAC1B,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;AACH,CAAC,CAAA;AAED,eAAe,CAAC,SAAS,CAAC,iBAAiB,GAAG;IAC5C,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;QAC5E,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;QAChE,MAAM,GAAG,GAAG,8BAA8B,CACxC,IAAI,CAAC,cAAc,GAAG,IAAI,CAC3B,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAA;QACjB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACf,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAA;QAC3B,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;IACxD,CAAC;AACH,CAAC,CAAA;AAED,SAAS,QAAQ,CAAC,IAAS,EAAE,IAAY;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,sBAAsB;QACtB,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAS,EAAE,CAAM;IAClC,IAAI,QAAQ,GAAG,KAAK,CAAA;IAEpB,yEAAyE;IAEzE,IAAI,IAAI,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,QAAQ,GAAG,IAAI,CAAA;QACjB,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,IAAI,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC;oBACvC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;gBACzD,CAAC;qBAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,gBAAgB,EAAE,CAAC;oBAC9C,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;gBACzD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;YACrB,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACvB,CAAC;aAAM,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAA;YACrB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAA;QACzB,CAAC;aAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YAC5C,IAAI,CAAC,YAAY,EAAE,CAAA;YACnB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAA;YACjE,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;QACvB,CAAC;IACH,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACxB,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACxB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;YAC5C,IAAI,CAAC,YAAY,EAAE,CAAA;QACrB,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,GAAG,UAAU,CAAA;QACxB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,IAAS,EAAE,GAAW;IACzC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAA;IAClC,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;IACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAA;IAClB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC;AAED,SAAS,YAAY,CAAC,IAAS;IAC7B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IACxB,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAA;IAC/C,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAS;IACvC,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAA;IAChC,MAAM,UAAU,GAAG,uBAAuB,EAAE,CAAA;IAC5C,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IACzB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;IAC7B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAA;gBAClD,sBAAsB,CAAC,IAAI,CAAC,CAAA;YAC9B,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,iCAAiC,CAAA;gBAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAA;gBACvC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACjB,YAAY,CAAC,IAAI,CAAC,CAAA;YACpB,CAAC;QACH,CAAC;IACH,CAAC,EAAE,KAAK,CAAC,CAAA;AACX,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAS,EAAE,MAAc,EAAE,GAAW;IAC/D,IAAI,QAAQ,GAAG,CAAC,CAAA;IAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;IAEzB,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,gDAAgD,EAAE,OAAO,EAAE,GAAG,CAAC,CAAA;QAC1E,OAAM;IACR,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;QACpC,MAAM,EAAE,GAAG,IAAI,sBAAS,CAAC,MAAM,CAAC,CAAA;QAChC,MAAM,GAAG,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QAC/B,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA,CAAC,MAAM;QACvB,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QAClB,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;QACvB,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;QACxB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA,CAAC,KAAK;QACtB,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA,CAAC,KAAK;QACtB,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAA,CAAC,WAAW;QAC7B,EAAE,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAA;QACtB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QAE5C,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAA,CAAC,aAAa;QACzD,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAA;QACpC,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAC1C,yBAAyB;YACzB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,IAAI,CAAC,MAAM,GAAG,IAAI,gBAAO,CAAC,EAAE,CAAC,CAAA;YAC/B,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;YAClD,IAAI,EAAE,EAAE,CAAC;gBACP,IAAI,CAAC,KAAK,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAA;YACvC,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,iBAAiB;QACjB,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAA;QAC9B,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAA;IACpC,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACvB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;YACzB,UAAU,CAAC,GAAG,EAAE;gBACd,sBAAsB,CAAC,IAAI,CAAC,CAAA;YAC9B,CAAC,EAAE,IAAI,CAAC,CAAA;QACV,CAAC;aAAM,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;YACxB,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAA;YAC3B,MAAM,EAAE,GAAG,IAAI,oBAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAA;YAC3D,MAAM,EAAE,GAAG,IAAI,sBAAS,CAAC,EAAE,CAAC,CAAA;YAC5B,MAAM,IAAI,GAAa,EAAE,CAAA;YACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;gBAClC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC,CAAA;YAC5B,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;YAE/B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,GAAW,EAAE,EAAE;gBACjE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAA;YAChC,CAAC,CAAC,CAAA;YACF,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;QACxD,CAAC;aAAM,IAAI,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,iDAAiD;YACjD,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;gBAC5B,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,CAAC;oBACnC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC/C,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,IAAI,CAAC,CAAA;gBACpB,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAC5B,4BAA4B;YAC5B,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;gBACpD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;gBAC1D,IAAI,IAAI,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACzC,MAAM,SAAS,GAAG,kBAAkB,EAAE,CAAA;oBACtC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAA;oBACxB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;gBAC9B,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAA;gBAC/C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,KAAK,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;YAC1D,CAAC;QACH,CAAC;aAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;YAC9B,MAAM,WAAW,GAAG,oBAAoB,EAAE,CAAA;YAC1C,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;YAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QAChC,CAAC;aAAM,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;YAC/B,YAAY,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACxC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,EAAE,CAAC;QACpB,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;IACzB,CAAC;SAAM,CAAC;QACN,GAAG,IAAI,GAAG,CAAA;IACZ,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAS,EAAE,MAAc,EAAE,GAAW;IAC/D,IAAI,QAAQ,GAAG,CAAC,CAAA;IAEhB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,QAAQ,GAAG,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1C,CAAC;IAED,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAA;QACpD,OAAM;IACR,CAAC;IAED,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;QACjD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;QAC/B,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;YACjD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,MAAM,EAAE,GAAG,IAAI,oBAAO,CAAC,MAAM,CAAC,CAAA;IAC9B,MAAM,EAAE,GAAG,IAAI,sBAAS,CAAC,EAAE,CAAC,CAAA;IAE5B,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE;QACpB,GAAG,EAAE,EAAE,CAAC,SAAS,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;QACnE,GAAG,EAAE,EAAE,CAAC,SAAS,EAAE;QACnB,GAAG,EAAE,EAAE,CAAC,SAAS,EAAE;QACnB,SAAS,EAAE,EAAE,CAAC,UAAU,EAAE;KAC3B,CAAA;IACD,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,EAAE,CAAA;IAC1B,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,OAAO,CACL,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACxB,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG;QACvD,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC,CAAC;aACxC,MAAM,CAAC,UAAU,GAAG,EAAE,CAAC;YACtB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;YACxB,OAAO,GAAG,CAAA;QACZ,CAAC,EAAE,GAAG,CAAC;aACN,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1C,IAAI,CAAC,GAAG,CAAC,CACb,CAAA;AACH,CAAC;AAED,SAAS,cAAc,CAAC,OAAe,EAAE,MAAc,EAAE,GAAW;IAClE,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,MAAM,GAAG,GAAG,IAAI,sBAAS,CAAC,MAAM,CAAC,CAAA;IAEjC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACnB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACnB,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAA;IAEvB,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,CAAA;IAC5B,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA,CAAC,2BAA2B;IAC7C,IAAI,GAAG,GAAG,OAAO,CAAA;IAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;QAC7B,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACrB,CAAC;QACD,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACjB,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACxB,CAAC;IAED,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;IAExB,GAAG,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;IACzB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACnB,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IAEnB,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAEvC,oIAAoI;IAEpI,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,CAAA;AAChD,CAAC;AAED,SAAS,UAAU,CAAC,GAAW;IAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAChC,MAAM,EAAE,GAAG,IAAI,sBAAS,CAAC,MAAM,CAAC,CAAA;IAEhC,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAE9B,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACnB,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IAClB,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;IACvB,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;IACxB,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IAElB;;;MAGE;IAEF,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAA;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAA;AAC9C,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACnC,OAAO,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,oBAAoB;IAC3B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACnC,OAAO,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,uBAAuB;IAC9B,MAAM,GAAG,GAAG,IAAI,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IACnC,OAAO,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;AACnE,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IAC/B,MAAM,GAAG,GAAG,IAAI,sBAAS,CAAC,MAAM,CAAC,CAAA;IACjC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACpB,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACpB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA,CAAC,SAAS;IAE3B,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;IAC3B,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;IAE3B,MAAM,GAAG,GAAG,cAAc,CACxB,YAAY,EACZ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,EACvC,GAAG,CAAC,SAAS,CACd,CAAA;IAED,yCAAyC;IAEzC,OAAO,GAAG,CAAA;AACZ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;IAoBI;AAEJ,eAAe,CAAC,SAAS,CAAC,GAAG,GAAG;IAC9B,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IACrB,CAAC;AACH,CAAC,CAAA;AAED,eAAe,CAAC,SAAS,CAAC,UAAU,GAAG,UACrC,KAAU,EACV,QAAgB,EAChB,IAAS;IAET,IAAI,CAAC,KAAK,CAAC,YAAY,OAAO,KAAK,EAAE,CAAC,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IACrB,IAAI,EAAE,CAAA;AACR,CAAC,CAAA"}
1
+ {"version":3,"file":"actisense-serial.js","sourceRoot":"","sources":["../lib/actisense-serial.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=actisense-serial.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actisense-serial.test.d.ts","sourceRoot":"","sources":["../lib/actisense-serial.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const actisense_serial_1 = require("./actisense-serial");
4
+ const DLE = 0x10;
5
+ const STX = 0x02;
6
+ const ETX = 0x03;
7
+ const N2K_MSG_SEND = 0x94;
8
+ // Reference framing parser matching the NGT-1's byte-stuffing protocol.
9
+ // Returns the unescaped payload (command byte + body) extracted from a
10
+ // well-formed DLE/STX...DLE/ETX frame, or null if framing is broken.
11
+ function unframe(bytes) {
12
+ const out = [];
13
+ let i = 0;
14
+ if (bytes[i++] !== DLE || bytes[i++] !== STX)
15
+ return null;
16
+ while (i < bytes.length) {
17
+ const c = bytes[i++];
18
+ if (c === DLE) {
19
+ const next = bytes[i++];
20
+ if (next === ETX) {
21
+ // checksum is the last unescaped byte before DLE ETX
22
+ out.pop();
23
+ return Buffer.from(out);
24
+ }
25
+ if (next === DLE) {
26
+ out.push(DLE);
27
+ continue;
28
+ }
29
+ return null; // unexpected DLE escape
30
+ }
31
+ out.push(c);
32
+ }
33
+ return null; // never saw DLE ETX
34
+ }
35
+ describe('composeMessage DLE escaping', () => {
36
+ test('payload of exactly 16 bytes escapes the length byte (regression for unescaped len == DLE)', () => {
37
+ // The 126208 NMEA Command Group Function with two parameters produces
38
+ // a 10-byte data payload, which becomes a 16-byte framed body
39
+ // (1 prio + 3 pgn + 1 dst + 1 bytecount + 10 data). The body length
40
+ // 0x10 collides with the DLE escape byte. Without escaping, the NGT-1
41
+ // sees `94 10 02 ...` and resets framing on `DLE STX`, losing the
42
+ // command byte and the rest of the message.
43
+ const body = Buffer.from([
44
+ 0x02, 0x00, 0xed, 0x01, 0x10, 0x0a, 0x01, 0x0d, 0xf2, 0x01, 0xf8, 0x02,
45
+ 0x01, 0x2a, 0x0d, 0x01
46
+ ]);
47
+ expect(body.length).toBe(0x10);
48
+ const framed = (0, actisense_serial_1.composeMessage)(N2K_MSG_SEND, body, body.length);
49
+ // After the leading DLE STX command, the length byte 0x10 must be
50
+ // doubled so the receiver doesn't mistake it for a framing escape.
51
+ expect(framed[0]).toBe(DLE);
52
+ expect(framed[1]).toBe(STX);
53
+ expect(framed[2]).toBe(N2K_MSG_SEND);
54
+ expect(framed[3]).toBe(0x10); // length
55
+ expect(framed[4]).toBe(0x10); // escape — this is what the old code missed
56
+ });
57
+ test('payload of exactly 16 bytes round-trips through framing parser', () => {
58
+ const body = Buffer.from([
59
+ 0x02, 0x00, 0xed, 0x01, 0x10, 0x0a, 0x01, 0x0d, 0xf2, 0x01, 0xf8, 0x02,
60
+ 0x01, 0x2a, 0x0d, 0x01
61
+ ]);
62
+ const framed = (0, actisense_serial_1.composeMessage)(N2K_MSG_SEND, body, body.length);
63
+ const unframed = unframe(framed);
64
+ expect(unframed).not.toBeNull();
65
+ // unframed = [command, length, ...body]
66
+ expect(unframed[0]).toBe(N2K_MSG_SEND);
67
+ expect(unframed[1]).toBe(body.length);
68
+ expect(unframed.subarray(2)).toEqual(body);
69
+ });
70
+ test('checksum byte is escaped when it equals DLE', () => {
71
+ // Construct a body whose checksum collides with DLE.
72
+ // checksum = (256 - (command + len + sum(body))) mod 256
73
+ // For checksum = 0x10, need (command + len + sum(body)) mod 256 == 0xf0.
74
+ // command 0x94 (148) + len 1 + body[0] = 240 => body[0] = 91 (0x5b)
75
+ const body = Buffer.from([0x5b]);
76
+ const framed = (0, actisense_serial_1.composeMessage)(N2K_MSG_SEND, body, body.length);
77
+ // Trailing pattern: ... <escaped checksum> DLE ETX
78
+ // With escape: [..., 0x10, 0x10, 0x10, 0x03]
79
+ const tail = Array.from(framed.slice(framed.length - 4));
80
+ expect(tail).toEqual([0x10, 0x10, 0x10, 0x03]);
81
+ // Round-trip parse must still yield the original body and the
82
+ // computed checksum byte (0x10) without confusing the parser.
83
+ const unframed = unframe(framed);
84
+ expect(unframed).not.toBeNull();
85
+ expect(unframed[0]).toBe(N2K_MSG_SEND);
86
+ expect(unframed[1]).toBe(body.length);
87
+ expect(unframed.subarray(2)).toEqual(body);
88
+ });
89
+ test('payload with embedded DLE byte is escaped (existing behavior, regression guard)', () => {
90
+ const body = Buffer.from([0x01, DLE, 0x02]);
91
+ const framed = (0, actisense_serial_1.composeMessage)(N2K_MSG_SEND, body, body.length);
92
+ const unframed = unframe(framed);
93
+ expect(unframed).not.toBeNull();
94
+ expect(unframed[0]).toBe(N2K_MSG_SEND);
95
+ expect(unframed[1]).toBe(body.length);
96
+ expect(unframed.subarray(2)).toEqual(body);
97
+ });
98
+ });
99
+ //# sourceMappingURL=actisense-serial.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actisense-serial.test.js","sourceRoot":"","sources":["../lib/actisense-serial.test.ts"],"names":[],"mappings":";;AAAA,yDAAmD;AAEnD,MAAM,GAAG,GAAG,IAAI,CAAA;AAChB,MAAM,GAAG,GAAG,IAAI,CAAA;AAChB,MAAM,GAAG,GAAG,IAAI,CAAA;AAChB,MAAM,YAAY,GAAG,IAAI,CAAA;AAEzB,wEAAwE;AACxE,uEAAuE;AACvE,qEAAqE;AACrE,SAAS,OAAO,CAAC,KAAa;IAC5B,MAAM,GAAG,GAAa,EAAE,CAAA;IACxB,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAA;IACzD,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QACxB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;QACpB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAA;YACvB,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,qDAAqD;gBACrD,GAAG,CAAC,GAAG,EAAE,CAAA;gBACT,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACzB,CAAC;YACD,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;gBACjB,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACb,SAAQ;YACV,CAAC;YACD,OAAO,IAAI,CAAA,CAAC,wBAAwB;QACtC,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACb,CAAC;IACD,OAAO,IAAI,CAAA,CAAC,oBAAoB;AAClC,CAAC;AAED,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAI,CAAC,2FAA2F,EAAE,GAAG,EAAE;QACrG,sEAAsE;QACtE,8DAA8D;QAC9D,oEAAoE;QACpE,sEAAsE;QACtE,kEAAkE;QAClE,4CAA4C;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;YACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;SACvB,CAAC,CAAA;QACF,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAE9B,MAAM,MAAM,GAAG,IAAA,iCAAc,EAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAE9D,kEAAkE;QAClE,mEAAmE;QACnE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACpC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAC,SAAS;QACtC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA,CAAC,4CAA4C;IAC3E,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,gEAAgE,EAAE,GAAG,EAAE;QAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;YACvB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;YACtE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;SACvB,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,IAAA,iCAAc,EAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;QAEhC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;QAC/B,wCAAwC;QACxC,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACvC,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtC,MAAM,CAAC,QAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACvD,qDAAqD;QACrD,yDAAyD;QACzD,yEAAyE;QACzE,sEAAsE;QACtE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAChC,MAAM,MAAM,GAAG,IAAA,iCAAc,EAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAE9D,mDAAmD;QACnD,6CAA6C;QAC7C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QACxD,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAA;QAE9C,8DAA8D;QAC9D,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;QAChC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;QAC/B,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACvC,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtC,MAAM,CAAC,QAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,iFAAiF,EAAE,GAAG,EAAE;QAC3F,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAA;QAC3C,MAAM,MAAM,GAAG,IAAA,iCAAc,EAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAC9D,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;QAEhC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;QAC/B,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QACvC,MAAM,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtC,MAAM,CAAC,QAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,19 +1,18 @@
1
1
  /**
2
- * Minimal CAN socket wrapper using fs streams instead of uv_poll_t.
2
+ * Minimal CAN socket wrapper using uv_poll_t-based reads.
3
3
  *
4
- * The native addon (native/canSocket.cpp) opens a PF_CAN socket, binds it
5
- * to the interface, and returns the raw fd in blocking mode.
4
+ * The native addon (native/canSocket.cpp) opens PF_CAN sockets in non-blocking
5
+ * mode and exposes a CanPoller class that registers a uv_poll_t watcher on the
6
+ * read fd. When frames are readable, the watcher invokes a JS callback that
7
+ * drains all available frames via a non-blocking native read. Writes also use
8
+ * a non-blocking native write so neither direction ever occupies a libuv
9
+ * threadpool worker — this keeps the threadpool free for fs operations and
10
+ * lets process.exit() terminate cleanly without hanging on a blocked syscall.
6
11
  *
7
- * Node.js's net.Socket cannot wrap CAN fds (uv_guess_handle returns
8
- * UV_UNKNOWN_HANDLE). Instead we use fs.createReadStream which uses libuv's
9
- * threadpool-based uv_fs_read works on any fd, never stalls, and does not
10
- * use uv_poll_t.
11
- *
12
- * Reads and writes use separate CAN sockets bound to the same interface.
13
- * The read socket is blocking (for threadpool reads), the write socket is
14
- * O_NONBLOCK (to avoid stalling when the CAN bus has no listeners).
15
- * Separate fds prevent writeCanFrame from toggling O_NONBLOCK on the read
16
- * fd, which caused spurious ReadStream errors and reconnect cycles.
12
+ * Reads and writes use separate CAN sockets bound to the same interface:
13
+ * the read socket has the default (full) RX filter, the write socket has an
14
+ * empty RX filter so the kernel doesn't queue frames into a buffer nobody
15
+ * reads.
17
16
  *
18
17
  * Copyright 2025 Signal K contributors
19
18
  * Licensed under the Apache License, Version 2.0
@@ -29,13 +28,14 @@ export interface CanMessage {
29
28
  * start(), stop(), send(), removeAllListeners().
30
29
  */
31
30
  export declare class CanChannel extends EventEmitter {
32
- private readStream;
33
31
  private readFd;
34
32
  private writeFd;
35
- private remainder;
33
+ private poller;
36
34
  private stopped;
35
+ private exitHandler;
37
36
  constructor(ifname: string);
38
37
  start(): void;
38
+ private onReadable;
39
39
  stop(): void;
40
40
  send(msg: {
41
41
  id: number;
@@ -1 +1 @@
1
- {"version":3,"file":"canSocket.d.ts","sourceRoot":"","sources":["../lib/canSocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAwBrC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,UAAU,CAA0B;IAC5C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,OAAO,CAAiB;gBAEpB,MAAM,EAAE,MAAM;IAc1B,KAAK,IAAI,IAAI;IAuCb,IAAI,IAAI,IAAI;IAUZ,IAAI,CAAC,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAgB7D"}
1
+ {"version":3,"file":"canSocket.d.ts","sourceRoot":"","sources":["../lib/canSocket.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AAkCrC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;;GAIG;AACH,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,WAAW,CAA4B;gBAEnC,MAAM,EAAE,MAAM;IAqB1B,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,UAAU;IA6BlB,IAAI,IAAI,IAAI;IAqBZ,IAAI,CAAC,GAAG,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAgB7D"}
package/dist/canSocket.js CHANGED
@@ -1,20 +1,19 @@
1
1
  "use strict";
2
2
  /**
3
- * Minimal CAN socket wrapper using fs streams instead of uv_poll_t.
3
+ * Minimal CAN socket wrapper using uv_poll_t-based reads.
4
4
  *
5
- * The native addon (native/canSocket.cpp) opens a PF_CAN socket, binds it
6
- * to the interface, and returns the raw fd in blocking mode.
5
+ * The native addon (native/canSocket.cpp) opens PF_CAN sockets in non-blocking
6
+ * mode and exposes a CanPoller class that registers a uv_poll_t watcher on the
7
+ * read fd. When frames are readable, the watcher invokes a JS callback that
8
+ * drains all available frames via a non-blocking native read. Writes also use
9
+ * a non-blocking native write so neither direction ever occupies a libuv
10
+ * threadpool worker — this keeps the threadpool free for fs operations and
11
+ * lets process.exit() terminate cleanly without hanging on a blocked syscall.
7
12
  *
8
- * Node.js's net.Socket cannot wrap CAN fds (uv_guess_handle returns
9
- * UV_UNKNOWN_HANDLE). Instead we use fs.createReadStream which uses libuv's
10
- * threadpool-based uv_fs_read works on any fd, never stalls, and does not
11
- * use uv_poll_t.
12
- *
13
- * Reads and writes use separate CAN sockets bound to the same interface.
14
- * The read socket is blocking (for threadpool reads), the write socket is
15
- * O_NONBLOCK (to avoid stalling when the CAN bus has no listeners).
16
- * Separate fds prevent writeCanFrame from toggling O_NONBLOCK on the read
17
- * fd, which caused spurious ReadStream errors and reconnect cycles.
13
+ * Reads and writes use separate CAN sockets bound to the same interface:
14
+ * the read socket has the default (full) RX filter, the write socket has an
15
+ * empty RX filter so the kernel doesn't queue frames into a buffer nobody
16
+ * reads.
18
17
  *
19
18
  * Copyright 2025 Signal K contributors
20
19
  * Licensed under the Apache License, Version 2.0
@@ -28,16 +27,19 @@ const CAN_EFF_MASK = 0x1fffffff;
28
27
  const CAN_FRAME_SIZE = 16; // sizeof(struct can_frame)
29
28
  const CAN_DATA_OFFSET = 8;
30
29
  let native;
30
+ let nativeLoadError;
31
31
  try {
32
32
  // eslint-disable-next-line @typescript-eslint/no-require-imports
33
33
  native = require('../build/Release/canSocket.node');
34
34
  }
35
- catch (_e) {
35
+ catch (releaseErr) {
36
36
  try {
37
37
  // eslint-disable-next-line @typescript-eslint/no-require-imports
38
38
  native = require('../build/Debug/canSocket.node');
39
39
  }
40
- catch (_e) { }
40
+ catch (_debugErr) {
41
+ nativeLoadError = releaseErr;
42
+ }
41
43
  }
42
44
  /**
43
45
  * Drop-in replacement for socketcan's channel object.
@@ -45,63 +47,81 @@ catch (_e) {
45
47
  * start(), stop(), send(), removeAllListeners().
46
48
  */
47
49
  class CanChannel extends events_1.EventEmitter {
48
- readStream = null;
49
50
  readFd;
50
51
  writeFd;
51
- remainder = Buffer.alloc(0);
52
+ poller = null;
52
53
  stopped = false;
54
+ exitHandler = null;
53
55
  constructor(ifname) {
54
56
  super();
55
57
  if (native === undefined) {
56
- throw new Error('Failed to load native canSocket module');
58
+ const detail = nativeLoadError ? `: ${nativeLoadError.message}` : '';
59
+ throw new Error(`Failed to load native canSocket module${detail}`);
57
60
  }
58
- this.readFd = native.openCanSocket(ifname);
61
+ this.readFd = native.openCanReadSocket(ifname);
59
62
  try {
60
- this.writeFd = native.openCanSocketNonBlock(ifname);
63
+ this.writeFd = native.openCanWriteSocket(ifname);
61
64
  }
62
65
  catch (e) {
63
- (0, fs_1.close)(this.readFd, () => { });
66
+ (0, fs_1.closeSync)(this.readFd);
64
67
  throw e;
65
68
  }
69
+ // Defensive: if the process exits without an explicit stop(), the
70
+ // CanPoller's uv_poll_t handle will keep the libuv loop alive and
71
+ // process.exit() may hesitate. Clean up on 'exit' as a safety net.
72
+ this.exitHandler = () => this.stop();
73
+ process.on('exit', this.exitHandler);
66
74
  }
67
75
  start() {
68
76
  this.stopped = false;
69
- this.readStream = (0, fs_1.createReadStream)('', {
70
- fd: this.readFd,
71
- autoClose: false,
72
- highWaterMark: CAN_FRAME_SIZE * 64
73
- });
74
- this.readStream.on('data', (chunk) => {
75
- this.remainder = Buffer.concat([this.remainder, chunk]);
76
- while (this.remainder.length >= CAN_FRAME_SIZE) {
77
- const frame = this.remainder.subarray(0, CAN_FRAME_SIZE);
78
- this.remainder = this.remainder.subarray(CAN_FRAME_SIZE);
79
- const rawId = frame.readUInt32LE(0);
80
- const id = rawId & CAN_EFF_MASK;
81
- const dlc = frame[4];
82
- const data = Buffer.from(frame.subarray(CAN_DATA_OFFSET, CAN_DATA_OFFSET + dlc));
83
- this.emit('onMessage', { id, data });
84
- }
85
- });
86
- this.readStream.on('error', (err) => {
77
+ this.poller = new native.CanPoller(this.readFd, () => this.onReadable());
78
+ }
79
+ onReadable() {
80
+ if (this.stopped) {
81
+ return;
82
+ }
83
+ let frames;
84
+ try {
85
+ frames = native.readCanFrames(this.readFd);
86
+ }
87
+ catch (err) {
87
88
  if (!this.stopped) {
88
89
  this.emit('onStopped', err.message);
89
90
  }
90
- });
91
- this.readStream.on('close', () => {
92
- if (!this.stopped) {
93
- this.emit('onStopped', 'closed');
91
+ return;
92
+ }
93
+ for (const frame of frames) {
94
+ if (frame.length < CAN_FRAME_SIZE) {
95
+ continue;
94
96
  }
95
- });
97
+ const rawId = frame.readUInt32LE(0);
98
+ const id = rawId & CAN_EFF_MASK;
99
+ const dlc = frame[4];
100
+ const data = Buffer.from(frame.subarray(CAN_DATA_OFFSET, CAN_DATA_OFFSET + dlc));
101
+ this.emit('onMessage', { id, data });
102
+ }
96
103
  }
97
104
  stop() {
105
+ if (this.stopped) {
106
+ return;
107
+ }
98
108
  this.stopped = true;
99
- if (this.readStream) {
100
- this.readStream.destroy();
101
- this.readStream = null;
109
+ if (this.exitHandler) {
110
+ process.removeListener('exit', this.exitHandler);
111
+ this.exitHandler = null;
112
+ }
113
+ if (this.poller) {
114
+ this.poller.close();
115
+ this.poller = null;
116
+ }
117
+ try {
118
+ (0, fs_1.closeSync)(this.readFd);
119
+ }
120
+ catch (_e) { }
121
+ try {
122
+ (0, fs_1.closeSync)(this.writeFd);
102
123
  }
103
- (0, fs_1.close)(this.readFd, () => { });
104
- (0, fs_1.close)(this.writeFd, () => { });
124
+ catch (_e) { }
105
125
  }
106
126
  send(msg) {
107
127
  if (this.stopped) {
@@ -1 +1 @@
1
- {"version":3,"file":"canSocket.js","sourceRoot":"","sources":["../lib/canSocket.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"canSocket.js","sourceRoot":"","sources":["../lib/canSocket.ts"],"names":[],"mappings":"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"}
package/dist/toPgn.js CHANGED
@@ -489,7 +489,7 @@ fieldTypeWriters['String with start/stop byte'] = (pgn, field, value, bs) => {
489
489
  bs.writeUint8(0x01);
490
490
  };
491
491
  fieldTypeWriters[RES_STRINGLAU] = (pgn, field, value, bs) => {
492
- if (pgn === 129041 && field.Name === 'AtoN Name') {
492
+ if (pgn === 129041 && field.Name === 'AtoN Name' && value) {
493
493
  if (value.length > 18) {
494
494
  value = value.substring(0, 18);
495
495
  }