56 this->service.setStream(&
stream);
59 virtual void begin(
unsigned long baudrate) {
60 service.send(SerialBegin);
67 service.send(SerialBegin);
74 service.send(SerialEnd);
79 virtual int available() {
80 if (read_buffer.available() > 0) {
81 return read_buffer.available();
84 service.send(SerialAvailable);
87 return service.receive16();
91 if (read_buffer.available() == 0) {
93 int len = readBytes(buffer, max_buffer_len);
94 read_buffer.write(buffer, len);
96 if (read_buffer.available() == 0) {
99 return read_buffer.read();
102 virtual size_t readBytes(
uint8_t* buffer,
size_t length) {
103 if (read_buffer.available() > 0) {
104 return read_buffer.read(buffer, length);
106 service.send(SerialRead);
110 int len = service.receive(buffer, length);
115 if (read_buffer.available() > 0) {
116 return read_buffer.peek();
118 service.send(SerialPeek);
120 return service.receive16();
124 if (write_buffer.availableToWrite() == 0) {
127 return write_buffer.write(
c);
130 virtual size_t write(
uint8_t* str,
size_t len) {
132 service.send(SerialWrite);
135 service.send(str, len);
137 return service.receive16();
143 while ((available = write_buffer.available()) > 0) {
144 uint8_t buffer[max_buffer_len];
145 write_buffer.read(buffer, min(available, max_buffer_len));
146 write(buffer, min(available, max_buffer_len));
149 int available = write_buffer.available();
152 write_buffer.read(buffer, available);
153 write(buffer, available);
156 service.send(SerialFlush);
161 operator bool() {
return service; }
167 static constexpr int max_buffer_len = 512;
169 int max_buffer_len = 512;
Provides a virtualized hardware communication service for SPI, I2C, I2S, and GPIO over a stream.
Definition HardwareService.h:115