25 if (!outHeader || !outEnvelope) {
31 if (len < kHeaderBytes) {
34 if (data[0] != kMagic[0] || data[1] != kMagic[1] ||
35 data[2] != kMagic[2] || data[3] != kMagic[3]) {
38 const fl::u8 ver = data[4];
39 if (ver != kVersionV1) {
42 if (data[6] != 0 || data[7] != 0) {
45 const fl::u8 pixelFormat = data[5];
46 const fl::u32 jsonLen =
47 static_cast<fl::u32
>(data[8]) |
48 (
static_cast<fl::u32
>(data[9]) << 8) |
49 (
static_cast<fl::u32
>(data[10]) << 16) |
50 (
static_cast<fl::u32
>(data[11]) << 24);
53 if (jsonLen >
static_cast<fl::u32
>(kMaxJsonBytes)) {
56 if (jsonLen >
static_cast<fl::u32
>(len - kHeaderBytes)) {
59 const fl::size jsonLenSz =
static_cast<fl::size
>(jsonLen);
70 outHeader->version = ver;
71 outHeader->pixelFormat = pixelFormat;
72 outHeader->payloadOffset = kHeaderBytes + jsonLenSz;
73 *outEnvelope = parsed;
78 if (!name)
return false;
79 if (
fl::strcmp(name,
"frame_payload") == 0)
return true;
80 if (
fl::strcmp(name,
"payload") == 0)
return true;
bool has_value() const FL_NO_EXCEPT
static json parse(const fl::string &txt) FL_NO_EXCEPT
FastLED's Elegant JSON Library: fl::json
constexpr fl::size kHeaderBytes
constexpr fl::u8 kVersionV1
constexpr fl::size kMaxJsonBytes
constexpr fl::u8 kMagic[4]
bool parseHeaderAndEnvelope(const fl::u8 *data, fl::size len, ParsedHeader *outHeader, fl::json *outEnvelope) FL_NO_EXCEPT
bool sectionNameIsPayload(const char *name) FL_NO_EXCEPT
To reinterpret_cast_(const From &from) FL_NO_EXCEPT
int strcmp(const char *s1, const char *s2) FL_NO_EXCEPT
InputGamut g FL_NO_EXCEPT
Base definition for an LED controller.