@@ -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
9199static 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