Board v2 · Firmware in developmentDraft

API reference

Every message, field and error code of the device protocol, generated from upan.proto.

View .mdllms.txt

Binary protocol between the UPAN motion MCU and a host (the network module over UART, or a PC over USB CDC), encoded with protobuf; each message travels in a COBS frame with a version byte and CRC-16. All quantities are integer metric base units (bu): µm, µm/s and µm/s² for a linear axis, millidegrees, m°/s and m°/s² for a rotary axis; inches never appear in the protocol and are converted by the host, and 0 for speed or acceleration in a command means "use the SoftConfig default".

Package upan.v1. Generated from upan.proto when the site is built, so it matches the firmware it was built with. The same names are used in the JSON of the Network API and in the frames of the USB protocol.

Messages

messageHostMessage

Everything the host sends to the motion core; every HostMessage gets exactly one Response with the same seq.

FieldTypeNo.Description
sequint321Sequence number, incremented by the host and echoed in the Response; 0 is reserved.
move_absoneof bodyMoveAbs10Move to an absolute position.
move_reloneof bodyMoveRel11Move by a relative distance.
jogoneof bodyJog12Continuous move that runs only while the host keeps refreshing it.
stoponeof bodyStop13Decelerate to a stop; also stops a running program.
estoponeof bodyEStop14Software emergency stop.
homeoneof bodyHome15Run the homing sequence configured in HardConfig.home_method.
set_positiononeof bodySetPosition16Declare the current position without moving.
move_linearoneof bodyMoveLinear17Move several axes together along a straight line (firmware v2: later; now ERROR_UNSUPPORTED).
travel_discoveroneof bodyTravelDiscover18Measure the axis travel automatically, from limit switch to limit switch.
program_beginoneof bodyProgramBegin20Start uploading a motion program.
program_chunkoneof bodyProgramChunk21Upload the next block of program instructions.
program_commitoneof bodyProgramCommit22Validate the uploaded program and make it active.
program_runoneof bodyProgramRun23Run the active program.
program_pauseoneof bodyProgramPause24Pause the running program after the current move.
program_resumeoneof bodyProgramResume25Resume a paused program.
program_abortoneof bodyProgramAbort26Stop the program and reset its instruction counter.
soft_config_getoneof bodySoftConfigGet30Read the working limits (SoftConfig).
soft_config_setoneof bodySoftConfigSet31Write the working limits (SoftConfig).
hard_config_getoneof bodyHardConfigGet32Read the machine limits (HardConfig).
hard_config_setoneof bodyHardConfigSet33Write the machine limits (HardConfig); accepted only over USB and inside the physical-presence window.
output_setoneof bodyOutputSet40Set a digital output.
info_getoneof bodyInfoGet50Read device information (versions, serial, capabilities).
telemetry_configoneof bodyTelemetryConfig51Set the telemetry rate.
fault_clearoneof bodyFaultClear52Clear a fault state.
heartbeatoneof bodyHeartbeat53Keep-alive from the host.
resetoneof bodyReset73Restart the controller; only while nothing moves.

messageDeviceMessage

Everything the MCU sends to the host.

FieldTypeNo.Description
responseoneof bodyResponse1Reply to a HostMessage, with the same seq.
telemetryoneof bodyTelemetry2Periodic state report; the rate is set by TelemetryConfig.
eventoneof bodyEvent3Asynchronous event.
heartbeatoneof bodyHeartbeat4Keep-alive from the device.

messageResponse

Acknowledgement (ACK) or rejection (NACK) of one host command, with details for a rejection and data for *Get commands.

FieldTypeNo.Description
sequint321seq of the HostMessage this answers.
errorErrorCode2ERROR_NONE means the command was accepted (ACK); any other code is a rejection (NACK).
limit_violationLimitViolation3For ERROR_LIMIT_EXCEEDED: which limit was exceeded and the nearest allowed value, so the caller can correct the request.
program_instruction_indexuint324For ERROR_PROGRAM_INVALID (and a limit violation found by ProgramRun): index of the offending instruction.
axisuint325Which axis rejected the request (0 = first axis); for multi-axis programs and per-axis config.
infooneof resultInfo10Result of InfoGet.
soft_configoneof resultSoftConfig11Result of SoftConfigGet.
hard_configoneof resultHardConfig12Result of HardConfigGet.

