@zimo-elektronik/zcan 1.0.0

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.
Files changed (202) hide show
  1. package/.dockerignore +7 -0
  2. package/.editorconfig +15 -0
  3. package/.eslintignore +7 -0
  4. package/.eslintrc.cjs +17 -0
  5. package/.gitattributes +1 -0
  6. package/.github/workflows/docs.yml +46 -0
  7. package/.github/workflows/library.yml +59 -0
  8. package/.nvmrc +1 -0
  9. package/.prettierignore +14 -0
  10. package/.prettierrc.json +8 -0
  11. package/LICENSE.md +21 -0
  12. package/README.md +8 -0
  13. package/__tests__/connection.test.ts +58 -0
  14. package/__tests__/dataGroup.test.ts +98 -0
  15. package/__tests__/infoGroup.test.ts +30 -0
  16. package/__tests__/lanDataGroup.test.ts +82 -0
  17. package/__tests__/lanInfoGroup.test.ts +41 -0
  18. package/__tests__/systemControlGroup.test.ts +42 -0
  19. package/__tests__/trackCfgGroup.test.ts +43 -0
  20. package/__tests__/util/index.ts +14 -0
  21. package/__tests__/vehicleGroup.test.ts +128 -0
  22. package/dist/@types/communication.d.ts +30 -0
  23. package/dist/@types/communication.js +2 -0
  24. package/dist/@types/communication.js.map +1 -0
  25. package/dist/@types/models.d.ts +172 -0
  26. package/dist/@types/models.js +2 -0
  27. package/dist/@types/models.js.map +1 -0
  28. package/dist/MX10.d.ts +45 -0
  29. package/dist/MX10.js +233 -0
  30. package/dist/MX10.js.map +1 -0
  31. package/dist/docs_entrypoint.d.ts +6 -0
  32. package/dist/docs_entrypoint.js +7 -0
  33. package/dist/docs_entrypoint.js.map +1 -0
  34. package/dist/index.d.ts +6 -0
  35. package/dist/index.js +7 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/internal/bites.d.ts +9 -0
  38. package/dist/internal/bites.js +10 -0
  39. package/dist/internal/bites.js.map +1 -0
  40. package/dist/internal/speedUtils.d.ts +9 -0
  41. package/dist/internal/speedUtils.js +29 -0
  42. package/dist/internal/speedUtils.js.map +1 -0
  43. package/dist/internal/utils.d.ts +1 -0
  44. package/dist/internal/utils.js +4 -0
  45. package/dist/internal/utils.js.map +1 -0
  46. package/dist/util/enums.d.ts +113 -0
  47. package/dist/util/enums.js +137 -0
  48. package/dist/util/enums.js.map +1 -0
  49. package/dist/util/extended-ascii.d.ts +7 -0
  50. package/dist/util/extended-ascii.js +162 -0
  51. package/dist/util/extended-ascii.js.map +1 -0
  52. package/dist/zcan/accessoryCommandGroup.d.ts +6 -0
  53. package/dist/zcan/accessoryCommandGroup.js +9 -0
  54. package/dist/zcan/accessoryCommandGroup.js.map +1 -0
  55. package/dist/zcan/dataGroup.d.ts +31 -0
  56. package/dist/zcan/dataGroup.js +233 -0
  57. package/dist/zcan/dataGroup.js.map +1 -0
  58. package/dist/zcan/fileControlGroup.d.ts +7 -0
  59. package/dist/zcan/fileControlGroup.js +9 -0
  60. package/dist/zcan/fileControlGroup.js.map +1 -0
  61. package/dist/zcan/fileTransferGroup.d.ts +7 -0
  62. package/dist/zcan/fileTransferGroup.js +9 -0
  63. package/dist/zcan/fileTransferGroup.js.map +1 -0
  64. package/dist/zcan/index.d.ts +18 -0
  65. package/dist/zcan/index.js +19 -0
  66. package/dist/zcan/index.js.map +1 -0
  67. package/dist/zcan/infoGroup.d.ts +15 -0
  68. package/dist/zcan/infoGroup.js +64 -0
  69. package/dist/zcan/infoGroup.js.map +1 -0
  70. package/dist/zcan/lanDataGroup.d.ts +23 -0
  71. package/dist/zcan/lanDataGroup.js +226 -0
  72. package/dist/zcan/lanDataGroup.js.map +1 -0
  73. package/dist/zcan/lanInfoGroup.d.ts +11 -0
  74. package/dist/zcan/lanInfoGroup.js +58 -0
  75. package/dist/zcan/lanInfoGroup.js.map +1 -0
  76. package/dist/zcan/lanNetworkGroup.d.ts +11 -0
  77. package/dist/zcan/lanNetworkGroup.js +37 -0
  78. package/dist/zcan/lanNetworkGroup.js.map +1 -0
  79. package/dist/zcan/lanZimoProgrammableScriptGroup.d.ts +7 -0
  80. package/dist/zcan/lanZimoProgrammableScriptGroup.js +9 -0
  81. package/dist/zcan/lanZimoProgrammableScriptGroup.js.map +1 -0
  82. package/dist/zcan/networkGroup.d.ts +10 -0
  83. package/dist/zcan/networkGroup.js +38 -0
  84. package/dist/zcan/networkGroup.js.map +1 -0
  85. package/dist/zcan/propertyConfigGroup.d.ts +7 -0
  86. package/dist/zcan/propertyConfigGroup.js +9 -0
  87. package/dist/zcan/propertyConfigGroup.js.map +1 -0
  88. package/dist/zcan/railwayControlGroup.d.ts +7 -0
  89. package/dist/zcan/railwayControlGroup.js +9 -0
  90. package/dist/zcan/railwayControlGroup.js.map +1 -0
  91. package/dist/zcan/systemControlGroup.d.ts +13 -0
  92. package/dist/zcan/systemControlGroup.js +35 -0
  93. package/dist/zcan/systemControlGroup.js.map +1 -0
  94. package/dist/zcan/trackCfgGroup.d.ts +16 -0
  95. package/dist/zcan/trackCfgGroup.js +77 -0
  96. package/dist/zcan/trackCfgGroup.js.map +1 -0
  97. package/dist/zcan/trainControlGroup.d.ts +8 -0
  98. package/dist/zcan/trainControlGroup.js +19 -0
  99. package/dist/zcan/trainControlGroup.js.map +1 -0
  100. package/dist/zcan/vehicleGroup.d.ts +26 -0
  101. package/dist/zcan/vehicleGroup.js +145 -0
  102. package/dist/zcan/vehicleGroup.js.map +1 -0
  103. package/dist/zcan/zimoProgrammableScriptGroup.d.ts +7 -0
  104. package/dist/zcan/zimoProgrammableScriptGroup.js +9 -0
  105. package/dist/zcan/zimoProgrammableScriptGroup.js.map +1 -0
  106. package/gulpfile.js +37 -0
  107. package/jest.config.js +26 -0
  108. package/package.json +50 -0
  109. package/protocol_docs/README.md +41 -0
  110. package/protocol_docs/babel.config.js +3 -0
  111. package/protocol_docs/docs/command-groups/_category_.json +4 -0
  112. package/protocol_docs/docs/command-groups/accessories/_category_.json +4 -0
  113. package/protocol_docs/docs/command-groups/accessories/accessory-state.md +7 -0
  114. package/protocol_docs/docs/command-groups/command-groups.md +50 -0
  115. package/protocol_docs/docs/command-groups/data/_category_.json +4 -0
  116. package/protocol_docs/docs/command-groups/data/data-name-extended.md +60 -0
  117. package/protocol_docs/docs/command-groups/data/group-count.md +52 -0
  118. package/protocol_docs/docs/command-groups/data/item-fx-info.md +27 -0
  119. package/protocol_docs/docs/command-groups/data/item-image-config.md +44 -0
  120. package/protocol_docs/docs/command-groups/data/item-list-by-index.md +45 -0
  121. package/protocol_docs/docs/command-groups/data/item-list-by-nid.md +43 -0
  122. package/protocol_docs/docs/command-groups/data/remove-train.md +33 -0
  123. package/protocol_docs/docs/command-groups/info/_category_.json +4 -0
  124. package/protocol_docs/docs/command-groups/info/bidi-info.md +34 -0
  125. package/protocol_docs/docs/command-groups/lan-data/_category_.json +4 -0
  126. package/protocol_docs/docs/command-groups/lan-data/data-value-extended.md +65 -0
  127. package/protocol_docs/docs/command-groups/lan-data/loco-gui-extended.md +48 -0
  128. package/protocol_docs/docs/command-groups/lan-info/_category_.json +4 -0
  129. package/protocol_docs/docs/command-groups/lan-info/module-power-info.md +26 -0
  130. package/protocol_docs/docs/command-groups/lan-network/_category_.json +4 -0
  131. package/protocol_docs/docs/command-groups/lan-network/open-port.md +47 -0
  132. package/protocol_docs/docs/command-groups/network/_category_.json +4 -0
  133. package/protocol_docs/docs/command-groups/network/ping.md +49 -0
  134. package/protocol_docs/docs/command-groups/system/_category_.json +4 -0
  135. package/protocol_docs/docs/command-groups/system/system-state.md +59 -0
  136. package/protocol_docs/docs/command-groups/track/_category_.json +4 -0
  137. package/protocol_docs/docs/command-groups/track/tse-prog-read.md +37 -0
  138. package/protocol_docs/docs/command-groups/track/tse-prog-write.md +35 -0
  139. package/protocol_docs/docs/command-groups/train/_category_.json +4 -0
  140. package/protocol_docs/docs/command-groups/train/train-part-find.md +33 -0
  141. package/protocol_docs/docs/command-groups/vehicles/_category_.json +4 -0
  142. package/protocol_docs/docs/command-groups/vehicles/vehicle-function.md +36 -0
  143. package/protocol_docs/docs/command-groups/vehicles/vehicle-mode.md +143 -0
  144. package/protocol_docs/docs/command-groups/vehicles/vehicle-special-function-switch.md +35 -0
  145. package/protocol_docs/docs/command-groups/vehicles/vehicle-speed.md +55 -0
  146. package/protocol_docs/docs/description.md +4 -0
  147. package/protocol_docs/docs/introduction/_category_.json +4 -0
  148. package/protocol_docs/docs/introduction/how-it-works.md +61 -0
  149. package/protocol_docs/docs/introduction/implementation.md +39 -0
  150. package/protocol_docs/docs/introduction/interface.md +62 -0
  151. package/protocol_docs/docs/introduction/introduction.md +82 -0
  152. package/protocol_docs/docusaurus.config.js +111 -0
  153. package/protocol_docs/package-lock.json +25611 -0
  154. package/protocol_docs/package.json +47 -0
  155. package/protocol_docs/sidebars.js +22 -0
  156. package/protocol_docs/src/components/CommandAndGroup/index.tsx +16 -0
  157. package/protocol_docs/src/components/CommandAndGroup/styles.module.css +12 -0
  158. package/protocol_docs/src/components/HomepageFeatures/index.tsx +70 -0
  159. package/protocol_docs/src/components/HomepageFeatures/styles.module.css +11 -0
  160. package/protocol_docs/src/css/custom.css +76 -0
  161. package/protocol_docs/src/pages/index.module.css +23 -0
  162. package/protocol_docs/src/pages/index.tsx +41 -0
  163. package/protocol_docs/src/pages/markdown-page.md +7 -0
  164. package/protocol_docs/static/.nojekyll +0 -0
  165. package/protocol_docs/static/img/docusaurus.png +0 -0
  166. package/protocol_docs/static/img/favicon.ico +0 -0
  167. package/protocol_docs/static/img/undraw_docusaurus_mountain.svg +171 -0
  168. package/protocol_docs/static/img/undraw_docusaurus_react.svg +170 -0
  169. package/protocol_docs/static/img/undraw_docusaurus_tree.svg +40 -0
  170. package/protocol_docs/static/typedoc/index.html +10 -0
  171. package/protocol_docs/tsconfig.json +7 -0
  172. package/src/@types/communication.ts +73 -0
  173. package/src/@types/models.ts +215 -0
  174. package/src/MX10.ts +351 -0
  175. package/src/docs_entrypoint.ts +34 -0
  176. package/src/index.ts +8 -0
  177. package/src/internal/bites.ts +11 -0
  178. package/src/internal/speedUtils.ts +36 -0
  179. package/src/internal/utils.ts +3 -0
  180. package/src/util/enums.ts +147 -0
  181. package/src/util/extended-ascii.ts +179 -0
  182. package/src/zcan/accessoryCommandGroup.ts +24 -0
  183. package/src/zcan/dataGroup.ts +342 -0
  184. package/src/zcan/fileControlGroup.ts +25 -0
  185. package/src/zcan/fileTransferGroup.ts +25 -0
  186. package/src/zcan/index.ts +37 -0
  187. package/src/zcan/infoGroup.ts +90 -0
  188. package/src/zcan/lanDataGroup.ts +361 -0
  189. package/src/zcan/lanInfoGroup.ts +86 -0
  190. package/src/zcan/lanNetworkGroup.ts +70 -0
  191. package/src/zcan/lanZimoProgrammableScriptGroup.ts +25 -0
  192. package/src/zcan/networkGroup.ts +71 -0
  193. package/src/zcan/propertyConfigGroup.ts +25 -0
  194. package/src/zcan/railwayControlGroup.ts +25 -0
  195. package/src/zcan/systemControlGroup.ts +62 -0
  196. package/src/zcan/trackCfgGroup.ts +109 -0
  197. package/src/zcan/trainControlGroup.ts +48 -0
  198. package/src/zcan/vehicleGroup.ts +267 -0
  199. package/src/zcan/zimoProgrammableScriptGroup.ts +25 -0
  200. package/tsconfig.build.json +12 -0
  201. package/tsconfig.json +49 -0
  202. package/tsconfig.test.json +9 -0
