56 lines
1.9 KiB
Markdown
56 lines
1.9 KiB
Markdown
# RX result schema
|
|
|
|
The publisher creates both docs/handoff/results/RX_RESULT.json and docs/handoff/results/RX_RESULT.md on the existing rx-node branch. JSON is authoritative. Markdown is generated from the same validated object.
|
|
|
|
## READY JSON
|
|
|
|
{
|
|
"schema_version": 1,
|
|
"task_id": "RF001A_OTA_CAPTURE_004",
|
|
"state": "RX_READY_FOR_TX",
|
|
"rx_ready_for_tx": true,
|
|
"process_alive": true,
|
|
"file_growing": true,
|
|
"capture_pid": 1234,
|
|
"published_at": "2026-09-21T12:00:02+00:00",
|
|
"capture_started_at": "2026-09-21T12:00:00+00:00",
|
|
"expected_capture_end": "2026-09-21T12:01:00+00:00",
|
|
"capture_path": "C:\\Users\\Professional\\Documents\\SDR_Rover_Captures\\<run>\\rf001a_ota_capture.cs8",
|
|
"common_clock_verified": true,
|
|
"source_head": "<40-character lowercase Git HEAD>",
|
|
"rf_tx": 0,
|
|
"exit_code": null,
|
|
"file_size": null,
|
|
"duration_seconds": null,
|
|
"overruns": null,
|
|
"usb_errors": null,
|
|
"file_errors": null,
|
|
"sha256": null,
|
|
"clkin_after": "NOT_RUN",
|
|
"rf_tx_observed": "UNKNOWN"
|
|
}
|
|
|
|
## COMPLETE JSON
|
|
|
|
The final object keeps the same identity, timing, path and PID. It changes these fields:
|
|
|
|
state = CAPTURE_COMPLETE
|
|
rx_ready_for_tx = false
|
|
process_alive = false
|
|
file_growing = false
|
|
published_at = <final publication UTC time>
|
|
exit_code = <integer>
|
|
file_size = <integer bytes>
|
|
duration_seconds = <number>
|
|
overruns = <non-negative integer or null>
|
|
usb_errors = <non-negative integer or null>
|
|
file_errors = <non-negative integer or null>
|
|
sha256 = <lowercase 64-character SHA256>
|
|
clkin_after = DETECTED or NOT_DETECTED
|
|
rf_tx_observed = EXPECTED_EXTERNAL_TX or UNKNOWN
|
|
rf_tx = 0
|
|
|
|
Use null when the capture tool did not report an error counter. Do not infer zero.
|
|
|
|
Raw IQ, video, waveform files and large logs must stay outside Git.
|