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,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [[include:commands/downlink/SetTime2000.md]]
|
|
3
|
+
*
|
|
4
|
+
* @packageDocumentation
|
|
5
|
+
*/
|
|
6
|
+
import Command from '../../Command.js';
|
|
7
|
+
import BinaryBuffer from '../../BinaryBuffer.js';
|
|
8
|
+
const COMMAND_ID = 0x02;
|
|
9
|
+
const COMMAND_TITLE = 'SET_TIME_2000';
|
|
10
|
+
const COMMAND_BODY_SIZE = 5;
|
|
11
|
+
/**
|
|
12
|
+
* Downlink command.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```js
|
|
16
|
+
* import SetTime2000 from 'jooby-codec/commands/downlink/SetTime2000';
|
|
17
|
+
*
|
|
18
|
+
* const parameters = {sequenceNumber: 78, time: 123456};
|
|
19
|
+
* const command = new SetTime2000(parameters);
|
|
20
|
+
*
|
|
21
|
+
* // output command binary in hex representation
|
|
22
|
+
* console.log(command.toHex());
|
|
23
|
+
* // 02 05 4e 00 01 e2 40
|
|
24
|
+
* ```
|
|
25
|
+
* [Command format documentation](https://github.com/jooby-dev/jooby-docs/blob/main/docs/commands/SetTime2000.md#request)
|
|
26
|
+
*/
|
|
27
|
+
class SetTime2000 extends Command {
|
|
28
|
+
constructor(parameters) {
|
|
29
|
+
super();
|
|
30
|
+
this.parameters = parameters;
|
|
31
|
+
}
|
|
32
|
+
// data - only body (without header)
|
|
33
|
+
static fromBytes(data) {
|
|
34
|
+
if (data.byteLength !== COMMAND_BODY_SIZE) {
|
|
35
|
+
throw new Error(`${this.getName()}. Wrong buffer size: ${data.byteLength}.`);
|
|
36
|
+
}
|
|
37
|
+
const buffer = new BinaryBuffer(data, false);
|
|
38
|
+
const parameters = {
|
|
39
|
+
sequenceNumber: buffer.getUint8(),
|
|
40
|
+
time: buffer.getInt32()
|
|
41
|
+
};
|
|
42
|
+
if (!buffer.isEmpty) {
|
|
43
|
+
throw new Error(`${this.getName()}. BinaryBuffer is not empty.`);
|
|
44
|
+
}
|
|
45
|
+
return new SetTime2000(parameters);
|
|
46
|
+
}
|
|
47
|
+
// returns full message - header with body
|
|
48
|
+
toBytes() {
|
|
49
|
+
const { sequenceNumber, time } = this.parameters;
|
|
50
|
+
const buffer = new BinaryBuffer(COMMAND_BODY_SIZE, false);
|
|
51
|
+
buffer.setUint8(sequenceNumber);
|
|
52
|
+
buffer.setInt32(time);
|
|
53
|
+
return Command.toBytes(COMMAND_ID, buffer.toUint8Array());
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
SetTime2000.id = COMMAND_ID;
|
|
57
|
+
SetTime2000.isUplink = false;
|
|
58
|
+
SetTime2000.title = COMMAND_TITLE;
|
|
59
|
+
export default SetTime2000;
|
|
60
|
+
//# sourceMappingURL=SetTime2000.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SetTime2000.js","sourceRoot":"","sources":["../../../src/commands/downlink/SetTime2000.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,eAAe,CAAC;AACtC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAkB5B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAY,SAAQ,OAAO;IAC7B,YAAqB,UAA0C;QAC3D,KAAK,EAAE,CAAC;QADS,eAAU,GAAV,UAAU,CAAgC;IAE/D,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,QAAQ,EAAE;SAC1B,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,WAAW,CAAC,UAAU,CAAC,CAAC;IACvC,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,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEtB,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC;;AAlCe,cAAE,GAAG,UAAU,CAAC;AAEhB,oBAAQ,GAAG,KAAK,CAAC;AAEjB,iBAAK,GAAG,aAAa,CAAC;AAkC1C,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/downlink/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,OAAO,IAAI,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAC,OAAO,IAAI,WAAW,EAAC,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,QAAQ,MAAM,qBAAqB,CAAC;AAChD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import Command from '../../Command.js';
|
|
2
|
+
/**
|
|
3
|
+
* CorrectTime2000 command parameters
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* {status: 1}
|
|
7
|
+
*/
|
|
8
|
+
interface IUplinkCorrectTime2000Parameters {
|
|
9
|
+
status: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Uplink command.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```js
|
|
16
|
+
* import CorrectTime2000 from 'jooby-codec/commands/uplink/CorrectTime2000';
|
|
17
|
+
*
|
|
18
|
+
* // failure
|
|
19
|
+
* const parameters = {status: 0};
|
|
20
|
+
* const command = new CorrectTime2000(parameters);
|
|
21
|
+
*
|
|
22
|
+
* // output command binary in hex representation
|
|
23
|
+
* console.log(command.toHex());
|
|
24
|
+
* // 0c 01 00
|
|
25
|
+
* ```
|
|
26
|
+
* [Command format documentation](https://github.com/jooby-dev/jooby-docs/blob/main/docs/commands/CorrectTime2000.md#response)
|
|
27
|
+
*/
|
|
28
|
+
declare class CorrectTime2000 extends Command {
|
|
29
|
+
parameters: IUplinkCorrectTime2000Parameters;
|
|
30
|
+
constructor(parameters: IUplinkCorrectTime2000Parameters);
|
|
31
|
+
static readonly id = 12;
|
|
32
|
+
static readonly isUplink = true;
|
|
33
|
+
static readonly title = "CORRECT_TIME_2000";
|
|
34
|
+
static fromBytes(data: Uint8Array): CorrectTime2000;
|
|
35
|
+
toBytes(): Uint8Array;
|
|
36
|
+
}
|
|
37
|
+
export default CorrectTime2000;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import Command from '../../Command.js';
|
|
2
|
+
import BinaryBuffer from '../../BinaryBuffer.js';
|
|
3
|
+
const COMMAND_ID = 0x0c;
|
|
4
|
+
const COMMAND_TITLE = 'CORRECT_TIME_2000';
|
|
5
|
+
const COMMAND_BODY_SIZE = 1;
|
|
6
|
+
/**
|
|
7
|
+
* Uplink command.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```js
|
|
11
|
+
* import CorrectTime2000 from 'jooby-codec/commands/uplink/CorrectTime2000';
|
|
12
|
+
*
|
|
13
|
+
* // failure
|
|
14
|
+
* const parameters = {status: 0};
|
|
15
|
+
* const command = new CorrectTime2000(parameters);
|
|
16
|
+
*
|
|
17
|
+
* // output command binary in hex representation
|
|
18
|
+
* console.log(command.toHex());
|
|
19
|
+
* // 0c 01 00
|
|
20
|
+
* ```
|
|
21
|
+
* [Command format documentation](https://github.com/jooby-dev/jooby-docs/blob/main/docs/commands/CorrectTime2000.md#response)
|
|
22
|
+
*/
|
|
23
|
+
class CorrectTime2000 extends Command {
|
|
24
|
+
constructor(parameters) {
|
|
25
|
+
super();
|
|
26
|
+
this.parameters = parameters;
|
|
27
|
+
}
|
|
28
|
+
// data - only body (without header)
|
|
29
|
+
static fromBytes(data) {
|
|
30
|
+
if (data.byteLength !== COMMAND_BODY_SIZE) {
|
|
31
|
+
throw new Error(`${this.getName()}. Wrong buffer size: ${data.byteLength}.`);
|
|
32
|
+
}
|
|
33
|
+
const buffer = new BinaryBuffer(data, false);
|
|
34
|
+
const parameters = {
|
|
35
|
+
status: buffer.getUint8()
|
|
36
|
+
};
|
|
37
|
+
if (!buffer.isEmpty) {
|
|
38
|
+
throw new Error(`${this.getName()}. BinaryBuffer is not empty.`);
|
|
39
|
+
}
|
|
40
|
+
return new CorrectTime2000(parameters);
|
|
41
|
+
}
|
|
42
|
+
toBytes() {
|
|
43
|
+
const { status } = this.parameters;
|
|
44
|
+
const buffer = new BinaryBuffer(COMMAND_BODY_SIZE, false);
|
|
45
|
+
buffer.setUint8(status);
|
|
46
|
+
return Command.toBytes(COMMAND_ID, buffer.toUint8Array());
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
CorrectTime2000.id = COMMAND_ID;
|
|
50
|
+
CorrectTime2000.isUplink = true;
|
|
51
|
+
CorrectTime2000.title = COMMAND_TITLE;
|
|
52
|
+
export default CorrectTime2000;
|
|
53
|
+
//# sourceMappingURL=CorrectTime2000.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CorrectTime2000.js","sourceRoot":"","sources":["../../../src/commands/uplink/CorrectTime2000.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AAEvC,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAGjD,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAC1C,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAc5B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,eAAgB,SAAQ,OAAO;IACjC,YAAqB,UAA4C;QAC7D,KAAK,EAAE,CAAC;QADS,eAAU,GAAV,UAAU,CAAkC;IAEjE,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;QAE7C,MAAM,UAAU,GAAG;YACf,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE;SAC5B,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,OAAO;QACH,MAAM,EAAC,MAAM,EAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAE1D,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAExB,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAC9D,CAAC;;AAhCe,kBAAE,GAAG,UAAU,CAAC;AAEhB,wBAAQ,GAAG,IAAI,CAAC;AAEhB,qBAAK,GAAG,aAAa,CAAC;AAgC1C,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import GetCurrentMul, { IGetCurrentMulParameters } from './GetCurrentMul.js';
|
|
2
|
+
/**
|
|
3
|
+
* DataDayMul command parameters.
|
|
4
|
+
*/
|
|
5
|
+
interface IDataDayMulParameters extends IGetCurrentMulParameters {
|
|
6
|
+
/**
|
|
7
|
+
* Seconds since year 2000, i.e. timestamp (in seconds) - 946684800
|
|
8
|
+
*/
|
|
9
|
+
time: number;
|
|
10
|
+
}
|
|
11
|
+
declare class DataDayMul extends GetCurrentMul {
|
|
12
|
+
parameters: IDataDayMulParameters;
|
|
13
|
+
constructor(parameters: IDataDayMulParameters);
|
|
14
|
+
static readonly id = 22;
|
|
15
|
+
static readonly isUplink = true;
|
|
16
|
+
static readonly title = "DATA_DAY_MUL";
|
|
17
|
+
static fromBytes(data: Uint8Array): DataDayMul;
|
|
18
|
+
toBytes(): Uint8Array;
|
|
19
|
+
}
|
|
20
|
+
export default DataDayMul;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
2
|
+
import Command from '../../Command.js';
|
|
3
|
+
import CommandBinaryBuffer from '../../CommandBinaryBuffer.js';
|
|
4
|
+
import { getSecondsFromDate } from '../../utils/time.js';
|
|
5
|
+
import GetCurrentMul from './GetCurrentMul.js';
|
|
6
|
+
const COMMAND_ID = 0x16;
|
|
7
|
+
const COMMAND_TITLE = 'DATA_DAY_MUL';
|
|
8
|
+
// 2 byte for date + 2 for channels (max channels: 7)
|
|
9
|
+
// 4 + (7 * 4)
|
|
10
|
+
const COMMAND_BODY_MAX_SIZE = 32;
|
|
11
|
+
class DataDayMul extends GetCurrentMul {
|
|
12
|
+
constructor(parameters) {
|
|
13
|
+
super(parameters);
|
|
14
|
+
this.parameters = parameters;
|
|
15
|
+
}
|
|
16
|
+
static fromBytes(data) {
|
|
17
|
+
const parameters = { channels: [], time: 0 };
|
|
18
|
+
const buffer = new CommandBinaryBuffer(data);
|
|
19
|
+
const date = buffer.getDate();
|
|
20
|
+
const channelArray = buffer.getChannels(false);
|
|
21
|
+
parameters.channels = channelArray.map(channelIndex => ({
|
|
22
|
+
value: buffer.getExtendedValue(),
|
|
23
|
+
index: channelIndex
|
|
24
|
+
}));
|
|
25
|
+
parameters.time = getSecondsFromDate(date);
|
|
26
|
+
return new DataDayMul(parameters);
|
|
27
|
+
}
|
|
28
|
+
toBytes() {
|
|
29
|
+
const buffer = new CommandBinaryBuffer(COMMAND_BODY_MAX_SIZE, false);
|
|
30
|
+
const { channels, time } = this.parameters;
|
|
31
|
+
buffer.setDate(time);
|
|
32
|
+
buffer.setChannels(channels.map(({ index }) => index));
|
|
33
|
+
channels.forEach(({ value }) => buffer.setExtendedValue(value));
|
|
34
|
+
return Command.toBytes(COMMAND_ID, buffer.getBytesToOffset());
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
DataDayMul.id = COMMAND_ID;
|
|
38
|
+
DataDayMul.isUplink = true;
|
|
39
|
+
DataDayMul.title = COMMAND_TITLE;
|
|
40
|
+
export default DataDayMul;
|
|
41
|
+
//# sourceMappingURL=DataDayMul.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataDayMul.js","sourceRoot":"","sources":["../../../src/commands/uplink/DataDayMul.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,mBAAmB,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAC,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AACvD,OAAO,aAAyC,MAAM,oBAAoB,CAAC;AAE3E,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,aAAa,GAAG,cAAc,CAAC;AAErC,qDAAqD;AACrD,cAAc;AACd,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAcjC,MAAM,UAAW,SAAQ,aAAa;IAClC,YAAqB,UAAiC;QAClD,KAAK,CAAC,UAAU,CAAC,CAAC;QADD,eAAU,GAAV,UAAU,CAAuB;IAEtD,CAAC;IAQD,MAAM,CAAC,SAAS,CAAG,IAAgB;QAC/B,MAAM,UAAU,GAA0B,EAAC,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,EAAC,CAAC;QAElE,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE/C,UAAU,CAAC,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACpD,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE;YAChC,KAAK,EAAE,YAAY;SACtB,CAAC,CAAC,CAAC;QAEJ,UAAU,CAAC,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAE3C,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,OAAO;QACH,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QACrE,MAAM,EAAC,QAAQ,EAAE,IAAI,EAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAEzC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;QAE9D,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAClE,CAAC;;AAjCe,aAAE,GAAG,UAAU,CAAC;AAEhB,mBAAQ,GAAG,IAAI,CAAC;AAEhB,gBAAK,GAAG,aAAa,CAAC;AAiC1C,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import GetCurrentMul from './GetCurrentMul.js';
|
|
2
|
+
declare class DataHourMul extends GetCurrentMul {
|
|
3
|
+
parameters: any;
|
|
4
|
+
constructor(parameters: any);
|
|
5
|
+
static readonly id = 23;
|
|
6
|
+
static readonly isUplink = true;
|
|
7
|
+
static readonly title = "DATA_HOUR_MUL";
|
|
8
|
+
static fromBytes(data: Uint8Array): any;
|
|
9
|
+
toBytes(): Uint8Array;
|
|
10
|
+
}
|
|
11
|
+
export default DataHourMul;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
4
|
+
/* eslint-disable no-restricted-syntax */
|
|
5
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
6
|
+
import Command from '../../Command.js';
|
|
7
|
+
import GetCurrentMul from './GetCurrentMul.js';
|
|
8
|
+
import { getSecondsFromDate, getDateFromSeconds } from '../../utils/time.js';
|
|
9
|
+
import CommandBinaryBuffer from '../../CommandBinaryBuffer.js';
|
|
10
|
+
const COMMAND_ID = 0x17;
|
|
11
|
+
const COMMAND_TITLE = 'DATA_HOUR_MUL';
|
|
12
|
+
// date 2 bytes, hour 1 byte, channels - 1 byte, so max channels = 4
|
|
13
|
+
// max hours diff - 7 (3 bit value)
|
|
14
|
+
// 4 + (4 channels * 3 bytes of hour values) + (4 * 2 bytes of diff * 7 max hours diff)
|
|
15
|
+
const COMMAND_BODY_MAX_SIZE = 72;
|
|
16
|
+
class DataHourMul extends GetCurrentMul {
|
|
17
|
+
constructor(parameters) {
|
|
18
|
+
super(parameters);
|
|
19
|
+
this.parameters = parameters;
|
|
20
|
+
}
|
|
21
|
+
static fromBytes(data) {
|
|
22
|
+
const buffer = new CommandBinaryBuffer(data);
|
|
23
|
+
const date = buffer.getDate();
|
|
24
|
+
const { hour, hours } = buffer.getHours();
|
|
25
|
+
const channelArray = buffer.getChannels(true);
|
|
26
|
+
const maxChannel = Math.max.apply(null, channelArray);
|
|
27
|
+
date.setUTCHours(hour);
|
|
28
|
+
const counterDate = new Date(date);
|
|
29
|
+
let hourAmount = hours;
|
|
30
|
+
let value;
|
|
31
|
+
const channels = [];
|
|
32
|
+
if (hourAmount === 0) {
|
|
33
|
+
// one hour
|
|
34
|
+
hourAmount = 1;
|
|
35
|
+
}
|
|
36
|
+
for (let channelIndex = 0; channelIndex <= maxChannel; ++channelIndex) {
|
|
37
|
+
// decode hour value for channel
|
|
38
|
+
value = buffer.getExtendedValue();
|
|
39
|
+
counterDate.setTime(date.getTime());
|
|
40
|
+
const diff = [];
|
|
41
|
+
const channel = { value, index: channelIndex, time: getSecondsFromDate(counterDate), diff };
|
|
42
|
+
channels.push(channel);
|
|
43
|
+
for (let hourIndex = 0; hourIndex < hourAmount; ++hourIndex) {
|
|
44
|
+
value = buffer.getExtendedValue();
|
|
45
|
+
counterDate.setUTCHours(counterDate.getUTCHours() + hourIndex);
|
|
46
|
+
diff.push({ value, time: getSecondsFromDate(counterDate) });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return new DataHourMul({ channels });
|
|
50
|
+
}
|
|
51
|
+
toBytes() {
|
|
52
|
+
const buffer = new CommandBinaryBuffer(COMMAND_BODY_MAX_SIZE, false);
|
|
53
|
+
const { channels } = this.parameters;
|
|
54
|
+
const { time } = channels[0];
|
|
55
|
+
const realDate = getDateFromSeconds(time);
|
|
56
|
+
const hour = realDate.getUTCHours();
|
|
57
|
+
let hourAmount = channels[0].diff.length;
|
|
58
|
+
if (hourAmount === 1) {
|
|
59
|
+
hourAmount = 0;
|
|
60
|
+
}
|
|
61
|
+
buffer.setDate(time);
|
|
62
|
+
buffer.setHours(hour, hourAmount);
|
|
63
|
+
buffer.setChannels(channels);
|
|
64
|
+
for (const { value, diff } of channels) {
|
|
65
|
+
buffer.setExtendedValue(value);
|
|
66
|
+
for (const { value: diffValue } of diff) {
|
|
67
|
+
buffer.setExtendedValue(diffValue);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return Command.toBytes(COMMAND_ID, buffer.getBytesToOffset());
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
DataHourMul.id = COMMAND_ID;
|
|
74
|
+
DataHourMul.isUplink = true;
|
|
75
|
+
DataHourMul.title = COMMAND_TITLE;
|
|
76
|
+
export default DataHourMul;
|
|
77
|
+
//# sourceMappingURL=DataHourMul.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DataHourMul.js","sourceRoot":"","sources":["../../../src/commands/uplink/DataHourMul.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import GetCurrentMul from './GetCurrentMul.js';
|
|
2
|
+
declare class ExAbsDayMul extends GetCurrentMul {
|
|
3
|
+
parameters: any;
|
|
4
|
+
constructor(parameters: any);
|
|
5
|
+
static id: number;
|
|
6
|
+
static readonly isUplink = true;
|
|
7
|
+
static title: string;
|
|
8
|
+
static fromBytes(data: Uint8Array): any;
|
|
9
|
+
toBytes(): Uint8Array;
|
|
10
|
+
}
|
|
11
|
+
export default ExAbsDayMul;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/* eslint-disable no-restricted-syntax */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
6
|
+
import Command from '../../Command.js';
|
|
7
|
+
import GetCurrentMul from './GetCurrentMul.js';
|
|
8
|
+
import CommandBinaryBuffer from '../../CommandBinaryBuffer.js';
|
|
9
|
+
import roundNumber from '../../utils/roundNumber.js';
|
|
10
|
+
import { getSecondsFromDate } from '../../utils/time.js';
|
|
11
|
+
const COMMAND_ID = 0x0b1f;
|
|
12
|
+
const COMMAND_TITLE = 'EX_ABS_DAY_MUL';
|
|
13
|
+
// date 2 bytes, channels - 1 byte (max channels: 4)
|
|
14
|
+
// 3 + (4 channels * (1 byte IPK + 5 bytes of day values))
|
|
15
|
+
const COMMAND_BODY_MAX_SIZE = 27;
|
|
16
|
+
class ExAbsDayMul extends GetCurrentMul {
|
|
17
|
+
constructor(parameters) {
|
|
18
|
+
super(parameters);
|
|
19
|
+
this.parameters = parameters;
|
|
20
|
+
}
|
|
21
|
+
static fromBytes(data) {
|
|
22
|
+
const buffer = new CommandBinaryBuffer(data);
|
|
23
|
+
const date = buffer.getDate();
|
|
24
|
+
const channelArray = buffer.getChannels(true);
|
|
25
|
+
const maxChannel = Math.max.apply(null, channelArray);
|
|
26
|
+
let value;
|
|
27
|
+
const channels = [];
|
|
28
|
+
for (let channelIndex = 0; channelIndex <= maxChannel; ++channelIndex) {
|
|
29
|
+
// IPK_${channelIndex}
|
|
30
|
+
const pulseCoefficient = buffer.getUint8();
|
|
31
|
+
// day value
|
|
32
|
+
value = buffer.getExtendedValue();
|
|
33
|
+
channels.push({
|
|
34
|
+
value,
|
|
35
|
+
pulseCoefficient,
|
|
36
|
+
index: channelIndex,
|
|
37
|
+
time: getSecondsFromDate(date),
|
|
38
|
+
meterValue: roundNumber(value / pulseCoefficient)
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
return new ExAbsDayMul({ channels, date });
|
|
42
|
+
}
|
|
43
|
+
toBytes() {
|
|
44
|
+
const buffer = new CommandBinaryBuffer(COMMAND_BODY_MAX_SIZE, false);
|
|
45
|
+
const { channels } = this.parameters;
|
|
46
|
+
const { time } = channels[0];
|
|
47
|
+
buffer.setDate(time);
|
|
48
|
+
buffer.setChannels(channels);
|
|
49
|
+
for (const { value, pulseCoefficient } of channels) {
|
|
50
|
+
buffer.setUint8(pulseCoefficient);
|
|
51
|
+
buffer.setExtendedValue(value);
|
|
52
|
+
}
|
|
53
|
+
return Command.toBytes(COMMAND_ID, buffer.getBytesToOffset());
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
ExAbsDayMul.id = COMMAND_ID;
|
|
57
|
+
ExAbsDayMul.isUplink = true;
|
|
58
|
+
ExAbsDayMul.title = COMMAND_TITLE;
|
|
59
|
+
export default ExAbsDayMul;
|
|
60
|
+
//# sourceMappingURL=ExAbsDayMul.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExAbsDayMul.js","sourceRoot":"","sources":["../../../src/commands/uplink/ExAbsDayMul.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,+DAA+D;AAC/D,4DAA4D;AAC5D,uDAAuD;AACvD,0DAA0D;AAE1D,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,mBAAmB,MAAM,8BAA8B,CAAC;AAC/D,OAAO,WAAW,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAC,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AAGvD,MAAM,UAAU,GAAG,MAAM,CAAC;AAC1B,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAEvC,oDAAoD;AACpD,0DAA0D;AAC1D,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAGjC,MAAM,WAAY,SAAQ,aAAa;IACnC,YAAqB,UAAe;QAChC,KAAK,CAAC,UAAU,CAAC,CAAC;QADD,eAAU,GAAV,UAAU,CAAK;IAEpC,CAAC;IAQD,MAAM,CAAC,SAAS,CAAG,IAAgB;QAC/B,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAEtD,IAAI,KAAK,CAAC;QAEV,MAAM,QAAQ,GAAe,EAAE,CAAC;QAEhC,KAAM,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,IAAI,UAAU,EAAE,EAAE,YAAY,EAAG;YACrE,sBAAsB;YACtB,MAAM,gBAAgB,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC3C,YAAY;YACZ,KAAK,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAClC,QAAQ,CAAC,IAAI,CAAC;gBACV,KAAK;gBACL,gBAAgB;gBAChB,KAAK,EAAE,YAAY;gBACnB,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC;gBAC9B,UAAU,EAAE,WAAW,CAAC,KAAK,GAAG,gBAAgB,CAAC;aACpD,CAAC,CAAC;SACN;QAED,OAAO,IAAI,WAAW,CAAC,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO;QACH,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QACrE,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAEnC,MAAM,EAAC,IAAI,EAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE3B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAE7B,KAAM,MAAM,EAAC,KAAK,EAAE,gBAAgB,EAAC,IAAI,QAAQ,EAAG;YAChD,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAClC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;SAClC;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAClE,CAAC;;AAjDM,cAAE,GAAG,UAAU,CAAC;AAEP,oBAAQ,GAAG,IAAI,CAAC;AAEzB,iBAAK,GAAG,aAAa,CAAC;AAiDjC,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import GetCurrentMul from './GetCurrentMul.js';
|
|
2
|
+
declare class ExAbsHourMul extends GetCurrentMul {
|
|
3
|
+
parameters: any;
|
|
4
|
+
constructor(parameters: any);
|
|
5
|
+
static readonly id = 2591;
|
|
6
|
+
static readonly isUplink = true;
|
|
7
|
+
static readonly title = "EX_ABS_HOUR_MUL";
|
|
8
|
+
static fromBytes(data: Uint8Array): any;
|
|
9
|
+
toBytes(): Uint8Array;
|
|
10
|
+
}
|
|
11
|
+
export default ExAbsHourMul;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/* eslint-disable no-restricted-syntax */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
|
+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
4
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
5
|
+
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
6
|
+
import Command from '../../Command.js';
|
|
7
|
+
import GetCurrentMul from './GetCurrentMul.js';
|
|
8
|
+
import { getSecondsFromDate, getDateFromSeconds } from '../../utils/time.js';
|
|
9
|
+
import CommandBinaryBuffer from '../../CommandBinaryBuffer.js';
|
|
10
|
+
import roundNumber from '../../utils/roundNumber.js';
|
|
11
|
+
const COMMAND_ID = 0x0a1f;
|
|
12
|
+
const COMMAND_TITLE = 'EX_ABS_HOUR_MUL';
|
|
13
|
+
// date 2 bytes, hour 1 byte, channels - 1 byte (max channels: 4)
|
|
14
|
+
// max hours diff - 7 (3 bit value)
|
|
15
|
+
// 4 + (4 channels * (1 byte IPK + 5 bytes of hour value)) + (4 * 2 bytes of diff * 7 max hours diff)
|
|
16
|
+
const COMMAND_BODY_MAX_SIZE = 84;
|
|
17
|
+
class ExAbsHourMul extends GetCurrentMul {
|
|
18
|
+
constructor(parameters) {
|
|
19
|
+
super(parameters);
|
|
20
|
+
this.parameters = parameters;
|
|
21
|
+
}
|
|
22
|
+
static fromBytes(data) {
|
|
23
|
+
const buffer = new CommandBinaryBuffer(data);
|
|
24
|
+
const date = buffer.getDate();
|
|
25
|
+
const { hour, hours } = buffer.getHours();
|
|
26
|
+
const channelArray = buffer.getChannels(true);
|
|
27
|
+
const maxChannel = Math.max.apply(null, channelArray);
|
|
28
|
+
date.setUTCHours(hour);
|
|
29
|
+
const counterDate = new Date(date);
|
|
30
|
+
let hourAmount = hours;
|
|
31
|
+
const channels = [];
|
|
32
|
+
if (hourAmount === 0) {
|
|
33
|
+
// one hour
|
|
34
|
+
hourAmount = 1;
|
|
35
|
+
}
|
|
36
|
+
for (let channelIndex = 0; channelIndex <= maxChannel; ++channelIndex) {
|
|
37
|
+
// IPK_${channelIndex}
|
|
38
|
+
const pulseCoefficient = buffer.getUint8();
|
|
39
|
+
// decode hour value for channel
|
|
40
|
+
const pulseValue = buffer.getExtendedValue();
|
|
41
|
+
counterDate.setTime(date.getTime());
|
|
42
|
+
const diff = [];
|
|
43
|
+
for (let hourIndex = 0; hourIndex < hourAmount; ++hourIndex) {
|
|
44
|
+
const value = buffer.getExtendedValue();
|
|
45
|
+
counterDate.setUTCHours(counterDate.getUTCHours() + hourIndex);
|
|
46
|
+
diff.push({
|
|
47
|
+
value,
|
|
48
|
+
pulseCoefficient,
|
|
49
|
+
time: getSecondsFromDate(counterDate),
|
|
50
|
+
meterValue: roundNumber((value + pulseValue) / pulseCoefficient)
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
channels.push({
|
|
54
|
+
diff,
|
|
55
|
+
pulseCoefficient,
|
|
56
|
+
index: channelIndex,
|
|
57
|
+
value: pulseValue,
|
|
58
|
+
time: getSecondsFromDate(date),
|
|
59
|
+
meterValue: roundNumber(pulseValue / pulseCoefficient)
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return new ExAbsHourMul({ channels, date });
|
|
63
|
+
}
|
|
64
|
+
toBytes() {
|
|
65
|
+
const buffer = new CommandBinaryBuffer(COMMAND_BODY_MAX_SIZE, false);
|
|
66
|
+
const { channels } = this.parameters;
|
|
67
|
+
const { time } = channels[0];
|
|
68
|
+
const realDate = getDateFromSeconds(time);
|
|
69
|
+
const hour = realDate.getUTCHours();
|
|
70
|
+
let hourAmount = channels[0].diff.length;
|
|
71
|
+
// TODO: add link to doc
|
|
72
|
+
if (hourAmount === 1) {
|
|
73
|
+
hourAmount = 0;
|
|
74
|
+
}
|
|
75
|
+
buffer.setDate(time);
|
|
76
|
+
buffer.setHours(hour, hourAmount);
|
|
77
|
+
buffer.setChannels(channels);
|
|
78
|
+
for (const { value, diff, pulseCoefficient } of channels) {
|
|
79
|
+
buffer.setUint8(pulseCoefficient);
|
|
80
|
+
buffer.setExtendedValue(value);
|
|
81
|
+
for (const { value: diffValue } of diff) {
|
|
82
|
+
buffer.setExtendedValue(diffValue);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return Command.toBytes(COMMAND_ID, buffer.getBytesToOffset());
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
ExAbsHourMul.id = COMMAND_ID;
|
|
89
|
+
ExAbsHourMul.isUplink = true;
|
|
90
|
+
ExAbsHourMul.title = COMMAND_TITLE;
|
|
91
|
+
export default ExAbsHourMul;
|
|
92
|
+
//# sourceMappingURL=ExAbsHourMul.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExAbsHourMul.js","sourceRoot":"","sources":["../../../src/commands/uplink/ExAbsHourMul.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import Command from '../../Command.js';
|
|
2
|
+
/**
|
|
3
|
+
* GetCurrentMul command channel.
|
|
4
|
+
*/
|
|
5
|
+
export interface IChannel {
|
|
6
|
+
index: number;
|
|
7
|
+
value: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* GetCurrentMul command parameters.
|
|
11
|
+
*/
|
|
12
|
+
export interface IGetCurrentMulParameters {
|
|
13
|
+
channels: Array<IChannel>;
|
|
14
|
+
}
|
|
15
|
+
declare class GetCurrentMul extends Command {
|
|
16
|
+
parameters: IGetCurrentMulParameters;
|
|
17
|
+
constructor(parameters: IGetCurrentMulParameters);
|
|
18
|
+
static id: number;
|
|
19
|
+
static readonly isUplink = true;
|
|
20
|
+
static title: string;
|
|
21
|
+
static fromBytes(data: Uint8Array): GetCurrentMul;
|
|
22
|
+
toBytes(): Uint8Array;
|
|
23
|
+
}
|
|
24
|
+
export default GetCurrentMul;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import Command from '../../Command.js';
|
|
2
|
+
import CommandBinaryBuffer from '../../CommandBinaryBuffer.js';
|
|
3
|
+
const COMMAND_ID = 0x18;
|
|
4
|
+
const COMMAND_TITLE = 'GET_CURRENT_MUL';
|
|
5
|
+
// 2 bytes for 7 channels + (7 channels * 5 byte for current value of channel)
|
|
6
|
+
const COMMAND_BODY_MAX_SIZE = 37;
|
|
7
|
+
class GetCurrentMul extends Command {
|
|
8
|
+
constructor(parameters) {
|
|
9
|
+
super();
|
|
10
|
+
this.parameters = parameters;
|
|
11
|
+
this.parameters.channels = this.parameters.channels.sort((a, b) => a.index - b.index);
|
|
12
|
+
}
|
|
13
|
+
static fromBytes(data) {
|
|
14
|
+
const parameters = { channels: [] };
|
|
15
|
+
const buffer = new CommandBinaryBuffer(data);
|
|
16
|
+
const channels = buffer.getChannels(false);
|
|
17
|
+
parameters.channels = channels.map(channelIndex => ({
|
|
18
|
+
value: buffer.getExtendedValue(),
|
|
19
|
+
index: channelIndex
|
|
20
|
+
}));
|
|
21
|
+
return new GetCurrentMul(parameters);
|
|
22
|
+
}
|
|
23
|
+
toBytes() {
|
|
24
|
+
const buffer = new CommandBinaryBuffer(COMMAND_BODY_MAX_SIZE, false);
|
|
25
|
+
const { channels } = this.parameters;
|
|
26
|
+
buffer.setChannels(channels.map(({ index }) => index));
|
|
27
|
+
channels.forEach(({ value }) => buffer.setExtendedValue(value));
|
|
28
|
+
return Command.toBytes(COMMAND_ID, buffer.getBytesToOffset());
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
GetCurrentMul.id = COMMAND_ID;
|
|
32
|
+
GetCurrentMul.isUplink = true;
|
|
33
|
+
GetCurrentMul.title = COMMAND_TITLE;
|
|
34
|
+
export default GetCurrentMul;
|
|
35
|
+
//# sourceMappingURL=GetCurrentMul.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GetCurrentMul.js","sourceRoot":"","sources":["../../../src/commands/uplink/GetCurrentMul.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,kBAAkB,CAAC;AACvC,OAAO,mBAAmB,MAAM,8BAA8B,CAAC;AAG/D,MAAM,UAAU,GAAG,IAAI,CAAC;AACxB,MAAM,aAAa,GAAG,iBAAiB,CAAC;AAExC,8EAA8E;AAC9E,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAkBjC,MAAM,aAAc,SAAQ,OAAO;IAC/B,YAAqB,UAAoC;QACrD,KAAK,EAAE,CAAC;QADS,eAAU,GAAV,UAAU,CAA0B;QAGrD,IAAI,CAAC,UAAU,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1F,CAAC;IAQD,MAAM,CAAC,SAAS,CAAG,IAAgB;QAC/B,MAAM,UAAU,GAA6B,EAAC,QAAQ,EAAE,EAAE,EAAC,CAAC;QAE5D,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,IAAI,CAAC,CAAC;QAE7C,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE3C,UAAU,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YAChD,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE;YAChC,KAAK,EAAE,YAAY;SACtB,CAAC,CAAC,CAAC;QAEJ,OAAO,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED,OAAO;QACH,MAAM,MAAM,GAAG,IAAI,mBAAmB,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;QACrE,MAAM,EAAC,QAAQ,EAAC,GAAG,IAAI,CAAC,UAAU,CAAC;QAEnC,MAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QACrD,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAC,KAAK,EAAC,EAAE,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;QAE9D,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAClE,CAAC;;AA7BM,gBAAE,GAAG,UAAU,CAAC;AAEP,sBAAQ,GAAG,IAAI,CAAC;AAEzB,mBAAK,GAAG,aAAa,CAAC;AA6BjC,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import Command from '../../Command.js';
|
|
2
|
+
interface IEventBase {
|
|
3
|
+
}
|
|
4
|
+
interface INewEventParameters {
|
|
5
|
+
id: number;
|
|
6
|
+
sequenceNumber: number;
|
|
7
|
+
data: IEventBase;
|
|
8
|
+
}
|
|
9
|
+
declare class NewEvent extends Command {
|
|
10
|
+
parameters: INewEventParameters;
|
|
11
|
+
constructor(parameters: INewEventParameters);
|
|
12
|
+
static readonly id = 21;
|
|
13
|
+
static readonly isUplink = true;
|
|
14
|
+
static readonly title = "NEW_EVENT";
|
|
15
|
+
static fromBytes(data: Uint8Array): NewEvent;
|
|
16
|
+
toBytes(): Uint8Array;
|
|
17
|
+
}
|
|
18
|
+
export default NewEvent;
|