@synapticon/motion-master-client 2.3.0-beta.0 → 6.0.0-alpha.23

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 (66) hide show
  1. package/LICENSE +21 -0
  2. package/dist/client.d.ts +20 -0
  3. package/dist/client.js +37 -0
  4. package/dist/constants.d.ts +2 -0
  5. package/dist/constants.js +8 -0
  6. package/dist/generated/Api.d.ts +991 -0
  7. package/dist/generated/Api.js +614 -0
  8. package/dist/generated/data-contracts.d.ts +644 -0
  9. package/dist/generated/data-contracts.js +12 -0
  10. package/dist/generated/http-client.d.ts +60 -0
  11. package/dist/generated/http-client.js +171 -0
  12. package/dist/hex.d.ts +2 -0
  13. package/dist/hex.js +20 -0
  14. package/dist/index.d.ts +10 -7
  15. package/dist/index.js +16 -22
  16. package/dist/mmpd.d.ts +54 -0
  17. package/dist/mmpd.js +323 -0
  18. package/dist/sdo.d.ts +15 -0
  19. package/dist/sdo.js +212 -0
  20. package/dist/somanet.d.ts +5 -0
  21. package/dist/somanet.js +15 -0
  22. package/dist/web-socket-connection.d.ts +69 -0
  23. package/dist/web-socket-connection.js +206 -0
  24. package/package.json +29 -35
  25. package/.vscode/launch.json +0 -23
  26. package/README.md +0 -118
  27. package/box.config.json +0 -7
  28. package/dist/index.d.ts.map +0 -1
  29. package/dist/index.js.map +0 -1
  30. package/dist/motion-master-client-web-socket-connection.d.ts +0 -43
  31. package/dist/motion-master-client-web-socket-connection.d.ts.map +0 -1
  32. package/dist/motion-master-client-web-socket-connection.js +0 -91
  33. package/dist/motion-master-client-web-socket-connection.js.map +0 -1
  34. package/dist/motion-master-client.d.ts +0 -105
  35. package/dist/motion-master-client.d.ts.map +0 -1
  36. package/dist/motion-master-client.js +0 -348
  37. package/dist/motion-master-client.js.map +0 -1
  38. package/dist/motion-master-notification-subscribe-data.d.ts +0 -8
  39. package/dist/motion-master-notification-subscribe-data.d.ts.map +0 -1
  40. package/dist/motion-master-notification-subscribe-data.js +0 -3
  41. package/dist/motion-master-notification-subscribe-data.js.map +0 -1
  42. package/dist/motion-master-notification-web-socket-connection.d.ts +0 -56
  43. package/dist/motion-master-notification-web-socket-connection.d.ts.map +0 -1
  44. package/dist/motion-master-notification-web-socket-connection.js +0 -115
  45. package/dist/motion-master-notification-web-socket-connection.js.map +0 -1
  46. package/dist/motion-master-notification.d.ts +0 -31
  47. package/dist/motion-master-notification.d.ts.map +0 -1
  48. package/dist/motion-master-notification.js +0 -44
  49. package/dist/motion-master-notification.js.map +0 -1
  50. package/dist/util.d.ts +0 -16
  51. package/dist/util.d.ts.map +0 -1
  52. package/dist/util.js +0 -24
  53. package/dist/util.js.map +0 -1
  54. package/licenses.format.json +0 -4
  55. package/motion-master-client.config.json +0 -7
  56. package/smm_data_dic.json +0 -1213
  57. package/src/index.ts +0 -7
  58. package/src/motion-master-client-web-socket-connection.ts +0 -104
  59. package/src/motion-master-client.ts +0 -468
  60. package/src/motion-master-notification-subscribe-data.ts +0 -7
  61. package/src/motion-master-notification-web-socket-connection.ts +0 -143
  62. package/src/motion-master-notification.ts +0 -51
  63. package/src/util.ts +0 -22
  64. package/test.sh +0 -122
  65. package/tsconfig.json +0 -63
  66. package/tslint.json +0 -118
