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_FPRINTF_H_ 8 : #define ZEPHYR_INCLUDE_SHELL_FPRINTF_H_ 9 : 10 : #include <zephyr/kernel.h> 11 : #include <stdbool.h> 12 : #include <stddef.h> 13 : 14 : #ifdef __cplusplus 15 : extern "C" { 16 : #endif 17 : 18 0 : typedef void (*shell_fprintf_fwrite)(const void *user_ctx, 19 : const char *data, 20 : size_t length); 21 : 22 0 : struct shell_fprintf_control_block { 23 0 : size_t buffer_cnt; 24 0 : bool autoflush; 25 : }; 26 : /** 27 : * @brief fprintf context 28 : */ 29 1 : struct shell_fprintf { 30 0 : uint8_t *buffer; 31 0 : size_t buffer_size; 32 0 : shell_fprintf_fwrite fwrite; 33 0 : const void *user_ctx; 34 0 : struct shell_fprintf_control_block *ctrl_blk; 35 : }; 36 : 37 : /** 38 : * @brief Macro for defining shell_fprintf instance. 39 : * 40 : * @param _name Instance name. 41 : * @param _user_ctx Pointer to user data. 42 : * @param _buf Pointer to output buffer 43 : * @param _size Size of output buffer. 44 : * @param _autoflush Indicator if buffer shall be automatically flush. 45 : * @param _fwrite Pointer to function sending data stream. 46 : */ 47 : #define Z_SHELL_FPRINTF_DEFINE(_name, _user_ctx, _buf, _size, \ 48 : _autoflush, _fwrite) \ 49 : static struct shell_fprintf_control_block \ 50 : _name##_shell_fprintf_ctx = { \ 51 : .autoflush = _autoflush, \ 52 : .buffer_cnt = 0 \ 53 : }; \ 54 : static const struct shell_fprintf _name = { \ 55 : .buffer = _buf, \ 56 : .buffer_size = _size, \ 57 : .fwrite = _fwrite, \ 58 : .user_ctx = _user_ctx, \ 59 : .ctrl_blk = &_name##_shell_fprintf_ctx \ 60 : } 61 : 62 : /** 63 : * @brief fprintf like function which send formatted data stream to output. 64 : * 65 : * @param sh_fprintf fprintf instance. 66 : * @param fmt Format string. 67 : * @param args List of parameters to print. 68 : */ 69 : void z_shell_fprintf_fmt(const struct shell_fprintf *sh_fprintf, 70 : char const *fmt, va_list args); 71 : 72 : /** 73 : * @brief function flushing data stored in io_buffer. 74 : * 75 : * @param sh_fprintf fprintf instance 76 : */ 77 : void z_shell_fprintf_buffer_flush(const struct shell_fprintf *sh_fprintf); 78 : 79 : #ifdef __cplusplus 80 : } 81 : #endif 82 : 83 : #endif /* ZEPHYR_INCLUDE_SHELL_FPRINTF_H_ */