/* * Copyright (c) 2018 Nordic Semiconductor ASA * * SPDX-License-Identifier: Apache-2.0 */ #ifndef SHELL_UTILS_H__ #define SHELL_UTILS_H__ #include #include #ifdef __cplusplus extern "C" { #endif #define SHELL_MSG_SPECIFY_SUBCOMMAND "Please specify a subcommand.\n" int32_t row_span_with_buffer_offsets_get(struct shell_multiline_cons *cons, uint16_t offset1, uint16_t offset2); int32_t column_span_with_buffer_offsets_get(struct shell_multiline_cons *cons, uint16_t offset1, uint16_t offset2); void shell_multiline_data_calc(struct shell_multiline_cons *cons, uint16_t buff_pos, uint16_t buff_len); static inline uint16_t shell_strlen(const char *str) { return str == NULL ? 0U : (uint16_t)strlen(str); } char shell_make_argv(size_t *argc, const char **argv, char *cmd, uint8_t max_argc); /** @brief Removes pattern and following space * */ void shell_pattern_remove(char *buff, uint16_t *buff_len, const char *pattern); /** @brief Get subcommand with given index from the root. * * @param parent Parent entry. Null to get root command from index. * @param idx Command index. * @param dloc Location used to write dynamic entry. * * @return Fetched command or null if command with that index does not exist. */ const struct shell_static_entry *shell_cmd_get( const struct shell_static_entry *parent, size_t idx, struct shell_static_entry *dloc); const struct shell_static_entry *shell_find_cmd( const struct shell_static_entry *parent, const char *cmd_str, struct shell_static_entry *dloc); /* @internal @brief Function returns pointer to a shell's subcommands array * for a level given by argc and matching command patter provided in argv. * * @param shell Entry. NULL for root entry. * @param argc Number of arguments. * @param argv Pointer to an array with arguments. * @param match_arg Subcommand level of last matching argument. * @param d_entry Shell static command descriptor. * @param only_static If true search only for static commands. * * @return Pointer to found command. */ const struct shell_static_entry *shell_get_last_command( const struct shell_static_entry *entry, size_t argc, const char *argv[], size_t *match_arg, struct shell_static_entry *dloc, bool only_static); int shell_command_add(char *buff, uint16_t *buff_len, const char *new_cmd, const char *pattern); const struct shell_static_entry *shell_root_cmd_find(const char *syntax); void shell_spaces_trim(char *str); static inline void transport_buffer_flush(const struct shell *shell) { shell_fprintf_buffer_flush(shell->fprintf_ctx); } void shell_cmd_trim(const struct shell *shell); static inline bool shell_in_select_mode(const struct shell *shell) { return shell->ctx->selected_cmd == NULL ? false : true; } #ifdef __cplusplus } #endif #endif /* SHELL_UTILS_H__ */