439 {
440
441#if FASTLED_NO_JSON
442 FL_WARN(
"ScreenMap::toJson called with FASTLED_NO_JSON");
443 return;
444#else
445 if (!doc) {
446 FL_WARN(
"ScreenMap::toJson called with nullptr doc");
447 return;
448 }
449
450
451
452
453
454
455
456
457
458
459
460
461
463
466
467
468
469 static const char *const kPalette[] = {
470 "#3b82f6", "#10b981", "#f59e0b", "#ef4444",
471 "#a855f7", "#06b6d4", "#ec4899", "#84cc16",
472 };
473 constexpr size_t kPaletteSize = sizeof(kPalette) / sizeof(kPalette[0]);
474
475 size_t idx = 0;
476 for (const auto& kv : segmentMaps) {
477 if (kv.second.getLength() == 0) {
478 FL_WARN(
"ScreenMap::toJson called with empty segment: %s", fl::string(kv.first));
479 continue;
480 }
481
482 const auto& name = kv.first;
483 const auto& segment = kv.second;
484 const float diameter = segment.getDiameter();
485
487 for (u16 i = 0; i < segment.getLength(); i++) {
489 }
491 for (u16 i = 0; i < segment.getLength(); i++) {
493 }
494
496 groupObj.
set(
"color", fl::json(fl::string(kPalette[idx % kPaletteSize])));
497 groupsObj.
set(name, groupObj);
498
500 segmentObj.
set(
"id", fl::json(fl::string(name)));
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518 segmentObj.
set(
"group", fl::json(fl::string(name)));
519 segmentObj.
set(
"x", xArray);
520 segmentObj.
set(
"y", yArray);
521
522
523
524
525
526
527
528
529
530
531 if (diameter > 0.0f) {
532 segmentObj.
set(
"diameter", fl::json(diameter));
533 }
535
536 idx++;
537 }
538
539 doc->
set(
"version", fl::json(
i64(2)));
540 doc->
set(
"groups", groupsObj);
541 doc->
set(
"segments", segmentsArr);
542
544 FL_WARN(
"ScreenMap::toJson generated JSON: %s", debugStr);
545#endif
546}
fl::string to_string() const FL_NO_EXCEPT
void set(const fl::string &key, const json &value) FL_NO_EXCEPT
void push_back(const json &value) FL_NO_EXCEPT
static json object() FL_NO_EXCEPT
static json array() FL_NO_EXCEPT