Skip to content

Commit 936fc57

Browse files
alxelaxnordicjm
authored andcommitted
nrf_rpc: fix triggering reliability by fake acks
Commit fixes triggering reliability logic by receiving fake acknowledgement frames. Signed-off-by: Aleksandr Khromykh <[email protected]>
1 parent f369e24 commit 936fc57

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

subsys/nrf_rpc/nrf_rpc_uart.c

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,19 @@ static void ack_rx(struct nrf_rpc_uart *uart_tr)
8181
return;
8282
}
8383

84-
if (uart_tr->rx_packet_len == CRC_SIZE) {
85-
uart_tr->ack_payload = sys_get_le16(uart_tr->rx_packet);
86-
k_sem_give(&uart_tr->ack_sem);
87-
k_yield();
84+
if (uart_tr->rx_packet_len != CRC_SIZE) {
85+
return;
86+
}
87+
88+
uint16_t rx_ack = sys_get_le16(uart_tr->rx_packet);
89+
90+
if (uart_tr->ack_payload != rx_ack) {
91+
LOG_WRN("Wrong ack. Expected: %#4x. Received: %#4x.", uart_tr->ack_payload, rx_ack);
92+
return;
8893
}
94+
95+
k_sem_give(&uart_tr->ack_sem);
96+
k_yield();
8997
}
9098

9199
static void ack_tx(struct nrf_rpc_uart *uart_tr, uint16_t ack_pld)
@@ -362,6 +370,7 @@ static int send(const struct nrf_rpc_tr *transport, const uint8_t *data, size_t
362370
int attempts = 0;
363371

364372
crc_val = tx_flip(uart_tr, crc_val);
373+
uart_tr->ack_payload = crc_val;
365374
acked = false;
366375

367376
do {
@@ -386,13 +395,8 @@ static int send(const struct nrf_rpc_tr *transport, const uint8_t *data, size_t
386395
k_mutex_unlock(&uart_tr->ack_tx_lock);
387396
if (k_sem_take(&uart_tr->ack_sem, K_MSEC(CONFIG_NRF_RPC_UART_ACK_WAITING_TIME)) ==
388397
0) {
389-
acked = uart_tr->ack_payload == crc_val;
390-
if (!acked) {
391-
LOG_WRN("Wrong ack. Expected: %#4x. Received: %#4x.", crc_val,
392-
uart_tr->ack_payload);
393-
} else {
394-
LOG_DBG("Acked successfully.");
395-
}
398+
acked = true;
399+
LOG_DBG("Acked successfully.");
396400
} else {
397401
LOG_WRN("Ack timeout expired.");
398402
}

0 commit comments

Comments
 (0)