// Decoding event function // Reading from UART void sbus_common_decode_event(struct Sbus *sbus_p, struct uart_periph *dev) { uint8_t rbyte; if (uart_char_available(dev)) { do { rbyte = uart_getch(dev); switch (sbus_p->status) { case SBUS_STATUS_UNINIT: // Wait for the start byte if (rbyte == SBUS_START_BYTE) { sbus_p->status++; sbus_p->idx = 0; } break; case SBUS_STATUS_GOT_START: // Store buffer sbus_p->buffer[sbus_p->idx] = rbyte; sbus_p->idx++; if (sbus_p->idx == SBUS_BUF_LENGTH) { // Decode if last byte is the correct end byte if (rbyte == SBUS_END_BYTE) { decode_sbus_buffer(sbus_p->buffer, sbus_p->pulses, &sbus_p->frame_available, sbus_p->ppm); } sbus_p->status = SBUS_STATUS_UNINIT; } break; default: break; } } while (uart_char_available(dev)); } }
// Decoding event function // Reading from UART void sbus_decode_event(void) { uint8_t rbyte; if (uart_char_available(&SBUS_UART_DEV)) { do { rbyte = uart_getch(&SBUS_UART_DEV); switch (sbus.status) { case SBUS_STATUS_UNINIT: // Wait for the start byte if (rbyte == SBUS_START_BYTE) { sbus.status++; sbus.idx = 0; } break; case SBUS_STATUS_GOT_START: // Store buffer sbus.buffer[sbus.idx] = rbyte; sbus.idx++; if (sbus.idx == SBUS_BUF_LENGTH) { // Decode if last byte is the correct end byte if (rbyte == SBUS_END_BYTE) { decode_sbus_buffer(sbus.buffer, sbus.pulses, &sbus.frame_available); } sbus.status = SBUS_STATUS_UNINIT; } break; default: break; } } while (uart_char_available(&SBUS_UART_DEV)); } }