Merge pull request #674 from fengzeroz/v2.1.0

fix serial port parameter
This commit is contained in:
fengzeroz
2022-07-28 16:52:16 +08:00
committed by GitHub
2 changed files with 28 additions and 4 deletions
@@ -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;
+22 -4
View File
@@ -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);