Fix for x86_64 build fail
[platform/upstream/connectedhomeip.git] / src / lib / shell / streamer_zephyr.cpp
1 /*
2  *
3  *    Copyright (c) 2020 Project CHIP Authors
4  *
5  *    Licensed under the Apache License, Version 2.0 (the "License");
6  *    you may not use this file except in compliance with the License.
7  *    You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *    Unless required by applicable law or agreed to in writing, software
12  *    distributed under the License is distributed on an "AS IS" BASIS,
13  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *    See the License for the specific language governing permissions and
15  *    limitations under the License.
16  */
17
18 /**
19  *    @file
20  *      Source implementation of an input / output stream for zehpyr targets.
21  */
22
23 #include "shell.h"
24
25 #include <cassert>
26
27 #if CONFIG_SHELL
28 #include <shell/shell.h>
29 #include <shell/shell_uart.h>
30 #else
31 #include <console/console.h>
32 #endif
33
34 namespace chip {
35 namespace Shell {
36 namespace {
37
38 #if CONFIG_SHELL
39
40 // NOTE:
41 // We assume that if Zephyr shell is enabled it will be responsible for reading and parsing
42 // a command line. Therefore, we only have to provide implentation for streamer_write() and
43 // may omit streamer_read() part.
44
45 int streamer_zephyr_init(streamer_t * streamer)
46 {
47     ARG_UNUSED(streamer);
48     return 0;
49 }
50
51 ssize_t streamer_zephyr_read(streamer_t * streamer, char * buffer, size_t length)
52 {
53     ARG_UNUSED(streamer);
54     return 0;
55 }
56
57 ssize_t streamer_zephyr_write(streamer_t * streamer, const char * buffer, size_t length)
58 {
59     ARG_UNUSED(streamer);
60     for (size_t i = 0; i < length; ++i)
61         // TODO: Don't assume that UART backend is used.
62         shell_fprintf(shell_backend_uart_get_ptr(), SHELL_NORMAL, "%c", buffer[i]);
63     return length;
64 }
65
66 #else // CONFIG_SHELL
67
68 int streamer_zephyr_init(streamer_t * streamer)
69 {
70     ARG_UNUSED(streamer);
71     return console_init();
72 }
73
74 ssize_t streamer_zephyr_read(streamer_t * streamer, char * buffer, size_t length)
75 {
76     ARG_UNUSED(streamer);
77     const ssize_t rc = console_read(nullptr, buffer, length);
78     return rc >= 0 ? rc : 0;
79 }
80
81 ssize_t streamer_zephyr_write(streamer_t * streamer, const char * buffer, size_t length)
82 {
83     ARG_UNUSED(streamer);
84     size_t written = 0;
85
86     while (written < length)
87     {
88         const ssize_t rc = console_write(nullptr, buffer + written, length - written);
89         if (rc <= 0) // error
90             break;
91         written += static_cast<size_t>(rc);
92     }
93
94     return written;
95 }
96
97 #endif // CONFIG_SHELL
98
99 static streamer_t streamer_zephyr = {
100     .init_cb  = streamer_zephyr_init,
101     .read_cb  = streamer_zephyr_read,
102     .write_cb = streamer_zephyr_write,
103 };
104 } // namespace
105
106 streamer_t * streamer_get(void)
107 {
108     return &streamer_zephyr;
109 }
110
111 } // namespace Shell
112 } // namespace chip