This is an automated email from the ASF dual-hosted git repository.
jiuzhudong 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 782de2748 cu: implement the cu exit logic like top cmd
782de2748 is described below
commit 782de2748fa623a005e9f1d3410bc076388f8955
Author: guoshichao <[email protected]>
AuthorDate: Thu Sep 25 14:33:46 2025 +0800
cu: implement the cu exit logic like top cmd
using the local cu_globals_s instance to manange the cu exit procedure
Signed-off-by: guoshichao <[email protected]>
---
system/cu/cu_main.c | 57 ++++++++++++++++++++++++++---------------------------
1 file changed, 28 insertions(+), 29 deletions(-)
diff --git a/system/cu/cu_main.c b/system/cu/cu_main.c
index 1e991460d..6e25acfc9 100644
--- a/system/cu/cu_main.c
+++ b/system/cu/cu_main.c
@@ -79,8 +79,6 @@ enum parity_mode
* Private Data
****************************************************************************/
-static struct cu_globals_s g_cu;
-
/****************************************************************************
* Public Data
****************************************************************************/
@@ -127,7 +125,8 @@ static FAR void *cu_listener(FAR void *parameter)
#ifdef CONFIG_ENABLE_ALL_SIGNALS
static void sigint(int sig)
{
- g_cu.force_exit = true;
+ FAR struct cu_globals_s *cu = siginfo->si_user;
+ cu->force_exit = true;
}
#endif
@@ -280,8 +279,8 @@ int main(int argc, FAR char *argv[])
#ifdef CONFIG_ENABLE_ALL_SIGNALS
struct sigaction sa;
#endif
+ struct cu_globals_s cu;
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;
@@ -297,8 +296,8 @@ int main(int argc, FAR char *argv[])
/* Initialize global data */
- memset(cu, 0, sizeof(*cu));
- cu->escape = '~';
+ memset(&cu, 0, sizeof(cu));
+ cu.escape = '~';
#ifdef CONFIG_ENABLE_ALL_SIGNALS
/* Install signal handlers */
@@ -338,7 +337,7 @@ int main(int argc, FAR char *argv[])
break;
case 'E':
- cu->escape = atoi(optarg);
+ cu.escape = atoi(optarg);
break;
case 'h':
@@ -361,8 +360,8 @@ int main(int argc, FAR char *argv[])
/* Open the serial device for reading and writing */
- cu->devfd = open(devname, O_RDWR);
- if (cu->devfd < 0)
+ cu.devfd = open(devname, O_RDWR);
+ if (cu.devfd < 0)
{
cu_error("cu_main: ERROR: Failed to open %s for writing: %d\n",
devname, errno);
@@ -371,9 +370,9 @@ int main(int argc, FAR char *argv[])
/* Remember serial device termios attributes */
- if (isatty(cu->devfd))
+ if (isatty(cu.devfd))
{
- ret = tcgetattr(cu->devfd, &cu->devtio);
+ ret = tcgetattr(cu.devfd, &cu.devtio);
if (ret)
{
cu_error("cu_main: ERROR during tcgetattr(): %d\n", errno);
@@ -387,30 +386,30 @@ int main(int argc, FAR char *argv[])
if (isatty(STDERR_FILENO))
{
- cu->stdfd = STDERR_FILENO;
+ cu.stdfd = STDERR_FILENO;
}
else if (isatty(STDOUT_FILENO))
{
- cu->stdfd = STDOUT_FILENO;
+ cu.stdfd = STDOUT_FILENO;
}
else if (isatty(STDIN_FILENO))
{
- cu->stdfd = STDIN_FILENO;
+ cu.stdfd = STDIN_FILENO;
}
else
{
- cu->stdfd = -1;
+ cu.stdfd = -1;
}
- if (cu->stdfd >= 0)
+ if (cu.stdfd >= 0)
{
- tcgetattr(cu->stdfd, &cu->stdtio);
+ tcgetattr(cu.stdfd, &cu.stdtio);
}
#ifdef CONFIG_SERIAL_TERMIOS
- if (set_termios(cu, baudrate, parity, rtscts, nocrlf) != 0)
+ if (set_termios(&cu, baudrate, parity, rtscts, nocrlf) != 0)
#else
- if (set_termios(cu, nocrlf) != 0)
+ if (set_termios(&cu, nocrlf) != 0)
#endif
{
goto errout_with_devfd_retrieve;
@@ -429,7 +428,7 @@ int main(int argc, FAR char *argv[])
attr.priority = CONFIG_SYSTEM_CUTERM_PRIORITY;
- ret = pthread_create(&cu->listener, &attr, cu_listener, cu);
+ ret = pthread_create(&cu.listener, &attr, cu_listener, &cu);
pthread_attr_destroy(&attr);
if (ret != 0)
{
@@ -439,7 +438,7 @@ int main(int argc, FAR char *argv[])
/* Send messages and get responses -- forever */
- while (!cu->force_exit)
+ while (!cu.force_exit)
{
char buf[CONFIG_LINE_MAX];
ssize_t nwrite = 0;
@@ -469,21 +468,21 @@ int main(int argc, FAR char *argv[])
*/
escaping = false;
- if (cu_cmd(cu, ch) == 1)
+ if (cu_cmd(&cu, ch) == 1)
{
- cu->force_exit = true;
+ cu.force_exit = true;
nread = i;
break;
}
}
- if (start_of_line == 1 && ch == cu->escape)
+ if (start_of_line == 1 && ch == cu.escape)
{
/* Normal character */
if (i > nwrite)
{
- write(cu->devfd, &buf[nwrite], i - nwrite);
+ write(cu.devfd, &buf[nwrite], i - nwrite);
}
nwrite = i + 1;
@@ -514,19 +513,19 @@ int main(int argc, FAR char *argv[])
if (nread > nwrite)
{
- write(cu->devfd, &buf[nwrite], nread - nwrite);
+ write(cu.devfd, &buf[nwrite], nread - nwrite);
}
}
- pthread_cancel(cu->listener);
+ pthread_cancel(cu.listener);
exitval = EXIT_SUCCESS;
/* Error exits */
errout_with_devfd_retrieve:
- retrieve_termios(cu);
+ retrieve_termios(&cu);
errout_with_devfd:
- close(cu->devfd);
+ close(cu.devfd);
errout_with_devinit:
return exitval;
}