@zimo-elektronik/zcan 1.0.50 → 1.0.51

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,16 +1,17 @@
1
1
  import { Buffer } from 'buffer';
2
2
  import MX10 from '../MX10';
3
3
  import { Subject } from 'rxjs';
4
- import { BidiInfoData } from '../common/models';
5
4
  import { ModInfoType } from '../common/enums';
6
- import { MsgModInfo } from './infoMsg';
5
+ import { MsgBidiInfo, MsgModInfo } from './infoMsg';
7
6
  export default class InfoGroup {
8
7
  private mx10;
9
- readonly onBidiInfoChange: Subject<BidiInfoData>;
8
+ readonly onBidiInfoChange: Subject<MsgBidiInfo>;
10
9
  readonly onModuleInfoChange: Subject<MsgModInfo>;
11
10
  private modInfoQ;
11
+ private bidiQ;
12
12
  constructor(mx10: MX10);
13
13
  getModuleInfo(nid: number, type: ModInfoType | number): Promise<MsgModInfo | undefined>;
14
+ getBidiInfo(locoNid: number, type: number): Promise<MsgBidiInfo | undefined>;
14
15
  parse(size: number, command: number, mode: number, nid: number, buffer: Buffer): void;
15
16
  private parseModuleInfo;
16
17
  private parseBidiInfo;
@@ -1,12 +1,13 @@
1
1
  import { Subject } from 'rxjs';
2
2
  import { Query } from '../common/communication';
3
3
  import { BidiType, Direction, ForwardOrReverse, MsgMode } from '../common/enums';
4
- import { MsgModInfo } from './infoMsg';
4
+ import { MsgBidiInfo, MsgModInfo } from './infoMsg';
5
5
  export default class InfoGroup {
6
6
  mx10;
7
7
  onBidiInfoChange = new Subject();
8
8
  onModuleInfoChange = new Subject();
9
9
  modInfoQ = undefined;
10
+ bidiQ = undefined;
10
11
  constructor(mx10) {
11
12
  this.mx10 = mx10;
12
13
  }
@@ -34,6 +35,28 @@ export default class InfoGroup {
34
35
  this.modInfoQ = undefined;
35
36
  return rv;
36
37
  }
38
+ async getBidiInfo(locoNid, type) {
39
+ if (this.bidiQ !== undefined && !await this.bidiQ.lock()) {
40
+ this.mx10.logInfo.next("mx10.getBidiInfo: failed to acquire lock");
41
+ return undefined;
42
+ }
43
+ this.bidiQ = new Query(MsgBidiInfo.header(MsgMode.REQ, locoNid), this.onBidiInfoChange);
44
+ this.bidiQ.tx = ((header) => {
45
+ const msg = new MsgBidiInfo(header, type, locoNid);
46
+ this.mx10.logInfo.next('bidi query tx: ' + JSON.stringify(msg));
47
+ this.mx10.sendMsg(msg);
48
+ });
49
+ this.bidiQ.match = ((msg) => {
50
+ this.mx10.logInfo.next('bidi query rx: ' + JSON.stringify(msg));
51
+ return (msg.type() === type);
52
+ });
53
+ this.bidiQ.subscribe(false);
54
+ const rv = await this.bidiQ.run();
55
+ this.mx10.logInfo.next("mx10.getBidiInfo.rv: " + JSON.stringify(rv));
56
+ this.bidiQ.unlock();
57
+ this.bidiQ = undefined;
58
+ return rv;
59
+ }
37
60
  parse(size, command, mode, nid, buffer) {
38
61
  switch (command) {
39
62
  case 0x05:
@@ -72,7 +95,8 @@ export default class InfoGroup {
72
95
  default:
73
96
  data = info;
74
97
  }
75
- this.onBidiInfoChange.next({ nid: NID, type, data, });
98
+ const msg = new MsgBidiInfo(MsgBidiInfo.header(mode, NID), type, undefined, info);
99
+ this.onBidiInfoChange.next(msg);
76
100
  }
77
101
  parseEastWest(data) {
78
102
  if ((data & 0x02) == 0x02)
@@ -1 +1 @@
1
- {"version":3,"file":"infoGroup.js","sourceRoot":"","sources":["../../src/info/infoGroup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"infoGroup.js","sourceRoot":"","sources":["../../src/info/infoGroup.ts"],"names":[],"mappings":"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"}
@@ -6,3 +6,10 @@ export declare class MsgModInfo extends Message {
6
6
  type(): ModInfoType | undefined;
7
7
  info(): number | undefined;
8
8
  }
9
+ export declare class MsgBidiInfo extends Message {
10
+ static header(mode: MsgMode, nid: number): Header;
11
+ constructor(header: Header, type: number, nid?: number, info?: number);
12
+ nid(): number;
13
+ type(): number;
14
+ info(): number | undefined;
15
+ }
@@ -1,4 +1,5 @@
1
1
  import { Message } from "../common/communication";
2
+ import { MsgMode } from "../common/enums";
2
3
  export class MsgModInfo extends Message {
3
4
  static header(mode, nid) { return { group: 0x08, cmd: 0x08, mode: mode, nid }; }
4
5
  constructor(header, type, data = []) {
@@ -10,4 +11,21 @@ export class MsgModInfo extends Message {
10
11
  type() { return this.data[0].value; }
11
12
  info() { return this.data.length > 1 ? this.data[1].value : undefined; }
12
13
  }
14
+ export class MsgBidiInfo extends Message {
15
+ static header(mode, nid) { return { group: 0x08, cmd: 0x05, mode: mode, nid }; }
16
+ constructor(header, type, nid, info) {
17
+ super(header);
18
+ if (header.mode === MsgMode.REQ) {
19
+ super.push({ value: nid || 0, length: 2 });
20
+ super.push({ value: type, length: 2 });
21
+ }
22
+ else {
23
+ super.push({ value: type, length: 2 });
24
+ super.push({ value: info || 0, length: 4 });
25
+ }
26
+ }
27
+ nid() { return this.header.mode === MsgMode.REQ ? this.data[0].value : this.header.nid || 0; }
28
+ type() { return this.data[this.header.mode === MsgMode.REQ ? 1 : 0].value; }
29
+ info() { return this.data.length > 1 ? this.data[1].value : undefined; }
30
+ }
13
31
  //# sourceMappingURL=infoMsg.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"infoMsg.js","sourceRoot":"","sources":["../../src/info/infoMsg.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,OAAO,EAAiB,MAAM,yBAAyB,CAAC;AAKzE,MAAM,OAAO,UAAW,SAAQ,OAAO;IAE/B,MAAM,CAAC,MAAM,CAAC,IAAa,EAAE,GAAW,IAC9C,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAC,CAAA,CAAA,CAAC;IAElD,YAAY,MAAc,EAAE,IAAiB,EAAE,OAAsB,EAAE;QAEtE,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC;QACrC,IAAG,IAAI,CAAC,MAAM;YACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,KAA6B,OAAS,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAiC,CAAA,CAAA,CAAC;IACzF,IAAI,KAAwB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAe,CAAC,CAAC,CAAC,SAAS,CAAA,CAAA,CAAC;CACnG"}
1
+ {"version":3,"file":"infoMsg.js","sourceRoot":"","sources":["../../src/info/infoMsg.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,OAAO,EAAiB,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAe,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAIvD,MAAM,OAAO,UAAW,SAAQ,OAAO;IAE/B,MAAM,CAAC,MAAM,CAAC,IAAa,EAAE,GAAW,IAC9C,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAC,CAAA,CAAA,CAAC;IAElD,YAAY,MAAc,EAAE,IAAiB,EAAE,OAAsB,EAAE;QAEtE,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC;QACrC,IAAG,IAAI,CAAC,MAAM;YACb,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,KAA6B,OAAS,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAiC,CAAA,CAAA,CAAC;IACzF,IAAI,KAAwB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAe,CAAC,CAAC,CAAC,SAAS,CAAA,CAAA,CAAC;CACnG;AAED,MAAM,OAAO,WAAY,SAAQ,OAAO;IAEhC,MAAM,CAAC,MAAM,CAAC,IAAa,EAAE,GAAW,IAC9C,OAAO,EAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAC,CAAA,CAAA,CAAC;IAElD,YAAY,MAAc,EAAE,IAAY,EAAE,GAAY,EAAE,IAAa;QAEpE,KAAK,CAAC,MAAM,CAAC,CAAC;QAEd,IAAG,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC;YACzC,KAAK,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,IAAI,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAC,CAAC,CAAC;QAC3C,CAAC;IACF,CAAC;IACD,GAAG,KAAY,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAe,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAA,CAAA,CAAC;IAC7G,IAAI,KAAY,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAe,CAAA,CAAA,CAAC;IAC3F,IAAI,KAAwB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAe,CAAC,CAAC,CAAC,SAAS,CAAA,CAAA,CAAC;CACnG"}
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.50",
8
+ "version": "1.0.51",
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",
@@ -4,7 +4,7 @@ import {Subject} from 'rxjs';
4
4
  import {Query} from '../common/communication';
5
5
  import {BidiInfoData, BidiDirectionData} from '../common/models';
6
6
  import {BidiType, Direction, ForwardOrReverse, ModInfoType, MsgMode} from '../common/enums';
7
- import { MsgModInfo } from './infoMsg';
7
+ import {MsgBidiInfo, MsgModInfo} from './infoMsg';
8
8
 
9
9
  /**
10
10
  *
@@ -14,10 +14,11 @@ export default class InfoGroup
14
14
  {
15
15
  private mx10: MX10;
16
16
 
17
- public readonly onBidiInfoChange = new Subject<BidiInfoData>();
17
+ public readonly onBidiInfoChange = new Subject<MsgBidiInfo>();
18
18
  public readonly onModuleInfoChange = new Subject<MsgModInfo>();
19
19
 
20
20
  private modInfoQ: Query<MsgModInfo> | undefined = undefined;
21
+ private bidiQ: Query<MsgBidiInfo> | undefined = undefined;
21
22
 
22
23
  constructor(mx10: MX10)
23
24
  {
@@ -30,7 +31,6 @@ export default class InfoGroup
30
31
  this.mx10.logInfo.next("mx10.getModuleInfo: failed to acquire lock");
31
32
  return undefined;
32
33
  }
33
-
34
34
  this.modInfoQ = new Query(MsgModInfo.header(MsgMode.REQ, nid), this.onModuleInfoChange);
35
35
  this.modInfoQ.log = ((msg) => {
36
36
  this.mx10.logInfo.next(msg);
@@ -52,6 +52,30 @@ export default class InfoGroup
52
52
  return rv;
53
53
  }
54
54
 
55
+ async getBidiInfo(locoNid: number, type: number): Promise<MsgBidiInfo | undefined>
56
+ {
57
+ if(this.bidiQ !== undefined && !await this.bidiQ.lock()) {
58
+ this.mx10.logInfo.next("mx10.getBidiInfo: failed to acquire lock");
59
+ return undefined;
60
+ }
61
+ this.bidiQ = new Query(MsgBidiInfo.header(MsgMode.REQ, locoNid), this.onBidiInfoChange);
62
+ this.bidiQ.tx = ((header) => {
63
+ const msg = new MsgBidiInfo(header, type, locoNid);
64
+ this.mx10.logInfo.next('bidi query tx: ' + JSON.stringify(msg));
65
+ this.mx10.sendMsg(msg);
66
+ });
67
+ this.bidiQ.match = ((msg) => {
68
+ this.mx10.logInfo.next('bidi query rx: ' + JSON.stringify(msg));
69
+ return (msg.type() === type);
70
+ })
71
+ this.bidiQ.subscribe(false);
72
+ const rv = await this.bidiQ.run();
73
+ this.mx10.logInfo.next("mx10.getBidiInfo.rv: " + JSON.stringify(rv));
74
+ this.bidiQ.unlock();
75
+ this.bidiQ = undefined;
76
+ return rv;
77
+ }
78
+
55
79
  parse(size: number, command: number, mode: number, nid: number, buffer: Buffer)
56
80
  {
57
81
  switch (command) {
@@ -98,8 +122,8 @@ export default class InfoGroup
98
122
  default:
99
123
  data = info;
100
124
  }
101
-
102
- this.onBidiInfoChange.next({nid: NID, type, data,});
125
+ const msg = new MsgBidiInfo(MsgBidiInfo.header(mode, NID), type, undefined, info);
126
+ this.onBidiInfoChange.next(msg);
103
127
  }
104
128
 
105
129
  private parseEastWest(data: number)
@@ -18,4 +18,26 @@ export class MsgModInfo extends Message
18
18
  }
19
19
  type(): ModInfoType | undefined {return ((this.data[0].value as unknown) as ModInfoType)}
20
20
  info(): number | undefined {return this.data.length > 1 ? this.data[1].value as number : undefined}
21
+ }
22
+
23
+ export class MsgBidiInfo extends Message
24
+ {
25
+ public static header(mode: MsgMode, nid: number): Header
26
+ {return {group: 0x08, cmd: 0x05, mode: mode, nid}}
27
+
28
+ constructor(header: Header, type: number, nid?: number, info?: number)
29
+ {
30
+ super(header);
31
+
32
+ if(header.mode === MsgMode.REQ) {
33
+ super.push({value: nid || 0, length: 2});
34
+ super.push({value: type, length: 2});
35
+ } else {
36
+ super.push({value: type, length: 2});
37
+ super.push({value: info || 0, length: 4});
38
+ }
39
+ }
40
+ nid(): number {return this.header.mode === MsgMode.REQ ? this.data[0].value as number : this.header.nid || 0}
41
+ type(): number {return this.data[this.header.mode === MsgMode.REQ ? 1 : 0].value as number}
42
+ info(): number | undefined {return this.data.length > 1 ? this.data[1].value as number : undefined}
21
43
  }