@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,233 @@
1
+ import { Subject } from 'rxjs';
2
+ import { NameType } from '../util/enums';
3
+ import ExtendedASCII from '../util/extended-ascii';
4
+ export default class DataGroup {
5
+ onGroupCount = new Subject();
6
+ onListItemsByIndex = new Subject();
7
+ onListItemsByNID = new Subject();
8
+ onRemoveLocomotive = new Subject();
9
+ onItemImageConfig = new Subject();
10
+ onItemFxInfo = new Subject();
11
+ onDataNameExtended = new Subject();
12
+ mx10;
13
+ constructor(mx10) {
14
+ this.mx10 = mx10;
15
+ }
16
+ groupCount(objType = 0x0000) {
17
+ this.mx10.sendData(0x07, 0x00, [
18
+ { value: this.mx10.mx10NID, length: 2 },
19
+ { value: objType, length: 2 },
20
+ ], 0b00);
21
+ }
22
+ listItemsByIndex(groupNID, index) {
23
+ this.mx10.sendData(0x07, 0x01, [
24
+ { value: this.mx10.mx10NID, length: 2 },
25
+ { value: groupNID, length: 2 },
26
+ { value: index, length: 2 },
27
+ ], 0b00);
28
+ }
29
+ listItemsByNID(searchAfterValue) {
30
+ this.mx10.sendData(0x07, 0x02, [
31
+ { value: this.mx10.mx10NID, length: 2 },
32
+ { value: searchAfterValue, length: 2 },
33
+ ], 0b00);
34
+ }
35
+ removeLocomotive(toRemove, removeFrom = this.mx10.mx10NID) {
36
+ this.mx10.sendData(0x07, 0x1f, [
37
+ { value: removeFrom, length: 2 },
38
+ { value: toRemove, length: 2 },
39
+ ]);
40
+ }
41
+ itemImageConfig(nid, type, imageId) {
42
+ this.mx10.sendData(0x07, 0x12, [
43
+ { value: nid, length: 2 },
44
+ { value: type, length: 2 },
45
+ { value: imageId, length: 2 },
46
+ ]);
47
+ }
48
+ itemFxInfo(nid, fx, type, data) {
49
+ this.mx10.sendData(0x07, 0x15, [
50
+ { value: nid, length: 2 },
51
+ { value: fx, length: 2 },
52
+ { value: 0, length: 1 },
53
+ { value: type, length: 1 },
54
+ { value: data, length: 2 },
55
+ ]);
56
+ }
57
+ dataNameExtended(NID, subID, name) {
58
+ this.mx10.sendData(0x07, 0x21, [
59
+ { value: NID, length: 2 },
60
+ { value: subID, length: 2 },
61
+ { value: 0, length: 4 },
62
+ { value: 0, length: 4 },
63
+ { value: name, length: name.length },
64
+ { value: 0, length: 1 },
65
+ ], 0b01);
66
+ }
67
+ parse(size, command, mode, nid, buffer) {
68
+ switch (command) {
69
+ case 0x00:
70
+ this.parseGroupCount(size, mode, nid, buffer);
71
+ break;
72
+ case 0x01:
73
+ this.parseItemListByIndex(size, mode, nid, buffer);
74
+ break;
75
+ case 0x02:
76
+ this.parseItemListByNid(size, mode, nid, buffer);
77
+ break;
78
+ case 0x12:
79
+ this.parseItemImageConfig(size, mode, nid, buffer);
80
+ break;
81
+ case 0x15:
82
+ this.parseItemFxInfo(size, mode, nid, buffer);
83
+ break;
84
+ case 0x1f:
85
+ this.parseDataClear(size, mode, nid, buffer);
86
+ break;
87
+ case 0x21:
88
+ this.parseDataNameExtended(size, mode, nid, buffer);
89
+ break;
90
+ default:
91
+ console.warn('command not parsed: ' + command.toString());
92
+ }
93
+ }
94
+ parseGroupCount(size, mode, nid, buffer) {
95
+ if (this.onGroupCount.observed) {
96
+ const objectType = buffer.readUInt16LE(0);
97
+ const number = buffer.readUInt16LE(2);
98
+ this.onGroupCount.next({
99
+ objectType,
100
+ number,
101
+ });
102
+ }
103
+ }
104
+ parseItemListByIndex(size, mode, nid, buffer) {
105
+ if (this.onListItemsByIndex.observed) {
106
+ const index = buffer.readUInt16LE(0);
107
+ const deviceNID = buffer.readUInt16LE(2);
108
+ const msSinceLastCommunication = buffer.readUInt16LE(4);
109
+ if (deviceNID) {
110
+ this.onListItemsByIndex.next({
111
+ index,
112
+ nid: deviceNID,
113
+ msSinceLastCommunication,
114
+ });
115
+ }
116
+ }
117
+ }
118
+ parseItemListByNid(size, mode, nid, buffer) {
119
+ if (this.onListItemsByNID.observed) {
120
+ const NID = buffer.readUInt16LE(0);
121
+ const index = buffer.readUInt16LE(2);
122
+ const itemState = buffer.readUInt16LE(4);
123
+ const lastTick = buffer.readUInt16LE(6);
124
+ this.onListItemsByNID.next({
125
+ nid: NID,
126
+ index,
127
+ itemState,
128
+ lastTick,
129
+ });
130
+ }
131
+ }
132
+ parseDataClear(size, mode, nid, buffer) {
133
+ if (this.onRemoveLocomotive.observed) {
134
+ const NID = buffer.readUInt16LE(0);
135
+ const state = buffer.readUInt16LE(2);
136
+ this.onRemoveLocomotive.next({
137
+ nid: NID,
138
+ state: state,
139
+ });
140
+ }
141
+ }
142
+ parseItemImageConfig(size, mode, nid, buffer) {
143
+ if (this.onItemImageConfig.observed) {
144
+ const NID = buffer.readUInt16LE(0);
145
+ const type = buffer.readUInt16LE(2);
146
+ const imageId = buffer.readUInt16LE(4);
147
+ this.onItemImageConfig.next({
148
+ nid: NID,
149
+ type,
150
+ imageId,
151
+ });
152
+ }
153
+ }
154
+ parseItemFxInfo(size, mode, nid, buffer) {
155
+ if (this.onItemFxInfo.observed) {
156
+ const NID = buffer.readUInt16LE(0);
157
+ const fx = buffer.readUInt16LE(2);
158
+ const type = buffer.readUInt8(5);
159
+ const data = buffer.readUInt16LE(6);
160
+ this.onItemFxInfo.next({
161
+ nid: NID,
162
+ function: fx,
163
+ type,
164
+ data,
165
+ });
166
+ }
167
+ }
168
+ parseDataNameExtended(size, mode, nid, buffer) {
169
+ if (this.onDataNameExtended.observed) {
170
+ const NID = buffer.readUInt16LE(0);
171
+ const subID = buffer.readUInt16LE(2);
172
+ const name = ExtendedASCII.byte2str(buffer.subarray(12, 203));
173
+ let value1;
174
+ const value2 = buffer.readUInt32LE(8);
175
+ let type;
176
+ switch (NID) {
177
+ case 0x7f00:
178
+ type = NameType.MANUFACTURER;
179
+ break;
180
+ case 0x7f02:
181
+ type = NameType.DECODER;
182
+ break;
183
+ case 0x7f04:
184
+ type = NameType.DESIGNATION;
185
+ value1 = {
186
+ type: buffer.subarray(4).toString('ascii').trim(),
187
+ cfgNum: parseInt(buffer.subarray(5, 7).toString('ascii')),
188
+ };
189
+ break;
190
+ case 0x7f06:
191
+ type = NameType.CFGDB;
192
+ break;
193
+ case 0x7f10:
194
+ type = NameType.ICON;
195
+ break;
196
+ case 0x7f11:
197
+ type = NameType.ICON;
198
+ break;
199
+ case 0x7f18:
200
+ type = NameType.ZIMO_PARTNER;
201
+ break;
202
+ case 0x7f20:
203
+ type = NameType.LAND;
204
+ break;
205
+ case 0x7f21:
206
+ type = NameType.COMPANY_CV;
207
+ break;
208
+ case 0xc2:
209
+ type = NameType.CONNECTION;
210
+ break;
211
+ default:
212
+ if (subID == 1) {
213
+ type = NameType.COMPANY_CV;
214
+ }
215
+ else if (subID == 0) {
216
+ type = NameType.VEHICLE;
217
+ }
218
+ else {
219
+ type = NameType.CONNECTION;
220
+ }
221
+ }
222
+ this.onDataNameExtended.next({
223
+ nid: NID,
224
+ type,
225
+ subID,
226
+ value1,
227
+ value2,
228
+ name,
229
+ });
230
+ }
231
+ }
232
+ }
233
+ //# sourceMappingURL=dataGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataGroup.js","sourceRoot":"","sources":["../../src/zcan/dataGroup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import MX10 from '../MX10';
2
+ import { Buffer } from 'buffer';
3
+ export default class FileControlGroup {
4
+ private mx10;
5
+ constructor(mx10: MX10);
6
+ parse(size: number, command: number, mode: number, nid: number, buffer: Buffer): void;
7
+ }
@@ -0,0 +1,9 @@
1
+ export default class FileControlGroup {
2
+ mx10;
3
+ constructor(mx10) {
4
+ this.mx10 = mx10;
5
+ }
6
+ parse(size, command, mode, nid, buffer) {
7
+ }
8
+ }
9
+ //# sourceMappingURL=fileControlGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileControlGroup.js","sourceRoot":"","sources":["../../src/zcan/fileControlGroup.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,OAAO,gBAAgB;IAC3B,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CACH,IAAY,EACZ,OAAe,EACf,IAAY,EACZ,GAAW,EACX,MAAc;IAGhB,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import { Buffer } from 'buffer';
2
+ import MX10 from '../MX10';
3
+ export default class FileTransferGroup {
4
+ private mx10;
5
+ constructor(mx10: MX10);
6
+ parse(size: number, command: number, mode: number, nid: number, buffer: Buffer): void;
7
+ }
@@ -0,0 +1,9 @@
1
+ export default class FileTransferGroup {
2
+ mx10;
3
+ constructor(mx10) {
4
+ this.mx10 = mx10;
5
+ }
6
+ parse(size, command, mode, nid, buffer) {
7
+ }
8
+ }
9
+ //# sourceMappingURL=fileTransferGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileTransferGroup.js","sourceRoot":"","sources":["../../src/zcan/fileTransferGroup.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAC5B,IAAI,CAAO;IAEnB,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CACH,IAAY,EACZ,OAAe,EACf,IAAY,EACZ,GAAW,EACX,MAAc;IAGhB,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import LanNetworkGroup from './lanNetworkGroup';
2
+ import NetworkGroup from './networkGroup';
3
+ import VehicleGroup from './vehicleGroup';
4
+ import SystemControlGroup from './systemControlGroup';
5
+ import AccessoryCommandGroup from './accessoryCommandGroup';
6
+ import TrainControlGroup from './trainControlGroup';
7
+ import TrackCfgGroup from './trackCfgGroup';
8
+ import DataGroup from './dataGroup';
9
+ import InfoGroup from './infoGroup';
10
+ import PropertyConfigGroup from './propertyConfigGroup';
11
+ import RailwayControlGroup from './railwayControlGroup';
12
+ import ZimoProgrammableScriptGroup from './zimoProgrammableScriptGroup';
13
+ import FileControlGroup from './fileControlGroup';
14
+ import FileTransferGroup from './fileTransferGroup';
15
+ import LanZimoProgrammableScriptGroup from './lanZimoProgrammableScriptGroup';
16
+ import LanInfoGroup from './lanInfoGroup';
17
+ import LanDataGroup from './lanDataGroup';
18
+ export { LanNetworkGroup, NetworkGroup, VehicleGroup, SystemControlGroup, AccessoryCommandGroup, TrainControlGroup, TrackCfgGroup, DataGroup, InfoGroup, PropertyConfigGroup, RailwayControlGroup, ZimoProgrammableScriptGroup, FileControlGroup, FileTransferGroup, LanZimoProgrammableScriptGroup, LanInfoGroup, LanDataGroup, };
@@ -0,0 +1,19 @@
1
+ import LanNetworkGroup from './lanNetworkGroup';
2
+ import NetworkGroup from './networkGroup';
3
+ import VehicleGroup from './vehicleGroup';
4
+ import SystemControlGroup from './systemControlGroup';
5
+ import AccessoryCommandGroup from './accessoryCommandGroup';
6
+ import TrainControlGroup from './trainControlGroup';
7
+ import TrackCfgGroup from './trackCfgGroup';
8
+ import DataGroup from './dataGroup';
9
+ import InfoGroup from './infoGroup';
10
+ import PropertyConfigGroup from './propertyConfigGroup';
11
+ import RailwayControlGroup from './railwayControlGroup';
12
+ import ZimoProgrammableScriptGroup from './zimoProgrammableScriptGroup';
13
+ import FileControlGroup from './fileControlGroup';
14
+ import FileTransferGroup from './fileTransferGroup';
15
+ import LanZimoProgrammableScriptGroup from './lanZimoProgrammableScriptGroup';
16
+ import LanInfoGroup from './lanInfoGroup';
17
+ import LanDataGroup from './lanDataGroup';
18
+ export { LanNetworkGroup, NetworkGroup, VehicleGroup, SystemControlGroup, AccessoryCommandGroup, TrainControlGroup, TrackCfgGroup, DataGroup, InfoGroup, PropertyConfigGroup, RailwayControlGroup, ZimoProgrammableScriptGroup, FileControlGroup, FileTransferGroup, LanZimoProgrammableScriptGroup, LanInfoGroup, LanDataGroup, };
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/zcan/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,mBAAmB,CAAC;AAChD,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,kBAAkB,MAAM,sBAAsB,CAAC;AACtD,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,aAAa,MAAM,iBAAiB,CAAC;AAC5C,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AACxD,OAAO,2BAA2B,MAAM,+BAA+B,CAAC;AACxE,OAAO,gBAAgB,MAAM,oBAAoB,CAAC;AAClD,OAAO,iBAAiB,MAAM,qBAAqB,CAAC;AACpD,OAAO,8BAA8B,MAAM,kCAAkC,CAAC;AAC9E,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EACL,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,2BAA2B,EAC3B,gBAAgB,EAChB,iBAAiB,EACjB,8BAA8B,EAC9B,YAAY,EACZ,YAAY,GACb,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { Buffer } from 'buffer';
2
+ import MX10 from '../MX10';
3
+ import { Subject } from 'rxjs';
4
+ import { BidiInfoData } from '../@types/models';
5
+ export default class InfoGroup {
6
+ private mx10;
7
+ readonly onBidiInfoChange: Subject<BidiInfoData>;
8
+ constructor(mx10: MX10);
9
+ parse(size: number, command: number, mode: number, nid: number, buffer: Buffer): void;
10
+ private parseBidiInfo;
11
+ private parseEastWest;
12
+ private parseDirChange;
13
+ private parseFwdRev;
14
+ private parseDirectionConfirm;
15
+ }
@@ -0,0 +1,64 @@
1
+ import { Subject } from 'rxjs';
2
+ import { BidiType, Direction, ForwardOrReverse } from '../util/enums';
3
+ export default class InfoGroup {
4
+ mx10;
5
+ onBidiInfoChange = new Subject();
6
+ constructor(mx10) {
7
+ this.mx10 = mx10;
8
+ }
9
+ parse(size, command, mode, nid, buffer) {
10
+ switch (command) {
11
+ case 0x05:
12
+ this.parseBidiInfo(size, mode, nid, buffer);
13
+ break;
14
+ default:
15
+ console.log('command not parsed: ' + command.toString());
16
+ }
17
+ }
18
+ parseBidiInfo(size, mode, nid, buffer) {
19
+ if (this.onBidiInfoChange.observed) {
20
+ const NID = buffer.readUInt16LE(0);
21
+ const type = buffer.readUInt16LE(2);
22
+ const info = buffer.readUInt32LE(4);
23
+ let data = {};
24
+ switch (type) {
25
+ case BidiType.DIRECTION:
26
+ data.direction = this.parseEastWest(info);
27
+ data.directionChange = this.parseDirChange(info);
28
+ data.directionConfirm = this.parseDirectionConfirm(info);
29
+ data.forwardOrReverse = this.parseFwdRev(info);
30
+ break;
31
+ default:
32
+ data = info;
33
+ }
34
+ this.onBidiInfoChange.next({
35
+ nid: NID,
36
+ type,
37
+ data,
38
+ });
39
+ }
40
+ }
41
+ parseEastWest(data) {
42
+ if ((data & 0x02) == 0x02) {
43
+ return Direction.EAST;
44
+ }
45
+ else {
46
+ return Direction.WEST;
47
+ }
48
+ }
49
+ parseDirChange(data) {
50
+ return (data & 0x04) == 0x04;
51
+ }
52
+ parseFwdRev(data) {
53
+ if ((data & 0x01) == 0) {
54
+ return ForwardOrReverse.REVERSE;
55
+ }
56
+ else {
57
+ return ForwardOrReverse.FORWARD;
58
+ }
59
+ }
60
+ parseDirectionConfirm(data) {
61
+ return (data & 0x08) == 0x08;
62
+ }
63
+ }
64
+ //# sourceMappingURL=infoGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infoGroup.js","sourceRoot":"","sources":["../../src/zcan/infoGroup.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,MAAM,CAAC;AAE7B,OAAO,EAAC,QAAQ,EAAE,SAAS,EAAE,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAMpE,MAAM,CAAC,OAAO,OAAO,SAAS;IACpB,IAAI,CAAO;IAEH,gBAAgB,GAAG,IAAI,OAAO,EAAgB,CAAC;IAE/D,YAAY,IAAU;QACpB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CACH,IAAY,EACZ,OAAe,EACf,IAAY,EACZ,GAAW,EACX,MAAc;QAEd,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,IAAI;gBACP,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC5C,MAAM;YACR;gBAEE,OAAO,CAAC,GAAG,CAAC,sBAAsB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAEO,aAAa,CACnB,IAAY,EACZ,IAAY,EACZ,GAAW,EACX,MAAc;QAEd,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YAEpC,IAAI,IAAI,GAA+B,EAAE,CAAC;YAC1C,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,QAAQ,CAAC,SAAS;oBACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;oBAC1C,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;oBACjD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;oBACzD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBAC/C,MAAM;gBACR;oBACE,IAAI,GAAG,IAAI,CAAC;YAChB,CAAC;YAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;gBACzB,GAAG,EAAE,GAAG;gBACR,IAAI;gBACJ,IAAI;aACL,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,IAAY;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAC1B,OAAO,SAAS,CAAC,IAAI,CAAC;QACxB,CAAC;aAAM,CAAC;YACN,OAAO,SAAS,CAAC,IAAI,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,cAAc,CAAC,IAAY;QACjC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;IAC/B,CAAC;IAEO,WAAW,CAAC,IAAY;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,OAAO,gBAAgB,CAAC,OAAO,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,OAAO,gBAAgB,CAAC,OAAO,CAAC;QAClC,CAAC;IACH,CAAC;IACO,qBAAqB,CAAC,IAAY;QACxC,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,23 @@
1
+ import MX10 from '../MX10';
2
+ import { DataValueExtendedData, LocoGuiMXExtended, LocoSpeedTabExtended, Train } from '../@types/models';
3
+ import { Subject } from 'rxjs';
4
+ export default class LanDataGroup {
5
+ readonly onLocoGuiExtended: Subject<Train>;
6
+ readonly onLocoGuiMXExtended: Subject<LocoGuiMXExtended>;
7
+ readonly onDataValueExtended: Subject<DataValueExtendedData>;
8
+ readonly onLocoSpeedTabExtended: Subject<LocoSpeedTabExtended>;
9
+ private mx10;
10
+ constructor(mx10: MX10);
11
+ locoGuiExtended(NID: number): void;
12
+ locoGuiMXExtended(NID: number): void;
13
+ dataValueExtended(NID: number): void;
14
+ locoSpeedTapExtended(NID: number): void;
15
+ parse(size: number, command: number, mode: number, nid: number, buffer: Buffer): void;
16
+ private parseDataValueExtended;
17
+ private parseLocoGuiExtended;
18
+ private parseLocoGuiMXExtended;
19
+ private parseLocoSpeedTabExtended;
20
+ private parseEra;
21
+ private parseFlags;
22
+ private parseDeleted;
23
+ }
@@ -0,0 +1,226 @@
1
+ import { FunctionMode, getOperatingMode, OperatingMode } from '../util/enums';
2
+ import { Subject } from 'rxjs';
3
+ import { parseSpeed } from '../internal/speedUtils';
4
+ import ExtendedASCII from '../util/extended-ascii';
5
+ import { manualModeB, shuntingFunctionB } from '../internal/bites';
6
+ export default class LanDataGroup {
7
+ onLocoGuiExtended = new Subject();
8
+ onLocoGuiMXExtended = new Subject();
9
+ onDataValueExtended = new Subject();
10
+ onLocoSpeedTabExtended = new Subject();
11
+ mx10;
12
+ constructor(mx10) {
13
+ this.mx10 = mx10;
14
+ }
15
+ locoGuiExtended(NID) {
16
+ this.mx10.sendData(0x17, 0x27, [
17
+ { value: this.mx10.mx10NID, length: 2 },
18
+ { value: NID, length: 2 },
19
+ { value: 0, length: 2 },
20
+ ], 0b00);
21
+ }
22
+ locoGuiMXExtended(NID) {
23
+ this.mx10.sendData(0x17, 0x28, [
24
+ { value: this.mx10.mx10NID, length: 2 },
25
+ { value: NID, length: 2 },
26
+ { value: 0, length: 2 },
27
+ ], 0b00);
28
+ }
29
+ dataValueExtended(NID) {
30
+ this.mx10.sendData(0x17, 0x08, [
31
+ { value: this.mx10.mx10NID, length: 2 },
32
+ { value: NID, length: 2 },
33
+ { value: 1, length: 2 },
34
+ ], 0b00);
35
+ }
36
+ locoSpeedTapExtended(NID) {
37
+ this.mx10.sendData(0x17, 0x19, [
38
+ { value: this.mx10.mx10NID, length: 2 },
39
+ { value: NID, length: 2 },
40
+ { value: 0, length: 1 },
41
+ { value: 0, length: 1 },
42
+ ], 0b00);
43
+ }
44
+ parse(size, command, mode, nid, buffer) {
45
+ switch (command) {
46
+ case 0x08:
47
+ this.parseDataValueExtended(size, mode, nid, buffer);
48
+ break;
49
+ case 0x27:
50
+ this.parseLocoGuiExtended(size, mode, nid, buffer);
51
+ break;
52
+ case 0x28:
53
+ this.parseLocoGuiMXExtended(size, mode, nid, buffer);
54
+ break;
55
+ case 0x19:
56
+ this.parseLocoSpeedTabExtended(size, mode, nid, buffer);
57
+ break;
58
+ }
59
+ }
60
+ parseDataValueExtended(size, mode, nid, buffer) {
61
+ if (this.onDataValueExtended.observed) {
62
+ const NID = buffer.readUInt16LE(0);
63
+ const deletedFlag = buffer.readUInt8(4);
64
+ const flagsBytes = buffer.readUInt32LE(4);
65
+ const trackMode = buffer.readUInt8(24);
66
+ const functionCount = buffer.readUInt8(25);
67
+ const speedAndDirection = buffer.readUInt16LE(44);
68
+ const { speedStep, forward, eastWest, emergencyStop } = parseSpeed(speedAndDirection);
69
+ const operatingMode = getOperatingMode(trackMode);
70
+ const flags = this.parseFlags(flagsBytes);
71
+ let functions = buffer.readUInt32LE(46);
72
+ const functionsStates = [];
73
+ for (let i = 0; i < 31; i++) {
74
+ const active = (functions & 1) == 1;
75
+ functionsStates.push(active);
76
+ functions = functions >> 1;
77
+ }
78
+ const specialFunc = buffer.readUInt32LE(50);
79
+ const shuntingFunction = specialFunc & shuntingFunctionB;
80
+ const manualMode = (specialFunc & manualModeB) >> 4;
81
+ const deleted = this.parseDeleted(deletedFlag);
82
+ this.onDataValueExtended.next({
83
+ nid: NID,
84
+ flags,
85
+ functionCount,
86
+ speedStep,
87
+ forward,
88
+ eastWest,
89
+ emergencyStop,
90
+ operatingMode,
91
+ functionsStates,
92
+ shuntingFunction,
93
+ manualMode,
94
+ deleted,
95
+ });
96
+ }
97
+ }
98
+ parseLocoGuiExtended(size, mode, nid, buffer) {
99
+ if (this.onLocoGuiExtended.observed) {
100
+ const NID = buffer.readUInt16LE(0);
101
+ const SubID = buffer.readUInt16LE(2);
102
+ const vehicleGroup = buffer.readUInt16LE(4);
103
+ const name = ExtendedASCII.byte2str(buffer.subarray(6, 32));
104
+ const imageId = buffer.readUInt16LE(38);
105
+ const tacho = buffer.readUInt16LE(40);
106
+ const speedFwd = buffer.readUInt16LE(42);
107
+ const speedRev = buffer.readUInt16LE(44);
108
+ const speedRange = buffer.readUInt16LE(46);
109
+ const driveType = buffer.readUInt16LE(48);
110
+ const era = buffer.readUInt16LE(50);
111
+ const countryCode = buffer.readUInt16LE(52);
112
+ const functions = Array();
113
+ for (let i = 0; i < 33; i++) {
114
+ const icon = buffer.readUInt16LE(54 + i * 2);
115
+ const iconString = icon === 0 ? String(i).padStart(2, '0') : String(icon);
116
+ functions.push({
117
+ mode: FunctionMode.switch,
118
+ active: false,
119
+ icon: iconString.padStart(4, icon === 0 ? '07' : '0'),
120
+ });
121
+ }
122
+ this.onLocoGuiExtended.next({
123
+ nid: NID,
124
+ subId: SubID,
125
+ name: name,
126
+ group: vehicleGroup,
127
+ image: imageId == 0 ? undefined : imageId.toString(),
128
+ tacho: tacho.toString(),
129
+ speedFwd: speedFwd,
130
+ speedRev: speedRev,
131
+ speedRange: speedRange,
132
+ operatingMode: OperatingMode.UNKNOWN,
133
+ driveType: driveType,
134
+ era: this.parseEra(era),
135
+ countryCode: countryCode,
136
+ functions,
137
+ });
138
+ }
139
+ }
140
+ parseLocoGuiMXExtended(size, mode, nid, buffer) {
141
+ if (this.onLocoGuiMXExtended.observed) {
142
+ const NID = buffer.readUInt16LE(0);
143
+ const functions = Array();
144
+ for (let i = 0; i < 33; i++) {
145
+ const icon = buffer.readUInt16LE(68 + i * 2);
146
+ const iconString = icon === 0 ? String(i).padStart(2, '0') : String(icon);
147
+ functions.push({
148
+ mode: FunctionMode.switch,
149
+ active: false,
150
+ icon: iconString.padStart(4, icon === 0 ? '07' : '0'),
151
+ });
152
+ }
153
+ this.onLocoGuiMXExtended.next({
154
+ nid: NID,
155
+ functions,
156
+ });
157
+ }
158
+ }
159
+ parseLocoSpeedTabExtended(size, mode, nid, buffer) {
160
+ if (this.onLocoSpeedTabExtended.observed) {
161
+ const setDBat6 = 5;
162
+ const bufferLengthOfSpeedTab = 24;
163
+ const SrcID = buffer.readUInt16LE(0);
164
+ const NID = buffer.readUInt16LE(2);
165
+ const DBat6 = buffer.readUInt8(5);
166
+ let locoSpeedTab = undefined;
167
+ if (DBat6 !== setDBat6) {
168
+ locoSpeedTab = undefined;
169
+ }
170
+ else {
171
+ locoSpeedTab = [];
172
+ for (let i = 0; i < 4; i++) {
173
+ const offset = 6 + i * 4;
174
+ if (bufferLengthOfSpeedTab >= offset + 2) {
175
+ const speedStep = buffer.readUInt16LE(offset);
176
+ const speed = buffer.readUInt16LE(offset + 2);
177
+ locoSpeedTab.push({
178
+ id: i + 1,
179
+ speedStep: speedStep,
180
+ speed: speed,
181
+ });
182
+ }
183
+ else {
184
+ console.warn(`Train with id:${NID} has wrong speedStepTab buffer`);
185
+ break;
186
+ }
187
+ }
188
+ }
189
+ this.onLocoSpeedTabExtended.next({
190
+ srcid: SrcID,
191
+ nid: NID,
192
+ dbat6: DBat6,
193
+ speedTab: locoSpeedTab,
194
+ });
195
+ }
196
+ }
197
+ parseEra(eraString) {
198
+ switch (eraString & 0xf0) {
199
+ case 0x10:
200
+ return 'I';
201
+ case 0x20:
202
+ return 'II';
203
+ case 0x30:
204
+ return 'III';
205
+ case 0x40:
206
+ return 'IV';
207
+ case 0x50:
208
+ return 'V';
209
+ case 0x60:
210
+ return 'VI';
211
+ case 0x70:
212
+ return 'VII';
213
+ default:
214
+ return '';
215
+ }
216
+ }
217
+ parseFlags(flagsNumber) {
218
+ return {
219
+ deleted: flagsNumber >> 31 === 1,
220
+ };
221
+ }
222
+ parseDeleted(parseDeletedFlag) {
223
+ return parseDeletedFlag === 1;
224
+ }
225
+ }
226
+ //# sourceMappingURL=lanDataGroup.js.map