.. _shell:

Shell
######

Overview
********

The Shell enables multiple subsystem to use and expose their shell interface
simultaneously.

Each subsystem can support shell functionality dynamically by its Kconfig file,
which enables or disables the shell usage for the subsystem.

Using shell commands
********************

Use one of the following formats:

Help commands
=============

``help``
 Prints the list of available modules.

``help MODULE_NAME``
 Prints the names of the available commands for the module.

``help MODULE_NAME COMMAND``
 Prints help for the module's command (the help describes the available
 module commands and required parameters).


Specific module's commands
==========================

A shell interface exposing subsystem features is a shell module, multiple
modules can be available at the same time.

``MODULE_NAME COMMAND``
 One of the available modules is "KERNEL", for `Kernel module commands`_.
 Information about registering a new module and its commands can be
 found in :c:macro:`SHELL_REGISTER` documentation.


Select module commands
======================

``select MODULE_NAME``
 Use this command when using the shell only for one module. After entering this
 command, you will not need to enter the module name in further commands. If
 the selected module has set a default shell prompt during its initialization,
 the prompt will be changed to that one. Otherwise, the prompt will be
 changed to the selected module's name to reflect the current module in use.

``select``
 Clears selected module. Restores prompt as well.


Kernel module commands
======================

When enabled through option :option:`CONFIG_KERNEL_SHELL`, the Kernel
shell module commands display useful kernel-specific information.

You can issue these Kernel module shell commands by specifying
the module and command::

   shell> kernel version

or by first selecting the kernel module, and then issuing the specific
command::

   shell> select kernel
   kernel> version

Here are the Kernel module shell commands:

``version``
 Displays the kernel version number

``uptime``
 Displays the system uptime in milliseconds

``cycles``
 Displays the current time (in cycles), as measured by the system’s hardware clock

``threads``
 Displays information about the running threads (if
 :option:`CONFIG_OBJECT_TRACING` and :option:`CONFIG_THREAD_MONITOR` are
 enabled).

``stacks``
 Displays size and use information about the main, idle, interrupt and system
 workqueue call stacks (if :option:`CONFIG_INIT_STACKS` is enabled)

Other commands
==============

``noprompt``
 This command will disable the shell prompt. The shell will still be fully
 functional, but the prompt will not be printed each time the shell expects a
 new command.

Shell configuration
*******************
There are two levels of configuration: Infrastructure level and Module level.

Infrastructure level
====================

The option :option:`CONFIG_CONSOLE_SHELL` enables the shell subsystem and enable the
default features of the shell subsystem.

Module/Subsystem level
======================
Each subsystem using the shell service should add a unique flag in its Kconfig file.

Example:

CONFIG_NET_SHELL=y

In the subsystem's code, the shell usage depends on this config parameter.
This subsystem specific flag should also depend on :option:`CONFIG_CONSOLE_SHELL` flag.

Configuration steps to add shell functionality to a module
==========================================================

 #. Check that :option:`CONFIG_CONSOLE_SHELL` is set to yes.
 #. Add the subsystem unique flag to its Kconfig file.

Writing a shell module
**********************

In order to support shell in your subsystem, the application must do the following:

#. Module configuration flag: Declare a new flag in your subsystem Kconfig file.
   It should depend on :option:`CONFIG_CONSOLE_SHELL` flag.

#. Module registration to shell: Add your shell identifier and register its
   callback functions in the shell database using :c:macro:`SHELL_REGISTER`.

Optionally, you can use one of the following API functions to override default
behavior and settings:

* :c:func:`shell_register_default_module`

* :c:func:`shell_register_prompt_handler`

In case of a sample applications as well as the test environment, you can choose to
set a default module in code level. In this case, the function
:c:func:`shell_register_default_module` should be called after calling SHELL_REGISTER in
application level.  If the function
:c:func:`shell_register_prompt_handler` was called as
well, the prompt will be changed to that one.  Otherwise, the prompt will be
changed to the selected module's name, in order to reflect the current module in
use.


.. note::

   Even if a default module was set in code level, it can be overwritten by
   "select" shell command.

You can use  :c:func:`shell_register_default_module` in the following cases:

* Use this command in case of using the shell only for one module.
  After entering this command, no need to enter module name in further
  commands.

* Use this function for shell backward compatibility.

More details on those optional functions can be found in
:ref:`shell_api_functions`.


.. _shell_api_functions:

Shell API Functions
*******************
.. doxygengroup:: _shell_api_functions
   :project: Zephyr
