123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- /*
- * The Clear BSD License
- * Copyright (c) 2015, Freescale Semiconductor, Inc.
- * Copyright 2016-2017 NXP
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted (subject to the limitations in the disclaimer below) provided
- * that the following conditions are met:
- *
- * o Redistributions of source code must retain the above copyright notice, this list
- * of conditions and the following disclaimer.
- *
- * o Redistributions in binary form must reproduce the above copyright notice, this
- * list of conditions and the following disclaimer in the documentation and/or
- * other materials provided with the distribution.
- *
- * o Neither the name of the copyright holder nor the names of its
- * contributors may be used to endorse or promote products derived from this
- * software without specific prior written permission.
- *
- * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #ifndef _FSL_SHELL_H_
- #define _FSL_SHELL_H_
- #include "fsl_common.h"
- /*!
- * @addtogroup SHELL
- * @{
- */
- /*******************************************************************************
- * Definitions
- ******************************************************************************/
- /*! @brief Macro to set on/off history feature. */
- #ifndef SHELL_USE_HISTORY
- #define SHELL_USE_HISTORY (0U)
- #endif
- /*! @brief Macro to set on/off history feature. */
- #ifndef SHELL_SEARCH_IN_HIST
- #define SHELL_SEARCH_IN_HIST (1U)
- #endif
- /*! @brief Macro to select method stream. */
- #ifndef SHELL_USE_FILE_STREAM
- #define SHELL_USE_FILE_STREAM (0U)
- #endif
- /*! @brief Macro to set on/off auto-complete feature. */
- #ifndef SHELL_AUTO_COMPLETE
- #define SHELL_AUTO_COMPLETE (1U)
- #endif
- /*! @brief Macro to set console buffer size. */
- #ifndef SHELL_BUFFER_SIZE
- #define SHELL_BUFFER_SIZE (64U)
- #endif
- /*! @brief Macro to set maximum arguments in command. */
- #ifndef SHELL_MAX_ARGS
- #define SHELL_MAX_ARGS (8U)
- #endif
- /*! @brief Macro to set maximum count of history commands. */
- #ifndef SHELL_HIST_MAX
- #define SHELL_HIST_MAX (3U)
- #endif
- /*! @brief Macro to set maximum count of commands. */
- #ifndef SHELL_MAX_CMD
- #define SHELL_MAX_CMD (20U)
- #endif
- /*! @brief Macro to bypass arguments check */
- #define SHELL_OPTIONAL_PARAMS (0xFF)
- /*! @brief Shell user send data callback prototype.*/
- typedef void (*send_data_cb_t)(uint8_t *buf, uint32_t len);
- /*! @brief Shell user receiver data callback prototype.*/
- typedef void (*recv_data_cb_t)(uint8_t *buf, uint32_t len);
- /*! @brief Shell user printf data prototype.*/
- typedef int (*printf_data_t)(const char *format, ...);
- /*! @brief A type for the handle special key. */
- typedef enum _fun_key_status
- {
- kSHELL_Normal = 0U, /*!< Normal key */
- kSHELL_Special = 1U, /*!< Special key */
- kSHELL_Function = 2U, /*!< Function key */
- } fun_key_status_t;
- /*! @brief Data structure for Shell environment. */
- typedef struct _shell_context_struct
- {
- char *prompt; /*!< Prompt string */
- enum _fun_key_status stat; /*!< Special key status */
- char line[SHELL_BUFFER_SIZE]; /*!< Consult buffer */
- uint8_t cmd_num; /*!< Number of user commands */
- uint8_t l_pos; /*!< Total line position */
- uint8_t c_pos; /*!< Current line position */
- #if SHELL_USE_FILE_STREAM
- FILE *STDOUT, *STDIN, *STDERR;
- #else
- send_data_cb_t send_data_func; /*!< Send data interface operation */
- recv_data_cb_t recv_data_func; /*!< Receive data interface operation */
- printf_data_t printf_data_func;
- #endif
- uint16_t hist_current; /*!< Current history command in hist buff*/
- uint16_t hist_count; /*!< Total history command in hist buff*/
- char hist_buf[SHELL_HIST_MAX][SHELL_BUFFER_SIZE]; /*!< History buffer*/
- bool exit; /*!< Exit Flag*/
- } shell_context_struct, *p_shell_context_t;
- /*! @brief User command function prototype. */
- typedef int32_t (*cmd_function_t)(p_shell_context_t context, int32_t argc, char **argv);
- /*! @brief User command data structure. */
- typedef struct _shell_command_context
- {
- const char *pcCommand; /*!< The command that is executed. For example "help". It must be all lower case. */
- char *pcHelpString; /*!< String that describes how to use the command. It should start with the command itself,
- and end with "\r\n". For example "help: Returns a list of all the commands\r\n". */
- const cmd_function_t
- pFuncCallBack; /*!< A pointer to the callback function that returns the output generated by the command. */
- uint8_t cExpectedNumberOfParameters; /*!< Commands expect a fixed number of parameters, which may be zero. */
- } shell_command_context_t;
- /*! @brief Structure list command. */
- typedef struct _shell_command_context_list
- {
- const shell_command_context_t *CommandList[SHELL_MAX_CMD]; /*!< The command table list */
- uint8_t numberOfCommandInList; /*!< The total command in list */
- } shell_command_context_list_t;
- /*******************************************************************************
- * API
- ******************************************************************************/
- #if defined(__cplusplus)
- extern "C" {
- #endif /* _cplusplus */
- /*!
- * @name Shell functional operation
- * @{
- */
- /*!
- * @brief Enables the clock gate and configures the Shell module according to the configuration structure.
- *
- * This function must be called before calling all other Shell functions.
- * Call operation the Shell commands with user-defined settings.
- * The example below shows how to set up the middleware Shell and
- * how to call the SHELL_Init function by passing in these parameters.
- * This is an example.
- * @code
- * shell_context_struct user_context;
- * SHELL_Init(&user_context, SendDataFunc, ReceiveDataFunc, "SHELL>> ");
- * @endcode
- * @param context The pointer to the Shell environment and runtime states.
- * @param send_cb The pointer to call back send data function.
- * @param recv_cb The pointer to call back receive data function.
- * @param prompt The string prompt of Shell
- */
- void SHELL_Init(p_shell_context_t context,
- send_data_cb_t send_cb,
- recv_data_cb_t recv_cb,
- printf_data_t shell_printf,
- char *prompt);
- /*!
- * @brief Shell register command.
- * @param command_context The pointer to the command data structure.
- * @return -1 if error or 0 if success
- */
- int32_t SHELL_RegisterCommand(const shell_command_context_t *command_context);
- /*!
- * @brief Main loop for Shell.
- * Main loop for Shell; After this function is called, Shell begins to initialize the basic variables and starts to
- * work.
- * @param context The pointer to the Shell environment and runtime states.
- * @return This function does not return until Shell command exit was called.
- */
- int32_t SHELL_Main(p_shell_context_t context);
- /* @} */
- #if defined(__cplusplus)
- }
- #endif
- /*! @}*/
- #endif /* _FSL_SHELL_H_ */
|