From 7a34bfa0becd165008c8ca9fe4e4d90110d20651 Mon Sep 17 00:00:00 2001 From: fengzero Date: Thu, 28 Jul 2022 08:51:33 +0000 Subject: [PATCH] fix serial port parameter --- include/neuron/connection/neu_connection.h | 6 +++++ src/connection/connection.c | 26 ++++++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/include/neuron/connection/neu_connection.h b/include/neuron/connection/neu_connection.h index 996b1014..5cfd734b 100644 --- a/include/neuron/connection/neu_connection.h +++ b/include/neuron/connection/neu_connection.h @@ -60,6 +60,11 @@ typedef enum neu_conn_tty_data { NEU_CONN_TTY_DATA_8, } neu_conn_tty_data_e; +typedef enum neu_conn_tty_flow { + NEU_CONN_TTYP_FLOW_DISABLE, + NEU_CONN_TTYP_FLOW_ENABLE, +} neu_conn_tty_flow_e; + typedef void (*neu_conn_callback)(void *data, int fd); typedef struct neu_conn_param { @@ -96,6 +101,7 @@ typedef struct neu_conn_param { neu_conn_tty_stop_e stop; neu_conn_tty_baud_e baud; neu_conn_tty_parity_e parity; + neu_conn_tty_flow_e flow; uint16_t timeout; // millisecond } tty_client; } params; diff --git a/src/connection/connection.c b/src/connection/connection.c index ce19fb64..53599f27 100644 --- a/src/connection/connection.c +++ b/src/connection/connection.c @@ -416,6 +416,7 @@ static void conn_init_param(neu_conn_t *conn, neu_conn_param_t *param) conn->param.params.tty_client.stop = param->params.tty_client.stop; conn->param.params.tty_client.baud = param->params.tty_client.baud; conn->param.params.tty_client.parity = param->params.tty_client.parity; + conn->param.params.tty_client.flow = param->params.tty_client.flow; conn->param.params.tty_client.timeout = param->params.tty_client.timeout; conn->block = conn->param.params.tty_client.timeout > 0; @@ -606,6 +607,15 @@ static void conn_connect(neu_conn_t *conn) tty_opt.c_cc[VTIME] = conn->param.params.tty_client.timeout / 100; tty_opt.c_cc[VMIN] = 0; + switch (conn->param.params.tty_client.flow) { + case NEU_CONN_TTYP_FLOW_DISABLE: + tty_opt.c_cflag &= ~CRTSCTS; + break; + case NEU_CONN_TTYP_FLOW_ENABLE: + tty_opt.c_cflag |= CRTSCTS; + break; + } + switch (conn->param.params.tty_client.baud) { case NEU_CONN_TTY_BAUD_115200: cfsetospeed(&tty_opt, B115200); @@ -682,10 +692,18 @@ static void conn_connect(neu_conn_t *conn) break; } - tty_opt.c_oflag = 0; - tty_opt.c_lflag = 0; - tty_opt.c_iflag |= IGNBRK; - tty_opt.c_cflag |= CREAD | HUPCL | CLOCAL; + tty_opt.c_cflag |= CREAD | CLOCAL; + tty_opt.c_lflag &= ~ICANON; + tty_opt.c_lflag &= ~ECHO; + tty_opt.c_lflag &= ~ECHOE; + tty_opt.c_lflag &= ~ECHONL; + tty_opt.c_lflag &= ~ISIG; + + tty_opt.c_iflag &= ~(IXON | IXOFF | IXANY); + tty_opt.c_iflag &= + ~(IGNBRK | BRKINT | PARMRK | ISTRIP | INLCR | IGNCR | ICRNL); + tty_opt.c_oflag &= ~OPOST; + tty_opt.c_oflag &= ~ONLCR; tcflush(fd, TCIFLUSH); tcsetattr(fd, TCSANOW, &tty_opt);