@@ -0,0 +1,991 @@
1
+ import { AlStatusCode, DcSyncStatus, DeviceDiagnostics, DeviceParameter, EscRegister, FoeErrorCode, Monitoring, ObjectDataTypeInfo, ParameterCacheEntry, ProcessDataWatchdog, ProcessImageObject, SlaveConfig, SlaveInformationInterface } from "./data-contracts.js";
2
+ import { HttpClient, RequestParams } from "./http-client.js";
3
+ export declare class Api<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
4
+ /**
5
+ * No description
6
+ *
7
+ * @name GetAdapters
8
+ * @summary List network adapters on the host
9
+ * @request GET:/api/adapters
10
+ */
11
+ getAdapters: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
12
+ /**
13
+ * MAC address in colon-separated uppercase format
14
+ * @example "AA:BB:CC:DD:EE:FF"
15
+ */
16
+ mac: string;
17
+ /**
18
+ * OS interface name (e.g. eth0 on Linux, \\Device\\NPF_{GUID} on Windows)
19
+ * @example "eth0"
20
+ */
21
+ name: string;
22
+ }[], any>>;
23
+ /**
24
+ * No description
25
+ *
26
+ * @name GetVersion
27
+ * @summary Get Motion Master version
28
+ * @request GET:/api/version
29
+ */
30
+ getVersion: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
31
+ /** @example "6.0.0" */
32
+ version: string;
33
+ }, any>>;
34
+ /**
35
+ * @description The effective configuration after merging the JSONC config file (if any) over the built-in defaults — the same `Config` the server booted with. Read-only; changing it requires editing the config file and restarting. The shape mirrors the config file (server, fieldbus, logLevel, tls, gameLoop, recorder).
36
+ *
37
+ * @name GetStartedConfig
38
+ * @summary Get the configuration Motion Master was started with
39
+ * @request GET:/api/config
40
+ */
41
+ getStartedConfig: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<Record<string, any>, any>>;
42
+ /**
43
+ * @description A best-effort snapshot of the operating system and hardware Motion Master is running on, for the Connection page's System panel. Every field is best-effort: one that cannot be determined on the current platform is returned empty (strings) or zero (numbers) rather than failing the request. Collected on demand — not cached.
44
+ *
45
+ * @name GetSystemInfo
46
+ * @summary Get host OS and hardware information
47
+ * @request GET:/api/system-info
48
+ */
49
+ getSystemInfo: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
50
+ /**
51
+ * Friendly OS name.
52
+ * @example "Ubuntu 24.04 LTS"
53
+ */
54
+ osName: string;
55
+ /**
56
+ * Kernel or OS build identifier.
57
+ * @example "6.8.0-31-generic"
58
+ */
59
+ kernel: string;
60
+ /**
61
+ * Machine architecture.
62
+ * @example "x86_64"
63
+ */
64
+ architecture: string;
65
+ /**
66
+ * Network host name.
67
+ * @example "motion-master-pi"
68
+ */
69
+ hostname: string;
70
+ /**
71
+ * CPU brand string.
72
+ * @example "Intel(R) Core(TM) i7-1185G7 @ 3.00GHz"
73
+ */
74
+ cpuModel: string;
75
+ /**
76
+ * Logical processor count.
77
+ * @example 8
78
+ */
79
+ cpuCores: number;
80
+ /**
81
+ * Total physical RAM in bytes (0 if unknown).
82
+ * @format int64
83
+ * @example 16777216000
84
+ */
85
+ totalMemoryBytes: number;
86
+ /**
87
+ * Capacity of the filesystem holding the working directory, in bytes.
88
+ * @format int64
89
+ * @example 250790436864
90
+ */
91
+ diskTotalBytes: number;
92
+ /**
93
+ * Space available to an unprivileged process on that filesystem, in bytes.
94
+ * @format int64
95
+ * @example 98765432100
96
+ */
97
+ diskFreeBytes: number;
98
+ /**
99
+ * Container runtime when running inside one ("docker", "podman", "containerd", "kubernetes", "lxc"); empty on bare metal.
100
+ * @example "docker"
101
+ */
102
+ container: string;
103
+ /**
104
+ * Docker version reported by `docker --version` on the host; empty if the docker CLI is not installed/on PATH (including inside Motion Master's own image).
105
+ * @example "27.1.1"
106
+ */
107
+ dockerVersion: string;
108
+ }, any>>;
109
+ /**
110
+ * @description Reports the validity window and identity of the certificate the server is currently serving. `expiresSoon` trips within 7 days of `notAfter`, so the PWA can prompt the user to refresh. Note that an already-expired certificate blocks the browser from reaching this endpoint at all; the binary self-heals an expired/missing certificate at startup (fetching from the rolling release) and exposes `--update-cert` for manual refresh. Returns 500 if the certificate file cannot be read or parsed.
111
+ *
112
+ * @name GetCert
113
+ * @summary Get the TLS certificate validity window
114
+ * @request GET:/api/cert
115
+ */
116
+ getCert: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
117
+ /**
118
+ * Filesystem path of the certificate being served.
119
+ * @example "/opt/motion-master/cert.pem"
120
+ */
121
+ path: string;
122
+ /**
123
+ * Subject common name (CN).
124
+ * @example "local.motion-master.synapticon.com"
125
+ */
126
+ subject: string;
127
+ /**
128
+ * Issuer common name (CN).
129
+ * @example "R10"
130
+ */
131
+ issuer: string;
132
+ /**
133
+ * Start of the validity window (ISO 8601 UTC).
134
+ * @format date-time
135
+ * @example "2026-05-01T00:00:00Z"
136
+ */
137
+ notBefore: string;
138
+ /**
139
+ * End of the validity window / expiry (ISO 8601 UTC).
140
+ * @format date-time
141
+ * @example "2026-08-01T00:00:00Z"
142
+ */
143
+ notAfter: string;
144
+ /**
145
+ * Whole days until expiry; negative once expired.
146
+ * @example 56
147
+ */
148
+ daysRemaining: number;
149
+ /**
150
+ * Whether the certificate is already past notAfter.
151
+ * @example false
152
+ */
153
+ expired: boolean;
154
+ /**
155
+ * True when expired or within 7 days of notAfter.
156
+ * @example false
157
+ */
158
+ expiresSoon: boolean;
159
+ /** Every certificate present in the served PEM file, leaf first, in chain order (leaf → intermediate(s)). A fullchain PEM usually stops at the intermediate — the root lives in the OS trust store and is not transmitted — but the last entry's `issuer` still names that root. */
160
+ chain?: {
161
+ /**
162
+ * Subject common name (CN) of this certificate.
163
+ * @example "local.motion-master.synapticon.com"
164
+ */
165
+ subject: string;
166
+ /**
167
+ * Issuer common name (CN) — the subject of the next link up.
168
+ * @example "R10"
169
+ */
170
+ issuer: string;
171
+ /**
172
+ * Subject organization (O) — the friendly CA name (e.g. "Let's Encrypt") that the short CN does not carry; empty if absent (leaf certs often have no O).
173
+ * @example "Let's Encrypt"
174
+ */
175
+ organization: string;
176
+ /**
177
+ * Issuer organization (O) — names the next link's (or, for the last link, the root's) organization; empty if absent.
178
+ * @example "Internet Security Research Group"
179
+ */
180
+ issuerOrganization: string;
181
+ }[];
182
+ }, {
183
+ /**
184
+ * Human-readable reason the certificate could not be read.
185
+ * @example "cannot parse PEM certificate: /opt/motion-master/cert.pem"
186
+ */
187
+ error: string;
188
+ }>>;
189
+ /**
190
+ * @description Downloads a fresh certificate and key from the rolling release, validates the pair (parses, CN matches, not expired, key matches cert), and atomically installs them next to the binary. The new certificate only takes effect after a restart (the TLS listener loads the certificate once at startup), indicated by `restartRequired` in the response. Use the still-valid proactive case; an already-expired certificate is healed by the binary at startup instead.
191
+ *
192
+ * @name RefreshCert
193
+ * @summary Fetch and install a fresh TLS certificate
194
+ * @request POST:/api/cert/refresh
195
+ */
196
+ refreshCert: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
197
+ /** @example "/opt/motion-master/cert.pem" */
198
+ path?: string;
199
+ /** @example "local.motion-master.synapticon.com" */
200
+ subject?: string;
201
+ /** @example "R10" */
202
+ issuer?: string;
203
+ /** @format date-time */
204
+ notBefore?: string;
205
+ /** @format date-time */
206
+ notAfter: string;
207
+ /** @example 89 */
208
+ daysRemaining: number;
209
+ /** @example false */
210
+ expired?: boolean;
211
+ /** @example false */
212
+ expiresSoon?: boolean;
213
+ /**
214
+ * Always true — restart Motion Master to serve the new certificate.
215
+ * @example true
216
+ */
217
+ restartRequired: boolean;
218
+ }, {
219
+ /** @example "downloaded key does not match certificate" */
220
+ error: string;
221
+ } | {
222
+ /** @example "certificate refresh is not configured" */
223
+ error: string;
224
+ }>>;
225
+ /**
226
+ * No description
227
+ *
228
+ * @name GetDevice
229
+ * @summary Get a single fieldbus device by bus position
230
+ * @request GET:/api/devices/{slavePosition}
231
+ */
232
+ getDevice: (slavePosition: number, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
233
+ /**
234
+ * 1-based position on the fieldbus
235
+ * @example 1
236
+ */
237
+ slavePosition: number;
238
+ /**
239
+ * Human-readable device name from SII EEPROM
240
+ * @example "SOMANET Node"
241
+ */
242
+ name: string;
243
+ /**
244
+ * Vendor ID from EEPROM
245
+ * @format int64
246
+ * @example 131073
247
+ */
248
+ vendorId: number;
249
+ /**
250
+ * Product code from EEPROM
251
+ * @format int64
252
+ * @example 5570560
253
+ */
254
+ productCode: number;
255
+ /**
256
+ * Revision number from EEPROM
257
+ * @format int64
258
+ * @example 1
259
+ */
260
+ revisionNumber: number;
261
+ /**
262
+ * Serial number from EEPROM
263
+ * @format int64
264
+ * @example 12345
265
+ */
266
+ serialNumber: number;
267
+ }, void>>;
268
+ /**
269
+ * @description Performs a live AL-state read for the device and reports whether its CoE/SDO mailbox is active — i.e. it is in PRE-OP, SAFE-OP, or OP. This is independent of the AL error indicator: a device in SAFE-OP+error still answers mailbox requests. Only INIT (no mailbox) and BOOT (FoE-only mailbox) report inactive. The device must already be known from a prior scan. Reading one device at a time means a single missing device reports inactive without failing the others.
270
+ *
271
+ * @name GetDeviceMailboxActive
272
+ * @summary Check whether a device's mailbox is active
273
+ * @request GET:/api/devices/{slavePosition}/mailbox
274
+ */
275
+ getDeviceMailboxActive: (slavePosition: number, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
276
+ /**
277
+ * 1-based position on the fieldbus
278
+ * @example 1
279
+ */
280
+ slavePosition: number;
281
+ /**
282
+ * True when the device's CoE/SDO mailbox is active (AL state PRE-OP, SAFE-OP, or OP, regardless of the error indicator); false otherwise.
283
+ * @example true
284
+ */
285
+ mailboxActive: boolean;
286
+ }, void | {
287
+ /**
288
+ * Human-readable error message from the driver
289
+ * @example "FPRD slave 1: wkc=0"
290
+ */
291
+ error: string;
292
+ }>>;
293
+ /**
294
+ * @description Constructs the requested fieldbus driver, opens the network interface, and makes the driver available for subsequent calls to /api/scan. The driver defaults to SOEM when omitted. SOEM has no adapter auto-detect: a network adapter must be supplied, otherwise init fails.
295
+ *
296
+ * @name Init
297
+ * @summary Initialise the fieldbus driver
298
+ * @request POST:/api/init
299
+ */
300
+ init: (data?: {
301
+ /**
302
+ * Fieldbus driver to use
303
+ * @default "soem"
304
+ * @example "soem"
305
+ */
306
+ driver?: "soem" | "spoe" | "igh";
307
+ /**
308
+ * Network interface name or MAC address. Required for SOEM — there is no auto-detect, so an empty value makes init fail.
309
+ * @example "eth0"
310
+ */
311
+ adapter?: string;
312
+ }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
313
+ /** @example true */
314
+ ok: boolean;
315
+ }, void | {
316
+ /** @example "already initialised — call reset() first" */
317
+ error: string;
318
+ } | {
319
+ /**
320
+ * Human-readable error message from the driver
321
+ * @example "FPRD slave 1: wkc=0"
322
+ */
323
+ error: string;
324
+ }>>;
325
+ /**
326
+ * @description Scans the fieldbus for slaves and configures their sync managers and FMMUs. Must be called after a successful POST /api/init. Slaves remain in INIT state after this call; state transitions are driven by subsequent API calls.
327
+ *
328
+ * @name Scan
329
+ * @summary Scan the bus for slaves
330
+ * @request POST:/api/scan
331
+ */
332
+ scan: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
333
+ /**
334
+ * Number of slaves discovered on the bus
335
+ * @example 3
336
+ */
337
+ slaves: number;
338
+ }, {
339
+ /**
340
+ * Human-readable error message from the driver
341
+ * @example "FPRD slave 1: wkc=0"
342
+ */
343
+ error: string;
344
+ }>>;
345
+ /**
346
+ * @description Transitions all slaves to INIT state, closes the network interface, and removes all Device objects. After this returns, POST /api/init and POST /api/scan may be called again.
347
+ *
348
+ * @name Reset
349
+ * @summary Reset the fieldbus driver and clear the device list
350
+ * @request POST:/api/reset
351
+ */
352
+ reset: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
353
+ /** @example true */
354
+ ok: boolean;
355
+ }, any>>;
356
+ /**
357
+ * @description Returns the most recent in-memory log lines as plain text, one entry per line. The ring buffer holds up to 100 000 entries (~10 MB).
358
+ *
359
+ * @name GetLog
360
+ * @summary Get recent log output
361
+ * @request GET:/api/log
362
+ */
363
+ getLog: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<string, any>>;
364
+ /**
365
+ * @description Returns the static catalogue of EtherCAT AL Status Codes defined in ETG.1000.6 §6.4.1. These codes appear in the alStatusCode field of the device state response when an error is present and identify the cause of the state transition failure.
366
+ *
367
+ * @name GetAlStatusCodes
368
+ * @summary List all known AL Status Codes
369
+ * @request GET:/api/meta/al-status-codes
370
+ */
371
+ getAlStatusCodes: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<AlStatusCode[], any>>;
372
+ /**
373
+ * @description Returns the static catalogue of well-known EtherCAT Slave Controller registers from the Beckhoff ESC datasheet (Section II) and ETG.1000.4. Use the address and length fields as inputs to the device register read/write endpoints.
374
+ *
375
+ * @name GetRegisters
376
+ * @summary List all known ESC registers
377
+ * @request GET:/api/meta/esc-registers
378
+ */
379
+ getRegisters: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<EscRegister[], any>>;
380
+ /**
381
+ * @description Returns the static catalogue of standard File over EtherCAT (FoE) error codes defined in ETG.1000.6 §5.5. These codes appear in the FoE ERROR packet sent by the slave when a file transfer fails, and are surfaced in the error message returned by the file read endpoint. Vendor-specific codes outside the 0x8000 range are not listed here.
382
+ *
383
+ * @name GetFoeErrorCodes
384
+ * @summary List all known FoE error codes
385
+ * @request GET:/api/meta/foe-error-codes
386
+ */
387
+ getFoeErrorCodes: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<FoeErrorCode[], any>>;
388
+ /**
389
+ * @description Returns the static catalogue of ETG.1020 data type codes used in CoE object dictionary entries. Each entry of a `DeviceParameter` carries a `dataType` field whose value is one of the codes listed here.
390
+ *
391
+ * @name GetDataTypes
392
+ * @summary List all known CoE object dictionary data types
393
+ * @request GET:/api/meta/data-types
394
+ */
395
+ getDataTypes: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<ObjectDataTypeInfo[], any>>;
396
+ /**
397
+ * @description Enumerates the entire CoE object dictionary of the device at `slavePosition` via the SDO Info service ("Get Object List" → "Get Object Description" → "Get Entry Description") and rebuilds its parameter map. The device must be in PRE-OP, SAFE-OP, or OP (mailbox communication active). On a fully populated drive the call can take several seconds. When `readValues=true` each entry is additionally read via SDO upload and the decoded value is stored on the parameter; entries that fail to read keep their type-appropriate default and the call still succeeds.
398
+ *
399
+ * @name InitializeDeviceParameters
400
+ * @summary Initialise the parameter list for a device by enumerating its object dictionary
401
+ * @request POST:/api/devices/{slavePosition}/parameters/init
402
+ */
403
+ initializeDeviceParameters: (slavePosition: number, query?: {
404
+ /**
405
+ * When `true`, perform an SDO upload for every entry and decode the value. Defaults to `false` — only schema (name, type, access) is populated.
406
+ * @default false
407
+ */
408
+ readValues?: boolean;
409
+ }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<DeviceParameter[], void | {
410
+ /**
411
+ * Human-readable error message from the driver
412
+ * @example "FPRD slave 1: wkc=0"
413
+ */
414
+ error: string;
415
+ }>>;
416
+ /**
417
+ * @description Returns the parameter list populated by the most recent call to `POST /api/devices/{slavePosition}/parameters/init`. Empty before the first call. Entries are ordered ascending by `(index, subindex)`.
418
+ *
419
+ * @name GetDeviceParameters
420
+ * @summary Read the previously initialised parameter list for a device
421
+ * @request GET:/api/devices/{slavePosition}/parameters
422
+ */
423
+ getDeviceParameters: (slavePosition: number, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<DeviceParameter[], void>>;
424
+ /**
425
+ * @description Reads `length` bytes from the ESC register at `address` on the slave at `slavePosition` using a Configured-Address Read (FPRD) datagram. Pass `address` in decimal (e.g. 272 for DL Status at 0x0110).
426
+ *
427
+ * @name ReadRegister
428
+ * @summary Read bytes from an ESC register
429
+ * @request GET:/api/devices/{slavePosition}/registers/{address}
430
+ */
431
+ readRegister: (slavePosition: number, address: number, query: {
432
+ /**
433
+ * Number of bytes to read
434
+ * @min 1
435
+ * @example 2
436
+ */
437
+ length: number;
438
+ }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
439
+ /**
440
+ * Register bytes in ascending address order
441
+ * @example [65,0]
442
+ */
443
+ data: number[];
444
+ }, void | {
445
+ /**
446
+ * Human-readable error message from the driver
447
+ * @example "FPRD slave 1: wkc=0"
448
+ */
449
+ error: string;
450
+ }>>;
451
+ /**
452
+ * @description Writes bytes to the ESC register at `address` on the slave at `slavePosition` using a Configured-Address Write (FPWR) datagram. Pass `address` in decimal (e.g. 272 for DL Status at 0x0110).
453
+ *
454
+ * @name WriteRegister
455
+ * @summary Write bytes to an ESC register
456
+ * @request POST:/api/devices/{slavePosition}/registers/{address}
457
+ */
458
+ writeRegister: (slavePosition: number, address: number, data: {
459
+ /**
460
+ * Bytes to write in ascending address order
461
+ * @example [1,0]
462
+ */
463
+ data: number[];
464
+ }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
465
+ /** @example true */
466
+ ok: boolean;
467
+ }, void | {
468
+ /**
469
+ * Human-readable error message from the driver
470
+ * @example "FPRD slave 1: wkc=0"
471
+ */
472
+ error: string;
473
+ }>>;
474
+ /**
475
+ * @description Reads the process-data watchdog timeout the slave at `slavePosition` is configured with, decoded from the watchdog divider (0x0400) and process-data watchdog time (0x0420) ESC registers. This is the configured timeout itself, not the expiration counter exposed by `GET /api/devices/diagnostics`. A device in OP that misses process data past this timeout faults itself to SAFE-OP+error; raising it lets a device tolerate the brief PDO pause of a whole-bus re-map.
476
+ *
477
+ * @name GetProcessDataWatchdog
478
+ * @summary Read the process-data (sync-manager) watchdog configuration
479
+ * @request GET:/api/devices/{slavePosition}/watchdog
480
+ */
481
+ getProcessDataWatchdog: (slavePosition: number, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<ProcessDataWatchdog, void | {
482
+ /**
483
+ * Human-readable error message from the driver
484
+ * @example "FPRD slave 1: wkc=0"
485
+ */
486
+ error: string;
487
+ }>>;
488
+ /**
489
+ * @description Sets the process-data watchdog timeout of the slave at `slavePosition`, writing the process-data watchdog time register (0x0420). The device's watchdog divider (0x0400) is left untouched (it is shared with the PDI watchdog), so the achieved timeout is rounded to that divider's tick base — the response reports the value actually programmed. A `timeoutMs` of 0 disables the watchdog. The write persists across re-maps and re-scans until the ESC reloads EEPROM (power cycle).
490
+ *
491
+ * @name SetProcessDataWatchdog
492
+ * @summary Set the process-data (sync-manager) watchdog timeout
493
+ * @request PUT:/api/devices/{slavePosition}/watchdog
494
+ */
495
+ setProcessDataWatchdog: (slavePosition: number, data: {
496
+ /**
497
+ * Desired watchdog timeout in milliseconds; 0 disables the watchdog
498
+ * @min 0
499
+ * @example 200
500
+ */
501
+ timeoutMs: number;
502
+ }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<ProcessDataWatchdog, void | {
503
+ /**
504
+ * Human-readable error message from the driver
505
+ * @example "FPRD slave 1: wkc=0"
506
+ */
507
+ error: string;
508
+ }>>;
509
+ /**
510
+ * @description Performs a CoE SDO upload — reads the value of object `index:subindex` from the device at `slavePosition` and returns the raw bytes as a JSON array. Both `index` and `subindex` accept decimal or hexadecimal notation; prefix with `0x` for hex (e.g. `0x6064` or `24676` for object 0x6064).
511
+ *
512
+ * @name SdoUpload
513
+ * @summary Upload an object dictionary entry from a device (CoE SDO upload)
514
+ * @request GET:/api/devices/{slavePosition}/sdo/{index}/{subindex}
515
+ */
516
+ sdoUpload: (slavePosition: number, index: number, subindex: number, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
517
+ /**
518
+ * Object bytes as transferred by the SDO upload
519
+ * @example [0,0,0,0]
520
+ */
521
+ data: number[];
522
+ }, void | {
523
+ /**
524
+ * Human-readable error message from the driver
525
+ * @example "FPRD slave 1: wkc=0"
526
+ */
527
+ error: string;
528
+ }>>;
529
+ /**
530
+ * @description Performs a CoE SDO download — writes the raw bytes in the request body to object `index:subindex` on the device at `slavePosition`. The byte count must match the object's length. Requires the device to be in PRE-OP, SAFE-OP, or OP (mailbox communication active). Both `index` and `subindex` accept decimal or hexadecimal notation; prefix with `0x` for hex (e.g. `0x6064` or `24676`).
531
+ *
532
+ * @name SdoDownload
533
+ * @summary Download an object dictionary entry to a device (CoE SDO download)
534
+ * @request PUT:/api/devices/{slavePosition}/sdo/{index}/{subindex}
535
+ */
536
+ sdoDownload: (slavePosition: number, index: number, subindex: number, data: {
537
+ /**
538
+ * Object bytes to write (little-endian, must match the object length)
539
+ * @example [100,0,0,0]
540
+ */
541
+ data: number[];
542
+ }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
543
+ /** @example true */
544
+ ok: boolean;
545
+ }, void | {
546
+ /**
547
+ * Human-readable error message from the driver
548
+ * @example "FPRD slave 1: wkc=0"
549
+ */
550
+ error: string;
551
+ }>>;
552
+ /**
553
+ * @description Sends an FoE read request for `filename` to the device at `slavePosition` and returns the raw file bytes. FoE is available in Boot, Pre-Op, Safe-Op, and Op states (device-dependent); the caller is responsible for ensuring the device is in a suitable state before calling. The call blocks until the full file has been received or a per-packet timeout of 700 ms is exceeded.
554
+ *
555
+ * @name FoeReadFile
556
+ * @summary Read a file from a device via FoE (File over EtherCAT)
557
+ * @request GET:/api/devices/{slavePosition}/files/{filename}
558
+ */
559
+ foeReadFile: (slavePosition: number, filename: string, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<Blob, void | {
560
+ /**
561
+ * Human-readable error message from the driver
562
+ * @example "FPRD slave 1: wkc=0"
563
+ */
564
+ error: string;
565
+ }>>;
566
+ /**
567
+ * @description Sends an FoE write request for `filename` to the device at `slavePosition`, streaming the raw request body as the file contents. FoE is available in Boot, Pre-Op, Safe-Op, and Op states (device-dependent); the caller is responsible for ensuring the device is in a suitable state before calling.
568
+ *
569
+ * @name FoeWriteFile
570
+ * @summary Write a file to a device via FoE (File over EtherCAT)
571
+ * @request PUT:/api/devices/{slavePosition}/files/{filename}
572
+ */
573
+ foeWriteFile: (slavePosition: number, filename: string, data: File, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
574
+ /** @example true */
575
+ ok?: boolean;
576
+ }, void | {
577
+ /**
578
+ * Human-readable error message from the driver
579
+ * @example "FPRD slave 1: wkc=0"
580
+ */
581
+ error: string;
582
+ }>>;
583
+ /**
584
+ * @description Reads the raw SII EEPROM image of the device at `slavePosition` through the ESC's EEPROM-control registers and returns either the parsed structure or the raw bytes, selected by the `Accept` request header. With `Accept: application/json` (or `*\/*`, or no `Accept` header) the parsed `SlaveInformationInterface` is returned — the 128-byte fixed header plus the decoded category section (strings, general info, FMMU/Sync-Manager and PDO defaults, distributed-clock settings). With `Accept: application/octet-stream` the raw EEPROM image is returned unparsed, suitable for a hex dump or archival. EEPROM access is a control-plane operation and is most reliable while the device is in INIT or PRE-OP. String-index fields in the parsed structure (e.g. `general.nameIdx`) are 1-based references into `category.strings`.
585
+ *
586
+ * @name ReadSii
587
+ * @summary Read a device's SII (Slave Information Interface / EEPROM)
588
+ * @request GET:/api/devices/{slavePosition}/sii
589
+ */
590
+ readSii: (slavePosition: number, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<SlaveInformationInterface, void | {
591
+ /**
592
+ * Human-readable error message from the driver
593
+ * @example "FPRD slave 1: wkc=0"
594
+ */
595
+ error: string;
596
+ }>>;
597
+ /**
598
+ * @description Writes the raw SII image in the request body to the device's EEPROM, one 16-bit word at a time. The image is parse-validated first and rejected if it is not a well-formed SII (a guard against bricking the device). **Destructive:** a wrong image can leave the device unidentifiable until re-flashed. The device adopts the new contents only after a **power cycle**, and the write is most reliable while the device is in INIT or PRE-OP. Intended for restoring a previously downloaded image.
599
+ *
600
+ * @name WriteSii
601
+ * @summary Write a raw SII (EEPROM) image to a device
602
+ * @request PUT:/api/devices/{slavePosition}/sii
603
+ */
604
+ writeSii: (slavePosition: number, data: File, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
605
+ /** @example true */
606
+ ok?: boolean;
607
+ }, void | {
608
+ /**
609
+ * Human-readable error message from the driver
610
+ * @example "FPRD slave 1: wkc=0"
611
+ */
612
+ error: string;
613
+ }>>;
614
+ /**
615
+ * @description Decodes a raw SII EEPROM image supplied in the request body and returns the parsed structure — the same decoder the device read path uses, exposed as a bus-independent utility. No device is involved; the Tools SII page uses this to view previously downloaded `.bin` files offline.
616
+ *
617
+ * @name ParseSii
618
+ * @summary Parse a raw SII (EEPROM) image
619
+ * @request POST:/api/sii/parse
620
+ */
621
+ parseSii: (data: File, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<SlaveInformationInterface, void>>;
622
+ /**
623
+ * @description Reads live link-quality and watchdog diagnostics from each slave's EtherCAT Slave Controller (DL Status 0x0110, error-counter block 0x0300–0x0313, watchdog block 0x0440–0x0443) via FPRD. Counters are 8-bit, saturate at 255, and are cleared only by a power cycle or explicit write — poll this endpoint and watch for a rising delta rather than an absolute value. The per-port counters localise a degrading link to a specific cable/connector; the watchdog counters distinguish a slave that stopped receiving process data from a master-side problem. Omit `positions` to query all discovered devices. Returns 500 for transports without an ESC (e.g. SPoE).
624
+ *
625
+ * @name GetDeviceDiagnostics
626
+ * @summary Read live ESC health diagnostics for devices
627
+ * @request GET:/api/devices/diagnostics
628
+ */
629
+ getDeviceDiagnostics: (query?: {
630
+ /**
631
+ * Comma-separated list of 1-based slave positions to query (e.g. `1,2,3`). Omit to query all discovered devices.
632
+ * @example "1,2"
633
+ */
634
+ positions?: string;
635
+ }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<DeviceDiagnostics[], void | {
636
+ /**
637
+ * Human-readable error message from the driver
638
+ * @example "FPRD slave 1: wkc=0"
639
+ */
640
+ error: string;
641
+ }>>;
642
+ /**
643
+ * @description Reads each slave's distributed-clock unit live from its EtherCAT Slave Controller (system-time delay 0x0928 and system-time difference 0x092C) via FPRD. The reference clock is the first DC-capable slave; every other DC slave continuously corrects its local clock toward it, and `systemTimeDifference` is the live deviation in nanoseconds. The figure is meaningful only while the bus is exchanging process data in SAFE-OP/OP (the reference time is distributed in the cyclic frame) and converges toward zero as the slaves' drift loops settle — poll this endpoint and watch for a slave whose deviation stays large or grows rather than an absolute value. Non-DC slaves report `dcCapable` false with zeroed values. Omit `positions` to query all discovered devices. Returns 500 for transports without an ESC (e.g. SPoE).
644
+ *
645
+ * @name GetDcSync
646
+ * @summary Read live distributed-clock synchronisation status for devices
647
+ * @request GET:/api/dc-sync
648
+ */
649
+ getDcSync: (query?: {
650
+ /**
651
+ * Comma-separated list of 1-based slave positions to query (e.g. `1,2,3`). Omit to query all discovered devices.
652
+ * @example "1,2"
653
+ */
654
+ positions?: string;
655
+ }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<DcSyncStatus[], void | {
656
+ /**
657
+ * Human-readable error message from the driver
658
+ * @example "FPRD slave 1: wkc=0"
659
+ */
660
+ error: string;
661
+ }>>;
662
+ /**
663
+ * @description Reads the current EtherCAT Application Layer state for one or more devices. Omit the `positions` query parameter to query all discovered devices.
664
+ *
665
+ * @name GetDeviceStates
666
+ * @summary Read current AL state for devices
667
+ * @request GET:/api/devices/state
668
+ */
669
+ getDeviceStates: (query?: {
670
+ /**
671
+ * Comma-separated list of 1-based slave positions to query (e.g. `1,2,3`). Omit to query all discovered devices.
672
+ * @example "1,2"
673
+ */
674
+ positions?: string;
675
+ }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
676
+ /**
677
+ * 1-based position on the fieldbus
678
+ * @example 1
679
+ */
680
+ slavePosition: number;
681
+ /**
682
+ * Raw AL Status register value (ETG.1000.6 §6.4.1). Bits 3:0 encode the state; bit 4 is the error indicator.
683
+ * @example 17
684
+ */
685
+ alStatus: number;
686
+ /**
687
+ * Current AL state decoded from alStatus (ETG.1000.6 encoding): 1 = Init, 2 = PreOp, 3 = Boot, 4 = SafeOp, 8 = Op.
688
+ * @example 1
689
+ */
690
+ alState: 1 | 2 | 3 | 4 | 8;
691
+ /**
692
+ * True when the AL Status error indicator bit (bit 4) is set
693
+ * @example true
694
+ */
695
+ error: boolean;
696
+ /**
697
+ * AL Status Code register (ETG.1000.6 §6.4.1). Non-zero when error is true; identifies the error cause (e.g. 0x0014 = No valid firmware).
698
+ * @example 20
699
+ */
700
+ alStatusCode: number;
701
+ }[], void | {
702
+ /**
703
+ * Human-readable error message from the driver
704
+ * @example "FPRD slave 1: wkc=0"
705
+ */
706
+ error: string;
707
+ }>>;
708
+ /**
709
+ * @description Commands one or more devices to the requested EtherCAT Application Layer state and blocks until all targeted devices arrive or the timeout elapses. The settled state of every targeted device is then read back and returned in `devices`, each with a `reached` flag; `ok` is true only when every device reached the target. A device that did not reach it carries an `alStatusCode` explaining why. Omit `positions` or pass an empty array to target all discovered devices. State values are the standard AL state register encodings from ETG.1000.6: 1 (Init), 2 (PreOp), 3 (Boot), 4 (SafeOp), 8 (Op).
710
+ *
711
+ * @name TransitionToState
712
+ * @summary Transition devices to an EtherCAT AL state
713
+ * @request POST:/api/devices/state
714
+ */
715
+ transitionToState: (data: {
716
+ /**
717
+ * 1-based slave positions to target. Omit or pass an empty array to target all discovered devices.
718
+ * @example [1,2]
719
+ */
720
+ positions?: number[];
721
+ /**
722
+ * Target EtherCAT AL state (ETG.1000.6 AL control register encoding): 1 = Init, 2 = PreOp, 3 = Boot, 4 = SafeOp, 8 = Op.
723
+ * @example 8
724
+ */
725
+ state: 1 | 2 | 3 | 4 | 8;
726
+ /**
727
+ * Maximum time to wait for all devices, in milliseconds
728
+ * @default 5000
729
+ * @example 5000
730
+ */
731
+ timeout?: number;
732
+ }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
733
+ /**
734
+ * True only when every targeted device reached the target state.
735
+ * @example true
736
+ */
737
+ ok: boolean;
738
+ /** Settled state of each targeted device, in the order targeted. */
739
+ devices: {
740
+ /**
741
+ * 1-based position on the fieldbus
742
+ * @example 1
743
+ */
744
+ slavePosition: number;
745
+ /**
746
+ * Raw AL Status register value (ETG.1000.6 §6.4.1). Bits 3:0 encode the state; bit 4 is the error indicator.
747
+ * @example 2
748
+ */
749
+ alStatus: number;
750
+ /**
751
+ * Current AL state decoded from alStatus (ETG.1000.6 encoding): 1 = Init, 2 = PreOp, 3 = Boot, 4 = SafeOp, 8 = Op.
752
+ * @example 2
753
+ */
754
+ alState: 1 | 2 | 3 | 4 | 8;
755
+ /**
756
+ * True when the AL Status error indicator bit (bit 4) is set
757
+ * @example false
758
+ */
759
+ error: boolean;
760
+ /**
761
+ * AL Status Code register (ETG.1000.6 §6.4.1). Non-zero when error is true; identifies the error cause (e.g. 0x0014 = No valid firmware).
762
+ * @example 0
763
+ */
764
+ alStatusCode: number;
765
+ /**
766
+ * True when this device reached the requested target state (error clear and alState equal to the requested state).
767
+ * @example true
768
+ */
769
+ reached: boolean;
770
+ }[];
771
+ }, void | {
772
+ /**
773
+ * Human-readable error message from the driver
774
+ * @example "FPRD slave 1: wkc=0"
775
+ */
776
+ error: string;
777
+ }>>;
778
+ /**
779
+ * No description
780
+ *
781
+ * @name GetDevices
782
+ * @summary List all fieldbus devices
783
+ * @request GET:/api/devices
784
+ */
785
+ getDevices: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
786
+ /**
787
+ * 1-based position on the fieldbus
788
+ * @example 1
789
+ */
790
+ slavePosition: number;
791
+ /**
792
+ * Human-readable device name from SII EEPROM
793
+ * @example "SOMANET Node"
794
+ */
795
+ name: string;
796
+ /**
797
+ * Vendor ID from EEPROM
798
+ * @format int64
799
+ * @example 131073
800
+ */
801
+ vendorId: number;
802
+ /**
803
+ * Product code from EEPROM
804
+ * @format int64
805
+ * @example 5570560
806
+ */
807
+ productCode: number;
808
+ /**
809
+ * Revision number from EEPROM
810
+ * @format int64
811
+ * @example 1
812
+ */
813
+ revisionNumber: number;
814
+ /**
815
+ * Serial number from EEPROM
816
+ * @format int64
817
+ * @example 12345
818
+ */
819
+ serialNumber: number;
820
+ }[], any>>;
821
+ /**
822
+ * @description Returns the whole-bus process image: the byte sizes of each direction, the expected and last working counters and overall health, the number of retained image generations (one per re-map since the last reset), and every mapped object resolved to its absolute bit offset. While an image is live `configured` is true and the layout describes it. When no image is published (no device is in SAFE-OP/OP) but at least one generation has been mapped, `configured` is false and the layout describes the most recent retained generation — the last-known mapping — so a bus that has dropped out of SAFE-OP/OP stays inspectable; `lastWkc` then holds the final exchange value and working-counter health does not apply. The object lists are empty only before any image has ever been mapped. Object `name` is populated only for devices whose object dictionary has been enumerated.
823
+ *
824
+ * @name GetProcessImage
825
+ * @summary Inspect the published EtherCAT process image
826
+ * @request GET:/api/process-image
827
+ */
828
+ getProcessImage: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
829
+ /**
830
+ * Whether an image is currently published for exchange
831
+ * @example true
832
+ */
833
+ configured: boolean;
834
+ /**
835
+ * Size of the output image (master→slave) in bytes
836
+ * @example 12
837
+ */
838
+ outputBytes: number;
839
+ /**
840
+ * Size of the input image (slave→master) in bytes
841
+ * @example 16
842
+ */
843
+ inputBytes: number;
844
+ /**
845
+ * Working counter expected from the devices currently exchanging
846
+ * @example 3
847
+ */
848
+ expectedWkc: number;
849
+ /**
850
+ * Working counter from the most recent exchange (0 before any)
851
+ * @example 3
852
+ */
853
+ lastWkc: number;
854
+ /**
855
+ * Whether the last working counter meets the expected value
856
+ * @example true
857
+ */
858
+ healthy: boolean;
859
+ /**
860
+ * Number of process images retained since the last reset
861
+ * @example 1
862
+ */
863
+ generations: number;
864
+ /** Output-mapped objects (RxPDO), in image order */
865
+ outputs: ProcessImageObject[];
866
+ /** Input-mapped objects (TxPDO), in image order */
867
+ inputs: ProcessImageObject[];
868
+ }, any>>;
869
+ /**
870
+ * @description Streams the same `.mmpd` serialisation as the POST variant (the recorder's current span, with the process image embedded as a header) directly in the response body instead of writing a file — for the client SDK / browser, which parses the bytes offline. Request with `Accept: application/octet-stream`. Same span semantics as the POST; works in any state.
871
+ *
872
+ * @name StreamProcessDataDump
873
+ * @summary Stream the recorder ring as a binary .mmpd
874
+ * @request GET:/api/process-data/dump
875
+ */
876
+ streamProcessDataDump: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<Blob, {
877
+ /** Human-readable reason the dump could not be produced */
878
+ error: string;
879
+ }>>;
880
+ /**
881
+ * @description Serialises the process-data recorder's current span — every cycle from the oldest still in the ring up to the newest at the instant of the call — to a `.mmpd` file and returns its path. Each cycle's full raw input and output images, sequence, and epoch-nanosecond timestamp are written, with the process image (per-device identity and PDO object layout, including object names and data types where the object dictionary has been enumerated) embedded as a header, so the file decodes fully offline with no running Motion Master and no live bus. Works in any state: while devices are exchanging (SAFE-OP/OP) it captures tail→head at that moment and ignores cycles recorded afterwards; after the bus has left the exchange states it uses the most recent retained image layout. The file is written under the configured `recorder.dumpDir` (default: a `motion-master` subdirectory of the OS temporary directory), created if absent. Motion Master binds 127.0.0.1, so the file is on the caller's own machine — only the path is returned (there is no download, list, or delete endpoint).
882
+ *
883
+ * @name DumpProcessData
884
+ * @summary Dump the recorder ring to a binary .mmpd file
885
+ * @request POST:/api/process-data/dump
886
+ */
887
+ dumpProcessData: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<{
888
+ /**
889
+ * Absolute path of the written .mmpd file
890
+ * @example "/tmp/motion-master/dump-20260610T141530Z-300123.mmpd"
891
+ */
892
+ path: string;
893
+ }, {
894
+ /**
895
+ * Human-readable reason the dump could not be produced
896
+ * @example "the recorder is empty — no cycles have been recorded yet"
897
+ */
898
+ error: string;
899
+ }>>;
900
+ /**
901
+ * @description Returns the static ESC configuration the master programmed into every slave during the last scan: station/alias addresses, mapped process-data sizes, the mailbox transport windows, the distributed-clock setup, and the configured Sync Managers and FMMUs. Read from cached state with no bus I/O and valid once the bus has been scanned. The list is empty before any scan, or when the active transport has no ESC (e.g. SPoE). Numeric fields (SM/FMMU type, mailbox protocol bits, SM flags) are raw register values; the client decodes them. `deviceName` is empty when no known device occupies the slave.
902
+ *
903
+ * @name GetBusConfig
904
+ * @summary Inspect each slave's static EtherCAT Slave Controller configuration
905
+ * @request GET:/api/bus-config
906
+ */
907
+ getBusConfig: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<SlaveConfig[], any>>;
908
+ /**
909
+ * @description Returns every registered monitoring as a resource — its configuration plus, per parameter, how its value is sourced, and the current buffer fill.
910
+ *
911
+ * @name ListMonitorings
912
+ * @summary List all monitorings
913
+ * @request GET:/api/monitorings
914
+ */
915
+ listMonitorings: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<Monitoring[], any>>;
916
+ /**
917
+ * @description Registers a monitoring and starts sampling it off the real-time thread. Each parameter is classified once against the published process image: PDO-mapped objects are decoded from the live image; the rest are polled over SDO in the background. Create monitorings after the bus is operational so PDO objects are recognised as PDO. Monitoring is live-only — a parameter samples `null` while its owning device is not exchanging (SAFE-OP/OP).
918
+ *
919
+ * @name CreateMonitoring
920
+ * @summary Create a monitoring
921
+ * @request POST:/api/monitorings
922
+ */
923
+ createMonitoring: (data: {
924
+ /**
925
+ * URL-safe unique id; also the WebSocket topic. The name `pdos` is reserved.
926
+ * @pattern ^[A-Za-z0-9._-]{1,64}$
927
+ * @example "left-leg"
928
+ */
929
+ topic: string;
930
+ /**
931
+ * Optional human-readable label.
932
+ * @example "Left Leg"
933
+ */
934
+ name?: string;
935
+ /**
936
+ * Flush cadence in milliseconds (5–2000). Not a sample rate: every recorded cycle since the last flush is delivered, so a longer interval yields a larger batch rather than fewer samples. 16 ms (~one batch per 60 Hz display frame) is a good default for live plotting.
937
+ * @min 5
938
+ * @max 2000
939
+ * @example 16
940
+ */
941
+ interval: number;
942
+ /**
943
+ * Objects to sample, each as `[devicePosition, index, subindex]`.
944
+ * @minItems 1
945
+ * @example [[1,8240,1],[1,24676,0]]
946
+ */
947
+ parameters: number[][];
948
+ }, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<Monitoring, {
949
+ error: string;
950
+ }>>;
951
+ /**
952
+ * No description
953
+ *
954
+ * @name GetMonitoring
955
+ * @summary Get a monitoring
956
+ * @request GET:/api/monitorings/{topic}
957
+ */
958
+ getMonitoring: (topic: string, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<Monitoring, void>>;
959
+ /**
960
+ * @description Stops sampling and releases the monitoring's SDO parameters from the shared refresher — an object no remaining monitoring needs stops being polled.
961
+ *
962
+ * @name DeleteMonitoring
963
+ * @summary Delete a monitoring
964
+ * @request DELETE:/api/monitorings/{topic}
965
+ */
966
+ deleteMonitoring: (topic: string, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<void, void>>;
967
+ /**
968
+ * @description Returns one entry per cached parameter-definition file on disk, keyed by device identity (vendor, product, revision). The cache stores only the object-dictionary *definitions* (not live values), so a scan of previously-seen hardware can skip the slow SDO enumeration. Independent of the bus — works whether or not a driver is initialised.
969
+ *
970
+ * @name ListParameterCaches
971
+ * @summary List on-disk parameter caches
972
+ * @request GET:/api/parameter-caches
973
+ */
974
+ listParameterCaches: (params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<ParameterCacheEntry[], any>>;
975
+ /**
976
+ * @description Returns the raw JSON cache file for the given id, verbatim, so it can be saved or inspected offline.
977
+ *
978
+ * @name GetParameterCache
979
+ * @summary Download a parameter-cache file
980
+ * @request GET:/api/parameter-caches/{id}
981
+ */
982
+ getParameterCache: (id: string, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<object, void>>;
983
+ /**
984
+ * @description Removes one cached file from disk. The next scan of that hardware re-enumerates it. Useful when a vendor reused a revision across an object-dictionary change.
985
+ *
986
+ * @name DeleteParameterCache
987
+ * @summary Delete a parameter-cache file
988
+ * @request DELETE:/api/parameter-caches/{id}
989
+ */
990
+ deleteParameterCache: (id: string, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<void, void>>;
991
+ }