@synapticon/motion-master-client 6.0.0-alpha.63 → 6.0.0-alpha.65
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.
- package/dist/generated/Api.d.ts +73 -1
- package/dist/generated/Api.js +94 -0
- package/dist/generated/data-contracts.d.ts +149 -0
- package/package.json +1 -1
package/dist/generated/Api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AlStatusCode, Cia402Status, DcSyncStatus, DeviceDiagnostics, DeviceParameter, EscRegister, EsiParseResult, FoeErrorCode, GameLoopHealth, MailboxErrorCode, Monitoring, ObjectDataTypeInfo, OutputStageResult, ParameterCacheEntry, PdoMapping, PdoMappingRequest, ProcessDataWatchdog, ProcessImageObject, SdoAbortCode, SlaveConfig, SlaveInformationInterface, UserCacheListing } from "./data-contracts.js";
|
|
1
|
+
import { AlStatusCode, BrakeState, Cia402Status, DcSyncStatus, DeviceDiagnostics, DeviceParameter, EscRegister, EsiParseResult, FoeErrorCode, GameLoopHealth, MailboxErrorCode, Monitoring, ObjectDataTypeInfo, OutputStageResult, ParameterCacheEntry, PdoMapping, PdoMappingRequest, ProcedureListing, ProcedureRequest, ProcedureSnapshot, ProcessDataWatchdog, ProcessImageObject, SdoAbortCode, SlaveConfig, SlaveInformationInterface, UserCacheListing } from "./data-contracts.js";
|
|
2
2
|
import { HttpClient, RequestParams } from "./http-client.js";
|
|
3
3
|
export declare class Api<SecurityDataType = unknown> extends HttpClient<SecurityDataType> {
|
|
4
4
|
/**
|
|
@@ -662,6 +662,78 @@ export declare class Api<SecurityDataType = unknown> extends HttpClient<Security
|
|
|
662
662
|
*/
|
|
663
663
|
value: number;
|
|
664
664
|
}, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<void, void>>;
|
|
665
|
+
/**
|
|
666
|
+
* @description Returns every procedure available on the device, each with its descriptor and the state of its current or last run. One request is enough to render a whole per-device procedures view: the descriptor carries the title, description and caveats to display, and the snapshot says whether anything is running or how the last run went. The list is per device, not global — a procedure is offered only where it applies, so a third-party slave reports an empty list rather than controls that could only ever fail. A procedure that has never run reports an idle snapshot (`status` `idle`, `runCount` 0, every step `idle`), so every entry has the same shape.
|
|
667
|
+
*
|
|
668
|
+
* @name ListProcedures
|
|
669
|
+
* @summary List the procedures a device supports
|
|
670
|
+
* @request GET:/api/devices/{slavePosition}/procedures
|
|
671
|
+
*/
|
|
672
|
+
listProcedures: (slavePosition: number, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<ProcedureListing[], void>>;
|
|
673
|
+
/**
|
|
674
|
+
* @description Starts the named procedure and returns as soon as the run is under way — this does **not** wait for it to finish. Poll `GET` on the same path for its outcome, or `DELETE` to cancel it. The request body carries the procedure's parameters; which fields it accepts (and whether it needs any at all) is per procedure, so consult the descriptor from `GET /api/devices/{slavePosition}/procedures`. A procedure that takes no parameters may be started with no body. Only one procedure may run on a device at a time; a second start is refused with 409 while the first is in flight. Most procedures require an active mailbox, so the device must be in PRE-OP, SAFE-OP or OP. A run the drive answers with an error is not a failure of *this* request — it is reported in the snapshot as a failed run.
|
|
675
|
+
*
|
|
676
|
+
* @name StartProcedure
|
|
677
|
+
* @summary Start a procedure on a device
|
|
678
|
+
* @request POST:/api/devices/{slavePosition}/procedures/{procedureName}
|
|
679
|
+
*/
|
|
680
|
+
startProcedure: (slavePosition: number, procedureName: string, data?: ProcedureRequest, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<ProcedureSnapshot, void>>;
|
|
681
|
+
/**
|
|
682
|
+
* @description Returns the current run, or the last one to have finished. This is the whole progress surface — there is no push channel — and polling it is lossless: every finished step keeps its terminal status and value, so a step that both starts and completes between two polls is still reported as succeeded. A polling loop is `while status == "running"`. A procedure that has never run is not an absence: it reports an idle snapshot built from the procedure's step template, so a client renders one shape and needs no empty-state branch. The snapshot is retained after a run ends, so a client that reconnects (or a user returning to a page) sees how the last run went. It is dropped when the device set is rebuilt by a scan or reset, because bus positions may then name different hardware.
|
|
683
|
+
*
|
|
684
|
+
* @name GetProcedure
|
|
685
|
+
* @summary Read the state of a procedure on a device
|
|
686
|
+
* @request GET:/api/devices/{slavePosition}/procedures/{procedureName}
|
|
687
|
+
*/
|
|
688
|
+
getProcedure: (slavePosition: number, procedureName: string, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<ProcedureSnapshot, void>>;
|
|
689
|
+
/**
|
|
690
|
+
* @description Asks the running procedure to stop and returns immediately. Where the procedure is waiting on the drive it also tells the drive to abort (for an OS command, 0x1024 = 3), so a run that is waiting stops when asked rather than carrying on to completion. The run then finishes with status `cancelled`. This cancels the *run*, not the record: the snapshot remains and reports how far it got.
|
|
691
|
+
*
|
|
692
|
+
* @name CancelProcedure
|
|
693
|
+
* @summary Cancel a running procedure on a device
|
|
694
|
+
* @request DELETE:/api/devices/{slavePosition}/procedures/{procedureName}
|
|
695
|
+
*/
|
|
696
|
+
cancelProcedure: (slavePosition: number, procedureName: string, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<void, void>>;
|
|
697
|
+
/**
|
|
698
|
+
* @description Reports the brake objects (0x2004) that decide what a release or engage will do: its current state, the release strategy, the pull time and the pull/hold voltages. Read this before commanding the brake. `softwareControllable` is false when the release strategy is `manualOutputVoltage`, meaning the firmware does not drive the brake at all and both commands below are no-ops. `releaseMovesShaft` is true for a pin brake, whose release procedure turns the motor to lift the load off the pin.
|
|
699
|
+
*
|
|
700
|
+
* @name GetBrake
|
|
701
|
+
* @summary Read a drive's brake configuration and state
|
|
702
|
+
* @request GET:/api/devices/{slavePosition}/brake
|
|
703
|
+
*/
|
|
704
|
+
getBrake: (slavePosition: number, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<BrakeState, void>>;
|
|
705
|
+
/**
|
|
706
|
+
* @description Writes "disengaged" to the brake state object (0x2004:07) and waits the drive's pull time (0x2004:03) plus `settle` before answering, because the firmware blocks motion — and motion-related OS commands — until the pull time expires. Answers with the brake state read back. **The release only actually happens while the drive is in OP ENABLED.** In any other state the write merely energises the brake output (phase D). Note also that entering OP ENABLED releases the brake automatically in normal operation but **not** in diagnostics mode, where the master owns the brake — which is why a diagnostics procedure has to call this. **On a pin brake this moves the shaft**: the controller raises current progressively until the load has lifted off the pin by the minimum displacement (0x2004:08), reversing direction if it reaches the current ceiling (0x2004:09, a percentage of rated current) first. Check `releaseMovesShaft` on `GET .../brake`. Brake release is open-loop — nothing confirms the brake let go — so the wait is the only margin there is. A brake whose release strategy is `manualOutputVoltage` is left alone and the returned state says so; that is not an error. **A released brake stays released**: nothing re-engages it for you, so on a vertical or loaded axis engage it again when you are done.
|
|
707
|
+
*
|
|
708
|
+
* @name ReleaseBrake
|
|
709
|
+
* @summary Release (disengage) a drive's brake
|
|
710
|
+
* @request POST:/api/devices/{slavePosition}/brake/release
|
|
711
|
+
*/
|
|
712
|
+
releaseBrake: (slavePosition: number, query?: {
|
|
713
|
+
/**
|
|
714
|
+
* Extra wait in milliseconds on top of the drive's pull time. Size it for the machine — release is open-loop, so this is the only margin between "commanded" and "assumed released".
|
|
715
|
+
* @min 0
|
|
716
|
+
* @default 50
|
|
717
|
+
* @example 50
|
|
718
|
+
*/
|
|
719
|
+
settle?: number;
|
|
720
|
+
}, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<BrakeState, void>>;
|
|
721
|
+
/**
|
|
722
|
+
* @description Writes "engaged" to the brake state object (0x2004:07) and waits `settle` before answering with the brake state read back. There is no pull time on the way in — a brake is spring-engaged, so engaging it is the removal of voltage — so the wait is only `settle`. As with release, a brake whose release strategy is `manualOutputVoltage` is left alone and the returned state says so.
|
|
723
|
+
*
|
|
724
|
+
* @name EngageBrake
|
|
725
|
+
* @summary Engage a drive's brake
|
|
726
|
+
* @request POST:/api/devices/{slavePosition}/brake/engage
|
|
727
|
+
*/
|
|
728
|
+
engageBrake: (slavePosition: number, query?: {
|
|
729
|
+
/**
|
|
730
|
+
* How long to wait in milliseconds after commanding the brake before answering.
|
|
731
|
+
* @min 0
|
|
732
|
+
* @default 50
|
|
733
|
+
* @example 50
|
|
734
|
+
*/
|
|
735
|
+
settle?: number;
|
|
736
|
+
}, params?: RequestParams) => Promise<import("./http-client.js").HttpResponse<BrakeState, void>>;
|
|
665
737
|
/**
|
|
666
738
|
* @description Commands the device to persist its current parameters (the generic CANopen "store parameters" object 0x1010:01) and waits for confirmation. The server writes the ASCII "save" signature, waits a fixed settle (~1 s) for the drive to begin the flash write, then polls 0x1010:01 until it reads back 1 ("save completed"). Because a store in progress can leave the mailbox briefly unresponsive, a poll that does not yet confirm — a value mismatch or a transient read error alike — is retried up to `retries` more times, `interval` apart. The call blocks until the store is confirmed or the retry budget is exhausted (up to a few seconds); the device's mailbox must be active (PRE-OP/SAFE-OP/OP).
|
|
667
739
|
*
|
package/dist/generated/Api.js
CHANGED
|
@@ -456,6 +456,100 @@ export class Api extends HttpClient {
|
|
|
456
456
|
type: ContentType.Json,
|
|
457
457
|
...params,
|
|
458
458
|
});
|
|
459
|
+
/**
|
|
460
|
+
* @description Returns every procedure available on the device, each with its descriptor and the state of its current or last run. One request is enough to render a whole per-device procedures view: the descriptor carries the title, description and caveats to display, and the snapshot says whether anything is running or how the last run went. The list is per device, not global — a procedure is offered only where it applies, so a third-party slave reports an empty list rather than controls that could only ever fail. A procedure that has never run reports an idle snapshot (`status` `idle`, `runCount` 0, every step `idle`), so every entry has the same shape.
|
|
461
|
+
*
|
|
462
|
+
* @name ListProcedures
|
|
463
|
+
* @summary List the procedures a device supports
|
|
464
|
+
* @request GET:/api/devices/{slavePosition}/procedures
|
|
465
|
+
*/
|
|
466
|
+
listProcedures = (slavePosition, params = {}) => this.request({
|
|
467
|
+
path: `/api/devices/${slavePosition}/procedures`,
|
|
468
|
+
method: "GET",
|
|
469
|
+
format: "json",
|
|
470
|
+
...params,
|
|
471
|
+
});
|
|
472
|
+
/**
|
|
473
|
+
* @description Starts the named procedure and returns as soon as the run is under way — this does **not** wait for it to finish. Poll `GET` on the same path for its outcome, or `DELETE` to cancel it. The request body carries the procedure's parameters; which fields it accepts (and whether it needs any at all) is per procedure, so consult the descriptor from `GET /api/devices/{slavePosition}/procedures`. A procedure that takes no parameters may be started with no body. Only one procedure may run on a device at a time; a second start is refused with 409 while the first is in flight. Most procedures require an active mailbox, so the device must be in PRE-OP, SAFE-OP or OP. A run the drive answers with an error is not a failure of *this* request — it is reported in the snapshot as a failed run.
|
|
474
|
+
*
|
|
475
|
+
* @name StartProcedure
|
|
476
|
+
* @summary Start a procedure on a device
|
|
477
|
+
* @request POST:/api/devices/{slavePosition}/procedures/{procedureName}
|
|
478
|
+
*/
|
|
479
|
+
startProcedure = (slavePosition, procedureName, data, params = {}) => this.request({
|
|
480
|
+
path: `/api/devices/${slavePosition}/procedures/${procedureName}`,
|
|
481
|
+
method: "POST",
|
|
482
|
+
body: data,
|
|
483
|
+
type: ContentType.Json,
|
|
484
|
+
format: "json",
|
|
485
|
+
...params,
|
|
486
|
+
});
|
|
487
|
+
/**
|
|
488
|
+
* @description Returns the current run, or the last one to have finished. This is the whole progress surface — there is no push channel — and polling it is lossless: every finished step keeps its terminal status and value, so a step that both starts and completes between two polls is still reported as succeeded. A polling loop is `while status == "running"`. A procedure that has never run is not an absence: it reports an idle snapshot built from the procedure's step template, so a client renders one shape and needs no empty-state branch. The snapshot is retained after a run ends, so a client that reconnects (or a user returning to a page) sees how the last run went. It is dropped when the device set is rebuilt by a scan or reset, because bus positions may then name different hardware.
|
|
489
|
+
*
|
|
490
|
+
* @name GetProcedure
|
|
491
|
+
* @summary Read the state of a procedure on a device
|
|
492
|
+
* @request GET:/api/devices/{slavePosition}/procedures/{procedureName}
|
|
493
|
+
*/
|
|
494
|
+
getProcedure = (slavePosition, procedureName, params = {}) => this.request({
|
|
495
|
+
path: `/api/devices/${slavePosition}/procedures/${procedureName}`,
|
|
496
|
+
method: "GET",
|
|
497
|
+
format: "json",
|
|
498
|
+
...params,
|
|
499
|
+
});
|
|
500
|
+
/**
|
|
501
|
+
* @description Asks the running procedure to stop and returns immediately. Where the procedure is waiting on the drive it also tells the drive to abort (for an OS command, 0x1024 = 3), so a run that is waiting stops when asked rather than carrying on to completion. The run then finishes with status `cancelled`. This cancels the *run*, not the record: the snapshot remains and reports how far it got.
|
|
502
|
+
*
|
|
503
|
+
* @name CancelProcedure
|
|
504
|
+
* @summary Cancel a running procedure on a device
|
|
505
|
+
* @request DELETE:/api/devices/{slavePosition}/procedures/{procedureName}
|
|
506
|
+
*/
|
|
507
|
+
cancelProcedure = (slavePosition, procedureName, params = {}) => this.request({
|
|
508
|
+
path: `/api/devices/${slavePosition}/procedures/${procedureName}`,
|
|
509
|
+
method: "DELETE",
|
|
510
|
+
...params,
|
|
511
|
+
});
|
|
512
|
+
/**
|
|
513
|
+
* @description Reports the brake objects (0x2004) that decide what a release or engage will do: its current state, the release strategy, the pull time and the pull/hold voltages. Read this before commanding the brake. `softwareControllable` is false when the release strategy is `manualOutputVoltage`, meaning the firmware does not drive the brake at all and both commands below are no-ops. `releaseMovesShaft` is true for a pin brake, whose release procedure turns the motor to lift the load off the pin.
|
|
514
|
+
*
|
|
515
|
+
* @name GetBrake
|
|
516
|
+
* @summary Read a drive's brake configuration and state
|
|
517
|
+
* @request GET:/api/devices/{slavePosition}/brake
|
|
518
|
+
*/
|
|
519
|
+
getBrake = (slavePosition, params = {}) => this.request({
|
|
520
|
+
path: `/api/devices/${slavePosition}/brake`,
|
|
521
|
+
method: "GET",
|
|
522
|
+
format: "json",
|
|
523
|
+
...params,
|
|
524
|
+
});
|
|
525
|
+
/**
|
|
526
|
+
* @description Writes "disengaged" to the brake state object (0x2004:07) and waits the drive's pull time (0x2004:03) plus `settle` before answering, because the firmware blocks motion — and motion-related OS commands — until the pull time expires. Answers with the brake state read back. **The release only actually happens while the drive is in OP ENABLED.** In any other state the write merely energises the brake output (phase D). Note also that entering OP ENABLED releases the brake automatically in normal operation but **not** in diagnostics mode, where the master owns the brake — which is why a diagnostics procedure has to call this. **On a pin brake this moves the shaft**: the controller raises current progressively until the load has lifted off the pin by the minimum displacement (0x2004:08), reversing direction if it reaches the current ceiling (0x2004:09, a percentage of rated current) first. Check `releaseMovesShaft` on `GET .../brake`. Brake release is open-loop — nothing confirms the brake let go — so the wait is the only margin there is. A brake whose release strategy is `manualOutputVoltage` is left alone and the returned state says so; that is not an error. **A released brake stays released**: nothing re-engages it for you, so on a vertical or loaded axis engage it again when you are done.
|
|
527
|
+
*
|
|
528
|
+
* @name ReleaseBrake
|
|
529
|
+
* @summary Release (disengage) a drive's brake
|
|
530
|
+
* @request POST:/api/devices/{slavePosition}/brake/release
|
|
531
|
+
*/
|
|
532
|
+
releaseBrake = (slavePosition, query, params = {}) => this.request({
|
|
533
|
+
path: `/api/devices/${slavePosition}/brake/release`,
|
|
534
|
+
method: "POST",
|
|
535
|
+
query: query,
|
|
536
|
+
format: "json",
|
|
537
|
+
...params,
|
|
538
|
+
});
|
|
539
|
+
/**
|
|
540
|
+
* @description Writes "engaged" to the brake state object (0x2004:07) and waits `settle` before answering with the brake state read back. There is no pull time on the way in — a brake is spring-engaged, so engaging it is the removal of voltage — so the wait is only `settle`. As with release, a brake whose release strategy is `manualOutputVoltage` is left alone and the returned state says so.
|
|
541
|
+
*
|
|
542
|
+
* @name EngageBrake
|
|
543
|
+
* @summary Engage a drive's brake
|
|
544
|
+
* @request POST:/api/devices/{slavePosition}/brake/engage
|
|
545
|
+
*/
|
|
546
|
+
engageBrake = (slavePosition, query, params = {}) => this.request({
|
|
547
|
+
path: `/api/devices/${slavePosition}/brake/engage`,
|
|
548
|
+
method: "POST",
|
|
549
|
+
query: query,
|
|
550
|
+
format: "json",
|
|
551
|
+
...params,
|
|
552
|
+
});
|
|
459
553
|
/**
|
|
460
554
|
* @description Commands the device to persist its current parameters (the generic CANopen "store parameters" object 0x1010:01) and waits for confirmation. The server writes the ASCII "save" signature, waits a fixed settle (~1 s) for the drive to begin the flash write, then polls 0x1010:01 until it reads back 1 ("save completed"). Because a store in progress can leave the mailbox briefly unresponsive, a poll that does not yet confirm — a value mismatch or a transient read error alike — is retried up to `retries` more times, `interval` apart. The call blocks until the store is confirmed or the retry budget is exhausted (up to a few seconds); the device's mailbox must be active (PRE-OP/SAFE-OP/OP).
|
|
461
555
|
*
|
|
@@ -344,6 +344,155 @@ export interface ProcessImageObject {
|
|
|
344
344
|
*/
|
|
345
345
|
bitLength: number;
|
|
346
346
|
}
|
|
347
|
+
/** One step of a procedure. `id` is stable across runs, so a client keys its label and its value formatting off it. A step never reports cancellation: cancelling stops the procedure, leaving the step it was on `running` and the rest `idle`, which records how far it got. */
|
|
348
|
+
export interface ProgressStep {
|
|
349
|
+
/**
|
|
350
|
+
* Stable identifier of the step within its procedure.
|
|
351
|
+
* @example "command"
|
|
352
|
+
*/
|
|
353
|
+
id: string;
|
|
354
|
+
/** @example "succeeded" */
|
|
355
|
+
status: "idle" | "running" | "succeeded" | "failed";
|
|
356
|
+
/**
|
|
357
|
+
* What the step produced, if anything — shape is per procedure. Absent when the step produced nothing. For `os-command` it is an object with `status`, `data`, and `errorCode` when the drive sent one.
|
|
358
|
+
* @example {"status":1,"data":[1,2,3,4,5,6]}
|
|
359
|
+
*/
|
|
360
|
+
value?: any;
|
|
361
|
+
/** Why the step failed. Absent unless it did. */
|
|
362
|
+
error?: string;
|
|
363
|
+
}
|
|
364
|
+
/** The complete state of a procedure on one device — an accumulating snapshot rather than an event, which is what makes polling lossless. */
|
|
365
|
+
export interface ProcedureSnapshot {
|
|
366
|
+
/**
|
|
367
|
+
* The one field a polling loop checks. `cancelled` is distinct from `failed` on purpose: "I stopped it" and "the drive could not do it" are different outcomes.
|
|
368
|
+
* @example "succeeded"
|
|
369
|
+
*/
|
|
370
|
+
status: "idle" | "running" | "succeeded" | "failed" | "cancelled";
|
|
371
|
+
/**
|
|
372
|
+
* How many runs have been accepted on this device since the last scan or reset; a rejected start does not count. Doubles as a generation counter — with no run id, a changed `runCount` is how a poller can tell one run from the next.
|
|
373
|
+
* @example 3
|
|
374
|
+
*/
|
|
375
|
+
runCount: number;
|
|
376
|
+
/**
|
|
377
|
+
* Epoch milliseconds the run began. Absent when never run.
|
|
378
|
+
* @format int64
|
|
379
|
+
* @example 1735821000123
|
|
380
|
+
*/
|
|
381
|
+
startedAt?: number;
|
|
382
|
+
/**
|
|
383
|
+
* Epoch milliseconds the run ended. Absent while running.
|
|
384
|
+
* @format int64
|
|
385
|
+
* @example 1735821042456
|
|
386
|
+
*/
|
|
387
|
+
finishedAt?: number;
|
|
388
|
+
/** The procedure's ordered steps, always the full template. */
|
|
389
|
+
steps: ProgressStep[];
|
|
390
|
+
/** Why the run failed when no step captured it — a failure belonging to no step, such as the device not being the kind the procedure needs. Absent otherwise. */
|
|
391
|
+
error?: string;
|
|
392
|
+
}
|
|
393
|
+
/** A drive's brake configuration and current state — the parts of object 0x2004 that decide what commanding the brake will actually do. Returned by every brake endpoint, so the outcome of a release or engage arrives in the same shape as a plain read. */
|
|
394
|
+
export interface BrakeState {
|
|
395
|
+
/**
|
|
396
|
+
* Brake state (0x2004:07). A brake is spring-engaged, so `engaged` is also its powered-off state.
|
|
397
|
+
* @example "engaged"
|
|
398
|
+
*/
|
|
399
|
+
status: "notConfigured" | "engaged" | "disengaged";
|
|
400
|
+
/**
|
|
401
|
+
* How the brake is driven (0x2004:04). `manualOutputVoltage` means the firmware does not drive it — the brake is a raw output voltage (0x2004:10) instead.
|
|
402
|
+
* @example "clutch"
|
|
403
|
+
*/
|
|
404
|
+
releaseStrategy: "manualOutputVoltage" | "clutch" | "pin";
|
|
405
|
+
/**
|
|
406
|
+
* How long the pull voltage is applied to release the brake (0x2004:03). The firmware blocks motion, and motion-related OS commands, until this expires.
|
|
407
|
+
* @example 120
|
|
408
|
+
*/
|
|
409
|
+
pullTimeMs: number;
|
|
410
|
+
/**
|
|
411
|
+
* Voltage that disengages the brake, in millivolts (0x2004:01).
|
|
412
|
+
* @example 24000
|
|
413
|
+
*/
|
|
414
|
+
pullVoltageMv: number;
|
|
415
|
+
/**
|
|
416
|
+
* Lower voltage that keeps it disengaged once released, in millivolts (0x2004:02).
|
|
417
|
+
* @example 12000
|
|
418
|
+
*/
|
|
419
|
+
holdVoltageMv: number;
|
|
420
|
+
/**
|
|
421
|
+
* Whether commanding the brake does anything at all — false for `manualOutputVoltage`. Derived from the release strategy and served so a client need not encode that rule.
|
|
422
|
+
* @example true
|
|
423
|
+
*/
|
|
424
|
+
softwareControllable: boolean;
|
|
425
|
+
/**
|
|
426
|
+
* Whether releasing this brake turns the motor. True only for a pin brake, whose release raises current progressively to lift the load off the pin.
|
|
427
|
+
* @example false
|
|
428
|
+
*/
|
|
429
|
+
releaseMovesShaft: boolean;
|
|
430
|
+
}
|
|
431
|
+
/** What a procedure *is*, independent of any run — everything needed to render a control for it. The text is served rather than held per client, because the house rule that every action carries a description and its caveats means it has to exist somewhere, and duplicating it in each client is how it goes stale. */
|
|
432
|
+
export interface ProcedureDescriptor {
|
|
433
|
+
/**
|
|
434
|
+
* Identifier: the `procedureName` path segment, and the key its snapshot is retained under.
|
|
435
|
+
* @example "os-command"
|
|
436
|
+
*/
|
|
437
|
+
name: string;
|
|
438
|
+
/**
|
|
439
|
+
* Short human-readable name.
|
|
440
|
+
* @example "OS command"
|
|
441
|
+
*/
|
|
442
|
+
title: string;
|
|
443
|
+
/** What the procedure does. */
|
|
444
|
+
description: string;
|
|
445
|
+
/** What a user must know before running it. May be empty. */
|
|
446
|
+
caveats: string[];
|
|
447
|
+
/**
|
|
448
|
+
* True if running it can move the shaft.
|
|
449
|
+
* @example true
|
|
450
|
+
*/
|
|
451
|
+
movesMotor: boolean;
|
|
452
|
+
/**
|
|
453
|
+
* True if the drive must be enabled before it will run.
|
|
454
|
+
* @example false
|
|
455
|
+
*/
|
|
456
|
+
requiresEnabled: boolean;
|
|
457
|
+
/**
|
|
458
|
+
* The ordered step ids the procedure reports against — bare ids, because a template's per-step status is always idle and says nothing. Live status for the same ids is in the snapshot's `steps`.
|
|
459
|
+
* @example ["command"]
|
|
460
|
+
*/
|
|
461
|
+
steps: string[];
|
|
462
|
+
}
|
|
463
|
+
/** One procedure paired with how its last run on this device went — an entry of `GET /api/devices/{slavePosition}/procedures`. The pairing is what lets a page render in a single request instead of one per procedure. */
|
|
464
|
+
export interface ProcedureListing {
|
|
465
|
+
/** What a procedure *is*, independent of any run — everything needed to render a control for it. The text is served rather than held per client, because the house rule that every action carries a description and its caveats means it has to exist somewhere, and duplicating it in each client is how it goes stale. */
|
|
466
|
+
descriptor: ProcedureDescriptor;
|
|
467
|
+
/** The complete state of a procedure on one device — an accumulating snapshot rather than an event, which is what makes polling lossless. */
|
|
468
|
+
snapshot: ProcedureSnapshot;
|
|
469
|
+
}
|
|
470
|
+
/** A procedure's parameters. Which fields apply is per procedure — consult its descriptor — so this schema is open, and a procedure that takes none may be started with no body at all. The properties below are those of `os-command`, where `command` is required. */
|
|
471
|
+
export interface ProcedureRequest {
|
|
472
|
+
/**
|
|
473
|
+
* `os-command` only, and required for it: the eight request bytes. Byte 0 is the OS command ID; bytes 1-7 are that command's parameters.
|
|
474
|
+
* @maxItems 8
|
|
475
|
+
* @minItems 8
|
|
476
|
+
* @example [8,0,0,0,0,0,0,0]
|
|
477
|
+
*/
|
|
478
|
+
command?: number[];
|
|
479
|
+
/**
|
|
480
|
+
* Ceiling on the whole command. Not a liveness check — the drive fails a command no service acknowledges within 5 s on its own — so size it for the command being run. Hitting it aborts the command on the drive.
|
|
481
|
+
* @min 1
|
|
482
|
+
* @max 600000
|
|
483
|
+
* @default 1000
|
|
484
|
+
* @example 30000
|
|
485
|
+
*/
|
|
486
|
+
timeoutMs?: number;
|
|
487
|
+
/**
|
|
488
|
+
* How often the server reads the drive's response object while waiting.
|
|
489
|
+
* @min 1
|
|
490
|
+
* @max 1000
|
|
491
|
+
* @default 10
|
|
492
|
+
*/
|
|
493
|
+
pollIntervalMs?: number;
|
|
494
|
+
[key: string]: any;
|
|
495
|
+
}
|
|
347
496
|
export interface OutputStageResult {
|
|
348
497
|
/**
|
|
349
498
|
* 1-based bus position of the owning device (echoes the request)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@synapticon/motion-master-client",
|
|
3
|
-
"version": "6.0.0-alpha.
|
|
3
|
+
"version": "6.0.0-alpha.65",
|
|
4
4
|
"description": "Isomorphic TypeScript client for Motion Master: the generated HTTP API client, the WebSocket connection, and helpers.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|