FastLED 3.10.8
Loading...
Searching...
No Matches
serial.h
Go to the documentation of this file.
1// Arduino-compatible Serial API for FastLED
2// Provides a familiar interface for serial I/O across all platforms
3
4#pragma once
5
6#include "fl/stl/has_include.h" // IWYU pragma: keep
7
8#include "fl/stl/stdint.h"
9#include "fl/stl/cstddef.h"
10#include "fl/stl/cstdio.h" // for fl::serial_begin
11#include "fl/stl/stdio.h" // for fl::snprintf
12#include "fl/stl/type_traits.h" // for enable_if and is_multi_byte_integer
13#include "fl/stl/noexcept.h"
14
15namespace fl {
16
41public:
52 void begin(u32 baudRate = 115200) FL_NO_EXCEPT { fl::serial_begin(baudRate); }
53
59 void end() FL_NO_EXCEPT;
60
66
73 int read() FL_NO_EXCEPT;
74
81 int peek() FL_NO_EXCEPT;
82
88 size_t write(u8 byte) FL_NO_EXCEPT;
89
96 size_t write(const u8* buffer, size_t size) FL_NO_EXCEPT;
97
103 size_t print(const char* str) FL_NO_EXCEPT;
104
110 size_t print(int value) FL_NO_EXCEPT;
111
117 size_t print(long value) FL_NO_EXCEPT;
118
125 template<typename T>
126 typename fl::enable_if<fl::is_multi_byte_integer<T>::value &&
127 !fl::is_signed<T>::value,
128 size_t>::type
130
136 size_t println(const char* str) FL_NO_EXCEPT;
137
142 size_t println() FL_NO_EXCEPT;
143
149 size_t println(int value) FL_NO_EXCEPT;
150
156 size_t println(long value) FL_NO_EXCEPT;
157
164 template<typename T>
165 typename fl::enable_if<fl::is_multi_byte_integer<T>::value &&
166 !fl::is_signed<T>::value,
167 size_t>::type
169
184 template<typename... Args>
185 size_t printf(const char* format, Args... args) FL_NO_EXCEPT; // ok snprintf — method routes through fl::snprintf at line 284
186
195 bool flush(u32 timeoutMs = 1000) FL_NO_EXCEPT;
196
203 explicit operator bool() const FL_NO_EXCEPT;
204
211 void setTimeout(u32 timeoutMs) FL_NO_EXCEPT;
212
219 fl::string readString() FL_NO_EXCEPT;
220
229 fl::string readStringUntil(char delimiter) FL_NO_EXCEPT;
230
239 size_t readBytes(u8* buffer, size_t length) FL_NO_EXCEPT;
240
251 size_t readBytesUntil(char delimiter, u8* buffer, size_t length) FL_NO_EXCEPT;
252
260 long parseInt() FL_NO_EXCEPT;
261
269 float parseFloat() FL_NO_EXCEPT;
270
271private:
272 u32 mTimeoutMs = 1000; // Default 1 second timeout
273};
274
275// ============================================================================
276// Template Implementations
277// ============================================================================
278
279
280
281template<typename... Args>
282inline size_t SerialPort::printf(const char* format, Args... args) FL_NO_EXCEPT {
283 if (!format) {
284 return 0;
285 }
286
287 // Format into a fixed-size buffer using fl::snprintf
288 char buffer[256]; // Maximum formatted string length
289 int len = fl::snprintf(buffer, sizeof(buffer), format, args...);
290
291 if (len < 0) {
292 return 0; // Formatting error
293 }
294
295 // Delegate to print() method
296 return print(buffer);
297}
298
299// Global Serial object (Arduino-compatible)
300// FL_MAYBE_UNUSED allows compiler to elide if not used
302
303} // namespace fl
304
305// Define Serial as fl::fl_serial ONLY when Arduino is not available
306// When Arduino.h exists, Serial remains the Arduino Serial object
307// When Arduino.h doesn't exist, Serial is defined as fl::fl_serial for convenience
308#if !FL_HAS_INCLUDE(<Arduino.h>)
309#define Serial fl::fl_serial
310#endif
size_t print(const char *str) FL_NO_EXCEPT
Print string to serial output.
fl::string readString() FL_NO_EXCEPT
Read all available bytes into a string.
size_t readBytes(u8 *buffer, size_t length) FL_NO_EXCEPT
Read fixed number of bytes into buffer.
void begin(u32 baudRate=115200) FL_NO_EXCEPT
Initialize serial communication.
Definition serial.h:52
size_t write(u8 byte) FL_NO_EXCEPT
Write single byte to serial output.
void end() FL_NO_EXCEPT
Close serial communication.
void setTimeout(u32 timeoutMs) FL_NO_EXCEPT
Set timeout for read operations.
size_t printf(const char *format, Args... args) FL_NO_EXCEPT
Print formatted string to serial output (printf-style)
Definition serial.h:282
size_t readBytesUntil(char delimiter, u8 *buffer, size_t length) FL_NO_EXCEPT
Read bytes until delimiter is found.
Arduino-compatible Serial class for cross-platform serial I/O.
Definition serial.h:40
fl::UISlider length("Length", 1.0f, 0.0f, 1.0f, 0.01f)
unsigned char u8
Definition stdint.h:131
u8 u8 fract8 blur_amount FL_NO_EXCEPT
Definition blur.h:186
void print(const char *str) FL_NO_EXCEPT
constexpr int type_rank< T >::value
int snprintf(char *buffer, fl::size size, const char *format) FL_NO_EXCEPT
SerialPort fl_serial
bool readStringUntil(sstream &out, char delimiter, char skipChar, fl::optional< u32 > timeoutMs) FL_NO_EXCEPT
int parseInt(const char *str, fl::size len) FL_NO_EXCEPT
Parse an integer from a character buffer.
void serial_begin(u32 baudRate) FL_NO_EXCEPT
fl::string format(const char *fmt) FL_NO_EXCEPT
Format with no arguments.
Definition format.h:439
void printf(const char *format) FL_NO_EXCEPT
int read() FL_NO_EXCEPT
bool flush(u32 timeoutMs) FL_NO_EXCEPT
void println(const char *str) FL_NO_EXCEPT
int available() FL_NO_EXCEPT
float parseFloat(const char *str, fl::size len) FL_NO_EXCEPT
Parse a floating point number from a character buffer.
int peek() FL_NO_EXCEPT
Base definition for an LED controller.
corkscrew_args args
Definition old.h:149
#define FL_MAYBE_UNUSED