messageLimitViolation

Details of a rejected command that exceeded a limit.

FieldTypeNo.Description
limitLimitKind1Which limit was exceeded.
requestedsint322Requested value, in base units.
allowedsint323Nearest allowed value, in base units.

messageMoveAbs

Move to an absolute position; requires the axis to be homed.

FieldTypeNo.Description
targetsint321Target position, in base units (µm or m°).
velocityuint322Speed in bu/s; 0 = SoftConfig default.
accelerationuint323Acceleration in bu/s²; 0 = SoftConfig default.

messageMoveRel

Move by a distance from the current position; allowed without homing.

FieldTypeNo.Description
distancesint321Distance in base units; the sign gives the direction.
velocityuint322Speed in bu/s; 0 = SoftConfig default.
accelerationuint323Acceleration in bu/s²; 0 = SoftConfig default.

messageJog

Move for as long as the host keeps it alive: the host must repeat Jog (or send Heartbeat) more often than timeout_ms, otherwise the MCU decelerates on its own.

FieldTypeNo.Description
velocitysint321Speed in bu/s; the sign gives the direction; 0 = smooth stop.
accelerationuint322Acceleration in bu/s²; 0 = SoftConfig default.
timeout_msuint323Keep-alive timeout in ms; capped by SoftConfig.jog_timeout_max_ms.

messageMoveLinear

Straight-line move of several axes of the controller: all start and stop together and move proportionally; each axis is checked against its own limits. Firmware v2: later, now ERROR_UNSUPPORTED.

FieldTypeNo.Description
targetsrepeated AxisTarget1Per-axis targets.
velocityuint322Speed along the line in bu/s (line length = square root of the sum of squared distances); 0 = default.
accelerationuint323Acceleration along the line in bu/s²; 0 = default.
relativebool4If true, targets are distances rather than positions, and homing is not required.

messageAxisTarget

Target for one axis in a MoveLinear.

FieldTypeNo.Description
axisuint321Axis number: 0 = first axis of the controller.
targetsint322Position, or distance when relative is set, in that axis's base units.

messageStop

Decelerate to a stop with the current acceleration; also stops a running program.

No fields.

messageEStop

Software emergency stop: step generation stops immediately; motor holding follows the configuration. The hardware e-stop works independently of the protocol.

No fields.

messageHome

Run homing using the method in SoftConfig.home_method (if unset, HardConfig.home_method).

No fields.

messageTravelDiscover

Measure the travel automatically: home to its own switch, then drive to the opposite switch and back to the post-homing point. Stores SoftConfig.travel_min/travel_max (from the homing switch to where the opposite switch released) in flash and ends with EVENT_TRAVEL_DONE; the state is STATE_HOMING meanwhile. Needs HOME_LIMIT_MIN or HOME_LIMIT_MAX and both limit switches present and already seen, otherwise ERROR_INVALID_STATE.

No fields.

messageSetPosition

Declare the current position to be value without moving; marks the axis as homed.

FieldTypeNo.Description
valuesint321New current position, in base units.

messageProgramBegin

Start a program upload. Programs are uploaded as Begin, then Chunk messages, then Commit.

FieldTypeNo.Description
instruction_countuint321Total number of instructions in the program.
crc32uint322CRC-32 (zlib variant) over the protobuf encoding of each Instruction, in order.

messageProgramChunk

One block of program instructions; chunks must arrive in order.

FieldTypeNo.Description
offsetuint321Index of the first instruction in this chunk (equal to the number already received).
instructionsrepeated Instruction2Instructions in this chunk.

messageProgramCommit

Finish the upload: validate the whole program (statically, since it has no conditions) and only then make it active.

No fields.

messageProgramRun

Run the active program; requires the axis to be homed.

FieldTypeNo.Description
repeatuint321Number of times to run the program; 0 or 1 = once.

