zephyr/samples/subsys/shell/shell_module
Alberto Escolar Piedras 2f2a91a8db samples/*/*shell: filter test with shell harness on bsim targets
The shell harness expects the UART can be routed to stdin/out on POSIX
arch based targets, but this is not the case for the bsim targets (at
least not yet, and not using the native_posix UART configuration option)

This causes these tests to fail timing out in CI => let's filter these
platforms by now.

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2025-02-14 08:45:04 +01:00
..
boards
src samples: subsys: shell: shell_module: Incorrect help message of sub_cmd1 2025-01-22 08:08:12 +01:00
bt.overlay
CMakeLists.txt
Kconfig
overlay-bt.conf
overlay-usb.conf samples: disable CDC ACM logging 2024-10-08 15:45:23 +02:00
prj_getopt.conf
prj_login.conf
prj_minimal_rtt.conf
prj_minimal.conf
prj.conf
README.rst
sample.yaml samples/*/*shell: filter test with shell harness on bsim targets 2025-02-14 08:45:04 +01:00
shell_module.robot
test_shell.yml samples: shell: use shell harness 2025-02-08 08:13:46 +01:00
usb.overlay

.. zephyr:code-sample:: shell-module
   :name: Custom Shell module
   :relevant-api: shell_api

   Register shell commands using the Shell API

Overview
********

This is a simple application demonstrating how to write and register commands
using the :ref:`Shell API <shell_api>`:

Register Static commands
   ``version`` is a static command that prints the kernel version.

Conditionally Register commands
   ``login`` and ``logout`` are conditionally registered commands depending
   on :kconfig:option:`CONFIG_SHELL_START_OBSCURED`.

Register Dynamic commands
   See ``dynamic`` command and :zephyr_file:`samples/subsys/shell/shell_module/src/dynamic_cmd.c`
   for details on how dynamic commands are implemented.

Register Dictionary commands
   ``dictionary`` implements subsect of dictionary commands.

Set a Bypass callback
   ``bypass`` implements the bypass callback.

Set a Login command
   ``login`` and ``logout`` implement the login and logout mechanism, respectively.

Obscure user-input with asterisks
   ``login`` and ``logout`` implement the feature of enabling and disabling
   this functionality, respectively.

Requirements
************

* A target configured with the shell interface, exposed through any of
  its :ref:`backends <backends>`.

Building and Running
********************

This sample can be found under :zephyr_file:`samples/subsys/shell/shell_module`
in the Zephyr tree.

The sample can be built for several platforms.

Emulation Targets
=================

The sample may run on emulation targets. The following commands build the
application for the qemu_x86.

.. zephyr-app-commands::
   :zephyr-app: samples/subsys/shell/shell_module
   :host-os: unix
   :board: qemu_x86
   :goals: run
   :compact:

After running the application, the console displays the shell interface, and
shows the shell prompt, at which point the user may start the interaction.

On-Hardware
===========

.. zephyr-app-commands::
   :zephyr-app: samples/subsys/shell/shell_module
   :host-os: unix
   :board: nrf52840dk/nrf52840
   :goals: flash
   :compact:

Sample Output
*************

.. code-block:: console

   uart:~$
     bypass              clear               date
     demo                device              devmem
     dynamic             help                history
     kernel              log                 log_test
     rem                 resize              retval
     section_cmd         shell               shell_uart_release
     stats               version
   uart:~$ demo
   demo - Demo commands
   Subcommands:
     dictionary  : Dictionary commands
     hexdump     : Hexdump params command.
     params      : Print params command.
     ping        : Ping command.
     board       : Show board name command.
   uart:~$ dynamic
   dynamic - Demonstrate dynamic command usage.
   Subcommands:
     add      : Add a new dynamic command.
               Example usage: [ dynamic add test ] will add a dynamic command
               'test'.
               In this example, command name length is limited to 32 chars. You can
               add up to 20 commands. Commands are automatically sorted to ensure
               correct shell completion.
     execute  : Execute a command.
     remove   : Remove a command.
     show     : Show all added dynamic commands.
   uart:~$

Details on Shell Subsystem
==========================

For more details on the Shell subsystem, check the general :ref:`Shell documentation <shell_api>`.