// 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)); } }
int main( void ) { unsigned char inc; unsigned int rx_time=0, tx_time=0; mcu_init(); sys_time_init(); led_init(); VCOM_allow_linecoding(1); #ifdef USE_USB_SERIAL VCOM_init(); #endif mcu_int_enable(); LED_ON(3); #ifdef USE_UART0 while(1) { if (T0TC > (rx_time+((PCLK / T0_PCLK_DIV) / BLINK_MIN))) LED_OFF(1); if (T0TC > (tx_time+((PCLK / T0_PCLK_DIV) / BLINK_MIN))) LED_OFF(2); if (uart_char_available(&uart0) && VCOM_check_free_space(1)) { LED_ON(1); rx_time = T0TC; inc = uart_getch(&uart0); VCOM_putchar(inc); } if (VCOM_check_available() && uart_check_free_space(&uart0, 1)) { LED_ON(2); tx_time = T0TC; inc = VCOM_getchar(); uart_transmit(&uart0, inc); } } #else while(1) { if (T0TC > (rx_time+((PCLK / T0_PCLK_DIV) / BLINK_MIN))) LED_OFF(1); if (T0TC > (tx_time+((PCLK / T0_PCLK_DIV) / BLINK_MIN))) LED_OFF(2); if (uart_char_available(&uart1) && VCOM_check_free_space(1)) { LED_ON(1); rx_time = T0TC; inc = uart_getch(&uart1); VCOM_putchar(inc); } if (VCOM_check_available() && uart_check_free_space(&uart1, 1)) { LED_ON(2); tx_time = T0TC; inc = VCOM_getchar(); uart_transmit(&uart1, inc); } } #endif return 0; }
void airspeed_uADC_event(void) { while (uart_char_available(&(uADC_DEV))) { uint8_t ch = uart_getch(&(uADC_DEV)); airspeed_uadc_parse(ch); } }
static inline void main_periodic( void ) { char ch; uart_transmit(&uart1, 'a'); uart_transmit(&uart2, 'b'); uart_transmit(&uart3, 'c'); uart_transmit(&uart5, 'd'); LED_OFF(1); LED_OFF(2); if (uart_char_available(&uart1)) { ch = uart_getch(&uart1); if (ch == 'a') { LED_ON(1); } else { LED_ON(2); } } if (uart_char_available(&uart2)) { ch = uart_getch(&uart2); if (ch == 'b') { LED_ON(1); } else { LED_ON(2); } } if (uart_char_available(&uart3)) { ch = uart_getch(&uart3); if (ch == 'c') { LED_ON(1); } else { LED_ON(2); } } if (uart_char_available(&uart5)) { ch = uart_getch(&uart5); if (ch == 'd') { LED_ON(1); } else { LED_ON(2); } } }
void esc32_event(void) { while (uart_char_available(esc32_priv.dev)) { parse_esc32(&esc32_priv, uart_getch(esc32_priv.dev)); if (esc32_priv.msg_available) { esc32_parse_msg(&esc32_priv, &esc32); } } }
static inline void main_periodic(void) { static uint8_t expected_i = 0; static float last_ts = 0; static float recv_ts = 0; if (uart_char_available(&TEST_UART)) { uint8_t c = uart_getch(&TEST_UART); RunOnceEvery(1, printf("%f, received: '%d'\n", get_sys_time_float(), c);) if (c != expected_i) {
static inline void main_periodic(void) { const char *foo = "FooBarBaz"; static int i = 0; if (i == strlen(foo)) { i = 0; } uart_transmit(&TEST_UART, foo[i]); printf("%f, transmit: '%c'\n", get_sys_time_float(), foo[i]); if (uart_char_available(&TEST_UART)) { char c = uart_getch(&TEST_UART); printf("%f, received: '%c'\n", get_sys_time_float(), c); } i++; }
int main(void) { float v; // Current battery voltage adc_init(); // time to init? led_init(); mosfet_init(); uart_init(); // time to init? uart_enable_interrupts(); // setup charger_start(); // Charging by default while (1) { v = map(adc_read(0), ADC_MIN, ADC_MAX, V_MIN, V_MAX); if (charging) { if (v > V_FLT) { // Stop charging charger_stop(); } } else { if (v <= V_FLT - HYST) { // Start charging charger_start(); } } if (uart_char_available()) { unsigned char cmd; char buf[6]; cmd = uart_getchar(); switch (cmd) { case 'v': voltage_to_str(buf, v); printf("voltage: %s ", buf); printf(charging ? "(charging)\n" : "(not charging)\n"); break; } } } return 0; }