This is an automated email from the ASF dual-hosted git repository.

pkarashchenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git


The following commit(s) were added to refs/heads/master by this push:
     new fd9c92e2e system/cu: Move fd_std_tty, g_tio_std and g_tio_dev to 
cu_globals_s
fd9c92e2e is described below

commit fd9c92e2e9598582532d4bc14680cfb204fd2105
Author: Xiang Xiao <xiaoxi...@xiaomi.com>
AuthorDate: Sun Mar 26 11:44:42 2023 +0800

    system/cu: Move fd_std_tty, g_tio_std and g_tio_dev to cu_globals_s
    
    Signed-off-by: Xiang Xiao <xiaoxi...@xiaomi.com>
---
 system/cu/cu.h      | 12 ++++---
 system/cu/cu_main.c | 95 +++++++++++++++++++++++++----------------------------
 2 files changed, 53 insertions(+), 54 deletions(-)

diff --git a/system/cu/cu.h b/system/cu/cu.h
index 744a61831..fa7d72c7d 100644
--- a/system/cu/cu.h
+++ b/system/cu/cu.h
@@ -45,6 +45,7 @@
 #include <stdint.h>
 #include <stdbool.h>
 #include <semaphore.h>
+#include <termios.h>
 
 /****************************************************************************
  * Pre-processor Definitions
@@ -70,10 +71,13 @@
 
 struct cu_globals_s
 {
-  int infd;            /* Incoming data from serial port */
-  int outfd;           /* Outgoing data to serial port */
-  pthread_t listener;  /* Terminal listener thread */
-  bool force_exit;     /* Force exit */
+  int infd;              /* Incoming data from serial port */
+  int outfd;             /* Outgoing data to serial port */
+  int stdfd;             /* I/O data to standard console */
+  struct termios devtio; /* Original serial port setting */
+  struct termios stdtio; /* Original standard console setting */
+  pthread_t listener;    /* Terminal listener thread */
+  bool force_exit;       /* Force exit */
 };
 
 /****************************************************************************
diff --git a/system/cu/cu_main.c b/system/cu/cu_main.c
index c67b379ff..572533a19 100644
--- a/system/cu/cu_main.c
+++ b/system/cu/cu_main.c
@@ -50,7 +50,6 @@
 #include <errno.h>
 #include <stdlib.h>
 #include <signal.h>
-#include <termios.h>
 #include <debug.h>
 
 #include "system/readline.h"
@@ -73,9 +72,6 @@ enum parity_mode
  ****************************************************************************/
 
 static struct cu_globals_s g_cu;
-static int fd_std_tty;
-static struct termios g_tio_std;
-static struct termios g_tio_dev;
 
 /****************************************************************************
  * Public Data
@@ -95,12 +91,14 @@ static struct termios g_tio_dev;
 
 static FAR void *cu_listener(FAR void *parameter)
 {
+  FAR struct cu_globals_s *cu = (FAR struct cu_globals_s *)parameter;
+
   for (; ; )
     {
       int rc;
       char ch;
 
-      rc = read(g_cu.infd, &ch, 1);
+      rc = read(cu->infd, &ch, 1);
       if (rc <= 0)
         {
           break;
@@ -121,17 +119,17 @@ static void sigint(int sig)
 }
 
 #ifdef CONFIG_SERIAL_TERMIOS
-static int set_termios(int fd, int rate, enum parity_mode parity,
-                       int rtscts, int nocrlf)
+static int set_termios(FAR struct cu_globals_s *cu, int rate,
+                       enum parity_mode parity, int rtscts, int nocrlf)
 #else
-static int set_termios(int fd, int nocrlf)
+static int set_termios(FAR struct cu_globals_s *cu, int nocrlf)
 #endif
 {
   int rc = 0;
   int ret;
   struct termios tio;
 
-  tio = g_tio_dev;
+  tio = cu->devtio;
 
 #ifdef CONFIG_SERIAL_TERMIOS
   tio.c_cflag &= ~(PARENB | PARODD | CRTSCTS);
@@ -172,7 +170,7 @@ static int set_termios(int fd, int nocrlf)
       tio.c_oflag |= ONLCR;
     }
 
-  ret = tcsetattr(fd, TCSANOW, &tio);
+  ret = tcsetattr(cu->outfd, TCSANOW, &tio);
   if (ret)
     {
       fprintf(stderr, "set_termios: ERROR during tcsetattr(): %d\n", errno);
@@ -182,15 +180,15 @@ static int set_termios(int fd, int nocrlf)
 
   /* Let the remote machine to handle all crlf/echo except Ctrl-C */
 
-  if (fd_std_tty >= 0)
+  if (cu->stdfd >= 0)
   {
-    tio = g_tio_std;
+    tio = cu->stdtio;
 
     tio.c_iflag = 0;
     tio.c_oflag = 0;
     tio.c_lflag &= ~ECHO;
 
-    ret = tcsetattr(fd_std_tty, TCSANOW, &tio);
+    ret = tcsetattr(cu->stdfd, TCSANOW, &tio);
     if (ret)
       {
         fprintf(stderr, "set_termios: ERROR during tcsetattr(): %d\n",
@@ -203,15 +201,13 @@ errout:
   return rc;
 }
 
-static int retrieve_termios(int fd)
+static void retrieve_termios(FAR struct cu_globals_s *cu)
 {
-  tcsetattr(fd, TCSANOW, &g_tio_dev);
-  if (fd_std_tty >= 0)
+  tcsetattr(cu->outfd, TCSANOW, &cu->devtio);
+  if (cu->stdfd >= 0)
     {
-      tcsetattr(fd_std_tty, TCSANOW, &g_tio_std);
+      tcsetattr(cu->stdfd, TCSANOW, &cu->stdtio);
     }
-
-  return 0;
 }
 
 static void print_help(void)
@@ -274,7 +270,8 @@ int main(int argc, FAR char *argv[])
 {
   pthread_attr_t attr;
   struct sigaction sa;
-  FAR char *devname = CONFIG_SYSTEM_CUTERM_DEFAULT_DEVICE;
+  FAR const char *devname = CONFIG_SYSTEM_CUTERM_DEFAULT_DEVICE;
+  FAR struct cu_globals_s *cu = &g_cu;
 #ifdef CONFIG_SERIAL_TERMIOS
   int baudrate = CONFIG_SYSTEM_CUTERM_DEFAULT_BAUD;
   enum parity_mode parity = PARITY_NONE;
@@ -291,7 +288,7 @@ int main(int argc, FAR char *argv[])
 
   /* Initialize global data */
 
-  memset(&g_cu, 0, sizeof(struct cu_globals_s));
+  memset(cu, 0, sizeof(*cu));
 
   /* Install signal handlers */
 
@@ -299,7 +296,7 @@ int main(int argc, FAR char *argv[])
   sa.sa_handler = sigint;
   sigaction(SIGINT, &sa, NULL);
 
-  optind = 0;   /* global that needs to be reset in FLAT mode */
+  optind = 0;   /* Global that needs to be reset in FLAT mode */
   while ((option = getopt(argc, argv, "l:s:cefhor?")) != ERROR)
     {
       switch (option)
@@ -337,13 +334,12 @@ int main(int argc, FAR char *argv[])
           case 'h':
           case '?':
             print_help();
-            badarg = true;
             exitval = EXIT_SUCCESS;
-            break;
+
+            /* Go through */
 
           default:
             badarg = true;
-            exitval = EXIT_FAILURE;
             break;
         }
     }
@@ -355,53 +351,53 @@ int main(int argc, FAR char *argv[])
 
   /* Open the serial device for writing */
 
-  g_cu.outfd = open(devname, O_WRONLY);
-  if (g_cu.outfd < 0)
+  cu->outfd = open(devname, O_WRONLY);
+  if (cu->outfd < 0)
     {
       fprintf(stderr, "cu_main: ERROR: Failed to open %s for writing: %d\n",
               devname, errno);
       goto errout_with_devinit;
     }
 
-  /* remember serial device termios attributes */
+  /* Remember serial device termios attributes */
 
-  ret = tcgetattr(g_cu.outfd, &g_tio_dev);
+  ret = tcgetattr(cu->outfd, &cu->devtio);
   if (ret)
     {
       fprintf(stderr, "cu_main: ERROR during tcgetattr(): %d\n", errno);
       goto errout_with_outfd;
     }
 
-  /* remember std termios attributes if it is a tty. Try to select
+  /* Remember std termios attributes if it is a tty. Try to select
    * right descriptor that is used to refer to tty
    */
 
   if (isatty(fileno(stderr)))
     {
-      fd_std_tty = fileno(stderr);
+      cu->stdfd = fileno(stderr);
     }
   else if (isatty(fileno(stdout)))
     {
-      fd_std_tty = fileno(stdout);
+      cu->stdfd = fileno(stdout);
     }
   else if (isatty(fileno(stdin)))
     {
-      fd_std_tty = fileno(stdin);
+      cu->stdfd = fileno(stdin);
     }
   else
     {
-      fd_std_tty = -1;
+      cu->stdfd = -1;
     }
 
-  if (fd_std_tty >= 0)
+  if (cu->stdfd >= 0)
     {
-      tcgetattr(fd_std_tty, &g_tio_std);
+      tcgetattr(cu->stdfd, &cu->stdtio);
     }
 
 #ifdef CONFIG_SERIAL_TERMIOS
-  if (set_termios(g_cu.outfd, baudrate, parity, rtscts, nocrlf) != 0)
+  if (set_termios(cu, baudrate, parity, rtscts, nocrlf) != 0)
 #else
-  if (set_termios(g_cu.outfd, nocrlf) != 0)
+  if (set_termios(cu, nocrlf) != 0)
 #endif
     {
       goto errout_with_outfd_retrieve;
@@ -411,8 +407,8 @@ int main(int argc, FAR char *argv[])
    * this should not fail.
    */
 
-  g_cu.infd = open(devname, O_RDONLY);
-  if (g_cu.infd < 0)
+  cu->infd = open(devname, O_RDONLY);
+  if (cu->infd < 0)
     {
       fprintf(stderr, "cu_main: ERROR: Failed to open %s for reading: %d\n",
              devname, errno);
@@ -432,8 +428,7 @@ int main(int argc, FAR char *argv[])
 
   attr.priority = CONFIG_SYSTEM_CUTERM_PRIORITY;
 
-  ret = pthread_create(&g_cu.listener, &attr,
-                       cu_listener, (pthread_addr_t)0);
+  ret = pthread_create(&cu->listener, &attr, cu_listener, cu);
   pthread_attr_destroy(&attr);
   if (ret != 0)
     {
@@ -443,7 +438,7 @@ int main(int argc, FAR char *argv[])
 
   /* Send messages and get responses -- forever */
 
-  while (!g_cu.force_exit)
+  while (!cu->force_exit)
     {
       int ch = getc(stdin);
 
@@ -454,7 +449,7 @@ int main(int argc, FAR char *argv[])
 
       if (nobreak == 1)
         {
-          write(g_cu.outfd, &ch, 1);
+          write(cu->outfd, &ch, 1);
           continue;
         }
 
@@ -470,7 +465,7 @@ int main(int argc, FAR char *argv[])
             {
               /* Escaping a tilde: handle like normal char */
 
-              write(g_cu.outfd, &ch, 1);
+              write(cu->outfd, &ch, 1);
               continue;
             }
           else
@@ -484,7 +479,7 @@ int main(int argc, FAR char *argv[])
 
       /* Normal character */
 
-      write(g_cu.outfd, &ch, 1);
+      write(cu->outfd, &ch, 1);
 
       /* Determine if we are now at the start of a new line or not */
 
@@ -498,17 +493,17 @@ int main(int argc, FAR char *argv[])
         }
     }
 
-  pthread_cancel(g_cu.listener);
+  pthread_cancel(cu->listener);
   exitval = EXIT_SUCCESS;
 
   /* Error exits */
 
 errout_with_fds:
-  close(g_cu.infd);
+  close(cu->infd);
 errout_with_outfd_retrieve:
-  retrieve_termios(g_cu.outfd);
+  retrieve_termios(cu);
 errout_with_outfd:
-  close(g_cu.outfd);
+  close(cu->outfd);
 errout_with_devinit:
   return exitval;
 }

Reply via email to