|
|
@@ -51,6 +51,7 @@ static u64 _rx_time;
|
|
|
#define update_dma_w_pos(uart) circle_update_write_position(&uart->rx_queue, SHARK_UART_RX_MEM_SIZE - DMA_CHCNT(uart->rx_dma_ch))
|
|
|
extern void protocol_recv_frame(uart_enum_t uart_no, char *data, int len);
|
|
|
extern void protocol_old_recv_frame(uart_enum_t uart_no, uint8_t *data, int len);
|
|
|
+extern void health_add_uart_error(uint32_t c, uint32_t l, uint32_t d);
|
|
|
// ================================================================================
|
|
|
static uart_enum_t _uart_index(uint32_t com){
|
|
|
return com == SHARK_UART0_com?SHARK_UART0:SHARK_UART1;
|
|
|
@@ -61,6 +62,7 @@ static bool shark_uart_on_rx_frame(shark_uart_t *uart)
|
|
|
u16 crc1 = shark_crc16_check(uart->rx_frame, uart->rx_length);
|
|
|
|
|
|
if (crc0 != crc1) {
|
|
|
+ health_add_uart_error(1, 0, 0);
|
|
|
return false;
|
|
|
}
|
|
|
protocol_recv_frame(_uart_index(uart->uart_com), (char *)uart->rx_frame, uart->rx_length);
|
|
|
@@ -97,13 +99,17 @@ static void shark_uart_rx(shark_uart_t *uart){
|
|
|
case CH_START:
|
|
|
uart->rx_length = 0;
|
|
|
uart->escape = false;
|
|
|
+ uart->start = true;
|
|
|
break;
|
|
|
case CH_END:
|
|
|
if (uart->rx_length > 2 && uart->rx_length != 0xFFFF){
|
|
|
uart->rx_length -= 2; //skip crc
|
|
|
shark_uart_on_rx_frame(uart);
|
|
|
+ }else if (uart->start == true){
|
|
|
+ health_add_uart_error(0, 1, 0);
|
|
|
}
|
|
|
uart->rx_length = 0xFFFF;
|
|
|
+ uart->start = false;
|
|
|
break;
|
|
|
case CH_ESC:
|
|
|
uart->escape = true;
|
|
|
@@ -134,6 +140,9 @@ static void shark_uart_rx(shark_uart_t *uart){
|
|
|
uart->rx_length++;
|
|
|
} else {
|
|
|
uart->rx_length = 0xFFFF;
|
|
|
+ if (uart->start == true) {
|
|
|
+ health_add_uart_error(0, 1, 0);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
}
|