messageProgramPause

Finish the current move and stop, keeping the program position.

No fields.

messageProgramResume

Resume a paused program.

No fields.

messageProgramAbort

Like Stop, and also reset the program counter.

No fields.

messageInstruction

One step of a motion program.

FieldTypeNo.Description
move_absoneof opMoveAbs1Move to an absolute position.
move_reloneof opMoveRel2Move by a relative distance.
homeoneof opHome3Run homing.
wait_timeoneof opWaitTime4Wait for a fixed time.
wait_inputoneof opWaitInput5Wait for an input to reach a level.
set_outputoneof opSetOutput6Set a digital output.
loop_beginoneof opLoopBegin7Start of a repeated block.
loop_endoneof opLoopEnd8End of a repeated block.
move_linearoneof opMoveLinear9Straight-line move of several axes together; all axes are checked when the program is run (firmware v2: later).

messageWaitTime

Pause the program for a fixed time.

FieldTypeNo.Description
msuint321Wait time in ms.

messageWaitInput

Wait until a digital input reaches a level. Input numbers start at 0; rev 1 has inputs 0–1, and a higher number is rejected with ERROR_INVALID_VALUE.

FieldTypeNo.Description
inputuint321Input number.
levelbool2Level to wait for.
timeout_msuint323Timeout in ms; 0 = no timeout. On timeout the program is aborted (EVENT_PROGRAM_ABORTED with ERROR_TIMEOUT).

messageSetOutput

Program step that sets a digital output. Output numbers start at 0; rev 1 has outputs 0–1.

FieldTypeNo.Description
outputuint321Output number.
levelbool2Level to set.

messageLoopBegin

Start of a block repeated count times, closed by LoopEnd.

FieldTypeNo.Description
countuint321Number of repetitions, at least 1. Nesting depth is limited by the firmware.

messageLoopEnd

End of the block opened by the matching LoopBegin.

No fields.

messageSoftConfig

Working limits for the current job; must lie inside HardConfig. Can be changed by an app or an agent.

FieldTypeNo.Description
travel_minsint321Minimum allowed position, in base units.
travel_maxsint322Maximum allowed position, in base units.
velocity_maxuint323Maximum speed, in bu/s.
acceleration_maxuint324Maximum acceleration, in bu/s².
velocity_defaultuint325Speed used when a command gives 0, in bu/s.
acceleration_defaultuint326Acceleration used when a command gives 0, in bu/s².
jog_timeout_max_msuint327Upper bound for Jog.timeout_ms, in ms.
display_unitsDisplayUnits8Preferred display units for user interfaces only; does not affect motion.
travel_per_revuint329Base units per motor revolution after calibration ("moved 100 mm, measured 101"); 0 uses HardConfig.travel_per_rev. HardConfig limits are motor limits in steps and are only re-expressed in the new bu, so the motor never goes further or faster than the owner allowed. Changing it clears homed and clips travel_min/travel_max to the new bounds.
invert_directionbool10Reverse the direction on top of HardConfig.invert_direction (XOR). Changing it clears homed.
home_methodoneof _home_methodHomeMethod11Homing method; unset uses HardConfig.home_method. StallGuard works only with a driver in the socket.
home_velocityuint3212Speed for searching the homing switch, in bu/s; 0 uses HardConfig.home_velocity.
home_latch_velocityuint3213Speed of an optional slow second approach to the switch, in bu/s; 0 skips it (switch homing only).
home_positiononeof _home_positionsint3214Coordinate assigned to the switch point; unset uses the HardConfig travel limit on that side.
home_backoffuint3215Distance to move away from the switch after homing, in bu, so the working zero sits clear of it; 0 stays at the switch point.
input_bindingsrepeated InputBinding16What the universal inputs do on their own (InputBinding); at most one binding per input.

messageInputBinding

An action the firmware runs by itself when an input becomes active, without a browser or control rights (the input is a person at the machine). If it cannot run (axis busy, fault, not homed), EVENT_INPUT_ACTION reports why. An input held at power-up starts nothing.

