132 uint8_t payload[512];
218 uint8_t tx_retransmit_buf[1024];
245 void (*send_tx_frame)(
int packet_type,
int mode,
246 size_t frame_size,
const uint8_t *frame);
249 void (*notify_connected)(
const char *remote_call);
253 void (*notify_disconnected)(
bool to_no_client);
256 void (*deliver_rx_data)(
const uint8_t *data,
size_t len);
259 int (*tx_backlog)(void);
262 int (*tx_read)(uint8_t *buf,
size_t len);
265 void (*send_buffer_status)(
int backlog_bytes);
#define CALLSIGN_MAX_SIZE
Definition arq.h:24
arq_event_id_t
Definition arq_fsm.h:73
@ ARQ_EV_TX_STARTED
Definition arq_fsm.h:102
@ ARQ_EV_RX_MODE_ACK
Definition arq_fsm.h:90
@ ARQ_EV_TIMER_ACK
Definition arq_fsm.h:97
@ ARQ_EV_TX_COMPLETE
Definition arq_fsm.h:103
@ ARQ_EV_RX_TURN_REQ
Definition arq_fsm.h:87
@ ARQ_EV_TIMER_RETRY
Definition arq_fsm.h:95
@ ARQ_EV_APP_DATA_READY
Definition arq_fsm.h:79
@ ARQ_EV_RX_ACCEPT
Definition arq_fsm.h:83
@ ARQ_EV_RX_KEEPALIVE_ACK
Definition arq_fsm.h:92
@ ARQ_EV_APP_DISCONNECT
Definition arq_fsm.h:78
@ ARQ_EV_RX_MODE_REQ
Definition arq_fsm.h:89
@ ARQ_EV_TIMER_PEER_BACKLOG
Definition arq_fsm.h:98
@ ARQ_EV_RX_CALL
Definition arq_fsm.h:82
@ ARQ_EV_RX_DISCONNECT
Definition arq_fsm.h:86
@ ARQ_EV_TIMER_KEEPALIVE
Definition arq_fsm.h:99
@ ARQ_EV_APP_STOP_LISTEN
Definition arq_fsm.h:76
@ ARQ_EV_TIMER_TIMEOUT
Definition arq_fsm.h:96
@ ARQ_EV_RX_KEEPALIVE
Definition arq_fsm.h:91
@ ARQ_EV_APP_CONNECT
Definition arq_fsm.h:77
@ ARQ_EV_RX_DATA
Definition arq_fsm.h:85
@ ARQ_EV_RX_TURN_ACK
Definition arq_fsm.h:88
@ ARQ_EV__COUNT
Definition arq_fsm.h:105
@ ARQ_EV_APP_LISTEN
Definition arq_fsm.h:75
@ ARQ_EV_RX_ACK
Definition arq_fsm.h:84
void arq_fsm_init(arq_session_t *sess)
Initialise a session structure to DISCONNECTED state.
Definition arq_fsm.c:118
arq_dflow_state_t
Definition arq_fsm.h:39
@ ARQ_DFLOW_TURN_REQ_WAIT
Definition arq_fsm.h:47
@ ARQ_DFLOW_MODE_REQ_WAIT
Definition arq_fsm.h:50
@ ARQ_DFLOW_TURN_REQ_TX
Definition arq_fsm.h:46
@ ARQ_DFLOW_MODE_ACK_TX
Definition arq_fsm.h:51
@ ARQ_DFLOW_DATA_TX
Definition arq_fsm.h:41
@ ARQ_DFLOW__COUNT
Definition arq_fsm.h:54
@ ARQ_DFLOW_KEEPALIVE_TX
Definition arq_fsm.h:52
@ ARQ_DFLOW_ACK_TX
Definition arq_fsm.h:45
@ ARQ_DFLOW_TURN_ACK_TX
Definition arq_fsm.h:48
@ ARQ_DFLOW_KEEPALIVE_WAIT
Definition arq_fsm.h:53
@ ARQ_DFLOW_IDLE_IRS
Definition arq_fsm.h:43
@ ARQ_DFLOW_DATA_RX
Definition arq_fsm.h:44
@ ARQ_DFLOW_WAIT_ACK
Definition arq_fsm.h:42
@ ARQ_DFLOW_MODE_REQ_TX
Definition arq_fsm.h:49
@ ARQ_DFLOW_IDLE_ISS
Definition arq_fsm.h:40
const char * arq_conn_state_name(arq_conn_state_t s)
Human-readable name for a connection state (for log output).
Definition arq_fsm.c:30
void arq_fsm_set_callbacks(const arq_fsm_callbacks_t *cbs)
Register FSM action callbacks (call once before first dispatch).
Definition arq_fsm.c:104
const char * arq_dflow_state_name(arq_dflow_state_t s)
Human-readable name for a data-flow state (for log output).
Definition arq_fsm.c:44
arq_conn_state_t
Definition arq_fsm.h:24
@ ARQ_CONN_DISCONNECTED
Definition arq_fsm.h:25
@ ARQ_CONN_LISTENING
Definition arq_fsm.h:26
@ ARQ_CONN_CONNECTED
Definition arq_fsm.h:29
@ ARQ_CONN_ACCEPTING
Definition arq_fsm.h:28
@ ARQ_CONN_CALLING
Definition arq_fsm.h:27
@ ARQ_CONN__COUNT
Definition arq_fsm.h:31
@ ARQ_CONN_DISCONNECTING
Definition arq_fsm.h:30
int arq_fsm_timeout_ms(const arq_session_t *sess, uint64_t now)
Return milliseconds until the next deadline, or INT_MAX if idle.
Definition arq_fsm.c:134
arq_role_t
Definition arq_fsm.h:62
@ ARQ_ROLE_CALLEE
Definition arq_fsm.h:65
@ ARQ_ROLE_CALLER
Definition arq_fsm.h:64
@ ARQ_ROLE_NONE
Definition arq_fsm.h:63
void arq_fsm_dispatch(arq_session_t *sess, const arq_event_t *event)
Dispatch an event through both FSM levels.
Definition arq_fsm.c:1626
const char * arq_event_name(arq_event_id_t ev)
Human-readable name for an event (for log output).
Definition arq_fsm.c:66
void arq_fsm_set_timing(arq_timing_ctx_t *timing)
Register timing context for recording (call once at init).
Definition arq_fsm.c:109
ARQ event with all possible payload fields.
Definition arq_fsm.h:115
size_t payload_len
Definition arq_fsm.h:133
size_t data_bytes
Definition arq_fsm.h:128
uint8_t session_id
Definition arq_fsm.h:119
uint8_t ack_seq
Definition arq_fsm.h:121
int mode
Definition arq_fsm.h:127
uint16_t ack_delay_raw
Definition arq_fsm.h:124
uint8_t rx_flags
Definition arq_fsm.h:122
float rx_snr
Definition arq_fsm.h:139
int8_t snr_encoded
Definition arq_fsm.h:123
arq_event_id_t id
Definition arq_fsm.h:116
uint8_t seq
Definition arq_fsm.h:120
bool peer_has_data
Definition arq_fsm.h:190
uint64_t mode_hold_until_ms
Definition arq_fsm.h:212
int tx_retransmit_len
Definition arq_fsm.h:223
bool acktx_had_has_data
Definition arq_fsm.h:191
int keepalive_miss_count
Definition arq_fsm.h:227
uint8_t session_id
Definition arq_fsm.h:160
bool pending_disconnect_notify
Definition arq_fsm.h:201
uint64_t last_rx_ms
Definition arq_fsm.h:228
uint8_t tx_retransmit_seq
Definition arq_fsm.h:224
bool disconnect_to_no_client
Definition arq_fsm.h:200
int mode_upgrade_count
Definition arq_fsm.h:178
uint64_t peer_busy_until_ms
Definition arq_fsm.h:194
int tx_retries_left
Definition arq_fsm.h:185
int local_snr_x10
Definition arq_fsm.h:193
bool need_initial_guard
Definition arq_fsm.h:205
int consecutive_retries
Definition arq_fsm.h:211
int tx_backlog_bytes
Definition arq_fsm.h:197
int speed_level
Definition arq_fsm.h:174
uint64_t state_enter_ms
Definition arq_fsm.h:186
arq_dflow_state_t dflow_state
Definition arq_fsm.h:156
arq_role_t role
Definition arq_fsm.h:157
uint8_t tx_seq
Definition arq_fsm.h:164
int peer_tx_mode
Definition arq_fsm.h:180
int tx_success_count
Definition arq_fsm.h:176
int payload_mode
Definition arq_fsm.h:168
int initial_payload_mode
Definition arq_fsm.h:171
arq_event_id_t deadline_event
Definition arq_fsm.h:232
int pending_tx_mode
Definition arq_fsm.h:179
arq_conn_state_t conn_state
Definition arq_fsm.h:155
int control_mode
Definition arq_fsm.h:170
bool pending_disconnect
Definition arq_fsm.h:202
uint64_t deadline_ms
Definition arq_fsm.h:231
uint8_t rx_expected
Definition arq_fsm.h:165
int peer_snr_x10
Definition arq_fsm.h:192
uint64_t startup_deadline_ms
Definition arq_fsm.h:187
Definition arq_timing.h:24