mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-03-23 19:20:51 +00:00
platform/posix: exit on none existing uart device, terminate if uart is unplugged
This commit is contained in:
parent
683d7c6847
commit
7bab55ed9a
@ -90,7 +90,7 @@ static int btstack_uart_posix_init(const btstack_uart_config_t * config){
|
||||
static void hci_uart_posix_process(btstack_data_source_t *ds, btstack_data_source_callback_type_t callback_type);
|
||||
|
||||
static void btstack_uart_block_posix_process_write(btstack_data_source_t *ds) {
|
||||
|
||||
|
||||
if (btstack_uart_block_write_bytes_len == 0) return;
|
||||
|
||||
uint32_t start = btstack_run_loop_get_time_ms();
|
||||
@ -135,7 +135,7 @@ static void btstack_uart_block_posix_process_read(btstack_data_source_t *ds) {
|
||||
}
|
||||
|
||||
uint32_t start = btstack_run_loop_get_time_ms();
|
||||
|
||||
|
||||
// read up to bytes_to_read data in
|
||||
ssize_t bytes_read = read(ds->source.fd, btstack_uart_block_read_bytes_data, btstack_uart_block_read_bytes_len);
|
||||
// log_info("read need %u bytes, got %d", btstack_uart_block_read_bytes_len, (int) bytes_read);
|
||||
@ -145,17 +145,17 @@ static void btstack_uart_block_posix_process_read(btstack_data_source_t *ds) {
|
||||
}
|
||||
if (bytes_read == 0){
|
||||
log_error("read zero bytes\n");
|
||||
return;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
if (bytes_read < 0) {
|
||||
log_error("read returned error\n");
|
||||
return;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
btstack_uart_block_read_bytes_len -= bytes_read;
|
||||
btstack_uart_block_read_bytes_data += bytes_read;
|
||||
if (btstack_uart_block_read_bytes_len > 0) return;
|
||||
|
||||
|
||||
btstack_run_loop_disable_data_source_callbacks(ds, DATA_SOURCE_CALLBACK_READ);
|
||||
|
||||
if (block_received){
|
||||
@ -176,13 +176,13 @@ static int btstack_uart_posix_set_baudrate(uint32_t baudrate){
|
||||
case 9600: brate=B9600; break;
|
||||
case 19200: brate=B19200; break;
|
||||
case 38400: brate=B38400; break;
|
||||
case 57600: brate=B57600; break;
|
||||
case 115200: brate=B115200; break;
|
||||
case 57600: brate=B57600; break;
|
||||
case 115200: brate=B115200; break;
|
||||
#ifdef B230400
|
||||
case 230400: brate=B230400; break;
|
||||
case 230400: brate=B230400; break;
|
||||
#endif
|
||||
#ifdef B460800
|
||||
case 460800: brate=B460800; break;
|
||||
case 460800: brate=B460800; break;
|
||||
#endif
|
||||
#ifdef B500000
|
||||
case 500000: brate=B500000; break;
|
||||
@ -191,7 +191,7 @@ static int btstack_uart_posix_set_baudrate(uint32_t baudrate){
|
||||
case 576000: brate=B576000; break;
|
||||
#endif
|
||||
#ifdef B921600
|
||||
case 921600: brate=B921600; break;
|
||||
case 921600: brate=B921600; break;
|
||||
#endif
|
||||
#ifdef B1000000
|
||||
case 1000000: brate=B1000000; break;
|
||||
@ -311,12 +311,12 @@ static int btstack_uart_posix_open(void){
|
||||
int fd = open(device_name, flags);
|
||||
if (fd == -1) {
|
||||
log_error("Unable to open port %s", device_name);
|
||||
return -1;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
|
||||
if (tcgetattr(fd, &btstack_uart_block_termios) < 0) {
|
||||
log_error("Couldn't get term attributes");
|
||||
return -1;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
cfmakeraw(&btstack_uart_block_termios); // make raw
|
||||
|
||||
@ -326,11 +326,11 @@ static int btstack_uart_posix_open(void){
|
||||
|
||||
btstack_uart_block_termios.c_cflag |= CREAD | CLOCAL; // turn on READ & ignore ctrl lines
|
||||
btstack_uart_block_termios.c_iflag &= ~(IXON | IXOFF | IXANY); // turn off s/w flow ctrl
|
||||
|
||||
|
||||
// see: http://unixwiz.net/techtips/termios-vmin-vtime.html
|
||||
btstack_uart_block_termios.c_cc[VMIN] = 1;
|
||||
btstack_uart_block_termios.c_cc[VTIME] = 0;
|
||||
|
||||
|
||||
// no parity
|
||||
btstack_uart_posix_set_parity_option(&btstack_uart_block_termios, parity);
|
||||
|
||||
@ -339,15 +339,15 @@ static int btstack_uart_posix_open(void){
|
||||
|
||||
if(tcsetattr(fd, TCSANOW, &btstack_uart_block_termios) < 0) {
|
||||
log_error("Couldn't set term attributes");
|
||||
return -1;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// store fd in data source
|
||||
transport_data_source.source.fd = fd;
|
||||
|
||||
|
||||
// also set baudrate
|
||||
if (btstack_uart_posix_set_baudrate(baudrate) < 0){
|
||||
return -1;
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
// set up data_source
|
||||
@ -360,13 +360,13 @@ static int btstack_uart_posix_open(void){
|
||||
|
||||
log_info("Open tty %s", device_name);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int btstack_uart_posix_close_new(void){
|
||||
|
||||
// first remove run loop handler
|
||||
btstack_run_loop_remove_data_source(&transport_data_source);
|
||||
|
||||
|
||||
// then close device
|
||||
close(transport_data_source.source.fd);
|
||||
transport_data_source.source.fd = -1;
|
||||
@ -434,7 +434,7 @@ static void (*frame_received)(uint16_t frame_size);
|
||||
static void btstack_uart_slip_posix_block_sent(void);
|
||||
|
||||
static void btstack_uart_slip_posix_process_write(btstack_data_source_t *ds) {
|
||||
|
||||
|
||||
if (btstack_uart_slip_write_bytes_len == 0) return;
|
||||
|
||||
uint32_t start = btstack_run_loop_get_time_ms();
|
||||
@ -507,7 +507,7 @@ static void btstack_uart_slip_posix_process_read(btstack_data_source_t *ds) {
|
||||
btstack_uart_slip_receive_track_start = 0;
|
||||
btstack_uart_slip_receive_start_time = start;
|
||||
}
|
||||
|
||||
|
||||
// read up to bytes_to_read data in
|
||||
ssize_t bytes_read = read(ds->source.fd, btstack_uart_slip_receive_buffer, SLIP_RECEIVE_BUFFER_SIZE);
|
||||
|
||||
@ -517,7 +517,7 @@ static void btstack_uart_slip_posix_process_read(btstack_data_source_t *ds) {
|
||||
log_info("read took %u ms", end - start);
|
||||
}
|
||||
if (bytes_read < 0) return;
|
||||
|
||||
|
||||
btstack_uart_slip_receive_pos = 0;
|
||||
btstack_uart_slip_receive_len = (uint16_t ) bytes_read;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user