diff options
Diffstat (limited to 'nuttx')
-rw-r--r-- | nuttx/arch/x86/src/common/up_initialize.c | 2 | ||||
-rwxr-xr-x | nuttx/configs/vsn/nsh/defconfig | 1 | ||||
-rw-r--r-- | nuttx/examples/nsh/nsh_main.c | 35 | ||||
-rw-r--r-- | nuttx/include/nuttx/nuttapp.h | 56 |
4 files changed, 59 insertions, 35 deletions
diff --git a/nuttx/arch/x86/src/common/up_initialize.c b/nuttx/arch/x86/src/common/up_initialize.c index 9ce9523ed..0ceeddbb6 100644 --- a/nuttx/arch/x86/src/common/up_initialize.c +++ b/nuttx/arch/x86/src/common/up_initialize.c @@ -124,7 +124,7 @@ void up_initialize(void) up_irqinitialize(); - /* Initialize the DMA subsystem if the weak function stm32_dmainitialize has been + /* Initialize the DMA subsystem if the weak function up_dmainitialize has been * brought into the build */ diff --git a/nuttx/configs/vsn/nsh/defconfig b/nuttx/configs/vsn/nsh/defconfig index 8e74c4c58..2d3e5b2b3 100755 --- a/nuttx/configs/vsn/nsh/defconfig +++ b/nuttx/configs/vsn/nsh/defconfig @@ -848,6 +848,7 @@ CONFIG_BUILTIN_APP_START= # apps from command line. See apps/README for more information. # CONFIG_EXAMPLES_NSH_BUILTIN_APPS=y +CONFIG_SCHED_WAITPID=y # ######################################################################## diff --git a/nuttx/examples/nsh/nsh_main.c b/nuttx/examples/nsh/nsh_main.c index a13c6dae0..84ef2bdfd 100644 --- a/nuttx/examples/nsh/nsh_main.c +++ b/nuttx/examples/nsh/nsh_main.c @@ -499,23 +499,23 @@ static int nsh_execute(FAR struct nsh_vtbl_s *vtbl, int argc, char *argv[]) if ((ret = exec_nuttapp(cmd, argv)) < 0) { if (errno != ENOENT) - { - return -errno; + { + return -errno; } } else { - /* Is the background mode or foreground mode desired? */ -#if 0 - if (argc > 1 && strcmp(argv[argc-1], "&") == 0) - { - } - else - { - waitpid(ret, ); - } +#ifdef CONFIG_SCHED_WAITPID + if (vtbl->np.np_bg == false) + { + waitpid(ret, NULL, 0); + } + else #endif - return ret; + { + nsh_output(vtbl, "%s [%d:%d]\n", cmd, ret, 128); // \todo get priority from new pid? + return ret; + } } } #endif @@ -1176,6 +1176,7 @@ int nsh_parse(FAR struct nsh_vtbl_s *vtbl, char *cmdline) } #endif + /* Check if the output was re-directed using > or >> */ if (argc > 2) @@ -1229,10 +1230,16 @@ int nsh_parse(FAR struct nsh_vtbl_s *vtbl, char *cmdline) nsh_output(vtbl, g_fmttoomanyargs, cmd); } - /* Handle the case where the command is executed in background */ + /* Handle the case where the command is executed in background. + * However is app is to be started as nuttapp new process will + * be created anyway, so skip this step. */ #ifndef CONFIG_EXAMPLES_NSH_DISABLEBG - if (vtbl->np.np_bg) + if (vtbl->np.np_bg +#ifdef CONFIG_EXAMPLES_NSH_BUILTIN_APPS + && nuttapp_isavail(argv[0]) < 0 +#endif + ) { struct sched_param param; struct nsh_vtbl_s *bkgvtbl; diff --git a/nuttx/include/nuttx/nuttapp.h b/nuttx/include/nuttx/nuttapp.h index a8b6e8397..1d6497283 100644 --- a/nuttx/include/nuttx/nuttapp.h +++ b/nuttx/include/nuttx/nuttapp.h @@ -72,49 +72,65 @@ extern "C" { #define EXTERN extern #endif + /**************************************************************************** - * Name: execute builtin NuttX application + * Name: check for availability of builtin NuttX application * * Description: - * Executes builtin application registerred during compile time. - * New application is run in a separate task context (and thread). + * Checks for availabiliy of application registerred during compile time. * * Input Parameter: * filename - Name of the linked-in binary to be started. - * argv - Argument list * * Returned Value: * This is an end-user function, so it follows the normal convention: - * Returns the PID of the exec'ed module. On failure, it.returns - * -1 (ERROR) and sets errno appropriately. + * Returns index of builtin application. If it is not found then it + * returns -1 (ERROR) and sets errno appropriately. * - * Implementation within drivers/bchsbin ****************************************************************************/ -EXTERN int exec_nuttapp(FAR const char *appname, FAR const char *argv[]); +EXTERN int nuttapp_isavail(FAR const char *appname); + /**************************************************************************** - * Name: execute a nutt shell command + * Name: get name of built-in application * * Description: - * Invokes an application that is either: - * - invokes a nsh script or directly invoke: - * - system application list, registerred via XXXX - * - resides in a file system compiled/linked in NXFLAT model - * - resides in a non-executable file-system, which is loaded - * into the memory first and then executed. + * Returns pointer to a name of built-in application pointed by the + * index. * * Input Parameter: - * Sheel command. + * index, from 0 and on ... * * Returned Value: - * Zero on success or -1 on error with errno set. + * Returns valid pointer pointing to the app name if index is valid. + * Otherwise NULL is returned. * - * TODO: move this command to the stdlib.h (?) and - * merge implementation with the nuttshell sh command ****************************************************************************/ -EXTERN FAR int system(const char *command); +EXTERN const char * nuttapp_getname(int index); + + +/**************************************************************************** + * Name: execute builtin NuttX application + * + * Description: + * Executes builtin application registerred during compile time. + * New application is run in a separate task context (and thread). + * + * Input Parameter: + * filename - Name of the linked-in binary to be started. + * argv - Argument list + * + * Returned Value: + * This is an end-user function, so it follows the normal convention: + * Returns the PID of the exec'ed module. On failure, it.returns + * -1 (ERROR) and sets errno appropriately. + * + ****************************************************************************/ + +EXTERN int exec_nuttapp(FAR const char *appname, FAR const char *argv[]); + #undef EXTERN #if defined(__cplusplus) |