예제 #1
0
static uint32_t write(t_hydra_console *con, uint8_t *tx_data, uint8_t nb_data)
{
	int i;
	uint32_t status;
	mode_config_proto_t* proto = &con->mode->proto;

	status = bsp_uart_write_u8(proto->dev_num, tx_data, nb_data);
	if(status == BSP_OK) {
		if(nb_data == 1) {
			/* Write 1 data */
			cprintf(con, hydrabus_mode_str_write_one_u8, tx_data[0]);
		} else if(nb_data > 1) {
			/* Write n data */
			cprintf(con, hydrabus_mode_str_mul_write);
			for(i = 0; i < nb_data; i++) {
				cprintf(con, hydrabus_mode_str_mul_value_u8, tx_data[i]);
			}
			cprintf(con, hydrabus_mode_str_mul_br);
		}
	}
	return status;
}
예제 #2
0
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;
}
예제 #3
0
static void bridge(t_hydra_console *con)
{
	uint8_t tx_data[UART_BRIDGE_BUFF_SIZE];
	uint8_t bytes_read;
	//uint8_t bytes_read;
	mode_config_proto_t* proto = &con->mode->proto;

	cprintf(con, "Interrupt by pressing user button.\r\n");
	cprint(con, "\r\n", 2);

	thread_t *bthread = chThdCreateFromHeap(NULL, CONSOLE_WA_SIZE, "bridge_thread",
						LOWPRIO, bridge_thread, con);
	while(!USER_BUTTON) {
		bytes_read = chnReadTimeout(con->sdu, tx_data,
					    UART_BRIDGE_BUFF_SIZE, US2ST(100));
		if(bytes_read > 0) {
			bsp_uart_write_u8(proto->dev_num, tx_data, bytes_read);
		}
	}
	chThdTerminate(bthread);
	chThdWait(bthread);
}