370 {
371
372#if FASTLED_NO_JSON
373 FL_WARN(
"ScreenMap::toJson called with FASTLED_NO_JSON");
374 return;
375#else
376 if (!doc) {
377 FL_WARN(
"ScreenMap::toJson called with nullptr doc");
378 return;
379 }
380
381
382
383
384
385
386
387
388
390
393
394
395
396 static const char *const kPalette[] = {
397 "#3b82f6", "#10b981", "#f59e0b", "#ef4444",
398 "#a855f7", "#06b6d4", "#ec4899", "#84cc16",
399 };
400 constexpr size_t kPaletteSize = sizeof(kPalette) / sizeof(kPalette[0]);
401
402 size_t idx = 0;
403 for (const auto& kv : segmentMaps) {
404 if (kv.second.getLength() == 0) {
405 FL_WARN(
"ScreenMap::toJson called with empty segment: " << fl::string(kv.first));
406 continue;
407 }
408
409 const auto& name = kv.first;
410 const auto& segment = kv.second;
411 const float diameter = segment.getDiameter();
412
414 for (u16 i = 0; i < segment.getLength(); i++) {
415 xArray.
push_back(fl::json(
static_cast<double>(segment[i].
x)));
416 }
418 for (u16 i = 0; i < segment.getLength(); i++) {
419 yArray.
push_back(fl::json(
static_cast<double>(segment[i].
y)));
420 }
421
423 groupObj.
set(
"color", fl::json(fl::string(kPalette[idx % kPaletteSize])));
424 groupsObj.
set(name, groupObj);
425
427 segmentObj.
set(
"id", fl::json(fl::string(name)));
428 segmentObj.
set(
"pin", fl::json(fl::string(
"pin1")));
429 segmentObj.
set(
"group", fl::json(fl::string(name)));
430 segmentObj.
set(
"x", xArray);
431 segmentObj.
set(
"y", yArray);
432 segmentObj.
set(
"diameter", fl::json(
static_cast<double>(diameter)));
434
435 idx++;
436 }
437
438 doc->
set(
"version", fl::json(
static_cast<double>(2)));
439 doc->
set(
"groups", groupsObj);
440 doc->
set(
"segments", segmentsArr);
441
443 FL_WARN(
"ScreenMap::toJson generated JSON: " << debugStr);
444#endif
445}
void push_back(const json &value) FL_NOEXCEPT
fl::string to_string() const FL_NOEXCEPT
void set(const fl::string &key, const json &value) FL_NOEXCEPT
static json object() FL_NOEXCEPT
static json array() FL_NOEXCEPT