FieldTypeNo.Description
inputuint321Input number: 0–5 for UIN1–UIN6.
actionInputAction2What to do (InputAction).
valuesint323Parameter of the action: position for MOVE_TO, distance for MOVE_BY, value for SET_POSITION (bu); speed for JOG_* and RUN_TOGGLE in bu/s (0 uses SoftConfig.velocity_default); repeat count for PROGRAM_RUN (0 runs once); output number 0–3 for OUTPUT_TOGGLE.
invertbool4Act when the input carries no current (a normally closed button).
debounce_msuint325How long the level must hold before the action fires, in ms; 0 means 20 ms, at most 1000.

messageSoftConfigGet

Read the current SoftConfig.

FieldTypeNo.Description
axisuint321Axis of the controller: 0 = first axis. Other axes come later in firmware v2 (now ERROR_UNSUPPORTED).

messageSoftConfigSet

Replace the SoftConfig.

FieldTypeNo.Description
configSoftConfig1New working limits.
axisuint322Axis of the controller: 0 = first axis. Other axes come later in firmware v2 (now ERROR_UNSUPPORTED).

messageHardConfig

Machine limits and mechanics. Can be changed only over USB inside the physical-presence window.

FieldTypeNo.Description
axis_kindAxisKind1Linear or rotary axis; selects the base units (µm or millidegrees).
full_steps_per_revuint322Motor full steps per revolution (usually 200).
microstepsuint323Microsteps per full step (1–256).
travel_per_revuint324Travel per motor revolution, in base units (screw pitch × gear ratio).
invert_directionbool5Reverse the motor direction.
travel_minsint326Minimum machine position, in base units.
travel_maxsint327Maximum machine position, in base units.
velocity_maxuint328Maximum machine speed, in bu/s.
acceleration_maxuint329Maximum machine acceleration, in bu/s².
run_current_mauint3210Peak phase current while running, in mA (the value on the motor nameplate).
hold_current_mauint3211Phase current while holding, in mA.
limit_min_active_lowbool12The min limit switch input is active low.
limit_max_active_lowbool13The max limit switch input is active low.
home_methodHomeMethod14How Home finds the reference position.
home_velocityuint3215Homing speed, in bu/s.
encoder_enabledbool16An encoder is connected and used.
encoder_counts_per_revuint3217Encoder counts per motor revolution.
following_error_maxuint3218Maximum allowed difference between encoder and commanded position, in base units; exceeding it causes a fault.
driver_modeDriverMode19Built-in driver or external Step/Dir driver.
limit_min_absentbool20No min limit switch is fitted; the input is ignored. The default (false) assumes a switch is fitted, so a host that does not know this field cannot silently disable the protection.
limit_max_absentbool21No max limit switch is fitted; the input is ignored. The default (false) assumes a switch is fitted.
encoder_invertbool22The encoder counts in the opposite direction to the steps (A/B swapped); corrects it without rewiring.
stallguard_thresholdsint3223StallGuard threshold of the driver in the socket (TMC2209: SGTHRS 0…255, higher is more sensitive; depends on the driver). Used by the HOME_STALLGUARD_* methods and tuned on the actual mechanics.
estop_absentbool25No emergency-stop button is wired: the E-STOP input is ignored. The EStop command always works.
limit_min_seenbool26Auto-detection: the min limit input has been closed at least once, so a switch is wired. Until then the input does not stop motion, so a new device runs out of the box. Set by the firmware and kept in flash; reset with HardConfigSet (presence required).
limit_max_seenbool27Auto-detection for the max limit input; see limit_min_seen.
estop_seenbool28Auto-detection for the E-STOP input; see limit_min_seen.

messageHardConfigGet

Read the current HardConfig.

FieldTypeNo.Description
axisuint321Axis of the controller: 0 = first axis. Other axes come later in firmware v2 (now ERROR_UNSUPPORTED).

messageHardConfigSet

Replace the HardConfig; accepted only over USB and inside the physical-presence window.

