Skip to content

APEX v1.0 Protocol - #5

Open
joseph-neros wants to merge 5 commits into
mainfrom
draft/v1.0.0
Open

APEX v1.0 Protocol#5
joseph-neros wants to merge 5 commits into
mainfrom
draft/v1.0.0

Conversation

@joseph-neros

@joseph-neros joseph-neros commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

This has been in progress for a few weeks now, but since we have finally landed all of the features that were required in the short term, it's time to finalize it.

APEX 1.0 Highlights:

  • Robust version negotiation with per-device-class versions as well
  • Explicit re-enumeration command to aid with brown-out and communication loss situations
  • Decode-free routing and debug aid
    • Shifted all traffic_type IDs up by one in order to eliminate 0 as an option
    • Shifted device_id pool up by one to eliminate 0 as an option (unassigned devices now use 0x01)
    • Protocol version is now 0x01 (which means, not zero)
    • This means the header passes through COBS without modification at least up to the payload length.
  • Extended configuration handshake sequence to allow for negotiation of additional parameters during configuration (beginning with kinematic parameters)
  • Activation Device class
    • Reworked how OSD messages are handled
    • Added ENABLING and DISABLING states
  • Rework of the reference library to accommodate these changes
  • Changes to other class specs to conform with v1.0 expectations

APEX v1.0 is a deliberately breaking revision of the wire protocol; v0 and v1
endpoints do not interoperate except through the optional host-local v0
dual-stack. The mechanical standard is unchanged from v0.9. See CHANGELOG.txt
for the exhaustive change list. Highlights:

- Non-zero outer header + decode-free routing; traffic_type registry shifted
  +1; unassigned device_id marker moved 0x00 -> 0x01.
- Two-tier versioning: one wire version plus independent per-class versions,
  with VERSION_BEACON as the immutable discovery frame and proactive mutual
  beaconing.
- Provisional configuration phase; single global ack-code namespace; DEVICE_INFO
  mass plus the PHYS_REQUEST/PHYS_INFO/PHYS_ACK spatial-inertia family about the
  dovetail datum (origin = CG reference point, 36.71 mm from the wedge front
  face, laterally centered, on the mating surface).
- New core messages: device-initiated post-CONNECTED baud change; RESET_REQUEST
  re-enumeration; watchdog-arbitrated hotplug.
- Activation class v1: lifecycle-ordered states, capability-gated reversals,
  DISPLAY_TEXT/HOST_DISPLAY_INFO, and self-disarm on session loss.
- Full v1 rework of the embeddable C reference library (10 gtest suites, 130
  tests) and a rewrite of every spec, with datum diagrams added to Core 2.1.
Reference implementation only; no wire-protocol or spec change. Adds convenient,
symmetric device APIs for behavior the spec already allows: split execute
callbacks (on_execute_request / on_executed) with report_execution(); disable(),
fault(), and trigger_window_expired(); autonomous-precondition helpers and an
on_precondition_change observer; status-returning trigger(); and read-only
getters. See CHANGELOG.txt.
Add a warnings field to HOST_STATE alongside flight_state — an advisory bitfield
orthogonal to the flight phase, so a warning (e.g. RC link loss) coexists with any
phase and several can be set at once. Bit 0 = RC link loss; bits 1-7 reserved.
See CHANGELOG.txt.
Delete the retired class v0 PRECOND_INFO placeholders and renumber
HOST_DISPLAY_INFO 7->5 and DISPLAY_TEXT 8->6, compacting the class message-id
space with no gap. Spec §6.1 table + §9 byte examples and the reference lib
updated. See CHANGELOG.txt.
The device-side Activation API ergonomics were under a separate "Unreleased"
heading, but they ship as part of v1.0.0. Fold them into the v1.0.0 "Reference
implementation" section, drop the Unreleased heading, and set the release date.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant