| /* |
| * Copyright (c) 2018 Nordic Semiconductor ASA |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef SHELL_FPRINTF_H__ |
| #define SHELL_FPRINTF_H__ |
| |
| #include <zephyr.h> |
| #include <stdbool.h> |
| #include <stddef.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| typedef void (*shell_fprintf_fwrite)(const void *user_ctx, |
| const char *data, |
| size_t length); |
| |
| struct shell_fprintf_control_block { |
| size_t buffer_cnt; |
| bool autoflush; |
| }; |
| /** |
| * @brief fprintf context |
| */ |
| struct shell_fprintf { |
| uint8_t *buffer; |
| size_t buffer_size; |
| shell_fprintf_fwrite fwrite; |
| const void *user_ctx; |
| struct shell_fprintf_control_block *ctrl_blk; |
| }; |
| |
| /** |
| * @brief Macro for defining shell_fprintf instance. |
| * |
| * @param _name Instance name. |
| * @param _user_ctx Pointer to user data. |
| * @param _buf Pointer to output buffer |
| * @param _size Size of output buffer. |
| * @param _autoflush Indicator if buffer shall be automatically flush. |
| * @param _fwrite Pointer to function sending data stream. |
| */ |
| #define Z_SHELL_FPRINTF_DEFINE(_name, _user_ctx, _buf, _size, \ |
| _autoflush, _fwrite) \ |
| static struct shell_fprintf_control_block \ |
| _name##_shell_fprintf_ctx = { \ |
| .autoflush = _autoflush, \ |
| .buffer_cnt = 0 \ |
| }; \ |
| static const struct shell_fprintf _name = { \ |
| .buffer = _buf, \ |
| .buffer_size = _size, \ |
| .fwrite = _fwrite, \ |
| .user_ctx = _user_ctx, \ |
| .ctrl_blk = &_name##_shell_fprintf_ctx \ |
| } |
| |
| /** |
| * @brief fprintf like function which send formatted data stream to output. |
| * |
| * @param sh_fprintf fprintf instance. |
| * @param fmt Format string. |
| * @param args List of parameters to print. |
| */ |
| void z_shell_fprintf_fmt(const struct shell_fprintf *sh_fprintf, |
| char const *fmt, va_list args); |
| |
| /** |
| * @brief function flushing data stored in io_buffer. |
| * |
| * @param sh_fprintf fprintf instance |
| */ |
| void z_shell_fprintf_buffer_flush(const struct shell_fprintf *sh_fprintf); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* SHELL_FPRINTF_H__ */ |