@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.
@@ -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/internal/utils';
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.vehicleMode(3);
41
- const data = await firstValueFrom(mx10.vehicle.onVehicleMode);
33
+ mx10.vehicle.getVehicleMode(3);
34
+ const msg = await firstValueFrom(mx10.vehicle.onVehicleMode);
42
35
 
43
- expect(data.nid).toBe(3);
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
- const data = await firstValueFrom(mx10.vehicle.onChangeSpeed);
60
- expect(data).toBeDefined();
61
- expect(data.nid).toBe(nid);
62
- expect(data.divisor).toBe(0);
63
-
64
- expect(data.speedStep).toBe(speedStep);
65
- expect(data.forward).toBe(forward);
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: DirectionDefault.DIRECTION_WEST,
106
+ state: Direction.WEST,
118
107
  },
119
108
  ])('0x05 - special function mode', async ({mode, state}) => {
120
109
  mx10.vehicle.changeSpecialFunction(testNID, mode, state);
@@ -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,
@@ -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";
@@ -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":"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"}
@@ -1,4 +1,4 @@
1
- import { NameType, Direction, ExternalController, FunctionMode, OperatingMode, SystemStateMode, TrackMode, ImageType, FxConfigType, SpecialFunctionMode, Manual, DirectionDefault, ShuntingFunction, BidiType, ForwardOrReverse, AccessoryMode, FxModeType } from './enums';
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 | DirectionDefault;
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, VehicleSpeedData } from '../common/models';
4
- import { Direction, DirectionDefault, Manual, MaxSpeedSteps, OperatingMode, ShuntingFunction, SpecialFunctionMode } from '../common/enums';
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 onChangeSpeed: Subject<VehicleSpeedData>;
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 | DirectionDefault): void;
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, parseSpeed } from '../common/speedUtils';
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
- onChangeSpeed = new Subject();
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.onChangeSpeed.observed) {
138
- const NID = buffer.readUInt16LE(0);
139
- const speedAndDirection = buffer.readUInt16LE(2);
140
- const divisor = buffer.readUint8(4);
141
- const { speedStep, forward, eastWest, emergencyStop } = parseSpeed(speedAndDirection);
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
+ }
@@ -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":"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"}
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.35",
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 | DirectionDefault | No change = 0<br/> Direction East = 1<br/> Direction West = 2 |
26
+ | 3 | Direction | No change = 0<br/> Direction East = 1<br/> Direction West = 2 |
27
27
 
28
28
  ## Sending
29
29
 
@@ -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,
@@ -1,28 +1,7 @@
1
- import { Ranger } from './utils';
2
- import {
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 {Header, Message, ZcanDataArray} from './communication';
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 | DirectionDefault;
158
+ specialFunctionState: Manual | ShuntingFunction | Direction;
180
159
  }
181
160
 
182
161
  export interface SystemStateData {
@@ -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
- CallFunctionData,
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, parseSpeed} from '../common/speedUtils';
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 onChangeSpeed = new Subject<VehicleSpeedData>();
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 | DirectionDefault) {
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 (this.onChangeSpeed.observed) {
182
- const NID = buffer.readUInt16LE(0);
183
- const speedAndDirection = buffer.readUInt16LE(2);
184
- const divisor = buffer.readUint8(4);
221
+ if(!this.onVehicleSpeed.observed)
222
+ return;
185
223
 
186
- const {speedStep, forward, eastWest, emergencyStop} =
187
- parseSpeed(speedAndDirection);
224
+ const msg = MsgVehicleSpeed.fromBuffer(mode, buffer);
225
+ this.mx10.log.next('parseVehicleSpeed: ' + JSON.stringify(msg));
226
+ this.onVehicleSpeed.next(msg);
188
227
 
189
- this.onChangeSpeed.next({
190
- nid: NID,
191
- divisor,
192
- speedStep,
193
- forward,
194
- eastWest,
195
- emergencyStop,
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
@@ -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
- public static header = (mode: MsgMode, nid: number) => {return {group: 0x2, cmd: 0x1, mode, nid}}
10
- public static rxDelay = () => {return this.rxTiming.now()}
11
- public static log: (msg: string) => void = () => {};
12
-
13
- private static rxTiming = new Ranger({min: 5, max: 20, now: 5});
14
-
15
- public static modeByte1(opMode: OperatingMode, speedSteps: MaxSpeedSteps)
16
- {
17
- const opModes = Object.values(OperatingMode);
18
- let rv = (speedSteps ? speedSteps : MaxSpeedSteps.UNKNOWN) as number;
19
- for(let i=0; i<opModes.length; i++) if(opMode === opModes[i]) {rv |= i << 4; break;}
20
- return rv;
21
- }
22
-
23
- constructor(header: Header, mode?: number[] | {opMode: OperatingMode, speedSteps: MaxSpeedSteps})
24
- {
25
- super(header);
26
- if(!mode) return;
27
- MsgVehicleMode.log("MsgVehicleMode.mode: " + mode);
28
- if(Array.isArray(mode)) for(let byte of mode.slice(0, 2)) {
29
- super.push({value: byte, length: 1});
30
- MsgVehicleMode.log("MsgVehicleMode.push: " + byte);
31
- } else {
32
- super.push({value: MsgVehicleMode.modeByte1(mode.opMode, mode.speedSteps), length: 1});
33
- super.push({value: 0, length: 1});
34
- super.push({value: 0, length: 1});
35
- }
36
- }
37
-
38
- rxDelay(millis: number) {MsgVehicleMode.rxTiming.set(millis)}
39
- trainNid(): number {return this.header.nid}
40
-
41
- mode(): number[] | undefined
42
- {
43
- if(this.data.length < 2) return undefined;
44
- return this.data.map(data => data.value as number);
45
- }
46
- speedSteps(): MaxSpeedSteps | undefined
47
- {
48
- if(this.data.length < 2) return undefined;
49
- const steps = (this.data[0].value as number) & 0xf;
50
- if (steps > 0 && steps < 6) return Object.values(MaxSpeedSteps)[steps] as MaxSpeedSteps;
51
- return MaxSpeedSteps.UNKNOWN;
52
- }
53
- operatingMode(): OperatingMode | undefined
54
- {
55
- if(this.data.length < 2) return undefined;
56
- const mode = (this.data[0].value as number) >> 4;
57
- if (mode > 0 && mode < 8) return Object.values(OperatingMode)[mode];
58
- return OperatingMode.UNKNOWN;
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
  }