mirror of
https://github.com/RFnexus/modem73.git
synced 2026-04-27 14:30:33 +00:00
119 lines
3.2 KiB
Markdown
119 lines
3.2 KiB
Markdown
# Control Port API
|
|
|
|
TCP JSON protocol on port 8073
|
|
|
|
Wire format: 4-byte big-endian length prefix + JSON payload.
|
|
|
|
## Commands
|
|
|
|
| Command | Description |
|
|
|---|---|
|
|
| `get_status` | Current modem/channel state |
|
|
| `get_config` | Current configuration |
|
|
| `set_config` | Update configuration (partial updates OK) |
|
|
| `rigctl` | Passthrough command to rigctld |
|
|
| `tx` | Transmit data via KISS |
|
|
|
|
---
|
|
|
|
## `get_status`
|
|
|
|
**Request:** `{"cmd": "get_status"}`
|
|
|
|
**Response:**
|
|
|
|
| Field | Type | Description |
|
|
|---|---|---|
|
|
| `channel_state` | string | `"idle"`, `"tx"`, or `"rx"` |
|
|
| `ptt_on` | bool | PTT currently keyed |
|
|
| `rx_frame_count` | int | Successfully decoded frames |
|
|
| `tx_frame_count` | int | Transmitted frames |
|
|
| `rx_error_count` | int | Preamble + CRC errors |
|
|
| `sync_count` | int | Preamble sync detections |
|
|
| `preamble_errors` | int | Sync found but preamble decode failed |
|
|
| `symbol_errors` | int | Symbol-level errors (OFDM only) |
|
|
| `crc_errors` | int | CRC check failures |
|
|
| `last_snr` | float | Last decoded frame SNR (dB) |
|
|
| `last_ber` | float | Last decoded frame BER (0.0-1.0, -1 if unavailable) |
|
|
| `ber_ema` | float | Exponential moving average BER |
|
|
| `client_count` | int | Connected KISS clients |
|
|
| `rigctl_connected` | bool | rigctld connection status |
|
|
| `audio_connected` | bool | Audio device health |
|
|
|
|
Stats switch between OFDM and MFSK decoder based on active `modem_type`.
|
|
|
|
---
|
|
|
|
## `get_config`
|
|
|
|
**Request:** `{"cmd": "get_config"}`
|
|
|
|
**Response:**
|
|
|
|
| Field | Type | Description |
|
|
|---|---|---|
|
|
| `callsign` | string | Station callsign |
|
|
| `modem_type` | int | `0` = OFDM, `1` = MFSK |
|
|
| `mfsk_mode` | int | `0` = MFSK-8, `1` = MFSK-16, `2` = MFSK-32, `3` = MFSK-32R |
|
|
| `modulation` | string | OFDM: `"BPSK"`..`"QAM4096"`. MFSK: `"MFSK-8"`..`"MFSK-32R"` |
|
|
| `code_rate` | string | `"1/2"`, `"2/3"`, `"3/4"`, `"5/6"`, `"1/4"` (OFDM only) |
|
|
| `short_frame` | bool | Short frame mode (OFDM only) |
|
|
| `center_freq` | int | Center frequency in Hz |
|
|
| `payload_size` | int | Current PHY payload capacity in bytes |
|
|
| `csma_enabled` | bool | CSMA carrier sense enabled |
|
|
| `carrier_threshold_db` | float | CSMA threshold (dB) |
|
|
| `p_persistence` | int | P-persistence value (0-255) |
|
|
| `slot_time_ms` | int | CSMA slot time (ms) |
|
|
| `tx_blanking_enabled` | bool | Suppress decoder during TX |
|
|
|
|
---
|
|
|
|
## `set_config`
|
|
|
|
**Request:** `{"cmd": "set_config", ...fields...}`
|
|
|
|
Send only the fields you want to change. All fields from `get_config` are accepted.
|
|
|
|
|
|
Example:
|
|
```json
|
|
{"cmd": "set_config", "modulation": "8PSK", "code_rate": "1/2"}
|
|
```
|
|
|
|
**Response:** `{"ok": true}` or `{"ok": false}`
|
|
|
|
---
|
|
|
|
## `rigctl`
|
|
|
|
**Request:** `{"cmd": "rigctl", "command": "F"}`
|
|
|
|
Passes the command string to rigctld and returns the response.
|
|
|
|
**Response:** `{"ok": true, "response": "145000000\n"}`
|
|
|
|
---
|
|
|
|
## `tx`
|
|
|
|
**Request:**
|
|
```json
|
|
{"cmd": "tx", "data": "<base64-encoded payload>", "oper_mode": -1}
|
|
```
|
|
|
|
| Field | Type | Description |
|
|
|---|---|---|
|
|
| `data` | string | Base64-encoded raw payload bytes |
|
|
| `oper_mode` | int | OFDM mode override (-1 = use current config) |
|
|
|
|
**Response:** `{"ok": true, "size": 123}`
|
|
|
|
---
|
|
|
|
## Events
|
|
|
|
The control port broadcasts events to all connected clients:
|
|
|
|
| Event | When |
|
|
|---|---|
|
|
| `config_changed` | Any configuration change |
|