@zimo-elektronik/zcan 1.0.9 → 1.0.11
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/__tests__/accessoriesGroup.test.ts +39 -0
- package/dist/@types/models.d.ts +10 -1
- package/dist/internal/accessoryUtils.d.ts +3 -0
- package/dist/internal/accessoryUtils.js +36 -0
- package/dist/internal/accessoryUtils.js.map +1 -0
- package/dist/internal/bites.d.ts +16 -0
- package/dist/internal/bites.js +16 -0
- package/dist/internal/bites.js.map +1 -1
- package/dist/util/enums.d.ts +10 -0
- package/dist/util/enums.js +12 -0
- package/dist/util/enums.js.map +1 -1
- package/dist/zcan/accessoryCommandGroup.d.ts +8 -0
- package/dist/zcan/accessoryCommandGroup.js +60 -0
- package/dist/zcan/accessoryCommandGroup.js.map +1 -1
- package/package.json +2 -2
- package/src/@types/models.ts +11 -0
- package/src/internal/accessoryUtils.ts +39 -0
- package/src/internal/bites.ts +18 -0
- package/src/util/enums.ts +12 -0
- package/src/zcan/accessoryCommandGroup.ts +75 -1
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {createMX10, initConnection} from './util';
|
|
2
|
+
import {afterAll, beforeAll, describe, expect, it} from '@jest/globals';
|
|
3
|
+
import {AccessoryMode, AccessoryPortState} from '../src';
|
|
4
|
+
|
|
5
|
+
describe('Accessories group tests - 0x01', () => {
|
|
6
|
+
const mx10 = createMX10(true);
|
|
7
|
+
const nid = 0x300a; // nid:10
|
|
8
|
+
|
|
9
|
+
beforeAll(async () => {
|
|
10
|
+
await initConnection(mx10);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
afterAll(() => {
|
|
14
|
+
mx10.closeSocket();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
it('0x01 - Accessory Mode test', () => {
|
|
18
|
+
mx10.accessoryCommand.accessoryModeByNid(nid);
|
|
19
|
+
|
|
20
|
+
const test = mx10.accessoryCommand.onAccessoryMode.subscribe((data) => {
|
|
21
|
+
expect(data.nid).toBe(nid);
|
|
22
|
+
expect(data.mode).toBeDefined();
|
|
23
|
+
expect(data.mode).toBe(AccessoryMode.PAIRED);
|
|
24
|
+
|
|
25
|
+
test.unsubscribe();
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
it('0x02 - Accessory Port test', async () => {
|
|
30
|
+
mx10.accessoryCommand.accessoryPortByNid(nid);
|
|
31
|
+
|
|
32
|
+
const test = mx10.accessoryCommand.onAccessoryPort.subscribe((data) => {
|
|
33
|
+
expect(data.nid).toBe(nid);
|
|
34
|
+
expect(data.port).toBeDefined();
|
|
35
|
+
|
|
36
|
+
test.unsubscribe();
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
});
|
package/dist/@types/models.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NameType, Direction, ExternalController, FunctionMode, OperatingMode, SystemStateMode, TrackMode, ImageType, FxInfoType, SpecialFunctionMode, Manual, DirectionDefault, ShuntingFunction, BidiType, ForwardOrReverse } from 'src/util/enums';
|
|
1
|
+
import { NameType, Direction, ExternalController, FunctionMode, OperatingMode, SystemStateMode, TrackMode, ImageType, FxInfoType, SpecialFunctionMode, Manual, DirectionDefault, ShuntingFunction, BidiType, ForwardOrReverse, AccessoryMode } from 'src/util/enums';
|
|
2
2
|
import { ZcanDataArray } from './communication';
|
|
3
3
|
export interface Train {
|
|
4
4
|
nid: number;
|
|
@@ -188,3 +188,12 @@ export interface LocoStateData {
|
|
|
188
188
|
sentDCCData: number;
|
|
189
189
|
receivedRailcomData: number;
|
|
190
190
|
}
|
|
191
|
+
export interface AccessoryModeData {
|
|
192
|
+
nid: number;
|
|
193
|
+
mode: AccessoryMode;
|
|
194
|
+
}
|
|
195
|
+
export interface AccessoryPortData {
|
|
196
|
+
nid: number;
|
|
197
|
+
mode: number;
|
|
198
|
+
port: number;
|
|
199
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { AccessoryPortState } from '../util/enums';
|
|
2
|
+
export const parseAccessory4Byte = (accessoryState) => {
|
|
3
|
+
const portStates = new Map();
|
|
4
|
+
for (let i = 0; i < 8; i++) {
|
|
5
|
+
const onBit = 1 << (i * 2);
|
|
6
|
+
const offBit = 1 << (i * 2 + 1);
|
|
7
|
+
if (accessoryState & onBit) {
|
|
8
|
+
portStates.set(i + 1, AccessoryPortState.ON);
|
|
9
|
+
}
|
|
10
|
+
else if (accessoryState & offBit) {
|
|
11
|
+
portStates.set(i + 1, AccessoryPortState.OFF);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
portStates.set(i + 1, AccessoryPortState.UNKNOWN);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return portStates;
|
|
18
|
+
};
|
|
19
|
+
export const parseAccessory8byte = (accessoryState) => {
|
|
20
|
+
const portStates = new Map();
|
|
21
|
+
for (let i = 0; i < 8; i++) {
|
|
22
|
+
const onBit = 1 << i;
|
|
23
|
+
const offBit = 1 << (i + 1);
|
|
24
|
+
if (accessoryState & onBit) {
|
|
25
|
+
portStates.set(i + 1, AccessoryPortState.ON);
|
|
26
|
+
}
|
|
27
|
+
else if (accessoryState & offBit) {
|
|
28
|
+
portStates.set(i + 1, AccessoryPortState.OFF);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
portStates.set(i + 1, AccessoryPortState.UNKNOWN);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return portStates;
|
|
35
|
+
};
|
|
36
|
+
//# sourceMappingURL=accessoryUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessoryUtils.js","sourceRoot":"","sources":["../../src/internal/accessoryUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,cAAsB,EAAE,EAAE;IAC5D,MAAM,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAEhC,IAAI,cAAc,GAAG,KAAK,EAAE,CAAC;YAC3B,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,cAAc,GAAG,MAAM,EAAE,CAAC;YACnC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,cAAsB,EAAE,EAAE;IAC5D,MAAM,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEzD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAE5B,IAAI,cAAc,GAAG,KAAK,EAAE,CAAC;YAC3B,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;aAAM,IAAI,cAAc,GAAG,MAAM,EAAE,CAAC;YACnC,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC"}
|
package/dist/internal/bites.d.ts
CHANGED
|
@@ -7,3 +7,19 @@ export declare const speedStepBites = 15;
|
|
|
7
7
|
export declare const modeBites_____ = 240;
|
|
8
8
|
export declare const shuntingFunctionB = 15;
|
|
9
9
|
export declare const manualModeB = 48;
|
|
10
|
+
export declare const accessoryPort1on_ = 1;
|
|
11
|
+
export declare const accessoryPort1off = 2;
|
|
12
|
+
export declare const accessoryPort2on_ = 4;
|
|
13
|
+
export declare const accessoryPort2off = 8;
|
|
14
|
+
export declare const accessoryPort3on_ = 16;
|
|
15
|
+
export declare const accessoryPort3off = 32;
|
|
16
|
+
export declare const accessoryPort4on_ = 64;
|
|
17
|
+
export declare const accessoryPort4off = 128;
|
|
18
|
+
export declare const accessoryPort5on_ = 256;
|
|
19
|
+
export declare const accessoryPort5off = 512;
|
|
20
|
+
export declare const accessoryPort6on_ = 1024;
|
|
21
|
+
export declare const accessoryPort6off = 2048;
|
|
22
|
+
export declare const accessoryPort7on_ = 4096;
|
|
23
|
+
export declare const accessoryPort7off = 8192;
|
|
24
|
+
export declare const accessoryPort8on_ = 16384;
|
|
25
|
+
export declare const accessoryPort8off = 32768;
|
package/dist/internal/bites.js
CHANGED
|
@@ -7,4 +7,20 @@ export const speedStepBites = 0b00001111;
|
|
|
7
7
|
export const modeBites_____ = 0b11110000;
|
|
8
8
|
export const shuntingFunctionB = 0b1111;
|
|
9
9
|
export const manualModeB = 0b110000;
|
|
10
|
+
export const accessoryPort1on_ = 0b00000000000000000000000000000001;
|
|
11
|
+
export const accessoryPort1off = 0b00000000000000000000000000000010;
|
|
12
|
+
export const accessoryPort2on_ = 0b00000000000000000000000000000100;
|
|
13
|
+
export const accessoryPort2off = 0b00000000000000000000000000001000;
|
|
14
|
+
export const accessoryPort3on_ = 0b00000000000000000000000000010000;
|
|
15
|
+
export const accessoryPort3off = 0b00000000000000000000000000100000;
|
|
16
|
+
export const accessoryPort4on_ = 0b00000000000000000000000001000000;
|
|
17
|
+
export const accessoryPort4off = 0b00000000000000000000000010000000;
|
|
18
|
+
export const accessoryPort5on_ = 0b00000000000000000000000100000000;
|
|
19
|
+
export const accessoryPort5off = 0b00000000000000000000001000000000;
|
|
20
|
+
export const accessoryPort6on_ = 0b00000000000000000000010000000000;
|
|
21
|
+
export const accessoryPort6off = 0b00000000000000000000100000000000;
|
|
22
|
+
export const accessoryPort7on_ = 0b00000000000000000001000000000000;
|
|
23
|
+
export const accessoryPort7off = 0b00000000000000000010000000000000;
|
|
24
|
+
export const accessoryPort8on_ = 0b00000000000000000100000000000000;
|
|
25
|
+
export const accessoryPort8off = 0b00000000000000001000000000000000;
|
|
10
26
|
//# sourceMappingURL=bites.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bites.js","sourceRoot":"","sources":["../../src/internal/bites.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"bites.js","sourceRoot":"","sources":["../../src/internal/bites.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AACjD,MAAM,CAAC,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAEjD,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;AAEzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACxC,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAGpC,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC;AACpE,MAAM,CAAC,MAAM,iBAAiB,GAAG,kCAAkC,CAAC"}
|
package/dist/util/enums.d.ts
CHANGED
|
@@ -111,3 +111,13 @@ export declare enum ForwardOrReverse {
|
|
|
111
111
|
FORWARD = 1,
|
|
112
112
|
REVERSE = 2
|
|
113
113
|
}
|
|
114
|
+
export declare enum AccessoryMode {
|
|
115
|
+
UNKNOWN = 0,
|
|
116
|
+
PAIRED = 1,
|
|
117
|
+
SINGLE = 2
|
|
118
|
+
}
|
|
119
|
+
export declare enum AccessoryPortState {
|
|
120
|
+
ON = "on",
|
|
121
|
+
OFF = "off",
|
|
122
|
+
UNKNOWN = "unknown"
|
|
123
|
+
}
|
package/dist/util/enums.js
CHANGED
|
@@ -134,4 +134,16 @@ export var ForwardOrReverse;
|
|
|
134
134
|
ForwardOrReverse[ForwardOrReverse["FORWARD"] = 1] = "FORWARD";
|
|
135
135
|
ForwardOrReverse[ForwardOrReverse["REVERSE"] = 2] = "REVERSE";
|
|
136
136
|
})(ForwardOrReverse || (ForwardOrReverse = {}));
|
|
137
|
+
export var AccessoryMode;
|
|
138
|
+
(function (AccessoryMode) {
|
|
139
|
+
AccessoryMode[AccessoryMode["UNKNOWN"] = 0] = "UNKNOWN";
|
|
140
|
+
AccessoryMode[AccessoryMode["PAIRED"] = 1] = "PAIRED";
|
|
141
|
+
AccessoryMode[AccessoryMode["SINGLE"] = 2] = "SINGLE";
|
|
142
|
+
})(AccessoryMode || (AccessoryMode = {}));
|
|
143
|
+
export var AccessoryPortState;
|
|
144
|
+
(function (AccessoryPortState) {
|
|
145
|
+
AccessoryPortState["ON"] = "on";
|
|
146
|
+
AccessoryPortState["OFF"] = "off";
|
|
147
|
+
AccessoryPortState["UNKNOWN"] = "unknown";
|
|
148
|
+
})(AccessoryPortState || (AccessoryPortState = {}));
|
|
137
149
|
//# sourceMappingURL=enums.js.map
|
package/dist/util/enums.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/util/enums.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/util/enums.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
1
2
|
import MX10 from '../MX10';
|
|
3
|
+
import { AccessoryModeData, AccessoryPortData } from '../@types/models';
|
|
2
4
|
export default class AccessoryCommandGroup {
|
|
5
|
+
readonly onAccessoryMode: Subject<AccessoryModeData>;
|
|
6
|
+
readonly onAccessoryPort: Subject<AccessoryPortData>;
|
|
3
7
|
private mx10;
|
|
4
8
|
constructor(mx10: MX10);
|
|
9
|
+
accessoryModeByNid(nid: number): void;
|
|
10
|
+
accessoryPortByNid(nid: number): void;
|
|
5
11
|
parse(size: number, command: number, mode: number, nid: number, buffer: Buffer): void;
|
|
12
|
+
parseAccessoryMode(size: number, mode: number, nid: number, buffer: Buffer): void;
|
|
13
|
+
parseAccessoryPort(size: number, mode: number, nid: number, buffer: Buffer): void;
|
|
6
14
|
}
|
|
@@ -1,9 +1,69 @@
|
|
|
1
|
+
import { Subject } from 'rxjs';
|
|
2
|
+
import { AccessoryMode } from '../util/enums';
|
|
1
3
|
export default class AccessoryCommandGroup {
|
|
4
|
+
onAccessoryMode = new Subject();
|
|
5
|
+
onAccessoryPort = new Subject();
|
|
2
6
|
mx10;
|
|
3
7
|
constructor(mx10) {
|
|
4
8
|
this.mx10 = mx10;
|
|
5
9
|
}
|
|
10
|
+
accessoryModeByNid(nid) {
|
|
11
|
+
this.mx10.sendData(0x01, 0x01, [{ value: nid, length: 2 }], 0b00);
|
|
12
|
+
}
|
|
13
|
+
accessoryPortByNid(nid) {
|
|
14
|
+
this.mx10.sendData(0x01, 0x02, [
|
|
15
|
+
{ value: nid, length: 2 },
|
|
16
|
+
{ value: 0, length: 2 },
|
|
17
|
+
], 0b00);
|
|
18
|
+
}
|
|
6
19
|
parse(size, command, mode, nid, buffer) {
|
|
20
|
+
switch (command) {
|
|
21
|
+
case 0x01:
|
|
22
|
+
this.parseAccessoryMode(size, mode, nid, buffer);
|
|
23
|
+
break;
|
|
24
|
+
case 0x02:
|
|
25
|
+
this.parseAccessoryPort(size, mode, nid, buffer);
|
|
26
|
+
break;
|
|
27
|
+
default:
|
|
28
|
+
console.warn('command not parsed: ' + command.toString());
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
parseAccessoryMode(size, mode, nid, buffer) {
|
|
32
|
+
if (this.onAccessoryMode.observed) {
|
|
33
|
+
const deviceNID = buffer.readUInt16LE(0);
|
|
34
|
+
const mode = buffer.readUInt16LE(2);
|
|
35
|
+
let parsedMode;
|
|
36
|
+
switch (mode) {
|
|
37
|
+
case 1:
|
|
38
|
+
parsedMode = AccessoryMode.PAIRED;
|
|
39
|
+
break;
|
|
40
|
+
case 2:
|
|
41
|
+
parsedMode = AccessoryMode.SINGLE;
|
|
42
|
+
break;
|
|
43
|
+
default:
|
|
44
|
+
parsedMode = AccessoryMode.UNKNOWN;
|
|
45
|
+
}
|
|
46
|
+
if (deviceNID) {
|
|
47
|
+
this.onAccessoryMode.next({
|
|
48
|
+
nid: deviceNID,
|
|
49
|
+
mode: parsedMode,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
parseAccessoryPort(size, mode, nid, buffer) {
|
|
55
|
+
if (this.onAccessoryPort.observed) {
|
|
56
|
+
const deviceNID = buffer.readUInt16LE(0);
|
|
57
|
+
const type = buffer.readUInt16LE(2);
|
|
58
|
+
const port = buffer.readUInt8(4);
|
|
59
|
+
if (deviceNID) {
|
|
60
|
+
this.onAccessoryPort.next({
|
|
61
|
+
nid: deviceNID,
|
|
62
|
+
mode,
|
|
63
|
+
port,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
7
67
|
}
|
|
8
68
|
}
|
|
9
69
|
//# sourceMappingURL=accessoryCommandGroup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessoryCommandGroup.js","sourceRoot":"","sources":["../../src/zcan/accessoryCommandGroup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"accessoryCommandGroup.js","sourceRoot":"","sources":["../../src/zcan/accessoryCommandGroup.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": "https://github.com/ZIMO-Elektronik/zcan",
|
|
8
|
-
"version": "1.0.
|
|
8
|
+
"version": "1.0.11",
|
|
9
9
|
"scripts": {
|
|
10
10
|
"start": "node dist/main.js",
|
|
11
11
|
"start:dev": "nodemon --ext js,ts,json,env --exec \"node --experimental-specifier-resolution=node --loader ts-node/esm\" src/main.ts",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"test": "jest --forceExit",
|
|
15
15
|
"test:coverage": "npm run test -- --coverage",
|
|
16
16
|
"test:ci": "npm run test -- --colors --coverage --ci",
|
|
17
|
-
"test:selected": "jest --forceExit --runTestsByPath D:\\Projects\\zcan\\__tests__\\
|
|
17
|
+
"test:selected": "jest --forceExit --runTestsByPath D:\\Projects\\zcan\\__tests__\\accessoriesGroup.test.ts",
|
|
18
18
|
"lint": "eslint --ext=.ts,.js .",
|
|
19
19
|
"format": "prettier \"./**\" --write --ignore-unknown",
|
|
20
20
|
"format:check": "prettier \"./**\" --ignore-unknown --check",
|
package/src/@types/models.ts
CHANGED
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
ShuntingFunction,
|
|
15
15
|
BidiType,
|
|
16
16
|
ForwardOrReverse,
|
|
17
|
+
AccessoryMode,
|
|
17
18
|
} from 'src/util/enums';
|
|
18
19
|
import {ZcanDataArray} from './communication';
|
|
19
20
|
|
|
@@ -233,3 +234,13 @@ export interface LocoStateData {
|
|
|
233
234
|
sentDCCData: number;
|
|
234
235
|
receivedRailcomData: number;
|
|
235
236
|
}
|
|
237
|
+
|
|
238
|
+
export interface AccessoryModeData {
|
|
239
|
+
nid: number;
|
|
240
|
+
mode: AccessoryMode;
|
|
241
|
+
}
|
|
242
|
+
export interface AccessoryPortData {
|
|
243
|
+
nid: number;
|
|
244
|
+
mode: number;
|
|
245
|
+
port: number;
|
|
246
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import {AccessoryPortState} from '../util/enums';
|
|
2
|
+
|
|
3
|
+
export const parseAccessory4Byte = (accessoryState: number) => {
|
|
4
|
+
const portStates = new Map<number, AccessoryPortState>();
|
|
5
|
+
|
|
6
|
+
for (let i = 0; i < 8; i++) {
|
|
7
|
+
const onBit = 1 << (i * 2);
|
|
8
|
+
const offBit = 1 << (i * 2 + 1);
|
|
9
|
+
|
|
10
|
+
if (accessoryState & onBit) {
|
|
11
|
+
portStates.set(i + 1, AccessoryPortState.ON);
|
|
12
|
+
} else if (accessoryState & offBit) {
|
|
13
|
+
portStates.set(i + 1, AccessoryPortState.OFF);
|
|
14
|
+
} else {
|
|
15
|
+
portStates.set(i + 1, AccessoryPortState.UNKNOWN);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return portStates;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const parseAccessory8byte = (accessoryState: number) => {
|
|
23
|
+
const portStates = new Map<number, AccessoryPortState>();
|
|
24
|
+
|
|
25
|
+
for (let i = 0; i < 8; i++) {
|
|
26
|
+
const onBit = 1 << i;
|
|
27
|
+
const offBit = 1 << (i + 1);
|
|
28
|
+
|
|
29
|
+
if (accessoryState & onBit) {
|
|
30
|
+
portStates.set(i + 1, AccessoryPortState.ON);
|
|
31
|
+
} else if (accessoryState & offBit) {
|
|
32
|
+
portStates.set(i + 1, AccessoryPortState.OFF);
|
|
33
|
+
} else {
|
|
34
|
+
portStates.set(i + 1, AccessoryPortState.UNKNOWN);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return portStates;
|
|
39
|
+
};
|
package/src/internal/bites.ts
CHANGED
|
@@ -9,3 +9,21 @@ export const modeBites_____ = 0b11110000;
|
|
|
9
9
|
|
|
10
10
|
export const shuntingFunctionB = 0b1111;
|
|
11
11
|
export const manualModeB = 0b110000;
|
|
12
|
+
|
|
13
|
+
// accessories
|
|
14
|
+
export const accessoryPort1on_ = 0b00000000000000000000000000000001;
|
|
15
|
+
export const accessoryPort1off = 0b00000000000000000000000000000010;
|
|
16
|
+
export const accessoryPort2on_ = 0b00000000000000000000000000000100;
|
|
17
|
+
export const accessoryPort2off = 0b00000000000000000000000000001000;
|
|
18
|
+
export const accessoryPort3on_ = 0b00000000000000000000000000010000;
|
|
19
|
+
export const accessoryPort3off = 0b00000000000000000000000000100000;
|
|
20
|
+
export const accessoryPort4on_ = 0b00000000000000000000000001000000;
|
|
21
|
+
export const accessoryPort4off = 0b00000000000000000000000010000000;
|
|
22
|
+
export const accessoryPort5on_ = 0b00000000000000000000000100000000;
|
|
23
|
+
export const accessoryPort5off = 0b00000000000000000000001000000000;
|
|
24
|
+
export const accessoryPort6on_ = 0b00000000000000000000010000000000;
|
|
25
|
+
export const accessoryPort6off = 0b00000000000000000000100000000000;
|
|
26
|
+
export const accessoryPort7on_ = 0b00000000000000000001000000000000;
|
|
27
|
+
export const accessoryPort7off = 0b00000000000000000010000000000000;
|
|
28
|
+
export const accessoryPort8on_ = 0b00000000000000000100000000000000;
|
|
29
|
+
export const accessoryPort8off = 0b00000000000000001000000000000000;
|
package/src/util/enums.ts
CHANGED
|
@@ -145,3 +145,15 @@ export enum ForwardOrReverse {
|
|
|
145
145
|
FORWARD = 1,
|
|
146
146
|
REVERSE = 2,
|
|
147
147
|
}
|
|
148
|
+
|
|
149
|
+
export enum AccessoryMode {
|
|
150
|
+
UNKNOWN = 0,
|
|
151
|
+
PAIRED = 1,
|
|
152
|
+
SINGLE = 2,
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export enum AccessoryPortState {
|
|
156
|
+
ON = 'on',
|
|
157
|
+
OFF = 'off',
|
|
158
|
+
UNKNOWN = 'unknown',
|
|
159
|
+
}
|
|
@@ -1,17 +1,39 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
|
+
import {Subject} from 'rxjs';
|
|
2
3
|
import MX10 from '../MX10';
|
|
4
|
+
import {AccessoryModeData, AccessoryPortData} from '../@types/models';
|
|
5
|
+
import {AccessoryMode} from '../util/enums';
|
|
3
6
|
|
|
4
7
|
/**
|
|
5
8
|
*
|
|
6
9
|
* @category Groups
|
|
7
10
|
*/
|
|
8
11
|
export default class AccessoryCommandGroup {
|
|
12
|
+
public readonly onAccessoryMode = new Subject<AccessoryModeData>();
|
|
13
|
+
public readonly onAccessoryPort = new Subject<AccessoryPortData>();
|
|
14
|
+
|
|
9
15
|
private mx10: MX10;
|
|
10
16
|
|
|
11
17
|
constructor(mx10: MX10) {
|
|
12
18
|
this.mx10 = mx10;
|
|
13
19
|
}
|
|
14
20
|
|
|
21
|
+
accessoryModeByNid(nid: number) {
|
|
22
|
+
this.mx10.sendData(0x01, 0x01, [{value: nid, length: 2}], 0b00);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
accessoryPortByNid(nid: number) {
|
|
26
|
+
this.mx10.sendData(
|
|
27
|
+
0x01,
|
|
28
|
+
0x02,
|
|
29
|
+
[
|
|
30
|
+
{value: nid, length: 2},
|
|
31
|
+
{value: 0, length: 2},
|
|
32
|
+
],
|
|
33
|
+
0b00,
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
15
37
|
parse(
|
|
16
38
|
size: number,
|
|
17
39
|
command: number,
|
|
@@ -19,6 +41,58 @@ export default class AccessoryCommandGroup {
|
|
|
19
41
|
nid: number,
|
|
20
42
|
buffer: Buffer,
|
|
21
43
|
) {
|
|
22
|
-
|
|
44
|
+
switch (command) {
|
|
45
|
+
case 0x01:
|
|
46
|
+
this.parseAccessoryMode(size, mode, nid, buffer);
|
|
47
|
+
break;
|
|
48
|
+
case 0x02:
|
|
49
|
+
this.parseAccessoryPort(size, mode, nid, buffer);
|
|
50
|
+
break;
|
|
51
|
+
default:
|
|
52
|
+
// eslint-disable-next-line no-console
|
|
53
|
+
console.warn('command not parsed: ' + command.toString());
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
parseAccessoryMode(size: number, mode: number, nid: number, buffer: Buffer) {
|
|
58
|
+
if (this.onAccessoryMode.observed) {
|
|
59
|
+
const deviceNID = buffer.readUInt16LE(0);
|
|
60
|
+
const mode = buffer.readUInt16LE(2);
|
|
61
|
+
|
|
62
|
+
let parsedMode: AccessoryMode;
|
|
63
|
+
switch (mode) {
|
|
64
|
+
case 1:
|
|
65
|
+
parsedMode = AccessoryMode.PAIRED;
|
|
66
|
+
break;
|
|
67
|
+
case 2:
|
|
68
|
+
parsedMode = AccessoryMode.SINGLE;
|
|
69
|
+
break;
|
|
70
|
+
default:
|
|
71
|
+
parsedMode = AccessoryMode.UNKNOWN;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (deviceNID) {
|
|
75
|
+
this.onAccessoryMode.next({
|
|
76
|
+
nid: deviceNID,
|
|
77
|
+
mode: parsedMode,
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
parseAccessoryPort(size: number, mode: number, nid: number, buffer: Buffer) {
|
|
84
|
+
if (this.onAccessoryPort.observed) {
|
|
85
|
+
const deviceNID = buffer.readUInt16LE(0);
|
|
86
|
+
const type = buffer.readUInt16LE(2);
|
|
87
|
+
const port = buffer.readUInt8(4); // only 1.st byte represents state of pins
|
|
88
|
+
|
|
89
|
+
if (deviceNID) {
|
|
90
|
+
this.onAccessoryPort.next({
|
|
91
|
+
nid: deviceNID,
|
|
92
|
+
mode,
|
|
93
|
+
port,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
23
97
|
}
|
|
24
98
|
}
|