jooby-codec 1.0.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 (92) hide show
  1. package/dist/BinaryBuffer.d.ts +44 -0
  2. package/dist/BinaryBuffer.js +128 -0
  3. package/dist/BinaryBuffer.js.map +1 -0
  4. package/dist/Command.d.ts +42 -0
  5. package/dist/Command.js +80 -0
  6. package/dist/Command.js.map +1 -0
  7. package/dist/CommandBinaryBuffer.d.ts +45 -0
  8. package/dist/CommandBinaryBuffer.js +135 -0
  9. package/dist/CommandBinaryBuffer.js.map +1 -0
  10. package/dist/commands/downlink/CorrectTime2000.d.ts +49 -0
  11. package/dist/commands/downlink/CorrectTime2000.js +61 -0
  12. package/dist/commands/downlink/CorrectTime2000.js.map +1 -0
  13. package/dist/commands/downlink/SetTime2000.d.ts +45 -0
  14. package/dist/commands/downlink/SetTime2000.js +60 -0
  15. package/dist/commands/downlink/SetTime2000.js.map +1 -0
  16. package/dist/commands/downlink/index.d.ts +7 -0
  17. package/dist/commands/downlink/index.js +8 -0
  18. package/dist/commands/downlink/index.js.map +1 -0
  19. package/dist/commands/index.d.ts +7 -0
  20. package/dist/commands/index.js +8 -0
  21. package/dist/commands/index.js.map +1 -0
  22. package/dist/commands/uplink/CorrectTime2000.d.ts +37 -0
  23. package/dist/commands/uplink/CorrectTime2000.js +53 -0
  24. package/dist/commands/uplink/CorrectTime2000.js.map +1 -0
  25. package/dist/commands/uplink/DataDayMul.d.ts +20 -0
  26. package/dist/commands/uplink/DataDayMul.js +41 -0
  27. package/dist/commands/uplink/DataDayMul.js.map +1 -0
  28. package/dist/commands/uplink/DataHourMul.d.ts +11 -0
  29. package/dist/commands/uplink/DataHourMul.js +77 -0
  30. package/dist/commands/uplink/DataHourMul.js.map +1 -0
  31. package/dist/commands/uplink/ExAbsDayMul.d.ts +11 -0
  32. package/dist/commands/uplink/ExAbsDayMul.js +60 -0
  33. package/dist/commands/uplink/ExAbsDayMul.js.map +1 -0
  34. package/dist/commands/uplink/ExAbsHourMul.d.ts +11 -0
  35. package/dist/commands/uplink/ExAbsHourMul.js +92 -0
  36. package/dist/commands/uplink/ExAbsHourMul.js.map +1 -0
  37. package/dist/commands/uplink/GetCurrentMul.d.ts +24 -0
  38. package/dist/commands/uplink/GetCurrentMul.js +35 -0
  39. package/dist/commands/uplink/GetCurrentMul.js.map +1 -0
  40. package/dist/commands/uplink/NewEvent.d.ts +18 -0
  41. package/dist/commands/uplink/NewEvent.js +101 -0
  42. package/dist/commands/uplink/NewEvent.js.map +1 -0
  43. package/dist/commands/uplink/SetTime2000.d.ts +37 -0
  44. package/dist/commands/uplink/SetTime2000.js +53 -0
  45. package/dist/commands/uplink/SetTime2000.js.map +1 -0
  46. package/dist/commands/uplink/Time2000.d.ts +41 -0
  47. package/dist/commands/uplink/Time2000.js +56 -0
  48. package/dist/commands/uplink/Time2000.js.map +1 -0
  49. package/dist/commands/uplink/index.d.ts +13 -0
  50. package/dist/commands/uplink/index.js +14 -0
  51. package/dist/commands/uplink/index.js.map +1 -0
  52. package/dist/constants/events.d.ts +16 -0
  53. package/dist/constants/events.js +17 -0
  54. package/dist/constants/events.js.map +1 -0
  55. package/dist/constants/general.d.ts +1 -0
  56. package/dist/constants/general.js +2 -0
  57. package/dist/constants/general.js.map +1 -0
  58. package/dist/constants/index.d.ts +1 -0
  59. package/dist/constants/index.js +2 -0
  60. package/dist/constants/index.js.map +1 -0
  61. package/dist/index.d.ts +4 -0
  62. package/dist/index.js +5 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/utils/getBitArrayFromNumber.d.ts +14 -0
  65. package/dist/utils/getBitArrayFromNumber.js +15 -0
  66. package/dist/utils/getBitArrayFromNumber.js.map +1 -0
  67. package/dist/utils/getBytesFromHex.d.ts +11 -0
  68. package/dist/utils/getBytesFromHex.js +23 -0
  69. package/dist/utils/getBytesFromHex.js.map +1 -0
  70. package/dist/utils/getHexFromBytes.d.ts +27 -0
  71. package/dist/utils/getHexFromBytes.js +22 -0
  72. package/dist/utils/getHexFromBytes.js.map +1 -0
  73. package/dist/utils/getIntFromBitString.d.ts +6 -0
  74. package/dist/utils/getIntFromBitString.js +6 -0
  75. package/dist/utils/getIntFromBitString.js.map +1 -0
  76. package/dist/utils/header.d.ts +13 -0
  77. package/dist/utils/header.js +62 -0
  78. package/dist/utils/header.js.map +1 -0
  79. package/dist/utils/index.d.ts +2 -0
  80. package/dist/utils/index.js +3 -0
  81. package/dist/utils/index.js.map +1 -0
  82. package/dist/utils/message.d.ts +27 -0
  83. package/dist/utils/message.js +101 -0
  84. package/dist/utils/message.js.map +1 -0
  85. package/dist/utils/roundNumber.d.ts +2 -0
  86. package/dist/utils/roundNumber.js +5 -0
  87. package/dist/utils/roundNumber.js.map +1 -0
  88. package/dist/utils/time.d.ts +14 -0
  89. package/dist/utils/time.js +17 -0
  90. package/dist/utils/time.js.map +1 -0
  91. package/package.json +78 -0
  92. package/readme.md +145 -0
