Skip to content

5.1.0 v trial#131

Closed
TedSjoblom wants to merge 7 commits into
mainfrom
5.1.0V-trial
Closed

5.1.0 v trial#131
TedSjoblom wants to merge 7 commits into
mainfrom
5.1.0V-trial

Conversation

@TedSjoblom

Copy link
Copy Markdown
Contributor

No description provided.

Rewrite mcap2keelson into a stateful MCAP replay daemon that preserves message timing, stays alive after EOF (optional looping), and exposes a McapReplayControl Zenoh RPC surface. The CLI and README were expanded with realm/entity/source/base-directory flags and runtime semantics; the connector now publishes a keelson.ReplayStatus envelope at 1 Hz. Added interfaces/McapReplayControl.proto and several payload proto messages, updated subjects, and refactored the replayer to use threaded replay/status loops, RPC handlers (load/play/pause/stop/seek/set_speed/set_loop/list_files), and safe publisher/reader management. Tests updated and a new end-to-end RPC test file added to validate the control surface and status broadcast. Minor test tweaks reflect default CLI args and the daemon lifecycle.
Enhance the MCAP replayer with playback controls, richer status, and more robust RPC handling; plus minor Foxglove shutdown fix and a MAVLink docker-compose.

Key changes:
- Add step, set_segment, and set_channel_filter RPCs and state handling (A-B segments, channel allowlist, step mode).
- Make status broadcast richer: daemon info (version, hostname, started_at, base_directory), segment/filter/load progress, last_load_error; publish cadence 5Hz while PLAYING, 1Hz otherwise; RPC mutators emit immediate samples.
- Add async load worker with progress reporting and serialized loads (_LOAD_LOCK); load_file now accepts and returns OK while worker performs the load (errors reported via replay_status).
- Introduce typed ErrorResponse codes for programmatic error handling and return appropriate codes for common error conditions (INVALID_STATE, OUT_OF_RANGE, PERMISSION_DENIED, NOT_FOUND, INTERNAL).
- Improve replay loop: EOF handling, loop-to-segment support, clamp played counts, seek-to-segment bounds, and better logging with [LOAD]/[REPLAY]/[STATE] prefixes.
- Add request summarizers and a dispatch wrapper that logs RPC entry/exit and durations; track reply outcomes for better operator-visible audit logs.
- Implement immediate status publish helper and global publisher handle to allow RPC threads to push updates.
- Make --base-directory default to parent of --mcap-file when given; update CLI help and tests accordingly.
- Fix Foxglove websocket publisher shutdown to fully drain queue and use a timed join; remove unused import.
- Add connectors/mavlink/docker-compose.mavlink.yml for a recommended MAVLink container setup.
- Update tests to cover new CLI help text, daemon info in status, and error-code assertions.

Minor: various logging improvements, defensive clamping of counters, and internal refactors to centralize state transitions and logging.
@TedSjoblom TedSjoblom requested a review from freol35241 May 26, 2026 12:44
TedSjoblom and others added 5 commits May 26, 2026 14:51
Update astral-sh/setup-uv from v4 to v7 across repository workflows and documentation. Changed references in .github/CLAUDE.md, .github/workflows/ci.yml, and .github/workflows/release.yml so CI, release jobs, and docs use the newer uv installer version for workspace sync, protoc, and language-specific jobs.
Switch the dev container to build from .devcontainer/Dockerfile instead of the
base image + features, and ignore the generated devcontainer-lock.json.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PyPI no longer serves any foxglove-sdk 0.4.x (lowest available is 0.5.0), so the
old >=0.4.0,<0.5.0 pin made a clean `uv sync --all-packages` and the Docker
image build unsatisfiable. Bump to the next minor; the connector's API surface
(foxglove.Channel/Schema, foxglove.websocket Capability/ChannelView/Client/
ServerListener, start_server, set_log_level) is unchanged in 0.5.0 and the
foxglove connector tests pass. Lockfile update accompanies the next commit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
New connector `labjack2keelson` reads analog inputs (AIN registers) from a
LabJack T4/T7/T8 over the labjack-ljm library and publishes voltage to the bus.

- Per-channel high-voltage scaling: resistor divider (R1/R2) or scale/offset
  (covers LJTick-Divider ratios and linear sensor calibration).
- New generic subject `analog_voltage_v` (keelson.TimestampedFloat); a channel
  may also target an existing subject (e.g. battery_voltage_v).
- JSON config (config-schema.json validated) + live `set_config` RPC.
- `--simulate` mode runs without hardware (used by e2e tests); the native LJM
  library is bundled into the Docker image (headless install, --without-kipling
  --no-restart-device-rules, BASH_ENV neutralized for the base image's hook).

Wires the connector into the uv workspace, root pyproject testpaths, Docker
image, CI docker-build smoke test, conftest BINARY_NAME_MAP, and the connector
docs table. Also captures the foxglove-sdk 0.5.0 resolution in uv.lock.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Introduce Keelson parameter metadata: add a ParameterMetadata proto, a bundled messages/parameter_definitions.yaml, and register a new "parameter_metadata" subject. Update the Python SDK to load bundled parameter definitions and expose get_parameter_definitions()/get_parameter_definition(). Update the MAVLink connector to guard-import the new proto, build and republish the ParameterMetadataList at startup (and every 30s for late subscribers), and add telemetry subjects for navigation_target_echo, mission_current_seq and fence_enabled (with logic to only emit fence_enabled when a geofence subsystem is present). Add tests covering mapping and parameter metadata encoding/behavior, update docs (README / ZENOH_API) to describe the new subjects, copy parameter_definitions.yaml in the SDK generator, and ignore the generated parameter_definitions in .gitignore. Guards ensure compatibility with older SDK builds that lack the new type.
@freol35241

Copy link
Copy Markdown
Contributor

Closing — this is the 5.1.0V-trial integration branch, now split into focused, individually-reviewable PRs against main:

Every file on this branch is covered by the PRs above except connectors/mavlink/docker-compose.mavlink.yml, which was intentionally left out: it's an ssrs18/Crowsnest-specific deployment example and it references connectors/mavlink/Dockerfile, which doesn't exist on this branch or on main — so it's non-functional as-is. The branch is preserved if anyone wants to revive (and fix) that file.

The split also incorporated review fixes (e.g. #147 reworks the shutdown escalation to genuinely double-press-to-force) and notes follow-up bugs on #150.

@freol35241 freol35241 closed this Jun 9, 2026
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.

2 participants