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_ */
|