FieldTypeNo.Description
configHardConfig1New machine configuration.
axisuint322Axis of the controller: 0 = first axis. Other axes come later in firmware v2 (now ERROR_UNSUPPORTED). Hard config: only over USB with the presence window open.

messageOutputSet

Set a digital output immediately. Output numbers start at 0.

FieldTypeNo.Description
outputuint321Output number.
levelbool2Level to set.

messageInfoGet

Request device information.

No fields.

messageInfo

Device identity and capabilities.

FieldTypeNo.Description
protocol_versionuint321Protocol version.
firmware_versionstring2Firmware version (semver).
hardware_revisionstring3Hardware revision.
serialstring4Device serial number.
capabilitiesuint325Bit mask of Capability values.
transportTransport6Channel over which this request arrived.
reset_causeResetCause7Why the MCU last started (diagnostics).

messageTelemetryConfig

Configure periodic telemetry for the transport the command arrives on.

FieldTypeNo.Description
rate_hzuint321Telemetry rate in Hz; 0 = off. The MCU caps the rate.

messageFaultClear

Clear the fault state if its cause is gone.

No fields.

messageHeartbeat

Keep-alive message, sent in both directions.

FieldTypeNo.Description
uptime_msuint321Sender uptime in ms.

messageReset

Restart the controller; only while nothing moves.

No fields.

messageTelemetry

Periodic snapshot of the axis state.

FieldTypeNo.Description
uptime_msuint321Device uptime in ms.
stateAxisState2Current axis state.
homedbool3The axis has a valid reference position.
positionsint324Commanded position, in base units.
velocitysint325Current speed, in bu/s.
targetsint326Target position of the current move, in base units.
encoder_positionsint327Position measured by the encoder, in base units (if CAP_ENCODER).
following_errorsint328Difference between encoder and commanded position, in base units.
inputsuint329Bit mask of digital input levels.
outputsuint3210Bit mask of digital output levels.
limit_minbool11Min limit switch is active.
limit_maxbool12Max limit switch is active.
estop_inputbool13Emergency stop input is active.
motor_current_mauint3214Motor current, in mA.
stallguarduint3215Raw StallGuard value (SG_RESULT).
supply_mvuint3216Supply voltage, in mV.
driver_flagsuint3217Bit mask of DriverFlag values.
program_pcuint3218Index of the current program instruction.
program_repeatuint3219Which repetition of the program is running.

messageEvent

Asynchronous notification from the device; events are sent on all transports.

FieldTypeNo.Description
uptime_msuint321Device uptime when the event occurred, in ms.
kindEventKind2Event type.
positionsint323Position at the moment of the event, in base units.
errorErrorCode4Cause, for EVENT_FAULT and EVENT_PROGRAM_ABORTED.
detailuint325Extra detail, e.g. an input number or instruction index.
axisuint326Axis that caused the event (0 = first axis).

Enums

enumErrorCode

Result code of a command; also the cause carried by fault and abort events.

