msg_t bridge_thread (void *arg) { t_hydra_console *con; con = arg; chRegSetThreadName("UART bridge"); chThdSleepMilliseconds(10); uint8_t rx_data; uint8_t tx_data; mode_config_proto_t* proto = &con->mode->proto; while (!USER_BUTTON) { if(bsp_uart_rxne(proto->dev_num)) { bsp_uart_read_u8(proto->dev_num, &rx_data ,1); chSequentialStreamWrite(con->sdu, &rx_data, 1); } if(chnReadTimeout(con->sdu, &tx_data, 1, 1)) { bsp_uart_write_u8(proto->dev_num, &tx_data, 1); //chSequentialStreamWrite(con->sdu, &tx_data, 1); } } return (msg_t)1; }
static THD_FUNCTION(bridge_thread, arg) { t_hydra_console *con; con = arg; chRegSetThreadName("UART reader"); chThdSleepMilliseconds(10); uint8_t rx_data[UART_BRIDGE_BUFF_SIZE]; uint8_t bytes_read; mode_config_proto_t* proto = &con->mode->proto; while (!USER_BUTTON) { if(bsp_uart_rxne(proto->dev_num)) { bytes_read = bsp_uart_read_u8_timeout(proto->dev_num, rx_data, UART_BRIDGE_BUFF_SIZE, US2ST(100)); if(bytes_read > 0) { cprint(con, (char *)rx_data, bytes_read); } } else { chThdYield(); } } }