void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
static uint8_t header_index = 0;
static uint8_t payload_index = 0;
if (huart->Instance == USART1) {
switch (rx_state) {
case RX_STATE_WAIT_FOR_HEADER:
uart_rx_header[header_index++] = uart_rx_byte;
if (header_index == HEADER_SIZE) {
byte_count = uart_rx_header[2];
rx_state = RX_STATE_WAIT_FOR_PAYLOAD;
header_index = 0;
payload_index = 0;
HAL_UART_Receive_IT(huart, uart_rx_payload, byte_count + 2);
} else {
HAL_UART_Receive_IT(huart, &uart_rx_byte, 1);
}
break;
case RX_STATE_WAIT_FOR_PAYLOAD;
rx_state = RX_STATE_WAIT_FOR_HEADER;
HAL_UART_Receive_IT(huart, &uart_rx_byte, 1);
break;
}
}
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) {
static uint8_t header_index = 0;
static uint8_t payload_index = 0;
if (huart->Instance == USART1) {
switch (rx_state) {
case RX_STATE_WAIT_FOR_HEADER:
uart_rx_header[header_index++] = uart_rx_byte;
if (header_index == HEADER_SIZE) {
byte_count = uart_rx_header[2];
rx_state = RX_STATE_WAIT_FOR_PAYLOAD;
header_index = 0;
payload_index = 0;
HAL_UART_Receive_IT(huart, uart_rx_payload, byte_count + 2);
} else {
HAL_UART_Receive_IT(huart, &uart_rx_byte, 1);
}
break;
case RX_STATE_WAIT_FOR_PAYLOAD;
rx_state = RX_STATE_WAIT_FOR_HEADER;
HAL_UART_Receive_IT(huart, &uart_rx_byte, 1);
break;
}
}
}