Add detailed sender ACK RX diagnostics with reject context
This commit is contained in:
37
src/main.cpp
37
src/main.cpp
@@ -871,11 +871,40 @@ static void sender_loop() {
|
||||
g_sender_rx_window_ms += rx_elapsed;
|
||||
}
|
||||
if (!got_ack) {
|
||||
sender_note_rx_reject(lora_get_last_rx_reject_reason(), "ack");
|
||||
RxRejectReason reason = lora_get_last_rx_reject_reason();
|
||||
sender_note_rx_reject(reason, "ack");
|
||||
if (SERIAL_DEBUG_MODE) {
|
||||
int16_t rssi_dbm = 0;
|
||||
float snr_db = 0.0f;
|
||||
bool has_signal = lora_get_last_rx_signal(rssi_dbm, snr_db);
|
||||
const char *reason_text = reason == RxRejectReason::None ? "timeout" : rx_reject_reason_text(reason);
|
||||
if (has_signal) {
|
||||
serial_debug_printf("ack: rx miss reason=%s rssi=%d snr=%.1f",
|
||||
reason_text,
|
||||
static_cast<int>(rssi_dbm),
|
||||
static_cast<double>(snr_db));
|
||||
} else {
|
||||
serial_debug_printf("ack: rx miss reason=%s", reason_text);
|
||||
}
|
||||
}
|
||||
} else if (ack_pkt.msg_kind != LoraMsgKind::AckDown) {
|
||||
sender_note_rx_reject(RxRejectReason::InvalidMsgKind, "ack");
|
||||
if (SERIAL_DEBUG_MODE) {
|
||||
uint16_t ack_id = ack_pkt.payload_len >= 3 ? read_u16_be(&ack_pkt.payload[1]) : 0;
|
||||
serial_debug_printf("ack: reject msg_kind=%u payload_len=%u ack_id=%u",
|
||||
static_cast<unsigned>(ack_pkt.msg_kind),
|
||||
static_cast<unsigned>(ack_pkt.payload_len),
|
||||
ack_id);
|
||||
}
|
||||
} else if (ack_pkt.payload_len < LORA_ACK_DOWN_PAYLOAD_LEN) {
|
||||
sender_note_rx_reject(RxRejectReason::LengthMismatch, "ack");
|
||||
if (SERIAL_DEBUG_MODE) {
|
||||
uint16_t ack_id = ack_pkt.payload_len >= 3 ? read_u16_be(&ack_pkt.payload[1]) : 0;
|
||||
serial_debug_printf("ack: reject msg_kind=%u payload_len=%u ack_id=%u",
|
||||
static_cast<unsigned>(ack_pkt.msg_kind),
|
||||
static_cast<unsigned>(ack_pkt.payload_len),
|
||||
ack_id);
|
||||
}
|
||||
} else {
|
||||
uint8_t time_valid = ack_pkt.payload[0] & 0x01;
|
||||
uint16_t ack_id = read_u16_be(&ack_pkt.payload[1]);
|
||||
@@ -897,6 +926,12 @@ static void sender_loop() {
|
||||
} else {
|
||||
if (ack_id != g_last_sent_batch_id) {
|
||||
sender_note_rx_reject(RxRejectReason::BatchIdMismatch, "ack");
|
||||
if (SERIAL_DEBUG_MODE) {
|
||||
serial_debug_printf("ack: reject msg_kind=%u payload_len=%u ack_id=%u",
|
||||
static_cast<unsigned>(ack_pkt.msg_kind),
|
||||
static_cast<unsigned>(ack_pkt.payload_len),
|
||||
ack_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user