Line data Source code
1 0 : /* 2 : * Copyright (c) 2018 Nordic Semiconductor ASA 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_SHELL_HISTORY_H_ 8 : #define ZEPHYR_INCLUDE_SHELL_HISTORY_H_ 9 : 10 : #include <zephyr/kernel.h> 11 : #include <zephyr/sys/util.h> 12 : #include <zephyr/sys/dlist.h> 13 : #include <zephyr/sys/ring_buffer.h> 14 : #include <stdbool.h> 15 : 16 : #ifdef __cplusplus 17 : extern "C" { 18 : #endif 19 : 20 : 21 0 : struct shell_history { 22 0 : struct ring_buf *ring_buf; 23 0 : sys_dlist_t list; 24 0 : sys_dnode_t *current; 25 : }; 26 : 27 : /** 28 : * @brief Create shell history instance. 29 : * 30 : * @param _name History instance name. 31 : * @param _size Memory dedicated for shell history. 32 : */ 33 : #define Z_SHELL_HISTORY_DEFINE(_name, _size) \ 34 : static uint8_t __noinit __aligned(sizeof(void *)) \ 35 : _name##_ring_buf_data[_size]; \ 36 : static struct ring_buf _name##_ring_buf = \ 37 : { \ 38 : .size = _size, \ 39 : .buffer = _name##_ring_buf_data \ 40 : }; \ 41 : static struct shell_history _name = { \ 42 : .ring_buf = &_name##_ring_buf \ 43 : } 44 : 45 : 46 : /** 47 : * @brief Initialize shell history module. 48 : * 49 : * @param history Shell history instance. 50 : */ 51 : void z_shell_history_init(struct shell_history *history); 52 : 53 : /** 54 : * @brief Purge shell history. 55 : * 56 : * Function clears whole shell command history. 57 : * 58 : * @param history Shell history instance. 59 : * 60 : */ 61 : void z_shell_history_purge(struct shell_history *history); 62 : 63 : /** 64 : * @brief Exit history browsing mode. 65 : * 66 : * @param history Shell history instance. 67 : */ 68 : void z_shell_history_mode_exit(struct shell_history *history); 69 : 70 : /** 71 : * @brief Get next entry in shell command history. 72 : * 73 : * Function returns next (in given direction) stored line. 74 : * 75 : * @param[in] history Shell history instance. 76 : * @param[in] up Direction. 77 : * @param[out] dst Buffer where line is copied. 78 : * @param[in,out] len Buffer size (input), amount of copied 79 : * data (output). 80 : * @return True if remains in history mode. 81 : */ 82 : bool z_shell_history_get(struct shell_history *history, bool up, 83 : uint8_t *dst, uint16_t *len); 84 : 85 : /** 86 : * @brief Put line into shell command history. 87 : * 88 : * If history is full, oldest entry (or entries) is removed. 89 : * 90 : * @param history Shell history instance. 91 : * @param line Data. 92 : * @param len Data length. 93 : * 94 : */ 95 : void z_shell_history_put(struct shell_history *history, uint8_t *line, 96 : size_t len); 97 : 98 : /** 99 : * @brief Get state of shell history. 100 : * 101 : * @param history Shell history instance. 102 : * 103 : * @return True if in browsing mode. 104 : */ 105 : static inline bool z_shell_history_active(struct shell_history *history) 106 : { 107 : return (history->current) ? true : false; 108 : } 109 : 110 : #ifdef __cplusplus 111 : } 112 : #endif 113 : 114 : #endif /* ZEPHYR_INCLUDE_SHELL_HISTORY_H_ */