ValueNo.Description
ERROR_NONE0Accepted (ACK).
ERROR_MALFORMED1The message could not be parsed, or its oneof is empty.
ERROR_UNSUPPORTED2Command unknown to this firmware.
ERROR_INVALID_STATE3Not allowed in the current state, e.g. ProgramResume without a pause.
ERROR_BUSY4A move is already in progress.
ERROR_NOT_HOMED5Absolute move requested before homing.
ERROR_LIMIT_EXCEEDED6A limit would be exceeded; see Response.limit_violation.
ERROR_ESTOP_ACTIVE7Emergency stop is active.
ERROR_FAULT_ACTIVE8A fault is active; send FaultClear.
ERROR_TRANSPORT_NOT_ALLOWED9Command not allowed on this transport, e.g. HardConfigSet over UART.
ERROR_PRESENCE_REQUIRED10The physical-presence window is not open.
ERROR_PROGRAM_INVALID11The program is invalid; see Response.program_instruction_index.
ERROR_PROGRAM_TOO_LARGE12The program is too large.
ERROR_PROGRAM_CHECKSUM13Program CRC-32 does not match.
ERROR_NO_PROGRAM14No program is loaded.
ERROR_INVALID_VALUE15A value is outside the accepted format (not a machine limit).
ERROR_NO_MOTOR_POWER16No motor power (USB only); motion is not allowed.
ERROR_HOMING_FAILED17Homing did not find the switch or stop within the travel (reported in Event.error).
ERROR_TIMEOUT18Timeout, e.g. WaitInput in a program (reported in Event.error).
ERROR_LIMIT_SWITCH19A limit switch in the direction of motion is active (in Event.error, or a NACK for a move towards it).
ERROR_DRIVER20Driver error such as overtemperature or short circuit (reported in Event.error).
ERROR_FOLLOWING_ERROR21Encoder position diverged from the commanded position (reported in Event.error).
ERROR_STORAGE22Saving to flash failed; the configuration was not changed.
ERROR_BUS23An axis used by the program is not present or not configured on this controller.
ERROR_IMAGE24Firmware or package image is not for this board (reserved for v2 updates).
ERROR_SIGNATURE25Image signature does not match (reserved for v2 updates).
ERROR_OVERVOLTAGE26The socket over-voltage protection tripped: a driver in a StepStick socket lost power with the supply above ~23 V, or the supply rose above ~27 V (power supply too high, or energy fed back while braking).
ERROR_OVP_FAILED27Backup supply check: the supply is above 28.5 V while the drivers in the StepStick sockets are still powered, so the over-voltage cut-off did not work. Motion is stopped and the drivers are switched off.

enumLimitKind

Which limit a LimitViolation refers to.

ValueNo.Description
LIMIT_UNSPECIFIED0Not specified.
LIMIT_TRAVEL_MIN1Minimum travel position.
LIMIT_TRAVEL_MAX2Maximum travel position.
LIMIT_VELOCITY3Maximum speed.
LIMIT_ACCELERATION4Maximum acceleration.
LIMIT_JOG_TIMEOUT5Maximum jog timeout (SoftConfig.jog_timeout_max_ms).

enumInputAction

Actions an input can trigger through InputBinding.

ValueNo.Description
INPUT_NONE0No action.
INPUT_STOP1Smooth stop of everything, including a program — same as Stop.
INPUT_ESTOP2Emergency stop — same as the EStop command (functional, not certified).
INPUT_FAULT_CLEAR3Clear a fault — same as FaultClear.
INPUT_HOME4Run homing — same as Home.
INPUT_MOVE_TO5Preset position: move to value (needs homing).
INPUT_MOVE_BY6Step by value.
INPUT_SET_POSITION7Declare the current position as value ("set zero").
INPUT_JOG_POS8Move in + while the input is active.
INPUT_JOG_NEG9Move in − while the input is active.
INPUT_RUN_TOGGLE10Start or stop continuous motion in the current direction (velocity mode).
INPUT_DIRECTION11Reverse the RUN_TOGGLE direction; while moving, it stops first.
INPUT_PROGRAM_RUN12Run the loaded program.
INPUT_PROGRAM_PAUSE13Pause the program, or resume it if paused.
INPUT_OUTPUT_TOGGLE14Toggle output value.

enumDisplayUnits

Units preferred for display in user interfaces; the protocol itself is always metric.

ValueNo.Description
DISPLAY_UNITS_METRIC0Metric.
DISPLAY_UNITS_IMPERIAL1Imperial (inches).

enumAxisKind

Type of axis, which selects the base units.

ValueNo.Description
AXIS_LINEAR0Linear axis: µm, µm/s, µm/s².
AXIS_ROTARY1Rotary axis: millidegrees, m°/s, m°/s².

enumHomeMethod

How the axis finds its reference position.

ValueNo.Description
HOME_NONE0No homing; reference is set only with SetPosition.
HOME_LIMIT_MIN1Home to the min limit switch.
HOME_LIMIT_MAX2Home to the max limit switch.
HOME_STALLGUARD_MIN3Home towards the min end without a switch, detecting the stop with StallGuard.
HOME_STALLGUARD_MAX4Home towards the max end without a switch, detecting the stop with StallGuard.

enumDriverMode

