Merge pull request #1171 from fengzeroz/main

serial: more baudrate 300/200/150
This commit is contained in:
fengzeroz
2023-04-10 14:11:05 +08:00
committed by GitHub
2 changed files with 53 additions and 11 deletions
@@ -43,6 +43,9 @@ typedef enum neu_conn_tty_baud {
NEU_CONN_TTY_BAUD_1800,
NEU_CONN_TTY_BAUD_1200,
NEU_CONN_TTY_BAUD_600,
NEU_CONN_TTY_BAUD_300,
NEU_CONN_TTY_BAUD_200,
NEU_CONN_TTY_BAUD_150,
} neu_conn_tty_baud_e;
typedef enum neu_conn_tty_parity {
+50 -11
View File
@@ -69,6 +69,8 @@ struct neu_conn {
static void conn_tcp_server_add_client(neu_conn_t *conn, int fd,
struct sockaddr_in client);
static void conn_tcp_server_del_client(neu_conn_t *conn, int fd);
static int conn_tcp_server_replace_client(neu_conn_t *conn, int fd,
struct sockaddr_in client);
static void conn_tcp_server_listen(neu_conn_t *conn);
static void conn_tcp_server_stop(neu_conn_t *conn);
@@ -180,16 +182,6 @@ int neu_conn_tcp_server_accept(neu_conn_t *conn)
return -1;
}
if (conn->tcp_server.n_client >= conn->param.params.tcp_server.max_link) {
close(fd);
zlog_warn(conn->param.log, "%s:%d accpet max link: %d, reject",
conn->param.params.tcp_server.ip,
conn->param.params.tcp_server.port,
conn->param.params.tcp_server.max_link);
pthread_mutex_unlock(&conn->mtx);
return -1;
}
if (conn->block) {
struct timeval tv = {
.tv_sec = conn->param.params.tcp_server.timeout / 1000,
@@ -199,7 +191,23 @@ int neu_conn_tcp_server_accept(neu_conn_t *conn)
setsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, sizeof(tv));
}
conn_tcp_server_add_client(conn, fd, client);
if (conn->tcp_server.n_client >= conn->param.params.tcp_server.max_link) {
int free_fd = conn_tcp_server_replace_client(conn, fd, client);
if (free_fd > 0) {
zlog_warn(conn->param.log, "replace old client %d with %d", free_fd,
fd);
} else {
close(fd);
zlog_warn(conn->param.log, "%s:%d accpet max link: %d, reject",
conn->param.params.tcp_server.ip,
conn->param.params.tcp_server.port,
conn->param.params.tcp_server.max_link);
pthread_mutex_unlock(&conn->mtx);
return -1;
}
} else {
conn_tcp_server_add_client(conn, fd, client);
}
conn->is_connected = true;
conn->connected(conn->data, fd);
@@ -740,6 +748,18 @@ static void conn_connect(neu_conn_t *conn)
cfsetospeed(&tty_opt, B600);
cfsetispeed(&tty_opt, B600);
break;
case NEU_CONN_TTY_BAUD_300:
cfsetospeed(&tty_opt, B300);
cfsetispeed(&tty_opt, B300);
break;
case NEU_CONN_TTY_BAUD_200:
cfsetospeed(&tty_opt, B200);
cfsetispeed(&tty_opt, B200);
break;
case NEU_CONN_TTY_BAUD_150:
cfsetospeed(&tty_opt, B150);
cfsetispeed(&tty_opt, B150);
break;
}
switch (conn->param.params.tty_client.parity) {
@@ -879,6 +899,25 @@ static void conn_tcp_server_del_client(neu_conn_t *conn, int fd)
}
}
static int conn_tcp_server_replace_client(neu_conn_t *conn, int fd,
struct sockaddr_in client)
{
for (int i = 0; i < conn->param.params.tcp_server.max_link; i++) {
if (conn->tcp_server.clients[i].fd > 0) {
int ret = conn->tcp_server.clients[i].fd;
close(conn->tcp_server.clients[i].fd);
conn->tcp_server.clients[i].fd = 0;
conn->tcp_server.clients[i].fd = fd;
conn->tcp_server.clients[i].client = client;
return ret;
}
}
return 0;
}
int neu_conn_stream_consume(neu_conn_t *conn, void *context,
neu_conn_stream_consume_fn fn)
{