@@ -0,0 +1,128 @@
1
+ import {createMX10, initConnection} from './util';
2
+ import {afterAll, beforeAll, expect, it} from '@jest/globals';
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';
13
+
14
+ describe('Vehicle group tests - 0x02', () => {
15
+ const mx10 = createMX10();
16
+ const testNID = 211;
17
+
18
+ beforeAll(async () => {
19
+ await initConnection(mx10);
20
+ });
21
+
22
+ afterAll(() => {
23
+ mx10.vehicle.changeSpeed(testNID, 0, true);
24
+
25
+ delay(1000).then(() => {
26
+ mx10.closeSocket();
27
+ });
28
+ });
29
+
30
+ it('0x00 - retrieve operating state', async () => {
31
+ const data = await firstValueFrom(mx10.vehicle.onVehicleState);
32
+
33
+ expect(data.nid).toBe(211);
34
+ // testing on device ZimoApp
35
+ mx10.vehicle.changeSpeed(testNID, 15, true);
36
+ expect(data.ctrlDevice).toBe(mx10.myNID);
37
+ });
38
+
39
+ it('0x01 - retrieve operating mode', async () => {
40
+ mx10.vehicle.vehicleMode(3);
41
+ const data = await firstValueFrom(mx10.vehicle.onVehicleMode);
42
+
43
+ expect(data.nid).toBe(3);
44
+
45
+ expect(data.nid).toBe(3);
46
+ expect(data.operatingMode).toBe(OperatingMode.DCC);
47
+ });
48
+
49
+ test.each([
50
+ {nid: testNID, speedStep: 10, forward: true, eastWest: Direction.UNDEFINED},
51
+ {nid: testNID, speedStep: 30, forward: false, eastWest: Direction.EAST},
52
+ {nid: testNID, speedStep: 40, forward: false, eastWest: Direction.WEST},
53
+ {nid: testNID, speedStep: 35, forward: true, eastWest: Direction.WEST},
54
+ ])(
55
+ '0x02 - change speed and directions',
56
+ async ({nid, speedStep, forward, eastWest}) => {
57
+ 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);
68
+ },
69
+ );
70
+
71
+ it('0x02 - change speed with bidi feedback', (done) => {
72
+ const speedStep = 500,
73
+ forward = true;
74
+
75
+ const sub = mx10.info.onBidiInfoChange.subscribe((data) => {
76
+ if (data.type === 0x0100) {
77
+ expect(data).toBeDefined();
78
+ expect(data.type).toBe(0x0100);
79
+ expect(data.data).toBeGreaterThan(10);
80
+
81
+ sub.unsubscribe();
82
+ done();
83
+ }
84
+ });
85
+
86
+ mx10.vehicle.changeSpeed(testNID, speedStep, forward);
87
+ });
88
+
89
+ it('0x04 - call function', async () => {
90
+ const nid = testNID,
91
+ buttonId = 1;
92
+
93
+ mx10.vehicle.callFunction(nid, buttonId, true);
94
+ const data = await firstValueFrom(mx10.vehicle.onCallFunction);
95
+
96
+ expect(data).toBeDefined();
97
+ expect(data.nid).toBe(nid);
98
+ expect(data.functionNumber).toBe(buttonId);
99
+ expect(data.functionState).toBe(true);
100
+
101
+ await delay(500);
102
+
103
+ mx10.vehicle.callFunction(nid, buttonId, false);
104
+ const data2 = await firstValueFrom(mx10.vehicle.onCallFunction);
105
+
106
+ expect(data2).toBeDefined();
107
+ expect(data2.nid).toBe(nid);
108
+ expect(data2.functionNumber).toBe(buttonId);
109
+ expect(data2.functionState).toBe(false);
110
+ });
111
+
112
+ test.each([
113
+ {mode: SpecialFunctionMode.MANUAL, state: Manual.OFF},
114
+ {mode: SpecialFunctionMode.SHUNTING_FUNCTION, state: ShuntingFunction.AZBZ},
115
+ {
116
+ mode: SpecialFunctionMode.DIRECTION_DEFAULT,
117
+ state: DirectionDefault.DIRECTION_WEST,
118
+ },
119
+ ])('0x05 - special function mode', async ({mode, state}) => {
120
+ mx10.vehicle.changeSpecialFunction(testNID, mode, state);
121
+ const data = await firstValueFrom(mx10.vehicle.onCallSpecialFunction);
122
+
123
+ expect(data).toBeDefined();
124
+ expect(data.nid).toBe(testNID);
125
+ expect(data.specialFunctionMode).toBe(mode);
126
+ expect(data.specialFunctionState).toBe(state);
127
+ });
128
+ });
@@ -0,0 +1,30 @@
1
+ import { BindOptions, RemoteInfo, SocketOptions } from 'dgram';
2
+ import { Buffer } from 'buffer';
3
+ export type ZcanData = {
4
+ length: number;
5
+ value: number | string;
6
+ };
7
+ export type ZcanDataArray = ZcanData[];
8
+ export type NIDGenerator = () => Promise<number>;
9
+ export interface Socket {
10
+ bind(port?: number, address?: string, callback?: () => void): this;
11
+ bind(port?: number, callback?: () => void): this;
12
+ bind(callback?: () => void): this;
13
+ bind(options: BindOptions, callback?: () => void): this;
14
+ on(event: 'message', listener: (msg: Buffer, rinfo: RemoteInfo) => void): this;
15
+ send(msg: string | Uint8Array, port?: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void;
16
+ send(msg: string | Uint8Array, port?: number, callback?: (error: Error | null, bytes: number) => void): void;
17
+ send(msg: string | Uint8Array, callback?: (error: Error | null, bytes: number) => void): void;
18
+ send(msg: string | Uint8Array, offset: number, length: number, port?: number, address?: string, callback?: (error: Error | null, bytes: number) => void): void;
19
+ send(msg: string | Uint8Array, offset: number, length: number, port?: number, callback?: (error: Error | null, bytes: number) => void): void;
20
+ send(msg: string | Uint8Array, offset: number, length: number, callback?: (error: Error | null, bytes: number) => void): void;
21
+ close(callback?: () => void): this;
22
+ }
23
+ type createDgram = (options: SocketOptions, callback?: (msg: Buffer, rinfo: RemoteInfo) => void) => unknown;
24
+ type createNativeDgram = (options: {
25
+ type: string;
26
+ reusePort?: boolean;
27
+ debug?: boolean;
28
+ }, callback?: ((msg: Buffer) => void) | undefined) => unknown;
29
+ export type CreateSocketFunction = createDgram | createNativeDgram;
30
+ export {};
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=communication.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"communication.js","sourceRoot":"","sources":["../../src/@types/communication.ts"],"names":[],"mappings":""}
@@ -0,0 +1,172 @@
1
+ import { NameType, Direction, ExternalController, FunctionMode, OperatingMode, SystemStateMode, TrackMode, ImageType, FxInfoType, SpecialFunctionMode, Manual, DirectionDefault, ShuntingFunction, BidiType, ForwardOrReverse } from 'src/util/enums';
2
+ export interface Train {
3
+ nid: number;
4
+ subId: number;
5
+ name: string;
6
+ group: number;
7
+ image?: string;
8
+ externalController?: ExternalController;
9
+ operatingMode: OperatingMode;
10
+ tacho: string;
11
+ speedFwd: number;
12
+ speedRev: number;
13
+ speedRange: number;
14
+ driveType: number;
15
+ era: string;
16
+ countryCode: number;
17
+ functions: TrainFunction[];
18
+ }
19
+ export interface LocoGuiMXExtended {
20
+ nid: number;
21
+ functions: TrainFunction[];
22
+ }
23
+ export interface TrainFunction {
24
+ mode: FunctionMode;
25
+ icon?: string;
26
+ active: boolean;
27
+ }
28
+ export interface DataValueExtendedData {
29
+ nid: number;
30
+ functionCount: number;
31
+ speedStep: number;
32
+ forward: boolean;
33
+ eastWest: Direction;
34
+ emergencyStop: boolean;
35
+ operatingMode: OperatingMode;
36
+ functionsStates: boolean[];
37
+ flags: TrainFlags;
38
+ shuntingFunction: ShuntingFunction;
39
+ manualMode: Manual;
40
+ deleted: boolean;
41
+ }
42
+ export interface LocoSpeedTabExtended {
43
+ srcid: number;
44
+ nid: number;
45
+ dbat6: number;
46
+ speedTab: SpeedTabData[] | undefined;
47
+ }
48
+ export interface SpeedTabData {
49
+ id: number;
50
+ speedStep: number;
51
+ speed: number;
52
+ }
53
+ export interface GroupCountData {
54
+ objectType: number;
55
+ number: number;
56
+ }
57
+ export interface ItemListByIndexData {
58
+ nid: number;
59
+ index: number;
60
+ msSinceLastCommunication: number;
61
+ }
62
+ export interface ItemListByNidData {
63
+ nid: number;
64
+ index: number;
65
+ itemState: number;
66
+ lastTick: number;
67
+ }
68
+ export interface DataNameExtended {
69
+ nid: number;
70
+ type: NameType;
71
+ subID: number;
72
+ value1: DataNameValue1 | undefined;
73
+ value2: number;
74
+ name: string;
75
+ }
76
+ export interface ModulePowerInfoData {
77
+ deviceNID: number;
78
+ port1Status: TrackMode;
79
+ port1Voltage: number;
80
+ port1Amperage: number;
81
+ port2Status: TrackMode;
82
+ port2Voltage: number;
83
+ port2Amperage: number;
84
+ amperage32V: number;
85
+ amperage12V: number;
86
+ voltageTotal: number;
87
+ temperature: number;
88
+ }
89
+ export interface BidiInfoData {
90
+ nid: number;
91
+ type: BidiType;
92
+ data: BidiDirectionData | number;
93
+ }
94
+ export interface BidiDirectionData {
95
+ direction?: Direction;
96
+ forwardOrReverse?: ForwardOrReverse;
97
+ directionChange?: boolean;
98
+ directionConfirm?: boolean;
99
+ }
100
+ export interface VehicleStateData {
101
+ nid: number;
102
+ ctrlTick: number;
103
+ ctrlDevice: number;
104
+ }
105
+ export interface VehicleModeData {
106
+ nid: number;
107
+ speedSteps: number | undefined;
108
+ operatingMode: OperatingMode;
109
+ mode2: number;
110
+ mode3: number;
111
+ }
112
+ export interface VehicleSpeedData {
113
+ nid: number;
114
+ divisor: number;
115
+ speedStep: number;
116
+ forward: boolean;
117
+ eastWest: Direction;
118
+ emergencyStop: boolean;
119
+ }
120
+ export interface CallFunctionData {
121
+ nid: number;
122
+ functionNumber: number;
123
+ functionState: boolean;
124
+ }
125
+ export interface CallSpecialFunctionData {
126
+ nid: number;
127
+ specialFunctionMode: SpecialFunctionMode;
128
+ specialFunctionState: Manual | ShuntingFunction | DirectionDefault;
129
+ }
130
+ export interface SystemStateData {
131
+ nid: number;
132
+ port: number;
133
+ mode: SystemStateMode;
134
+ }
135
+ export interface RemoveLocomotiveData {
136
+ nid: number;
137
+ state: number;
138
+ }
139
+ export interface TrainFlags {
140
+ deleted: boolean;
141
+ }
142
+ export interface DataNameValue1 {
143
+ type: string;
144
+ cfgNum: number;
145
+ }
146
+ export interface ItemImageData {
147
+ nid: number;
148
+ type: ImageType;
149
+ imageId: number;
150
+ }
151
+ export interface ItemFxInfo {
152
+ nid: number;
153
+ function: number;
154
+ type: FxInfoType;
155
+ data: number;
156
+ }
157
+ export interface TseInfoExtended {
158
+ nid: number;
159
+ cfgNum: number;
160
+ cvState: number;
161
+ cvCode: number;
162
+ }
163
+ export interface TseProgReadExtended {
164
+ nid: number;
165
+ cfgNum: number;
166
+ cvValue: number;
167
+ }
168
+ export interface TseProgWriteExtended {
169
+ nid: number;
170
+ cfgNum: number;
171
+ cvValue: number;
172
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/@types/models.ts"],"names":[],"mappings":""}
package/dist/MX10.d.ts ADDED
@@ -0,0 +1,45 @@
1
+ import { Subject } from 'rxjs';
2
+ import { AccessoryCommandGroup, DataGroup, FileControlGroup, FileTransferGroup, InfoGroup, LanDataGroup, LanInfoGroup, LanNetworkGroup, LanZimoProgrammableScriptGroup, NetworkGroup, PropertyConfigGroup, RailwayControlGroup, SystemControlGroup, TrackCfgGroup, TrainControlGroup, VehicleGroup, ZimoProgrammableScriptGroup } from './zcan';
3
+ import { CreateSocketFunction, NIDGenerator, ZcanDataArray } from './@types/communication';
4
+ export default class MX10 {
5
+ myNID: number;
6
+ mx10NID: number;
7
+ mx10IP: string | undefined;
8
+ connected: boolean;
9
+ readonly systemControl: SystemControlGroup;
10
+ readonly accessoryCommand: AccessoryCommandGroup;
11
+ readonly vehicle: VehicleGroup;
12
+ readonly trainControl: TrainControlGroup;
13
+ readonly trackCfg: TrackCfgGroup;
14
+ readonly data: DataGroup;
15
+ readonly info: InfoGroup;
16
+ readonly propertyConfig: PropertyConfigGroup;
17
+ readonly network: NetworkGroup;
18
+ readonly railwayControl: RailwayControlGroup;
19
+ readonly zimoProgrammableScript: ZimoProgrammableScriptGroup;
20
+ readonly fileControl: FileControlGroup;
21
+ readonly fileTransfer: FileTransferGroup;
22
+ readonly lanInfo: LanInfoGroup;
23
+ readonly lanData: LanDataGroup;
24
+ readonly lanNetwork: LanNetworkGroup;
25
+ readonly lanZimoProgrammableScript: LanZimoProgrammableScriptGroup;
26
+ readonly errors: Subject<string>;
27
+ private mx10Socket;
28
+ private incomingPort;
29
+ private outgoingPort;
30
+ private lastPing;
31
+ private interval;
32
+ private readonly nidGeneratorFunction;
33
+ private readonly debugCommunication;
34
+ private readonly reconnectionTime;
35
+ readonly connectionTimeout: number;
36
+ constructor(nidGeneratorFunction: NIDGenerator, connectionTimeout?: number, debugCommunication?: boolean);
37
+ initSocket(createSocketFunction: CreateSocketFunction, ipAddress: string, incomingPort?: number, outgoingPort?: number): Promise<void>;
38
+ reconnectLogic(): void;
39
+ closeSocket(callMx10?: boolean): void;
40
+ sendData(group: number, cmd: number, data?: ZcanDataArray, mode?: number, nid?: number, force?: boolean): void;
41
+ private formatData;
42
+ private send;
43
+ private readRawData;
44
+ private printReadout;
45
+ }
package/dist/MX10.js ADDED
@@ -0,0 +1,233 @@
1
+ import { Buffer } from 'buffer';
2
+ import { interval, Subject } from 'rxjs';
3
+ import { AccessoryCommandGroup, DataGroup, FileControlGroup, FileTransferGroup, InfoGroup, LanDataGroup, LanInfoGroup, LanNetworkGroup, LanZimoProgrammableScriptGroup, NetworkGroup, PropertyConfigGroup, RailwayControlGroup, SystemControlGroup, TrackCfgGroup, TrainControlGroup, VehicleGroup, ZimoProgrammableScriptGroup, } from './zcan';
4
+ import { delay } from './internal/utils';
5
+ import ExtendedASCII from './util/extended-ascii';
6
+ export default class MX10 {
7
+ myNID = 0;
8
+ mx10NID = 0;
9
+ mx10IP;
10
+ connected = false;
11
+ systemControl = new SystemControlGroup(this);
12
+ accessoryCommand = new AccessoryCommandGroup(this);
13
+ vehicle = new VehicleGroup(this);
14
+ trainControl = new TrainControlGroup(this);
15
+ trackCfg = new TrackCfgGroup(this);
16
+ data = new DataGroup(this);
17
+ info = new InfoGroup(this);
18
+ propertyConfig = new PropertyConfigGroup(this);
19
+ network = new NetworkGroup(this);
20
+ railwayControl = new RailwayControlGroup(this);
21
+ zimoProgrammableScript = new ZimoProgrammableScriptGroup(this);
22
+ fileControl = new FileControlGroup(this);
23
+ fileTransfer = new FileTransferGroup(this);
24
+ lanInfo = new LanInfoGroup(this);
25
+ lanData = new LanDataGroup(this);
26
+ lanNetwork = new LanNetworkGroup(this);
27
+ lanZimoProgrammableScript = new LanZimoProgrammableScriptGroup(this);
28
+ errors = new Subject();
29
+ mx10Socket = null;
30
+ incomingPort = 14521;
31
+ outgoingPort = 14520;
32
+ lastPing = 0;
33
+ interval = undefined;
34
+ nidGeneratorFunction;
35
+ debugCommunication;
36
+ reconnectionTime = 0;
37
+ connectionTimeout;
38
+ constructor(nidGeneratorFunction, connectionTimeout = 1000, debugCommunication = false) {
39
+ this.nidGeneratorFunction = nidGeneratorFunction;
40
+ this.connectionTimeout = connectionTimeout;
41
+ this.debugCommunication = debugCommunication;
42
+ this.reconnectionTime = connectionTimeout * 4;
43
+ const pingIntervalMs = 1000;
44
+ if (this.connected) {
45
+ this.network.ping();
46
+ }
47
+ interval(pingIntervalMs).subscribe(() => {
48
+ if (this.connected) {
49
+ this.network.ping();
50
+ }
51
+ });
52
+ }
53
+ async initSocket(createSocketFunction, ipAddress, incomingPort = 14521, outgoingPort = 14520) {
54
+ this.mx10IP = ipAddress;
55
+ this.incomingPort = incomingPort;
56
+ this.outgoingPort = outgoingPort;
57
+ if (this.mx10Socket == null) {
58
+ const socket = (this.mx10Socket = createSocketFunction({
59
+ type: 'udp4',
60
+ }));
61
+ await new Promise((resolve) => {
62
+ socket.bind(incomingPort, () => {
63
+ resolve(null);
64
+ });
65
+ });
66
+ this.mx10Socket.on('message', this.readRawData.bind(this));
67
+ this.myNID = await this.nidGeneratorFunction();
68
+ this.lanNetwork.portOpen();
69
+ await delay(this.connectionTimeout);
70
+ if (!this.connected) {
71
+ this.closeSocket();
72
+ throw new Error('mx10.connection.timeout');
73
+ }
74
+ }
75
+ }
76
+ reconnectLogic() {
77
+ const date = Date.now();
78
+ if (date - this.lastPing < this.reconnectionTime &&
79
+ this.interval !== undefined) {
80
+ clearInterval(this.interval);
81
+ this.interval = undefined;
82
+ }
83
+ if (this.interval === undefined) {
84
+ this.interval = setInterval(() => {
85
+ if (!this.connected) {
86
+ console.log('Reconnecting...');
87
+ this.network.portClose();
88
+ this.lanNetwork.portOpen();
89
+ this.network.ping(0b00);
90
+ }
91
+ }, this.reconnectionTime);
92
+ }
93
+ this.lastPing = date;
94
+ }
95
+ closeSocket(callMx10 = true) {
96
+ if (this.mx10Socket != null) {
97
+ if (this.connected && callMx10) {
98
+ this.network.portClose();
99
+ }
100
+ this.mx10Socket?.close();
101
+ this.mx10Socket = null;
102
+ this.connected = false;
103
+ }
104
+ }
105
+ sendData(group, cmd, data = [], mode = 0b01, nid = this.myNID, force = false) {
106
+ const buffer = this.formatData(group, cmd, mode, nid, data);
107
+ this.send(buffer, force);
108
+ }
109
+ formatData(group, cmd, mode, nid, data = []) {
110
+ const size = data.reduce((sum, obj) => sum + obj.length, 0);
111
+ const buffer = Buffer.alloc(size + 8);
112
+ const cmd_md = (cmd << 2) | mode;
113
+ buffer.writeUInt16LE(size, 0);
114
+ buffer.writeUInt16LE(0, 2);
115
+ buffer.writeUInt8(group, 4);
116
+ buffer.writeUInt8(cmd_md, 5);
117
+ buffer.writeUInt16LE(nid, 6);
118
+ let offset = 8;
119
+ data.forEach((element) => {
120
+ if (typeof element.value === 'string') {
121
+ ExtendedASCII.str2byte(element.value, buffer, offset, element.length);
122
+ offset += element.length;
123
+ }
124
+ else {
125
+ switch (element.length) {
126
+ case 1:
127
+ buffer.writeUInt8(element.value, offset);
128
+ offset += 1;
129
+ break;
130
+ case 2:
131
+ buffer.writeUInt16LE(element.value, offset);
132
+ offset += 2;
133
+ break;
134
+ case 4:
135
+ buffer.writeUInt32LE(element.value, offset);
136
+ offset += 4;
137
+ break;
138
+ default:
139
+ console.warn(`ELEMENT LENGTH NOT DEFINED, ${element}`);
140
+ }
141
+ }
142
+ });
143
+ this.printReadout(group, cmd, mode, nid, size, buffer.slice(8));
144
+ return buffer;
145
+ }
146
+ send(message, force = false) {
147
+ if (this.connected || force) {
148
+ this.mx10Socket?.send(message, 0, message.length, this.outgoingPort, this.mx10IP, (err) => {
149
+ if (err && this.debugCommunication) {
150
+ console.log(err);
151
+ }
152
+ });
153
+ }
154
+ else {
155
+ this.errors.next('mx10.connection.not_connected');
156
+ }
157
+ }
158
+ readRawData(message) {
159
+ const size = message.readUInt16LE(0);
160
+ const group = message.readUInt8(4);
161
+ const commandAndMode = message.readUInt8(5);
162
+ const command = commandAndMode >> 2;
163
+ const mode = commandAndMode & 0x03;
164
+ const nid = message.readUInt16LE(6);
165
+ const buffer = message.slice(8);
166
+ this.printReadout(group, command, mode, nid, size, buffer, false);
167
+ switch (group) {
168
+ case 0x00:
169
+ this.systemControl.parse(size, command, mode, nid, buffer);
170
+ break;
171
+ case 0x01:
172
+ this.accessoryCommand.parse(size, command, mode, nid, buffer);
173
+ break;
174
+ case 0x02:
175
+ this.vehicle.parse(size, command, mode, nid, buffer);
176
+ break;
177
+ case 0x05:
178
+ this.trainControl.parse(size, command, mode, nid, buffer);
179
+ break;
180
+ case 0x06:
181
+ case 0x16:
182
+ this.trackCfg.parse(size, command, mode, nid, buffer);
183
+ break;
184
+ case 0x07:
185
+ this.data.parse(size, command, mode, nid, buffer);
186
+ break;
187
+ case 0x08:
188
+ this.info.parse(size, command, mode, nid, buffer);
189
+ break;
190
+ case 0x09:
191
+ this.propertyConfig.parse(size, command, mode, nid, buffer);
192
+ break;
193
+ case 0x0a:
194
+ this.network.parse(size, command, mode, nid, buffer);
195
+ break;
196
+ case 0x0b:
197
+ this.railwayControl.parse(size, command, mode, nid, buffer);
198
+ break;
199
+ case 0x0c:
200
+ this.zimoProgrammableScript.parse(size, command, mode, nid, buffer);
201
+ break;
202
+ case 0x0e:
203
+ this.fileControl.parse(size, command, mode, nid, buffer);
204
+ break;
205
+ case 0x0f:
206
+ this.fileTransfer.parse(size, command, mode, nid, buffer);
207
+ break;
208
+ case 0x17:
209
+ this.lanData.parse(size, command, mode, nid, buffer);
210
+ break;
211
+ case 0x18:
212
+ this.lanInfo.parse(size, command, mode, nid, buffer);
213
+ break;
214
+ case 0x1a:
215
+ this.lanNetwork.parse(size, command, mode, nid, buffer);
216
+ break;
217
+ case 0x1c:
218
+ this.lanZimoProgrammableScript.parse(size, command, mode, nid, buffer);
219
+ break;
220
+ default:
221
+ console.warn('Unknown group: ' + Number(group).toString(16));
222
+ }
223
+ }
224
+ printReadout(group, cmd, mode, nid, size, raw_data, out = true) {
225
+ if (this.debugCommunication) {
226
+ const data = JSON.stringify(Array.apply([], [...raw_data]));
227
+ const f = (obj) => Number(obj).toString(16);
228
+ const arrow = '|' + (out ? '→' : '←');
229
+ console.debug(`${arrow} g=${f(group)} c=${f(cmd)} m=${f(mode)} n=${f(nid)} l=${f(size)} : ${data}`);
230
+ }
231
+ }
232
+ }
233
+ //# sourceMappingURL=MX10.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MX10.js","sourceRoot":"","sources":["../src/MX10.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { default as MX10 } from './MX10';
2
+ export { AccessoryCommandGroup, DataGroup, FileControlGroup, FileTransferGroup, InfoGroup, LanDataGroup, LanInfoGroup, LanNetworkGroup, LanZimoProgrammableScriptGroup, NetworkGroup, PropertyConfigGroup, RailwayControlGroup, SystemControlGroup, TrackCfgGroup, TrainControlGroup, VehicleGroup, ZimoProgrammableScriptGroup, } from './zcan';
3
+ export { Direction as Direction, ExternalController, FunctionMode, OperatingMode, SystemStateMode, } from './util/enums';
4
+ export * from './@types/models';
5
+ export * from './@types/communication';
6
+ export { Subject, Observable } from 'rxjs';
@@ -0,0 +1,7 @@
1
+ export { default as MX10 } from './MX10';
2
+ export { AccessoryCommandGroup, DataGroup, FileControlGroup, FileTransferGroup, InfoGroup, LanDataGroup, LanInfoGroup, LanNetworkGroup, LanZimoProgrammableScriptGroup, NetworkGroup, PropertyConfigGroup, RailwayControlGroup, SystemControlGroup, TrackCfgGroup, TrainControlGroup, VehicleGroup, ZimoProgrammableScriptGroup, } from './zcan';
3
+ export { Direction as Direction, ExternalController, FunctionMode, OperatingMode, SystemStateMode, } from './util/enums';
4
+ export * from './@types/models';
5
+ export * from './@types/communication';
6
+ export { Subject, Observable } from 'rxjs';
7
+ //# sourceMappingURL=docs_entrypoint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docs_entrypoint.js","sourceRoot":"","sources":["../src/docs_entrypoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,IAAI,IAAI,EAAC,MAAM,QAAQ,CAAC;AAEvC,OAAO,EACL,qBAAqB,EACrB,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,8BAA8B,EAC9B,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,2BAA2B,GAC5B,MAAM,QAAQ,CAAC;AAEhB,OAAO,EACL,SAAS,IAAI,SAAS,EACtB,kBAAkB,EAClB,YAAY,EACZ,aAAa,EACb,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AAEvC,OAAO,EAAC,OAAO,EAAE,UAAU,EAAC,MAAM,MAAM,CAAC"}
@@ -0,0 +1,6 @@
1
+ import MX10 from './MX10';
2
+ export default MX10;
3
+ export * from './util/enums';
4
+ export * from './@types/models';
5
+ export * from './@types/communication';
6
+ export * from 'rxjs';
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ import MX10 from './MX10';
2
+ export default MX10;
3
+ export * from './util/enums';
4
+ export * from './@types/models';
5
+ export * from './@types/communication';
6
+ export * from 'rxjs';
7
+ //# sourceMappingURL=index.js.map