roo_io
API Documentation for roo_io
Loading...
Searching...
No Matches
uart_output_stream.cpp
Go to the documentation of this file.
1#if (defined ESP_PLATFORM || defined ROO_TESTING)
2
4
5#include "driver/uart.h"
6#ifndef ROO_TESTING
7#include "hal/uart_ll.h"
8#endif
9
10namespace roo_io {
11
12size_t Esp32UartOutputStream::tryWrite(const byte* buf, size_t count) {
13 if (!isOpen() || count == 0) return 0;
16 if (count == 0) return 0;
17 int result = uart_write_bytes(port_, (const char*)buf, count);
18 if (result < 0) {
19 status_ = roo_io::kWriteError;
20 return 0;
21 }
22 return result;
23}
24
25size_t Esp32UartOutputStream::write(const byte* buf, size_t count) {
26 if (!isOpen() || count == 0) return 0;
29 if (count == 0) ++count; // Force at least one byte to be written.
30 int result = uart_write_bytes(port_, (const char*)buf, count);
31 if (result < 0) {
32 status_ = roo_io::kWriteError;
33 return 0;
34 }
35 return result;
36}
37
38size_t Esp32UartOutputStream::writeFully(const byte* buf, size_t count) {
39 if (!isOpen() || count == 0) return 0;
40 int result = uart_write_bytes(port_, (const char*)buf, count);
41 if (result < 0) {
42 status_ = roo_io::kWriteError;
43 return 0;
44 }
45 return result;
46}
47
48void Esp32UartOutputStream::flush() {
49 // No-op.
50}
51
52void Esp32UartOutputStream::close() {
53 if (status_ == kOk) {
54 status_ = kClosed;
55 }
56}
57
58size_t Esp32UartOutputStream::available_for_write() const {
59#ifdef ROO_TESTING
60 return 64; // Arbitrary large number for testing.
61#else
63 size_t tx_ringbuf_available = 0;
65 available = tx_ringbuf_available == 0 ? available : tx_ringbuf_available;
66 }
67 return available;
68#endif
69}
70
71} // namespace roo_io
72
73#endif // (defined ESP_PLATFORM || defined ROO_TESTING)
Definition byte.h:6
roo::basic_string_view< CharT, Traits > basic_string_view
Definition string_view.h:8
size_t count
Definition compare.h:45
@ kOk
Definition status.h:8
@ kClosed
Definition status.h:10
@ kWriteError
Definition status.h:15