From c195529615700711b262e9b5145fd719a5dfa633 Mon Sep 17 00:00:00 2001 From: Jakub Rzeszutko Date: Wed, 7 Oct 2020 10:30:34 +0200 Subject: [PATCH] shell: documentation update Updating documentation with dictionary commands description. Signed-off-by: Jakub Rzeszutko --- doc/reference/shell/images/dict_cmd.png | Bin 0 -> 39492 bytes doc/reference/shell/index.rst | 55 +++++++++++++++++++++++- include/shell/shell.h | 14 ++++-- 3 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 doc/reference/shell/images/dict_cmd.png diff --git a/doc/reference/shell/images/dict_cmd.png b/doc/reference/shell/images/dict_cmd.png new file mode 100644 index 0000000000000000000000000000000000000000..b5670b1cad61e90ea07d0c99e436d5f402e0cb87 GIT binary patch literal 39492 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 z zh-PQI>4`Vq9-AG;C+&4kY%HO8cEB2SBdQZ*TY!(T^BWOIY=B25HzY?QY?_8Wm zN+m4;$8^G077}W(Tt@L2nr>Zx8m~116^`R4l>s<9P(=u5{O1!=U6d^d=ah3&ELk>x zlhIE4k!aK&bBC7Y!j2KpBEcP^%B^(;zmvVG^qfzf+urWSQl{|>b_+UGaJZUagsno~ zxC$8Z(NlzU0LJwgt#EJ*Y``%$Omss}=AYW#AdvxZ&7_7s^@Kr2voHXM-n3euV<#~+ zQjo0j%+q$hoH>z~ycU)g>Qz%Z6E-~llMsE9(|LCKC=?W)-dJm2HPclF`8WSPVa#L z0=j)Rd4`F1mtx!42&g$MU%K1O)C0z`YEeTb%=P`{-j($2LgivgjjL}`sFkIK*g%On`O`;bK!BX^k;^O`?bpd^B3XOHP5Z9``$; zQwF`b?3V_!2zsQ53$OOpiAN2knV{udnnUnh?xw$_o9 Trx{a!GSHia3B 0): Number and syntax does not need to be known during compile time. Created in the software module. + Creating commands ================= @@ -100,6 +105,8 @@ Use the following macros for adding shell commands: time expression is non-zero. * :c:macro:`SHELL_STATIC_SUBCMD_SET_CREATE` - Create a static subcommands array. +* :c:macro:`SHELL_SUBCMD_DICT_SET_CREATE` - Create a dictionary subcommands + array. * :c:macro:`SHELL_DYNAMIC_CMD_CREATE` - Create a dynamic subcommands array. Commands can be created in any file in the system that includes @@ -131,6 +138,52 @@ subcommands. Example implementation can be found under following location: :zephyr_file:`samples/subsys/shell/shell_module/src/main.c`. +Dictionary commands +=================== +This is a special kind of static commands. Dictionary commands can be used +every time you want to use a pair: (string <-> corresponding data) in +a command handler. The string is usually a verbal description of a given data. +The idea is to use the string as a command syntax that can be prompted by the +shell and corresponding data can be used to process the command. + +Let's use an example. Suppose you created a command to set an ADC gain. +It is a perfect place where a dictionary can be used. The dictionary would +be a set of pairs: (string: gain_value, int: value) where int value could +be used with the ADC driver API. + +Abstract code for this task would look like this: + +.. code-block:: c + + static int gain_cmd_handler(const struct shell *shell, + size_t argc, char **argv, void *data) + { + int gain; + + /* data is a value corresponding to called command syntax */ + gain = (int)data; + adc_set_gain(gain); + + shell_print(shell, "ADC gain set to: %s\n" + "Value send to ADC driver: %d", + argv[0], + gain); + + return 0; + } + + SHELL_SUBCMD_DICT_SET_CREATE(sub_gain, gain_cmd_handler, + (gain_1, 1), (gain_2, 2), (gain_1_2, 3), (gain_1_4, 4) + ); + SHELL_CMD_REGISTER(gain, &sub_gain, "Set ADC gain", NULL); + + +This is how it would look like in the shell: + +.. image:: images/dict_cmd.png + :align: center + :alt: Dictionary commands example. + Dynamic commands ---------------- diff --git a/include/shell/shell.h b/include/shell/shell.h index 729627133b0..7db6eba3b53 100644 --- a/include/shell/shell.h +++ b/include/shell/shell.h @@ -429,22 +429,28 @@ static int UTIL_CAT(cmd_dict_, GET_ARG_N(1, __DEBRACKET _data))( \ /** * @brief Initializes shell dictionary commands. * + * This is a special kind of static commands. Dictionary commands can be used + * every time you want to use a pair: (string <-> corresponding data) in + * a command handler. The string is usually a verbal description of a given + * data. The idea is to use the string as a command syntax that can be prompted + * by the shell and corresponding data can be used to process the command. + * * @param[in] _name Name of the dictionary subcommand set * @param[in] _handler Command handler common for all dictionary commands. - * @see shell_dict_cmd_handler + * @see shell_dict_cmd_handler * @param[in] ... Dictionary pairs: (command_syntax, value). Value will be - * passed to the _handler as user data. + * passed to the _handler as user data. * * Example usage: * static int my_handler(const struct shell *shell, * size_t argc, char **argv, void *data) * { * int val = (int)data; - + * * shell_print(shell, "(syntax, value) : (%s, %d)", argv[0], val); * return 0; * } - + * * SHELL_SUBCMD_DICT_SET_CREATE(sub_dict_cmds, my_handler, * (value_0, 0), (value_1, 1), (value_2, 2), (value_3, 3) * );