Which motor driver the axis uses.

ValueNo.Description
DRIVER_INTERNAL0Driver in the StepStick socket on the board (steps are still generated by the motion core).
DRIVER_EXTERNAL_STEP_DIR1External driver connected through the Step/Dir output.

enumResetCause

Why the MCU last started.

ValueNo.Description
RESET_UNKNOWN0Unknown.
RESET_POWER_ON1Power-on, or supply dropped below the brown-out threshold.
RESET_PIN2Reset pin: the reset button or a programmer.
RESET_WATCHDOG3Watchdog: the firmware hung and should be investigated.
RESET_SOFTWARE4Software reset (the Reset command, an update).
RESET_OPTION_BYTES5Reset after writing option bytes.
RESET_LOW_POWER6Low-power-mode reset.

enumCapability

Bit flags combined in Info.capabilities.

ValueNo.Description
CAP_NONE0No optional capabilities.
CAP_ENCODER1Encoder input.
CAP_STALLGUARD2StallGuard stall detection.
CAP_EXTERNAL_DRIVER8External Step/Dir driver output.

enumTransport

Channel a request arrived on.

ValueNo.Description
TRANSPORT_UNKNOWN0Unknown.
TRANSPORT_UART_MODULE1Network layer of the same controller (WebSocket, apps on the device).
TRANSPORT_USB2USB CDC.

enumAxisState

State of the axis.

ValueNo.Description
STATE_IDLE0Idle.
STATE_MOVING1Executing a move.
STATE_JOGGING2Jogging.
STATE_HOMING3Homing.
STATE_PROGRAM_RUNNING4Running a program.
STATE_PROGRAM_PAUSED5Program paused.
STATE_FAULT6Fault; needs FaultClear.
STATE_ESTOP7Emergency stop active.

enumDriverFlag

Bit flags combined in Telemetry.driver_flags.

ValueNo.Description
DRV_NONE0No driver flags set.
DRV_OVERTEMP_WARN1Driver overtemperature warning.
DRV_OVERTEMP2Driver overtemperature.
DRV_SHORT4Short circuit detected.
DRV_OPEN_LOAD8Open load (motor phase not connected).
DRV_UNDERVOLTAGE16Supply undervoltage.
DRV_SOCKET_OVP32Set by the motion core: the driver in the socket is silent because the over-voltage protection cut its power (see ERROR_OVERVOLTAGE).

enumEventKind

Type of an Event.

ValueNo.Description
EVENT_UNSPECIFIED0Not specified.
EVENT_MOVE_DONE1A move finished.
EVENT_HOME_DONE2Homing finished.
EVENT_PROGRAM_DONE3The program finished.
EVENT_PROGRAM_ABORTED4The program was aborted; the cause is in error.
EVENT_LIMIT_HIT5A limit switch was hit.
EVENT_STALL6A motor stall was detected.
EVENT_FOLLOWING_ERROR7Following error exceeded the maximum.
EVENT_FAULT8The device entered a fault; the cause is in error.
EVENT_ESTOP_PRESSED9Emergency stop pressed.
EVENT_ESTOP_RELEASED10Emergency stop released.
EVENT_INPUT_CHANGED11A digital input changed.
EVENT_JOG_TIMEOUT12A jog stopped because it was not refreshed in time.
EVENT_PRESENCE_WINDOW_OPEN13The physical-presence window opened (confirmed on the device).
EVENT_DRIVER_LOST14A driver in a socket lost its motor power while the axis was standing; error gives the cause (ERROR_OVERVOLTAGE, ERROR_NO_MOTOR_POWER or ERROR_DRIVER). The position is lost (homed = false); during a move this is a FAULT instead.
EVENT_DRIVER_READY15The driver in the socket answers again and the motion core has rewritten its configuration; motion is allowed.
EVENT_INPUT_ACTION16An input with a bound action fired; detail is the input number, error says why the action did not run (ERROR_NONE if it did).
EVENT_TRAVEL_DONE17Travel measurement finished and SoftConfig.travel_min/travel_max updated; position is travel_max, detail is the travel length in bu.