Skip to content
Documentation version: stable (v0.6.2)

Firmware updates

Device applicability

This document applies to OpenZilo Q.

Update requirements

Use the official OTA package specified in the release notes. Match the device model, hardware revision and starting firmware version. The SDK updates application firmware only, not the bootloader.

1. Select a package

Open official firmware releases. Confirm that your model and hardware revision are supported, your current version is an allowed starting version, and you have read the data-retention policy and known issues.

Download the versioned signed OTA ZIP and obtain its signing public key independently through a trusted channel. The signed metadata carries the target version, model, board and payload digest. Factory flashing files are not SDK OTA packages.

2. Prepare

Back up important recordings. Stop recording, downloads and IMU reporting, and disconnect other apps. Ensure sufficient charge according to the release instructions.

From the SDK repository:

uv sync --locked
uv run openzilo device use
uv run openzilo info

Record the current firmware version. Run uv run openzilo ota-update --help to inspect the installed updater.

3. Run the update

Replace each placeholder with the values for this release:

uv run openzilo ota-inspect "path/to/firmware.ota.zip" --public-key "path/to/trusted-signing-public.pem"
uv run openzilo ota-update "path/to/firmware.ota.zip" --public-key "path/to/trusted-signing-public.pem"

The command uses your saved device; --address selects another one. Keep the ring nearby and avoid interrupting power or Bluetooth.

ota-inspect verifies signatures and displays all metadata offline; add --json for JSON. ota-update checks device model, board and source version before sending only the inner OTA bytes. Raw BIN input and manual version, digest or model overrides are no longer accepted. Test-profile ZIPs require --allow-test-firmware; boards must be reported by the device or provided by an exact verified legacy profile; unknown boards are rejected.

4. Confirm completion

After transfer, the SDK waits for reboot, reconnects, checks that it is the same device, and reads its firmware version. The command reports success only after the target version is confirmed. Continue waiting when transfer reaches 100%.

Run uv run openzilo info again, record a short clip and check the features your application uses.

Timeouts are in seconds: --timeout defaults to 30 per operation, --total-timeout to 600 for preparation and transfer, and --reboot-timeout to 90 for reboot, reconnect and version checks. See the SDK guide and update_firmware.py for Python integration.

If the update is interrupted

Reconnect and read the firmware version before retrying after a timeout, disconnect or cancellation. Exiting the computer-side updater does not withdraw a package already received by the ring.

If reconnection fails, record the starting version, target version and error message, then contact support. Downgrade, recovery and recording retention depend on the release instructions.