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.
- package/dist/BinaryBuffer.d.ts +44 -0
- package/dist/BinaryBuffer.js +128 -0
- package/dist/BinaryBuffer.js.map +1 -0
- package/dist/Command.d.ts +42 -0
- package/dist/Command.js +80 -0
- package/dist/Command.js.map +1 -0
- package/dist/CommandBinaryBuffer.d.ts +45 -0
- package/dist/CommandBinaryBuffer.js +135 -0
- package/dist/CommandBinaryBuffer.js.map +1 -0
- package/dist/commands/downlink/CorrectTime2000.d.ts +49 -0
- package/dist/commands/downlink/CorrectTime2000.js +61 -0
- package/dist/commands/downlink/CorrectTime2000.js.map +1 -0
- package/dist/commands/downlink/SetTime2000.d.ts +45 -0
- package/dist/commands/downlink/SetTime2000.js +60 -0
- package/dist/commands/downlink/SetTime2000.js.map +1 -0
- package/dist/commands/downlink/index.d.ts +7 -0
- package/dist/commands/downlink/index.js +8 -0
- package/dist/commands/downlink/index.js.map +1 -0
- package/dist/commands/index.d.ts +7 -0
- package/dist/commands/index.js +8 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/uplink/CorrectTime2000.d.ts +37 -0
- package/dist/commands/uplink/CorrectTime2000.js +53 -0
- package/dist/commands/uplink/CorrectTime2000.js.map +1 -0
- package/dist/commands/uplink/DataDayMul.d.ts +20 -0
- package/dist/commands/uplink/DataDayMul.js +41 -0
- package/dist/commands/uplink/DataDayMul.js.map +1 -0
- package/dist/commands/uplink/DataHourMul.d.ts +11 -0
- package/dist/commands/uplink/DataHourMul.js +77 -0
- package/dist/commands/uplink/DataHourMul.js.map +1 -0
- package/dist/commands/uplink/ExAbsDayMul.d.ts +11 -0
- package/dist/commands/uplink/ExAbsDayMul.js +60 -0
- package/dist/commands/uplink/ExAbsDayMul.js.map +1 -0
- package/dist/commands/uplink/ExAbsHourMul.d.ts +11 -0
- package/dist/commands/uplink/ExAbsHourMul.js +92 -0
- package/dist/commands/uplink/ExAbsHourMul.js.map +1 -0
- package/dist/commands/uplink/GetCurrentMul.d.ts +24 -0
- package/dist/commands/uplink/GetCurrentMul.js +35 -0
- package/dist/commands/uplink/GetCurrentMul.js.map +1 -0
- package/dist/commands/uplink/NewEvent.d.ts +18 -0
- package/dist/commands/uplink/NewEvent.js +101 -0
- package/dist/commands/uplink/NewEvent.js.map +1 -0
- package/dist/commands/uplink/SetTime2000.d.ts +37 -0
- package/dist/commands/uplink/SetTime2000.js +53 -0
- package/dist/commands/uplink/SetTime2000.js.map +1 -0
- package/dist/commands/uplink/Time2000.d.ts +41 -0
- package/dist/commands/uplink/Time2000.js +56 -0
- package/dist/commands/uplink/Time2000.js.map +1 -0
- package/dist/commands/uplink/index.d.ts +13 -0
- package/dist/commands/uplink/index.js +14 -0
- package/dist/commands/uplink/index.js.map +1 -0
- package/dist/constants/events.d.ts +16 -0
- package/dist/constants/events.js +17 -0
- package/dist/constants/events.js.map +1 -0
- package/dist/constants/general.d.ts +1 -0
- package/dist/constants/general.js +2 -0
- package/dist/constants/general.js.map +1 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +2 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/getBitArrayFromNumber.d.ts +14 -0
- package/dist/utils/getBitArrayFromNumber.js +15 -0
- package/dist/utils/getBitArrayFromNumber.js.map +1 -0
- package/dist/utils/getBytesFromHex.d.ts +11 -0
- package/dist/utils/getBytesFromHex.js +23 -0
- package/dist/utils/getBytesFromHex.js.map +1 -0
- package/dist/utils/getHexFromBytes.d.ts +27 -0
- package/dist/utils/getHexFromBytes.js +22 -0
- package/dist/utils/getHexFromBytes.js.map +1 -0
- package/dist/utils/getIntFromBitString.d.ts +6 -0
- package/dist/utils/getIntFromBitString.js +6 -0
- package/dist/utils/getIntFromBitString.js.map +1 -0
- package/dist/utils/header.d.ts +13 -0
- package/dist/utils/header.js +62 -0
- package/dist/utils/header.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/message.d.ts +27 -0
- package/dist/utils/message.js +101 -0
- package/dist/utils/message.js.map +1 -0
- package/dist/utils/roundNumber.d.ts +2 -0
- package/dist/utils/roundNumber.js +5 -0
- package/dist/utils/roundNumber.js.map +1 -0
- package/dist/utils/time.d.ts +14 -0
- package/dist/utils/time.js +17 -0
- package/dist/utils/time.js.map +1 -0
- package/package.json +78 -0
- 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;
|
package/dist/Command.js
ADDED
|
@@ -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;
|