@zimo-elektronik/zcan 1.0.35 → 1.0.36
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__/vehicleGroup.test.ts +15 -26
- package/dist/common/enums.d.ts +0 -5
- package/dist/common/enums.js +0 -6
- package/dist/common/enums.js.map +1 -1
- package/dist/common/models.d.ts +2 -2
- package/dist/loco/vehicleGroup.d.ts +8 -5
- package/dist/loco/vehicleGroup.js +54 -18
- package/dist/loco/vehicleGroup.js.map +1 -1
- package/dist/loco/vehicleMsg.d.ts +24 -1
- package/dist/loco/vehicleMsg.js +38 -1
- package/dist/loco/vehicleMsg.js.map +1 -1
- package/package.json +1 -1
- package/protocol_docs/docs/command-groups/vehicles/vehicle-special-function-switch.md +1 -1
- package/src/common/enums.ts +0 -6
- package/src/common/models.ts +4 -25
- package/src/loco/vehicleGroup.ts +80 -34
- package/src/loco/vehicleMsg.ts +97 -52
|
@@ -1,15 +1,8 @@
|
|
|
1
1
|
import {createMX10, initConnection} from './util';
|
|
2
2
|
import {afterAll, beforeAll, expect, it} from '@jest/globals';
|
|
3
3
|
import {firstValueFrom} from 'rxjs';
|
|
4
|
-
import {delay} from '../src/
|
|
5
|
-
import {
|
|
6
|
-
Direction,
|
|
7
|
-
DirectionDefault,
|
|
8
|
-
Manual,
|
|
9
|
-
OperatingMode,
|
|
10
|
-
ShuntingFunction,
|
|
11
|
-
SpecialFunctionMode,
|
|
12
|
-
} from '../src';
|
|
4
|
+
import {delay} from '../src/common/utils';
|
|
5
|
+
import {Direction, Manual, OperatingMode, ShuntingFunction, SpecialFunctionMode} from '../src';
|
|
13
6
|
|
|
14
7
|
describe('Vehicle group tests - 0x02', () => {
|
|
15
8
|
const mx10 = createMX10();
|
|
@@ -37,13 +30,11 @@ describe('Vehicle group tests - 0x02', () => {
|
|
|
37
30
|
});
|
|
38
31
|
|
|
39
32
|
it('0x01 - retrieve operating mode', async () => {
|
|
40
|
-
mx10.vehicle.
|
|
41
|
-
const
|
|
33
|
+
mx10.vehicle.getVehicleMode(3);
|
|
34
|
+
const msg = await firstValueFrom(mx10.vehicle.onVehicleMode);
|
|
42
35
|
|
|
43
|
-
expect(
|
|
44
|
-
|
|
45
|
-
expect(data.nid).toBe(3);
|
|
46
|
-
expect(data.operatingMode).toBe(OperatingMode.DCC);
|
|
36
|
+
expect(msg.trainNid()).toBe(3);
|
|
37
|
+
expect(msg.operatingMode()).toBe(OperatingMode.DCC);
|
|
47
38
|
});
|
|
48
39
|
|
|
49
40
|
test.each([
|
|
@@ -55,16 +46,14 @@ describe('Vehicle group tests - 0x02', () => {
|
|
|
55
46
|
'0x02 - change speed and directions',
|
|
56
47
|
async ({nid, speedStep, forward, eastWest}) => {
|
|
57
48
|
mx10.vehicle.changeSpeed(nid, speedStep, forward, eastWest);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
expect(
|
|
61
|
-
expect(
|
|
62
|
-
expect(
|
|
63
|
-
|
|
64
|
-
expect(
|
|
65
|
-
expect(
|
|
66
|
-
expect(data.eastWest).toBe(eastWest);
|
|
67
|
-
expect(data.emergencyStop).toBe(false);
|
|
49
|
+
const msg = await firstValueFrom(mx10.vehicle.onVehicleSpeed);
|
|
50
|
+
expect(msg).toBeDefined();
|
|
51
|
+
expect(msg.trainNid()).toBe(nid);
|
|
52
|
+
expect(msg.divisor).toBe(0);
|
|
53
|
+
expect(msg.speedStep).toBe(speedStep);
|
|
54
|
+
expect(msg.forward).toBe(forward);
|
|
55
|
+
expect(msg.eastWest).toBe(eastWest);
|
|
56
|
+
expect(msg.emergencyStop).toBe(false);
|
|
68
57
|
},
|
|
69
58
|
);
|
|
70
59
|
|
|
@@ -114,7 +103,7 @@ describe('Vehicle group tests - 0x02', () => {
|
|
|
114
103
|
{mode: SpecialFunctionMode.SHUNTING_FUNCTION, state: ShuntingFunction.AZBZ},
|
|
115
104
|
{
|
|
116
105
|
mode: SpecialFunctionMode.DIRECTION_DEFAULT,
|
|
117
|
-
state:
|
|
106
|
+
state: Direction.WEST,
|
|
118
107
|
},
|
|
119
108
|
])('0x05 - special function mode', async ({mode, state}) => {
|
|
120
109
|
mx10.vehicle.changeSpecialFunction(testNID, mode, state);
|
package/dist/common/enums.d.ts
CHANGED
|
@@ -108,11 +108,6 @@ export declare enum ShuntingFunction {
|
|
|
108
108
|
AZBZ = 1,
|
|
109
109
|
HALF = 2
|
|
110
110
|
}
|
|
111
|
-
export declare enum DirectionDefault {
|
|
112
|
-
NO_CHANGE = 0,
|
|
113
|
-
DIRECTION_EAST = 1,
|
|
114
|
-
DIRECTION_WEST = 2
|
|
115
|
-
}
|
|
116
111
|
export declare enum BidiType {
|
|
117
112
|
RAILCOM_STATISTICS = 0,
|
|
118
113
|
SPEED_REPORT = 256,
|
package/dist/common/enums.js
CHANGED
|
@@ -130,12 +130,6 @@ export var ShuntingFunction;
|
|
|
130
130
|
ShuntingFunction[ShuntingFunction["AZBZ"] = 1] = "AZBZ";
|
|
131
131
|
ShuntingFunction[ShuntingFunction["HALF"] = 2] = "HALF";
|
|
132
132
|
})(ShuntingFunction || (ShuntingFunction = {}));
|
|
133
|
-
export var DirectionDefault;
|
|
134
|
-
(function (DirectionDefault) {
|
|
135
|
-
DirectionDefault[DirectionDefault["NO_CHANGE"] = 0] = "NO_CHANGE";
|
|
136
|
-
DirectionDefault[DirectionDefault["DIRECTION_EAST"] = 1] = "DIRECTION_EAST";
|
|
137
|
-
DirectionDefault[DirectionDefault["DIRECTION_WEST"] = 2] = "DIRECTION_WEST";
|
|
138
|
-
})(DirectionDefault || (DirectionDefault = {}));
|
|
139
133
|
export var BidiType;
|
|
140
134
|
(function (BidiType) {
|
|
141
135
|
BidiType[BidiType["RAILCOM_STATISTICS"] = 0] = "RAILCOM_STATISTICS";
|
package/dist/common/enums.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/common/enums.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/common/enums.ts"],"names":[],"mappings":"AACA,MAAM,CAAN,IAAY,OAKX;AALD,WAAY,OAAO;IAClB,mCAAU,CAAA;IACV,mCAAU,CAAA;IACV,mCAAU,CAAA;IACV,mCAAU,CAAA;AACX,CAAC,EALW,OAAO,KAAP,OAAO,QAKlB;AAED,MAAM,CAAN,IAAY,aASX;AATD,WAAY,aAAa;IACxB,6BAAY,CAAA;IACZ,4BAAW,CAAA;IACX,4BAAW,CAAA;IACX,4BAAW,CAAA;IACX,0BAAS,CAAA;IACT,4BAAW,CAAA;IACX,oCAAmB,CAAA;IACnB,+BAAc,CAAA;AACf,CAAC,EATW,aAAa,KAAb,aAAa,QASxB;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,GAAW,EAAE,EAAE;IAE/C,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC;IACtB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAC3C,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,aAAa,CAAC,OAAO,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,CAAN,IAAY,aAOX;AAPD,WAAY,aAAa;IACxB,uDAAO,CAAA;IACP,mDAAK,CAAA;IACL,mDAAK,CAAA;IACL,mDAAK,CAAA;IACL,qDAAM,CAAA;IACN,uDAAO,CAAA;AACR,CAAC,EAPW,aAAa,KAAb,aAAa,QAOxB;AAED,MAAM,CAAN,IAAY,kBAWX;AAXD,WAAY,kBAAkB;IAE7B,+BAAS,CAAA;IAET,+BAAS,CAAA;IACT,+BAAS,CAAA;IACT,+BAAS,CAAA;IAET,mCAAa,CAAA;IAEb,mCAAa,CAAA;AACd,CAAC,EAXW,kBAAkB,KAAlB,kBAAkB,QAW7B;AAKD,MAAM,CAAN,IAAY,YAMX;AAND,WAAY,YAAY;IAEvB,yDAAS,CAAA;IAGT,mDAAM,CAAA;AACP,CAAC,EANW,YAAY,KAAZ,YAAY,QAMvB;AAED,MAAM,CAAN,IAAY,eAOX;AAPD,WAAY,eAAe;IAC1B,yDAAU,CAAA;IACV,qDAAQ,CAAA;IACR,qDAAQ,CAAA;IACR,mDAAO,CAAA;IACP,2DAAW,CAAA;IACX,sEAAiB,CAAA;AAClB,CAAC,EAPW,eAAe,KAAf,eAAe,QAO1B;AAED,MAAM,CAAN,IAAY,SAUX;AAVD,WAAY,SAAS;IACpB,wCAAQ,CAAA;IACR,6CAAU,CAAA;IACV,yCAAQ,CAAA;IACR,yCAAQ,CAAA;IACR,uCAAO,CAAA;IACP,6CAAU,CAAA;IACV,2CAAS,CAAA;IACT,2CAAS,CAAA;IACT,mDAAa,CAAA;AACd,CAAC,EAVW,SAAS,KAAT,SAAS,QAUpB;AAED,MAAM,CAAN,IAAY,SAIX;AAJD,WAAY,SAAS;IACpB,mDAAa,CAAA;IACb,yCAAQ,CAAA;IACR,yCAAQ,CAAA;AACT,CAAC,EAJW,SAAS,KAAT,SAAS,QAIpB;AAED,MAAM,CAAN,IAAY,QAYX;AAZD,WAAY,QAAQ;IACnB,6CAAO,CAAA;IACP,6CAAO,CAAA;IACP,mDAAU,CAAA;IACV,uDAAY,CAAA;IACZ,6CAAO,CAAA;IACP,qDAAW,CAAA;IACX,yCAAK,CAAA;IACL,uCAAI,CAAA;IACJ,uDAAY,CAAA;IACZ,uCAAI,CAAA;IACJ,oDAAU,CAAA;AACX,CAAC,EAZW,QAAQ,KAAR,QAAQ,QAYnB;AAED,MAAM,CAAN,IAAY,SAMX;AAND,WAAY,SAAS;IACpB,+CAAW,CAAA;IACX,2DAAiB,CAAA;IACjB,2CAAS,CAAA;IACT,0FAAiC,CAAA;IACjC,sEAAyB,CAAA;AAC1B,CAAC,EANW,SAAS,KAAT,SAAS,QAMpB;AAED,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACrB,+CAAa,CAAA;IACb,+CAAa,CAAA;IACb,iDAAc,CAAA;IACd,mDAAe,CAAA;AAChB,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AAED,MAAM,CAAN,IAAY,YAQX;AARD,WAAY,YAAY;IACvB,iEAAoB,CAAA;IACpB,+CAAW,CAAA;IACX,+CAAW,CAAA;IACX,+DAAmB,CAAA;IACnB,+DAAmB,CAAA;IACnB,gDAAW,CAAA;IACX,kDAAY,CAAA;AACb,CAAC,EARW,YAAY,KAAZ,YAAY,QAQvB;AAED,MAAM,CAAN,IAAY,mBAIX;AAJD,WAAY,mBAAmB;IAC9B,iEAAU,CAAA;IACV,uFAAqB,CAAA;IACrB,uFAAqB,CAAA;AACtB,CAAC,EAJW,mBAAmB,KAAnB,mBAAmB,QAI9B;AAED,MAAM,CAAN,IAAY,MAGX;AAHD,WAAY,MAAM;IACjB,iCAAO,CAAA;IACP,+BAAM,CAAA;AACP,CAAC,EAHW,MAAM,KAAN,MAAM,QAGjB;AAED,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC3B,qDAAO,CAAA;IACP,uDAAQ,CAAA;IACR,uDAAQ,CAAA;AACT,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED,MAAM,CAAN,IAAY,QAUX;AAVD,WAAY,QAAQ;IACnB,mEAA2B,CAAA;IAC3B,yDAAqB,CAAA;IACrB,6DAAuB,CAAA;IACvB,qCAAW,CAAA;IACX,uCAAY,CAAA;IACZ,sDAAmB,CAAA;IACnB,oDAAkB,CAAA;IAClB,4DAAsB,CAAA;IACtB,8CAAe,CAAA;AAChB,CAAC,EAVW,QAAQ,KAAR,QAAQ,QAUnB;AAED,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC3B,6DAAW,CAAA;IACX,6DAAW,CAAA;IACX,6DAAW,CAAA;AACZ,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED,MAAM,CAAN,IAAY,WAgBX;AAhBD,WAAY,WAAW;IACtB,yDAAc,CAAA;IACd,yDAAc,CAAA;IACd,+DAAiB,CAAA;IACjB,+DAAiB,CAAA;IACjB,qDAAY,CAAA;IACZ,qDAAY,CAAA;IACZ,mEAAmB,CAAA;IACnB,mEAAmB,CAAA;IACnB,8DAAiB,CAAA;IACjB,0DAAe,CAAA;IACf,iFAA6B,CAAA;IAC7B,iFAA6B,CAAA;IAC7B,+EAA4B,CAAA;IAC5B,iFAA6B,CAAA;IAC7B,iFAA6B,CAAA;AAC9B,CAAC,EAhBW,WAAW,KAAX,WAAW,QAgBtB;AAED,MAAM,CAAN,IAAY,aAIX;AAJD,WAAY,aAAa;IACxB,uDAAW,CAAA;IACX,qDAAU,CAAA;IACV,qDAAU,CAAA;AACX,CAAC,EAJW,aAAa,KAAb,aAAa,QAIxB;AAED,MAAM,CAAN,IAAY,kBAIX;AAJD,WAAY,kBAAkB;IAC7B,+BAAS,CAAA;IACT,iCAAW,CAAA;IACX,yCAAmB,CAAA;AACpB,CAAC,EAJW,kBAAkB,KAAlB,kBAAkB,QAI7B"}
|
package/dist/common/models.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NameType, Direction, ExternalController, FunctionMode, OperatingMode, SystemStateMode, TrackMode, ImageType, FxConfigType, SpecialFunctionMode, Manual,
|
|
1
|
+
import { NameType, Direction, ExternalController, FunctionMode, OperatingMode, SystemStateMode, TrackMode, ImageType, FxConfigType, SpecialFunctionMode, Manual, ShuntingFunction, BidiType, ForwardOrReverse, AccessoryMode, FxModeType } from './enums';
|
|
2
2
|
import { ZcanDataArray } from './communication';
|
|
3
3
|
export interface Train {
|
|
4
4
|
nid: number;
|
|
@@ -133,7 +133,7 @@ export interface CallFunctionData {
|
|
|
133
133
|
export interface CallSpecialFunctionData {
|
|
134
134
|
nid: number;
|
|
135
135
|
specialFunctionMode: SpecialFunctionMode;
|
|
136
|
-
specialFunctionState: Manual | ShuntingFunction |
|
|
136
|
+
specialFunctionState: Manual | ShuntingFunction | Direction;
|
|
137
137
|
}
|
|
138
138
|
export interface SystemStateData {
|
|
139
139
|
nid: number;
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import MX10 from '../MX10';
|
|
2
2
|
import { Subject } from 'rxjs';
|
|
3
|
-
import { CallFunctionData, CallSpecialFunctionData, VehicleStateData
|
|
4
|
-
import { Direction,
|
|
5
|
-
import { MsgVehicleMode } from './vehicleMsg';
|
|
3
|
+
import { CallFunctionData, CallSpecialFunctionData, VehicleStateData } from '../common/models';
|
|
4
|
+
import { Direction, Manual, MaxSpeedSteps, OperatingMode, ShuntingFunction, SpecialFunctionMode } from '../common/enums';
|
|
5
|
+
import { MsgVehicleMode, MsgVehicleSpeed } from './vehicleMsg';
|
|
6
6
|
export default class VehicleGroup {
|
|
7
7
|
readonly onVehicleState: Subject<VehicleStateData>;
|
|
8
8
|
readonly onVehicleMode: Subject<MsgVehicleMode>;
|
|
9
|
-
readonly
|
|
9
|
+
readonly onVehicleSpeed: Subject<MsgVehicleSpeed>;
|
|
10
10
|
readonly onCallFunction: Subject<CallFunctionData>;
|
|
11
11
|
readonly onCallSpecialFunction: Subject<CallSpecialFunctionData>;
|
|
12
12
|
private modeQ;
|
|
13
|
+
private speedQ;
|
|
13
14
|
private mx10;
|
|
14
15
|
constructor(mx10: MX10);
|
|
15
16
|
getVehicleMode(trainNid: number): Promise<MsgVehicleMode | undefined>;
|
|
16
17
|
setVehicleMode(trainNid: number, opMode: OperatingMode, speedSteps: MaxSpeedSteps): Promise<MsgVehicleMode | undefined>;
|
|
18
|
+
getVehicleSpeed(trainNid: number): Promise<MsgVehicleSpeed | undefined>;
|
|
19
|
+
setVehicleSpeed(trainNid: number, speedStep: number, divisor?: number, forward?: boolean, emergencyStop?: boolean, eastWest?: Direction): Promise<MsgVehicleSpeed | undefined>;
|
|
17
20
|
changeSpeed(vehicleAddress: number, speedStep: number, forward: boolean, eastWest?: Direction, emergencyStop?: boolean): void;
|
|
18
21
|
callFunction(vehicleAddress: number, functionId: number, functionStatus: boolean): void;
|
|
19
|
-
changeSpecialFunction(vehicleAddress: number, specialFunctionMode: SpecialFunctionMode, specialFunctionStatus: Manual | ShuntingFunction |
|
|
22
|
+
changeSpecialFunction(vehicleAddress: number, specialFunctionMode: SpecialFunctionMode, specialFunctionStatus: Manual | ShuntingFunction | Direction): void;
|
|
20
23
|
vehicleState(vehicleAddress: number): void;
|
|
21
24
|
activeModeTrain(vehicleAddress: number): void;
|
|
22
25
|
activeModeTakeOver(vehicleAddress: number): void;
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { Subject } from 'rxjs';
|
|
2
|
-
import { MsgMode, } from '../common/enums';
|
|
3
|
-
import { combineSpeedAndDirection
|
|
2
|
+
import { Direction, MsgMode, } from '../common/enums';
|
|
3
|
+
import { combineSpeedAndDirection } from '../common/speedUtils';
|
|
4
4
|
import { Query } from '../common/communication';
|
|
5
|
-
import { MsgVehicleMode } from './vehicleMsg';
|
|
5
|
+
import { MsgVehicleMode, MsgVehicleSpeed } from './vehicleMsg';
|
|
6
6
|
export default class VehicleGroup {
|
|
7
7
|
onVehicleState = new Subject();
|
|
8
8
|
onVehicleMode = new Subject();
|
|
9
|
-
|
|
9
|
+
onVehicleSpeed = new Subject();
|
|
10
10
|
onCallFunction = new Subject();
|
|
11
11
|
onCallSpecialFunction = new Subject();
|
|
12
12
|
modeQ = undefined;
|
|
13
|
+
speedQ = undefined;
|
|
13
14
|
mx10;
|
|
14
15
|
constructor(mx10) { this.mx10 = mx10; }
|
|
15
16
|
async getVehicleMode(trainNid) {
|
|
@@ -55,6 +56,50 @@ export default class VehicleGroup {
|
|
|
55
56
|
this.modeQ = undefined;
|
|
56
57
|
return rv;
|
|
57
58
|
}
|
|
59
|
+
async getVehicleSpeed(trainNid) {
|
|
60
|
+
if (this.speedQ !== undefined && !await this.speedQ.lock()) {
|
|
61
|
+
this.mx10.log.next("mx10.getVehicleSpeed: failed to acquire lock");
|
|
62
|
+
return undefined;
|
|
63
|
+
}
|
|
64
|
+
this.speedQ = new Query(MsgVehicleSpeed.header(MsgMode.REQ, trainNid), this.onVehicleSpeed);
|
|
65
|
+
this.speedQ.log = ((msg) => { this.mx10.log.next(msg); });
|
|
66
|
+
this.speedQ.tx = ((header) => {
|
|
67
|
+
const msg = new MsgVehicleSpeed(header);
|
|
68
|
+
this.mx10.sendMsg(msg);
|
|
69
|
+
});
|
|
70
|
+
this.speedQ.match = ((msg) => {
|
|
71
|
+
return (msg.trainNid() === trainNid);
|
|
72
|
+
});
|
|
73
|
+
const rv = await this.speedQ.run();
|
|
74
|
+
this.mx10.log.next("mx10.getVehicleSpeed.rv: " + JSON.stringify(rv));
|
|
75
|
+
this.speedQ.unlock();
|
|
76
|
+
this.speedQ = undefined;
|
|
77
|
+
return rv;
|
|
78
|
+
}
|
|
79
|
+
async setVehicleSpeed(trainNid, speedStep, divisor = 0, forward = true, emergencyStop = false, eastWest = Direction.UNDEFINED) {
|
|
80
|
+
MsgVehicleSpeed.log = (msg) => { this.mx10.log.next(msg); };
|
|
81
|
+
if (this.speedQ !== undefined && !await this.speedQ.lock()) {
|
|
82
|
+
this.mx10.log.next("mx10.setVehicleSpeed: failed to acquire lock");
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
this.speedQ = new Query(MsgVehicleSpeed.header(MsgMode.CMD, trainNid), this.onVehicleSpeed);
|
|
86
|
+
this.speedQ.log = (msg) => { this.mx10.log.next(msg); };
|
|
87
|
+
this.speedQ.tx = ((header) => {
|
|
88
|
+
const speedAndDir = MsgVehicleSpeed.speedAndDir(speedStep, forward, emergencyStop, eastWest);
|
|
89
|
+
const msg = new MsgVehicleSpeed(header, speedAndDir, divisor);
|
|
90
|
+
this.mx10.log.next('speed query tx: ' + JSON.stringify(msg));
|
|
91
|
+
this.mx10.sendMsg(msg);
|
|
92
|
+
});
|
|
93
|
+
this.speedQ.match = ((msg) => {
|
|
94
|
+
this.mx10.log.next('speed query rx: ' + JSON.stringify(msg));
|
|
95
|
+
return (msg.trainNid() === trainNid);
|
|
96
|
+
});
|
|
97
|
+
const rv = await this.speedQ.run(MsgVehicleSpeed.rxDelay());
|
|
98
|
+
this.mx10.log.next("mx10.setVehicleSpeed.rv: " + JSON.stringify(rv));
|
|
99
|
+
this.speedQ.unlock();
|
|
100
|
+
this.speedQ = undefined;
|
|
101
|
+
return rv;
|
|
102
|
+
}
|
|
58
103
|
changeSpeed(vehicleAddress, speedStep, forward, eastWest, emergencyStop) {
|
|
59
104
|
const speedAndDirection = combineSpeedAndDirection(speedStep, forward, eastWest, emergencyStop);
|
|
60
105
|
this.mx10.sendData(0x02, 0x02, [
|
|
@@ -134,20 +179,11 @@ export default class VehicleGroup {
|
|
|
134
179
|
}
|
|
135
180
|
}
|
|
136
181
|
parseVehicleSpeed(size, mode, nid, buffer) {
|
|
137
|
-
if (this.
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
this.onChangeSpeed.next({
|
|
143
|
-
nid: NID,
|
|
144
|
-
divisor,
|
|
145
|
-
speedStep,
|
|
146
|
-
forward,
|
|
147
|
-
eastWest,
|
|
148
|
-
emergencyStop,
|
|
149
|
-
});
|
|
150
|
-
}
|
|
182
|
+
if (!this.onVehicleSpeed.observed)
|
|
183
|
+
return;
|
|
184
|
+
const msg = MsgVehicleSpeed.fromBuffer(mode, buffer);
|
|
185
|
+
this.mx10.log.next('parseVehicleSpeed: ' + JSON.stringify(msg));
|
|
186
|
+
this.onVehicleSpeed.next(msg);
|
|
151
187
|
}
|
|
152
188
|
parseVehicleFunction(size, mode, nid, buffer) {
|
|
153
189
|
if (this.onCallFunction.observed) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vehicleGroup.js","sourceRoot":"","sources":["../../src/loco/vehicleGroup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vehicleGroup.js","sourceRoot":"","sources":["../../src/loco/vehicleGroup.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Header, Message } from "../common/communication";
|
|
2
|
-
import { MaxSpeedSteps, MsgMode, OperatingMode } from "../common/enums";
|
|
2
|
+
import { Direction, MaxSpeedSteps, MsgMode, OperatingMode } from "../common/enums";
|
|
3
3
|
export declare class MsgVehicleMode extends Message {
|
|
4
4
|
static header: (mode: MsgMode, nid: number) => {
|
|
5
5
|
group: number;
|
|
@@ -21,3 +21,26 @@ export declare class MsgVehicleMode extends Message {
|
|
|
21
21
|
speedSteps(): MaxSpeedSteps | undefined;
|
|
22
22
|
operatingMode(): OperatingMode | undefined;
|
|
23
23
|
}
|
|
24
|
+
export declare class MsgVehicleSpeed extends Message {
|
|
25
|
+
static header: (mode: MsgMode, nid: number) => {
|
|
26
|
+
group: number;
|
|
27
|
+
cmd: number;
|
|
28
|
+
mode: MsgMode;
|
|
29
|
+
nid: number;
|
|
30
|
+
};
|
|
31
|
+
static rxDelay: () => number;
|
|
32
|
+
static log: (msg: string) => void;
|
|
33
|
+
private static rxTiming;
|
|
34
|
+
constructor(header: Header, speedAndDirection?: number, divisor?: number);
|
|
35
|
+
rxDelay(millis: number): void;
|
|
36
|
+
trainNid(): number;
|
|
37
|
+
divisor(): number;
|
|
38
|
+
speedStep(): number;
|
|
39
|
+
direction(): boolean;
|
|
40
|
+
directionAck(): boolean;
|
|
41
|
+
forward(): boolean;
|
|
42
|
+
eastWest(): number;
|
|
43
|
+
emergencyStop(): boolean;
|
|
44
|
+
static fromBuffer(mode: MsgMode, buffer: Buffer): MsgVehicleSpeed;
|
|
45
|
+
static speedAndDir(speed: number, forward?: boolean, emergencyStop?: boolean, eastWest?: Direction): number;
|
|
46
|
+
}
|
package/dist/loco/vehicleMsg.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Message } from "../common/communication";
|
|
2
2
|
import { Ranger } from "../common/utils";
|
|
3
|
-
import { MaxSpeedSteps, OperatingMode } from "../common/enums";
|
|
3
|
+
import { Direction, MaxSpeedSteps, MsgMode, OperatingMode } from "../common/enums";
|
|
4
|
+
import { directACKBites, directionBites, eastWestBites_, emergencyStopB, speedBites____ } from "../common/bites";
|
|
4
5
|
export class MsgVehicleMode extends Message {
|
|
5
6
|
static header = (mode, nid) => { return { group: 0x2, cmd: 0x1, mode, nid }; };
|
|
6
7
|
static rxDelay = () => { return this.rxTiming.now(); };
|
|
@@ -56,4 +57,40 @@ export class MsgVehicleMode extends Message {
|
|
|
56
57
|
return OperatingMode.UNKNOWN;
|
|
57
58
|
}
|
|
58
59
|
}
|
|
60
|
+
export class MsgVehicleSpeed extends Message {
|
|
61
|
+
static header = (mode, nid) => { return { group: 0x2, cmd: 0x2, mode, nid }; };
|
|
62
|
+
static rxDelay = () => { return this.rxTiming.now(); };
|
|
63
|
+
static log = () => { };
|
|
64
|
+
static rxTiming = new Ranger({ min: 5, max: 20, now: 5 });
|
|
65
|
+
constructor(header, speedAndDirection, divisor) {
|
|
66
|
+
super(header);
|
|
67
|
+
if (header.mode === MsgMode.REQ)
|
|
68
|
+
return;
|
|
69
|
+
super.push({ value: speedAndDirection || 0, length: 2 });
|
|
70
|
+
super.push({ value: divisor || 0, length: 1 });
|
|
71
|
+
super.push({ value: 0, length: 1 });
|
|
72
|
+
}
|
|
73
|
+
rxDelay(millis) { MsgVehicleSpeed.rxTiming.set(millis); }
|
|
74
|
+
trainNid() { return this.header.nid; }
|
|
75
|
+
divisor() { return this.data[1].value; }
|
|
76
|
+
speedStep() { return this.data[0].value & speedBites____; }
|
|
77
|
+
direction() { return (this.data[0].value & directionBites) === directionBites; }
|
|
78
|
+
directionAck() { return (this.data[0].value & directACKBites) === directACKBites; }
|
|
79
|
+
forward() { return !this.direction() && !this.directionAck(); }
|
|
80
|
+
eastWest() { return (this.data[0].value & eastWestBites_) >> 12; }
|
|
81
|
+
emergencyStop() { return (this.data[0].value & emergencyStopB) === emergencyStopB; }
|
|
82
|
+
static fromBuffer(mode, buffer) {
|
|
83
|
+
const nid = buffer.readUInt16LE(0);
|
|
84
|
+
const speedAndDir = buffer.readUInt16LE(2);
|
|
85
|
+
const divisor = buffer.readUint8(4);
|
|
86
|
+
const msg = new MsgVehicleSpeed(MsgVehicleSpeed.header(mode, nid), speedAndDir, divisor);
|
|
87
|
+
return msg;
|
|
88
|
+
}
|
|
89
|
+
static speedAndDir(speed, forward = true, emergencyStop = false, eastWest = Direction.UNDEFINED) {
|
|
90
|
+
const direction = Number(!forward);
|
|
91
|
+
const stop = Number(emergencyStop);
|
|
92
|
+
return speed | (direction << 10) | (eastWest << 12) | (stop << 15);
|
|
93
|
+
}
|
|
94
|
+
;
|
|
95
|
+
}
|
|
59
96
|
//# sourceMappingURL=vehicleMsg.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vehicleMsg.js","sourceRoot":"","sources":["../../src/loco/vehicleMsg.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"vehicleMsg.js","sourceRoot":"","sources":["../../src/loco/vehicleMsg.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.36",
|
|
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",
|
|
@@ -23,7 +23,7 @@ When receiving command _0x05_ the 'Data' section will look like this:
|
|
|
23
23
|
|-----------------------|-------------------|---------------------------------------------------------------|
|
|
24
24
|
| 1 | Manual | OFF = 0<br/> ON = 1 |
|
|
25
25
|
| 2 | Shunting function | OFF = 0<br/> AZBZ = 1<br/> Half = 2 |
|
|
26
|
-
| 3 |
|
|
26
|
+
| 3 | Direction | No change = 0<br/> Direction East = 1<br/> Direction West = 2 |
|
|
27
27
|
|
|
28
28
|
## Sending
|
|
29
29
|
|
package/src/common/enums.ts
CHANGED
|
@@ -143,12 +143,6 @@ export enum ShuntingFunction {
|
|
|
143
143
|
HALF = 2,
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
export enum DirectionDefault {
|
|
147
|
-
NO_CHANGE = 0,
|
|
148
|
-
DIRECTION_EAST = 1,
|
|
149
|
-
DIRECTION_WEST = 2,
|
|
150
|
-
}
|
|
151
|
-
|
|
152
146
|
export enum BidiType {
|
|
153
147
|
RAILCOM_STATISTICS = 0x0000,
|
|
154
148
|
SPEED_REPORT = 0x0100,
|
package/src/common/models.ts
CHANGED
|
@@ -1,28 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
NameType,
|
|
4
|
-
Direction,
|
|
5
|
-
ExternalController,
|
|
6
|
-
FunctionMode,
|
|
7
|
-
OperatingMode,
|
|
8
|
-
SystemStateMode,
|
|
9
|
-
TrackMode,
|
|
10
|
-
ImageType,
|
|
11
|
-
FxConfigType,
|
|
12
|
-
SpecialFunctionMode,
|
|
13
|
-
Manual,
|
|
14
|
-
DirectionDefault,
|
|
15
|
-
ShuntingFunction,
|
|
16
|
-
BidiType,
|
|
17
|
-
ForwardOrReverse,
|
|
18
|
-
AccessoryMode,
|
|
19
|
-
FxModeType,
|
|
20
|
-
ModInfoType,
|
|
21
|
-
MsgMode,
|
|
22
|
-
MaxSpeedSteps,
|
|
1
|
+
import {NameType, Direction, ExternalController, FunctionMode, OperatingMode, SystemStateMode, TrackMode, ImageType,
|
|
2
|
+
FxConfigType, SpecialFunctionMode, Manual, ShuntingFunction, BidiType, ForwardOrReverse, AccessoryMode, FxModeType,
|
|
23
3
|
} from './enums';
|
|
24
|
-
import {
|
|
25
|
-
import { Subject } from 'rxjs';
|
|
4
|
+
import {ZcanDataArray} from './communication';
|
|
26
5
|
|
|
27
6
|
|
|
28
7
|
export interface Train {
|
|
@@ -176,7 +155,7 @@ export interface CallFunctionData {
|
|
|
176
155
|
export interface CallSpecialFunctionData {
|
|
177
156
|
nid: number;
|
|
178
157
|
specialFunctionMode: SpecialFunctionMode;
|
|
179
|
-
specialFunctionState: Manual | ShuntingFunction |
|
|
158
|
+
specialFunctionState: Manual | ShuntingFunction | Direction;
|
|
180
159
|
}
|
|
181
160
|
|
|
182
161
|
export interface SystemStateData {
|
package/src/loco/vehicleGroup.ts
CHANGED
|
@@ -1,25 +1,13 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
2
|
import MX10 from '../MX10';
|
|
3
3
|
import {Subject} from 'rxjs';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
CallSpecialFunctionData,
|
|
7
|
-
VehicleStateData,
|
|
8
|
-
VehicleSpeedData,
|
|
9
|
-
} from '../common/models';
|
|
10
|
-
import {
|
|
11
|
-
Direction,
|
|
12
|
-
DirectionDefault,
|
|
13
|
-
Manual,
|
|
14
|
-
MaxSpeedSteps,
|
|
15
|
-
MsgMode,
|
|
16
|
-
OperatingMode,
|
|
17
|
-
ShuntingFunction,
|
|
18
|
-
SpecialFunctionMode,
|
|
4
|
+
import {CallFunctionData, CallSpecialFunctionData, VehicleStateData} from '../common/models';
|
|
5
|
+
import {Direction, Manual, MaxSpeedSteps, MsgMode, OperatingMode, ShuntingFunction, SpecialFunctionMode,
|
|
19
6
|
} from '../common/enums';
|
|
20
|
-
import {combineSpeedAndDirection
|
|
7
|
+
import {combineSpeedAndDirection} from '../common/speedUtils';
|
|
21
8
|
import { Query } from '../common/communication';
|
|
22
|
-
import { MsgVehicleMode } from './vehicleMsg';
|
|
9
|
+
import { MsgVehicleMode, MsgVehicleSpeed } from './vehicleMsg';
|
|
10
|
+
|
|
23
11
|
/**
|
|
24
12
|
*
|
|
25
13
|
* @category Groups
|
|
@@ -28,11 +16,12 @@ export default class VehicleGroup
|
|
|
28
16
|
{
|
|
29
17
|
public readonly onVehicleState = new Subject<VehicleStateData>();
|
|
30
18
|
public readonly onVehicleMode = new Subject<MsgVehicleMode>();
|
|
31
|
-
public readonly
|
|
19
|
+
public readonly onVehicleSpeed = new Subject<MsgVehicleSpeed>(); // VehicleSpeedData
|
|
32
20
|
public readonly onCallFunction = new Subject<CallFunctionData>();
|
|
33
21
|
public readonly onCallSpecialFunction = new Subject<CallSpecialFunctionData>();
|
|
34
22
|
|
|
35
23
|
private modeQ: Query<MsgVehicleMode> | undefined = undefined;
|
|
24
|
+
private speedQ: Query<MsgVehicleSpeed> | undefined = undefined;
|
|
36
25
|
|
|
37
26
|
private mx10: MX10;
|
|
38
27
|
|
|
@@ -87,6 +76,57 @@ export default class VehicleGroup
|
|
|
87
76
|
return rv;
|
|
88
77
|
}
|
|
89
78
|
|
|
79
|
+
async getVehicleSpeed(trainNid: number)
|
|
80
|
+
{
|
|
81
|
+
if(this.speedQ !== undefined && !await this.speedQ.lock()) {
|
|
82
|
+
this.mx10.log.next("mx10.getVehicleSpeed: failed to acquire lock");
|
|
83
|
+
return undefined;
|
|
84
|
+
}
|
|
85
|
+
this.speedQ = new Query(MsgVehicleSpeed.header(MsgMode.REQ, trainNid), this.onVehicleSpeed);
|
|
86
|
+
this.speedQ.log = ((msg) => {this.mx10.log.next(msg)});
|
|
87
|
+
this.speedQ.tx = ((header) => {
|
|
88
|
+
const msg = new MsgVehicleSpeed(header);
|
|
89
|
+
// this.mx10.log.next('speed query tx: ' + JSON.stringify(msg));
|
|
90
|
+
this.mx10.sendMsg(msg);
|
|
91
|
+
});
|
|
92
|
+
this.speedQ.match = ((msg) => {
|
|
93
|
+
// this.mx10.log.next('speed query rx: ' + JSON.stringify(msg));
|
|
94
|
+
return (msg.trainNid() === trainNid);
|
|
95
|
+
})
|
|
96
|
+
const rv = await this.speedQ.run();
|
|
97
|
+
this.mx10.log.next("mx10.getVehicleSpeed.rv: " + JSON.stringify(rv));
|
|
98
|
+
this.speedQ.unlock();
|
|
99
|
+
this.speedQ = undefined;
|
|
100
|
+
return rv;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
async setVehicleSpeed(trainNid: number, speedStep: number, divisor: number = 0, forward: boolean = true,
|
|
104
|
+
emergencyStop: boolean = false, eastWest: Direction = Direction.UNDEFINED)
|
|
105
|
+
{
|
|
106
|
+
MsgVehicleSpeed.log = (msg) => {this.mx10.log.next(msg)};
|
|
107
|
+
if(this.speedQ !== undefined && !await this.speedQ.lock()) {
|
|
108
|
+
this.mx10.log.next("mx10.setVehicleSpeed: failed to acquire lock");
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
this.speedQ = new Query(MsgVehicleSpeed.header(MsgMode.CMD, trainNid), this.onVehicleSpeed);
|
|
112
|
+
this.speedQ.log = (msg) => {this.mx10.log.next(msg)};
|
|
113
|
+
this.speedQ.tx = ((header) => {
|
|
114
|
+
const speedAndDir= MsgVehicleSpeed.speedAndDir(speedStep, forward, emergencyStop, eastWest);
|
|
115
|
+
const msg = new MsgVehicleSpeed(header, speedAndDir, divisor);
|
|
116
|
+
this.mx10.log.next('speed query tx: ' + JSON.stringify(msg));
|
|
117
|
+
this.mx10.sendMsg(msg);
|
|
118
|
+
});
|
|
119
|
+
this.speedQ.match = ((msg) => {
|
|
120
|
+
this.mx10.log.next('speed query rx: ' + JSON.stringify(msg));
|
|
121
|
+
return (msg.trainNid() === trainNid);
|
|
122
|
+
})
|
|
123
|
+
const rv = await this.speedQ.run(MsgVehicleSpeed.rxDelay());
|
|
124
|
+
this.mx10.log.next("mx10.setVehicleSpeed.rv: " + JSON.stringify(rv));
|
|
125
|
+
this.speedQ.unlock();
|
|
126
|
+
this.speedQ = undefined;
|
|
127
|
+
return rv;
|
|
128
|
+
}
|
|
129
|
+
|
|
90
130
|
changeSpeed(vehicleAddress: number, speedStep: number, forward: boolean, eastWest?: Direction, emergencyStop?: boolean)
|
|
91
131
|
{
|
|
92
132
|
const speedAndDirection = combineSpeedAndDirection(speedStep, forward, eastWest, emergencyStop);
|
|
@@ -107,7 +147,7 @@ export default class VehicleGroup
|
|
|
107
147
|
}
|
|
108
148
|
|
|
109
149
|
changeSpecialFunction(vehicleAddress: number, specialFunctionMode: SpecialFunctionMode,
|
|
110
|
-
specialFunctionStatus: Manual | ShuntingFunction |
|
|
150
|
+
specialFunctionStatus: Manual | ShuntingFunction | Direction) {
|
|
111
151
|
this.mx10.sendData(0x02, 0x05, [
|
|
112
152
|
{value: vehicleAddress, length: 2},
|
|
113
153
|
{value: specialFunctionMode, length: 2},
|
|
@@ -178,23 +218,29 @@ export default class VehicleGroup
|
|
|
178
218
|
// 0x02.0x02
|
|
179
219
|
private parseVehicleSpeed(size: number, mode: number, nid: number, buffer: Buffer)
|
|
180
220
|
{
|
|
181
|
-
if
|
|
182
|
-
|
|
183
|
-
const speedAndDirection = buffer.readUInt16LE(2);
|
|
184
|
-
const divisor = buffer.readUint8(4);
|
|
221
|
+
if(!this.onVehicleSpeed.observed)
|
|
222
|
+
return;
|
|
185
223
|
|
|
186
|
-
|
|
187
|
-
|
|
224
|
+
const msg = MsgVehicleSpeed.fromBuffer(mode, buffer);
|
|
225
|
+
this.mx10.log.next('parseVehicleSpeed: ' + JSON.stringify(msg));
|
|
226
|
+
this.onVehicleSpeed.next(msg);
|
|
188
227
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
228
|
+
|
|
229
|
+
// const NID = buffer.readUInt16LE(0);
|
|
230
|
+
// const speedAndDirection = buffer.readUInt16LE(2);
|
|
231
|
+
// const divisor = buffer.readUint8(4);
|
|
232
|
+
|
|
233
|
+
// const {speedStep, forward, eastWest, emergencyStop} =
|
|
234
|
+
// parseSpeed(speedAndDirection);
|
|
235
|
+
|
|
236
|
+
// {
|
|
237
|
+
// nid: NID,
|
|
238
|
+
// divisor,
|
|
239
|
+
// speedStep,
|
|
240
|
+
// forward,
|
|
241
|
+
// eastWest,
|
|
242
|
+
// emergencyStop,
|
|
243
|
+
// });
|
|
198
244
|
}
|
|
199
245
|
|
|
200
246
|
// 0x02.0x04
|
package/src/loco/vehicleMsg.ts
CHANGED
|
@@ -1,60 +1,105 @@
|
|
|
1
1
|
|
|
2
2
|
import { Header, Message } from "../common/communication";
|
|
3
3
|
import { Ranger } from "../common/utils";
|
|
4
|
-
import { MaxSpeedSteps, MsgMode, OperatingMode } from "../common/enums";
|
|
4
|
+
import { Direction, MaxSpeedSteps, MsgMode, OperatingMode } from "../common/enums";
|
|
5
|
+
import { directACKBites, directionBites, eastWestBites_, emergencyStopB, speedBites____ } from "../common/bites";
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
export class MsgVehicleMode extends Message
|
|
8
9
|
{
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
10
|
+
public static header = (mode: MsgMode, nid: number) => {return {group: 0x2, cmd: 0x1, mode, nid}}
|
|
11
|
+
public static rxDelay = () => {return this.rxTiming.now()}
|
|
12
|
+
public static log: (msg: string) => void = () => {};
|
|
13
|
+
|
|
14
|
+
private static rxTiming = new Ranger({min: 5, max: 20, now: 5});
|
|
15
|
+
|
|
16
|
+
public static modeByte1(opMode: OperatingMode, speedSteps: MaxSpeedSteps)
|
|
17
|
+
{
|
|
18
|
+
const opModes = Object.values(OperatingMode);
|
|
19
|
+
let rv = (speedSteps ? speedSteps : MaxSpeedSteps.UNKNOWN) as number;
|
|
20
|
+
for(let i=0; i<opModes.length; i++) if(opMode === opModes[i]) {rv |= i << 4; break;}
|
|
21
|
+
return rv;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
constructor(header: Header, mode?: number[] | {opMode: OperatingMode, speedSteps: MaxSpeedSteps})
|
|
25
|
+
{
|
|
26
|
+
super(header);
|
|
27
|
+
if(!mode) return;
|
|
28
|
+
MsgVehicleMode.log("MsgVehicleMode.mode: " + mode);
|
|
29
|
+
if(Array.isArray(mode)) for(let byte of mode.slice(0, 2)) {
|
|
30
|
+
super.push({value: byte, length: 1});
|
|
31
|
+
MsgVehicleMode.log("MsgVehicleMode.push: " + byte);
|
|
32
|
+
} else {
|
|
33
|
+
super.push({value: MsgVehicleMode.modeByte1(mode.opMode, mode.speedSteps), length: 1});
|
|
34
|
+
super.push({value: 0, length: 1});
|
|
35
|
+
super.push({value: 0, length: 1});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
rxDelay(millis: number) {MsgVehicleMode.rxTiming.set(millis)}
|
|
40
|
+
trainNid(): number {return this.header.nid}
|
|
41
|
+
|
|
42
|
+
mode(): number[] | undefined
|
|
43
|
+
{
|
|
44
|
+
if(this.data.length < 2) return undefined;
|
|
45
|
+
return this.data.map(data => data.value as number);
|
|
46
|
+
}
|
|
47
|
+
speedSteps(): MaxSpeedSteps | undefined
|
|
48
|
+
{
|
|
49
|
+
if(this.data.length < 2) return undefined;
|
|
50
|
+
const steps = (this.data[0].value as number) & 0xf;
|
|
51
|
+
if (steps > 0 && steps < 6) return Object.values(MaxSpeedSteps)[steps] as MaxSpeedSteps;
|
|
52
|
+
return MaxSpeedSteps.UNKNOWN;
|
|
53
|
+
}
|
|
54
|
+
operatingMode(): OperatingMode | undefined
|
|
55
|
+
{
|
|
56
|
+
if(this.data.length < 2) return undefined;
|
|
57
|
+
const mode = (this.data[0].value as number) >> 4;
|
|
58
|
+
if (mode > 0 && mode < 8) return Object.values(OperatingMode)[mode];
|
|
59
|
+
return OperatingMode.UNKNOWN;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export class MsgVehicleSpeed extends Message
|
|
64
|
+
{
|
|
65
|
+
public static header = (mode: MsgMode, nid: number) => {return {group: 0x2, cmd: 0x2, mode, nid}}
|
|
66
|
+
public static rxDelay = () => {return this.rxTiming.now()}
|
|
67
|
+
public static log: (msg: string) => void = () => {};
|
|
68
|
+
private static rxTiming = new Ranger({min: 5, max: 20, now: 5});
|
|
69
|
+
|
|
70
|
+
constructor(header: Header, speedAndDirection?: number, divisor?: number)
|
|
71
|
+
{
|
|
72
|
+
super(header);
|
|
73
|
+
if(header.mode === MsgMode.REQ) return;
|
|
74
|
+
super.push({value: speedAndDirection || 0, length: 2});
|
|
75
|
+
super.push({value: divisor || 0, length: 1});
|
|
76
|
+
super.push({value: 0, length: 1});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
rxDelay(millis: number) {MsgVehicleSpeed.rxTiming.set(millis)}
|
|
80
|
+
trainNid(): number {return this.header.nid}
|
|
81
|
+
divisor(): number {return this.data[1].value as number;}
|
|
82
|
+
speedStep(): number {return (this.data[0].value as number) & speedBites____;}
|
|
83
|
+
direction(): boolean {return ((this.data[0].value as number) & directionBites) === directionBites;}
|
|
84
|
+
directionAck(): boolean {return ((this.data[0].value as number) & directACKBites) === directACKBites;}
|
|
85
|
+
forward(): boolean {return !this.direction() && !this.directionAck();}
|
|
86
|
+
eastWest(): number {return ((this.data[0].value as number) & eastWestBites_) >> 12;}
|
|
87
|
+
emergencyStop(): boolean {return ((this.data[0].value as number) & emergencyStopB) === emergencyStopB;}
|
|
88
|
+
|
|
89
|
+
public static fromBuffer(mode: MsgMode, buffer: Buffer)
|
|
90
|
+
{
|
|
91
|
+
const nid = buffer.readUInt16LE(0);
|
|
92
|
+
const speedAndDir = buffer.readUInt16LE(2);
|
|
93
|
+
const divisor = buffer.readUint8(4);
|
|
94
|
+
const msg = new MsgVehicleSpeed(MsgVehicleSpeed.header(mode, nid), speedAndDir, divisor);
|
|
95
|
+
return msg;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
public static speedAndDir(speed: number, forward: boolean = true, emergencyStop: boolean = false,
|
|
99
|
+
eastWest: Direction = Direction.UNDEFINED)
|
|
100
|
+
{
|
|
101
|
+
const direction = Number(!forward);
|
|
102
|
+
const stop = Number(emergencyStop);
|
|
103
|
+
return speed | (direction << 10) | (eastWest << 12) | (stop << 15);
|
|
104
|
+
};
|
|
60
105
|
}
|