@@ -0,0 +1,44 @@
1
+ import { IHexFormatOptions } from './utils/getHexFromBytes.js';
2
+ /**
3
+ * Byte array manipulation.
4
+ */
5
+ declare class BinaryBuffer {
6
+ data: ArrayBuffer;
7
+ offset: number;
8
+ isLittleEndian: boolean;
9
+ /**
10
+ * Create a buffer stream.
11
+ *
12
+ * @param data - the instance of Uint8Array or ArrayBuffer size
13
+ * @param isLittleEndian - if true then little endian will be used, big endian otherwise
14
+ */
15
+ constructor(dataOrLength: Uint8Array | number | string, isLittleEndian?: boolean);
16
+ toHex(options?: IHexFormatOptions): string;
17
+ toUint8Array(): Uint8Array;
18
+ get size(): number;
19
+ get isEmpty(): boolean;
20
+ get bytesLeft(): number;
21
+ get position(): number;
22
+ seek(position: number): void;
23
+ setInt8(value: number): void;
24
+ getInt8(): number;
25
+ setUint8(value: number): void;
26
+ getUint8(): number;
27
+ setInt16(number: number, isLittleEndian?: boolean): void;
28
+ getInt16(isLittleEndian?: boolean): number;
29
+ setUint16(value: number, isLittleEndian?: boolean): void;
30
+ getUint16(isLittleEndian?: boolean): number;
31
+ setInt32(value: number, isLittleEndian?: boolean): void;
32
+ getInt32(isLittleEndian?: boolean): number;
33
+ setUint32(value: number, isLittleEndian?: boolean): void;
34
+ getUint32(isLittleEndian?: boolean): number;
35
+ /**
36
+ * Get bytes from start to offset.
37
+ *
38
+ * @param offset - current offset by default
39
+ *
40
+ * @returns sliced byte array
41
+ */
42
+ getBytesToOffset(offset?: number): Uint8Array;
43
+ }
44
+ export default BinaryBuffer;
@@ -0,0 +1,128 @@
1
+ import getBytesFromHex from './utils/getBytesFromHex.js';
2
+ import getHexFromBytes from './utils/getHexFromBytes.js';
3
+ // bytes amount
4
+ const INT8_SIZE = 1;
5
+ const INT16_SIZE = 2;
6
+ const INT32_SIZE = 4;
7
+ const createView = (buffer, numberSize) => {
8
+ if (buffer.offset + numberSize > buffer.data.byteLength) {
9
+ throw new Error('Invalid buffer size.');
10
+ }
11
+ return new DataView(buffer.data, buffer.offset, numberSize);
12
+ };
13
+ /**
14
+ * Byte array manipulation.
15
+ */
16
+ class BinaryBuffer {
17
+ /**
18
+ * Create a buffer stream.
19
+ *
20
+ * @param data - the instance of Uint8Array or ArrayBuffer size
21
+ * @param isLittleEndian - if true then little endian will be used, big endian otherwise
22
+ */
23
+ constructor(dataOrLength, isLittleEndian = true) {
24
+ if (typeof dataOrLength === 'number') {
25
+ this.data = new ArrayBuffer(dataOrLength);
26
+ }
27
+ else if (typeof dataOrLength === 'string') {
28
+ this.data = getBytesFromHex(dataOrLength).buffer;
29
+ }
30
+ else {
31
+ this.data = dataOrLength.buffer;
32
+ }
33
+ this.offset = 0;
34
+ this.isLittleEndian = isLittleEndian;
35
+ }
36
+ toHex(options = {}) {
37
+ return getHexFromBytes(this.toUint8Array(), options);
38
+ }
39
+ toUint8Array() {
40
+ return new Uint8Array(this.data);
41
+ }
42
+ get size() {
43
+ return this.data.byteLength;
44
+ }
45
+ get isEmpty() {
46
+ return this.data.byteLength - this.offset === 0;
47
+ }
48
+ get bytesLeft() {
49
+ return this.data.byteLength - this.offset;
50
+ }
51
+ get position() {
52
+ return this.offset;
53
+ }
54
+ seek(position) {
55
+ if (position < 0 || position >= this.data.byteLength) {
56
+ throw new Error('Invalid position.');
57
+ }
58
+ this.offset = position;
59
+ }
60
+ setInt8(value) {
61
+ const view = createView(this, INT8_SIZE);
62
+ view.setInt8(0, value);
63
+ this.offset += INT8_SIZE;
64
+ }
65
+ getInt8() {
66
+ const result = createView(this, INT8_SIZE).getInt8(0);
67
+ this.offset += INT8_SIZE;
68
+ return result;
69
+ }
70
+ setUint8(value) {
71
+ createView(this, INT8_SIZE).setUint8(0, value);
72
+ this.offset += INT8_SIZE;
73
+ }
74
+ getUint8() {
75
+ const result = createView(this, INT8_SIZE).getUint8(0);
76
+ this.offset += INT8_SIZE;
77
+ return result;
78
+ }
79
+ setInt16(number, isLittleEndian = this.isLittleEndian) {
80
+ createView(this, INT16_SIZE).setInt16(0, number, isLittleEndian);
81
+ this.offset += INT16_SIZE;
82
+ }
83
+ getInt16(isLittleEndian = this.isLittleEndian) {
84
+ const result = createView(this, INT16_SIZE).getInt16(0, isLittleEndian);
85
+ this.offset += INT16_SIZE;
86
+ return result;
87
+ }
88
+ setUint16(value, isLittleEndian = this.isLittleEndian) {
89
+ createView(this, INT16_SIZE).setUint16(0, value, isLittleEndian);
90
+ this.offset += INT16_SIZE;
91
+ }
92
+ getUint16(isLittleEndian = this.isLittleEndian) {
93
+ const result = createView(this, INT16_SIZE).getUint16(0, isLittleEndian);
94
+ this.offset += INT16_SIZE;
95
+ return result;
96
+ }
97
+ setInt32(value, isLittleEndian = this.isLittleEndian) {
98
+ createView(this, INT32_SIZE).setInt32(0, value, isLittleEndian);
99
+ this.offset += INT32_SIZE;
100
+ }
101
+ getInt32(isLittleEndian = this.isLittleEndian) {
102
+ const result = createView(this, INT32_SIZE).getInt32(0, isLittleEndian);
103
+ this.offset += INT32_SIZE;
104
+ return result;
105
+ }
106
+ setUint32(value, isLittleEndian = this.isLittleEndian) {
107
+ createView(this, INT32_SIZE).setUint32(0, value, isLittleEndian);
108
+ this.offset += INT32_SIZE;
109
+ }
110
+ getUint32(isLittleEndian = this.isLittleEndian) {
111
+ const result = createView(this, INT32_SIZE).getUint32(0, isLittleEndian);
112
+ this.offset += INT32_SIZE;
113
+ return result;
114
+ }
115
+ /**
116
+ * Get bytes from start to offset.
117
+ *
118
+ * @param offset - current offset by default
119
+ *
120
+ * @returns sliced byte array
121
+ */
122
+ getBytesToOffset(offset = this.offset) {
123
+ const bytes = this.toUint8Array();
124
+ return bytes.slice(0, offset);
125
+ }
126
+ }
127
+ export default BinaryBuffer;
128
+ //# sourceMappingURL=BinaryBuffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BinaryBuffer.js","sourceRoot":"","sources":["../src/BinaryBuffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { IHexFormatOptions } from './utils/getHexFromBytes.js';
2
+ /**
3
+ * private
4
+ */
5
+ declare class Command {
6
+ static id: number;
7
+ static isUplink: boolean;
8
+ static title: string;
9
+ parameters: unknown;
10
+ /** Get command ID in hex format. */
11
+ static getId(): string;
12
+ /** Get command ID and title. */
13
+ static getName(): string;
14
+ /**
15
+ * Parse header with body.
16
+ * Should not be used directly, only from Command child.
17
+ *
18
+ * @param data command in binary form
19
+ * @param commandsById
20
+ *
21
+ * @returns command instance
22
+ */
23
+ /**
24
+ * Build header with body.
25
+ *
26
+ * @param id command id
27
+ * @param commandData command binary data
28
+ * @returns merged data
29
+ */
30
+ static toBytes(id: number, commandData: Uint8Array): Uint8Array;
31
+ /** Get command parameters. */
32
+ getParameters(): unknown;
33
+ toBytes(): Uint8Array;
34
+ toHex(options?: IHexFormatOptions): string;
35
+ /**
36
+ * Returns the command in JSON format.
37
+ *
38
+ * @returns JSON string contains current parameters
39
+ */
40
+ toJson(): string;
41
+ }
42
+ export default Command;
@@ -0,0 +1,80 @@
1
+ import * as header from './utils/header.js';
2
+ import getHexFromBytes from './utils/getHexFromBytes.js';
3
+ /**
4
+ * private
5
+ */
6
+ class Command {
7
+ /** Get command ID in hex format. */
8
+ static getId() {
9
+ return `0x${this.id.toString(16).padStart(2, '0')}`;
10
+ }
11
+ /** Get command ID and title. */
12
+ static getName() {
13
+ return `${this.isUplink ? 'uplink' : 'downlink'} command ${this.getId()}:${this.title}`;
14
+ }
15
+ /**
16
+ * Parse header with body.
17
+ * Should not be used directly, only from Command child.
18
+ *
19
+ * @param data command in binary form
20
+ * @param commandsById
21
+ *
22
+ * @returns command instance
23
+ */
24
+ // static fromBytes ( data: Uint8Array, commandsById: any ): any {
25
+ // const headerData = header.fromBytes(data);
26
+ // if ( headerData.headerSize + headerData.commandSize < data.length ) {
27
+ // throw new Error(
28
+ // `Wrong header. Header size: ${headerData.headerSize}, command size: ${headerData.commandSize}, buffer size: ${data.length}.`
29
+ // );
30
+ // }
31
+ // const command = commandsById[headerData.commandId];
32
+ // if ( !command ) {
33
+ // throw new Error(
34
+ // `Unsupported command with id: ${headerData.commandId}.`
35
+ // );
36
+ // }
37
+ // // eslint-disable-next-line @typescript-eslint/no-unsafe-call
38
+ // return command.fromBytes(
39
+ // data.slice(headerData.headerSize, headerData.headerSize + headerData.commandSize)
40
+ // );
41
+ // }
42
+ /**
43
+ * Build header with body.
44
+ *
45
+ * @param id command id
46
+ * @param commandData command binary data
47
+ * @returns merged data
48
+ */
49
+ static toBytes(id, commandData) {
50
+ const headerData = header.toBytes(id, commandData.length);
51
+ const resultData = new Uint8Array(headerData.length + commandData.length);
52
+ resultData.set(headerData);
53
+ resultData.set(commandData, headerData.length);
54
+ return resultData;
55
+ }
56
+ /** Get command parameters. */
57
+ getParameters() {
58
+ return this.parameters;
59
+ }
60
+ // eslint-disable-next-line class-methods-use-this
61
+ toBytes() {
62
+ throw new Error('not implemented!');
63
+ }
64
+ toHex(options = {}) {
65
+ return getHexFromBytes(this.toBytes(), options);
66
+ }
67
+ /**
68
+ * Returns the command in JSON format.
69
+ *
70
+ * @returns JSON string contains current parameters
71
+ */
72
+ toJson() {
73
+ return JSON.stringify(this.getParameters());
74
+ }
75
+ }
76
+ Command.id = 0;
77
+ Command.isUplink = false;
78
+ Command.title = '';
79
+ export default Command;
80
+ //# sourceMappingURL=Command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Command.js","sourceRoot":"","sources":["../src/Command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,eAAoC,MAAM,4BAA4B,CAAC;AAG9E;;GAEG;AACH,MAAM,OAAO;IAST,oCAAoC;IACpC,MAAM,CAAC,KAAK;QACR,OAAO,KAAK,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IACxD,CAAC;IAED,gCAAgC;IAChC,MAAM,CAAC,OAAO;QACV,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,YAAY,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;IAC5F,CAAC;IAGD;;;;;;;;OAQG;IACH,kEAAkE;IAClE,iDAAiD;IAEjD,4EAA4E;IAC5E,2BAA2B;IAC3B,2IAA2I;IAC3I,aAAa;IACb,QAAQ;IAER,0DAA0D;IAE1D,wBAAwB;IACxB,2BAA2B;IAC3B,sEAAsE;IACtE,aAAa;IACb,QAAQ;IAER,oEAAoE;IACpE,gCAAgC;IAChC,4FAA4F;IAC5F,SAAS;IACT,IAAI;IAGJ;;;;;;OAMG;IACH,MAAM,CAAC,OAAO,CAAG,EAAU,EAAE,WAAuB;QAChD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAC1D,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAE1E,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3B,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QAE/C,OAAO,UAAU,CAAC;IACtB,CAAC;IAED,8BAA8B;IAC9B,aAAa;QACT,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IAED,kDAAkD;IAClD,OAAO;QACH,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,CAAG,UAA6B,EAAE;QACnC,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IAED;;;;OAIG;IACH,MAAM;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;IAChD,CAAC;;AA1FM,UAAE,GAAG,CAAC,CAAC;AAEP,gBAAQ,GAAG,KAAK,CAAC;AAEjB,aAAK,GAAG,EAAE,CAAC;AA0FtB,eAAe,OAAO,CAAC"}
@@ -0,0 +1,45 @@
1
+ import BinaryBuffer from './BinaryBuffer.js';
2
+ /**
3
+ * Command specific byte array manipulation.
4
+ */
5
+ declare class CommandBinaryBuffer extends BinaryBuffer {
6
+ getExtendedValue(): number;
7
+ setExtendedValue(value: number): void;
8
+ /**
9
+ * Get array of channel indexes.
10
+ *
11
+ * @param short - get 4 channels or more
12
+ */
13
+ getChannels(short: boolean): Array<number>;
14
+ /**
15
+ * Set array of channel indexes.
16
+ *
17
+ */
18
+ setChannels(channels: Array<any>): void;
19
+ /**
20
+ * Retrieve device time from byte array.
21
+ *
22
+ * @example
23
+ * ['00101111', '10010111'] -> [47, 151] will be '2023-12-23'
24
+ *
25
+ * @returns Date object instance
26
+ */
27
+ getDate(): Date;
28
+ /**
29
+ * Convert date or seconds to bytes.
30
+ * '2023-12-23' will be 0010111-1100-10111, so bytes: ['00101111', '10010111'] -> [47, 151]
31
+ */
32
+ setDate(dateOrTime: Date | number): void;
33
+ /**
34
+ * Retrieve device time from byte array.
35
+ *
36
+ * @example
37
+ * 0xb8 = 0b10111000 will be {hours: 0b101, hour: 0b11000} i.e. {hours: 5, hour: 24}
38
+ */
39
+ getHours(): {
40
+ hours: number;
41
+ hour: number;
42
+ };
43
+ setHours(hour: number, hours: number): void;
44
+ }
45
+ export default CommandBinaryBuffer;
@@ -0,0 +1,135 @@
1
+ import BinaryBuffer from './BinaryBuffer.js';
2
+ import { getDateFromSeconds } from './utils/time.js';
3
+ const INITIAL_YEAR = 2000;
4
+ const MONTH_BIT_SIZE = 4;
5
+ const DATE_BIT_SIZE = 5;
6
+ const YEAR_START_INDEX = 1;
7
+ const CHANNELS_FULL_MASK = [0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40];
8
+ const CHANNELS_SHORT_MASK = [0x01, 0x02, 0x04, 0x08];
9
+ /**
10
+ * Command specific byte array manipulation.
11
+ */
12
+ class CommandBinaryBuffer extends BinaryBuffer {
13
+ getExtendedValue() {
14
+ let value = 0;
15
+ let extended = 1;
16
+ // byte offset
17
+ let position = 0;
18
+ while (extended && this.offset <= this.data.byteLength) {
19
+ const byte = this.getUint8();
20
+ extended = byte & 0x80;
21
+ value += (byte & 0x7f) << (7 * position);
22
+ ++position;
23
+ }
24
+ return value;
25
+ }
26
+ setExtendedValue(value) {
27
+ if (value === 0) {
28
+ this.setUint8(0);
29
+ return;
30
+ }
31
+ const data = [];
32
+ let encodedValue = value;
33
+ while (encodedValue) {
34
+ data.push(0x80 | (encodedValue & 0x7f));
35
+ encodedValue >>= 7;
36
+ }
37
+ const lastByte = data.pop();
38
+ if (lastByte) {
39
+ // clear EXTENDED bit flag for last value
40
+ data.push(lastByte & 0x7f);
41
+ }
42
+ data.forEach(extendedValue => this.setUint8(extendedValue));
43
+ }
44
+ /**
45
+ * Get array of channel indexes.
46
+ *
47
+ * @param short - get 4 channels or more
48
+ */
49
+ getChannels(short) {
50
+ const channels = [];
51
+ let extended = 1;
52
+ let channelIndex = 0;
53
+ const MASK = short ? CHANNELS_SHORT_MASK : CHANNELS_FULL_MASK;
54
+ while (extended) {
55
+ const byte = this.getUint8();
56
+ extended = byte & 0x80;
57
+ for (let index = 0; index < MASK.length; index++) {
58
+ if (byte & MASK[index]) {
59
+ channels.push((channelIndex * 7) + index);
60
+ }
61
+ }
62
+ ++channelIndex;
63
+ }
64
+ return channels.sort((a, b) => a - b);
65
+ }
66
+ /**
67
+ * Set array of channel indexes.
68
+ *
69
+ */
70
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
71
+ setChannels(channels) {
72
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-return
73
+ const maxChannel = Math.max(...channels.map(({ index }) => index));
74
+ const size = (Math.ceil(maxChannel / 7) + (maxChannel % 7)) ? 1 : 0;
75
+ const data = Array(size).fill(0x80);
76
+ channels.forEach((_, channelIndex) => {
77
+ data[Math.floor(channelIndex / 7)] |= CHANNELS_FULL_MASK[channelIndex % 7];
78
+ });
79
+ data[data.length - 1] &= 0x7f;
80
+ data.forEach((byte) => this.setUint8(byte));
81
+ }
82
+ /**
83
+ * Retrieve device time from byte array.
84
+ *
85
+ * @example
86
+ * ['00101111', '10010111'] -> [47, 151] will be '2023-12-23'
87
+ *
88
+ * @returns Date object instance
89
+ */
90
+ getDate() {
91
+ const yearMonthByte = this.getUint8();
92
+ const monthDateByte = this.getUint8();
93
+ const year = yearMonthByte >> YEAR_START_INDEX;
94
+ const month = ((yearMonthByte & 0x01) << MONTH_BIT_SIZE - YEAR_START_INDEX) | (monthDateByte >> DATE_BIT_SIZE);
95
+ const monthDay = monthDateByte & 0x1f;
96
+ return new Date(Date.UTC(year + INITIAL_YEAR, month - 1, monthDay, 0, 0, 0, 0));
97
+ }
98
+ /**
99
+ * Convert date or seconds to bytes.
100
+ * '2023-12-23' will be 0010111-1100-10111, so bytes: ['00101111', '10010111'] -> [47, 151]
101
+ */
102
+ setDate(dateOrTime) {
103
+ let date;
104
+ if (dateOrTime instanceof Date) {
105
+ date = dateOrTime;
106
+ }
107
+ else {
108
+ date = getDateFromSeconds(dateOrTime);
109
+ }
110
+ const year = date.getUTCFullYear() - INITIAL_YEAR;
111
+ const month = date.getUTCMonth() + 1;
112
+ const day = date.getUTCDate();
113
+ // create year and month bytes
114
+ const yearMonthByte = (year << YEAR_START_INDEX) | (month >> MONTH_BIT_SIZE - YEAR_START_INDEX);
115
+ const monthDateByte = ((month & 0x07) << DATE_BIT_SIZE) | day;
116
+ [yearMonthByte, monthDateByte].forEach(byte => this.setUint8(byte));
117
+ }
118
+ /**
119
+ * Retrieve device time from byte array.
120
+ *
121
+ * @example
122
+ * 0xb8 = 0b10111000 will be {hours: 0b101, hour: 0b11000} i.e. {hours: 5, hour: 24}
123
+ */
124
+ getHours() {
125
+ const byte = this.getUint8();
126
+ const hours = (byte & 0xe0) >> 5;
127
+ const hour = byte & 0x1f;
128
+ return { hours, hour };
129
+ }
130
+ setHours(hour, hours) {
131
+ this.setUint8(((hours & 0x07) << 5) | (hour & 0x1f));
132
+ }
133
+ }
134
+ export default CommandBinaryBuffer;
135
+ //# sourceMappingURL=CommandBinaryBuffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CommandBinaryBuffer.js","sourceRoot":"","sources":["../src/CommandBinaryBuffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * [[include:commands/downlink/CorrectTime2000.md]]
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ import Command from '../../Command.js';
7
+ /**
8
+ * CorrectTime2000 command parameters
9
+ *
10
+ * @example
11
+ * // 120 seconds to the past
12
+ * {sequenceNumber: 45, time: -120}
13
+ */
14
+ interface IDownlinkCorrectTime2000Parameters {
15
+ /** sequence Number */
16
+ sequenceNumber: number;
17
+ /**
18
+ * seconds
19
+ * range: [-127..+127]
20
+ */
21
+ time: number;
22
+ }
23
+ /**
24
+ * Downlink command.
25
+ *
26
+ * @example
27
+ * ```js
28
+ * import CorrectTime2000 from 'jooby-codec/commands/downlink/CorrectTime2000';
29
+ *
30
+ * // 120 seconds to the past
31
+ * const parameters = {sequenceNumber: 45, time: -120};
32
+ * const command = new CorrectTime2000(parameters);
33
+ *
34
+ * // output command binary in hex representation
35
+ * console.log(command.toHex());
36
+ * // 0c 02 2d 88
37
+ * ```
38
+ * [Command format documentation](https://github.com/jooby-dev/jooby-docs/blob/main/docs/commands/CorrectTime2000.md#request)
39
+ */
40
+ declare class CorrectTime2000 extends Command {
41
+ parameters: IDownlinkCorrectTime2000Parameters;
42
+ constructor(parameters: IDownlinkCorrectTime2000Parameters);
43
+ static readonly id = 12;
44
+ static readonly isUplink = false;
45
+ static readonly title = "CORRECT_TIME_2000";
46
+ static fromBytes(data: Uint8Array): CorrectTime2000;
47
+ toBytes(): Uint8Array;
48
+ }
49
+ export default CorrectTime2000;
@@ -0,0 +1,61 @@
1
+ /**
2
+ * [[include:commands/downlink/CorrectTime2000.md]]
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ import Command from '../../Command.js';
7
+ import BinaryBuffer from '../../BinaryBuffer.js';
8
+ const COMMAND_ID = 0x0c;
9
+ const COMMAND_TITLE = 'CORRECT_TIME_2000';
10
+ const COMMAND_BODY_SIZE = 2;
11
+ /**
12
+ * Downlink command.
13
+ *
14
+ * @example
15
+ * ```js
16
+ * import CorrectTime2000 from 'jooby-codec/commands/downlink/CorrectTime2000';
17
+ *
18
+ * // 120 seconds to the past
19
+ * const parameters = {sequenceNumber: 45, time: -120};
20
+ * const command = new CorrectTime2000(parameters);
21
+ *
22
+ * // output command binary in hex representation
23
+ * console.log(command.toHex());
24
+ * // 0c 02 2d 88
25
+ * ```
26
+ * [Command format documentation](https://github.com/jooby-dev/jooby-docs/blob/main/docs/commands/CorrectTime2000.md#request)
27
+ */
28
+ class CorrectTime2000 extends Command {
29
+ constructor(parameters) {
30
+ super();
31
+ this.parameters = parameters;
32
+ }
33
+ // data - only body (without header)
34
+ static fromBytes(data) {
35
+ if (data.byteLength !== COMMAND_BODY_SIZE) {
36
+ throw new Error(`${this.getName()}. Wrong buffer size: ${data.byteLength}.`);
37
+ }
38
+ const buffer = new BinaryBuffer(data, false);
39
+ const parameters = {
40
+ sequenceNumber: buffer.getUint8(),
41
+ time: buffer.getInt8()
42
+ };
43
+ if (!buffer.isEmpty) {
44
+ throw new Error(`${this.getName()}. BinaryBuffer is not empty.`);
45
+ }
46
+ return new CorrectTime2000(parameters);
47
+ }
48
+ // returns full message - header with body
49
+ toBytes() {
50
+ const { sequenceNumber, time } = this.parameters;
51
+ const buffer = new BinaryBuffer(COMMAND_BODY_SIZE, false);
52
+ buffer.setUint8(sequenceNumber);
53
+ buffer.setInt8(time);
54
+ return Command.toBytes(COMMAND_ID, buffer.toUint8Array());
55
+ }
56
+ }
57
+ CorrectTime2000.id = COMMAND_ID;
58
+ CorrectTime2000.isUplink = false;
59
+ CorrectTime2000.title = COMMAND_TITLE;
60
+ export default CorrectTime2000;
61
+ //# sourceMappingURL=CorrectTime2000.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CorrectTime2000.js","sourceRoot":"","sources":["../../../src/commands/downlink/CorrectTime2000.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAGjD,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAC1C,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAqB5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,eAAgB,SAAQ,OAAO;IACjC,YAAqB,UAA8C;QAC/D,KAAK,EAAE,CAAC;QADS,eAAU,GAAV,UAAU,CAAoC;IAEnE,CAAC;IAQD,oCAAoC;IACpC,MAAM,CAAC,SAAS,CAAG,IAAgB;QAC/B,IAAK,IAAI,CAAC,UAAU,KAAK,iBAAiB,EAAG;YACzC,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,wBAAwB,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;SAChF;QAED,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,UAAU,GAAG;YACf,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE;YACjC,IAAI,EAAE,MAAM,CAAC,OAAO,EAAE;SACzB,CAAC;QAEF,IAAK,CAAC,MAAM,CAAC,OAAO,EAAG;YACnB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,8BAA8B,CAAC,CAAC;SACpE;QAED,OAAO,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAED,0CAA0C;IAC1C,OAAO;QACH,MAAM,EAAC,cAAc,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAE1D,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAErB,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC;;AAlCe,kBAAE,GAAG,UAAU,CAAC;AAEhB,wBAAQ,GAAG,KAAK,CAAC;AAEjB,qBAAK,GAAG,aAAa,CAAC;AAkC1C,eAAe,eAAe,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * [[include:commands/downlink/SetTime2000.md]]
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ import Command from '../../Command.js';
7
+ /**
8
+ * SetTime2000 command parameters
9
+ *
10
+ * @example
11
+ * // time: 2023-04-03T14:01:17.000Z
12
+ * {sequenceNumber: 77, time: 733845677}
13
+ */
14
+ interface IDownlinkSetTime2000Parameters {
15
+ /** sequence Number */
16
+ sequenceNumber: number;
17
+ /** seconds */
18
+ time: number;
19
+ }
20
+ /**
21
+ * Downlink command.
22
+ *
23
+ * @example
24
+ * ```js
25
+ * import SetTime2000 from 'jooby-codec/commands/downlink/SetTime2000';
26
+ *
27
+ * const parameters = {sequenceNumber: 78, time: 123456};
28
+ * const command = new SetTime2000(parameters);
29
+ *
30
+ * // output command binary in hex representation
31
+ * console.log(command.toHex());
32
+ * // 02 05 4e 00 01 e2 40
33
+ * ```
34
+ * [Command format documentation](https://github.com/jooby-dev/jooby-docs/blob/main/docs/commands/SetTime2000.md#request)
35
+ */
36
+ declare class SetTime2000 extends Command {
37
+ parameters: IDownlinkSetTime2000Parameters;
38
+ constructor(parameters: IDownlinkSetTime2000Parameters);
39
+ static readonly id = 2;
40
+ static readonly isUplink = false;
41
+ static readonly title = "SET_TIME_2000";
42
+ static fromBytes(data: Uint8Array): SetTime2000;
43
+ toBytes(): Uint8Array;
44
+ }
45
+ export default SetTime2000;