@@ -2660,6 +2660,7 @@ bool WS2812FX::deserializeMap(uint8_t n) {
26602660 // DEBUG_PRINTF(" (\"width\": %s) ", fileName)
26612661
26622662 memset (fileName, 0 , sizeof (fileName)); // clear old buffer
2663+ f.seek (0 ); // rewind to start
26632664 f.find (" \" height\" :" );
26642665 f.readBytesUntil (' \n ' , fileName, sizeof (fileName)-1 );
26652666 uint16_t maxHeight = atoi (cleanUpName (fileName));
@@ -2677,7 +2678,7 @@ bool WS2812FX::deserializeMap(uint8_t n) {
26772678 #endif
26782679 }
26792680
2680- USER_PRINTF (" deserializeMap %d x %d\n " , Segment::maxWidth, Segment::maxHeight);
2681+ DEBUG_PRINTF (" deserializeMap %d x %d\n " , Segment::maxWidth, Segment::maxHeight);
26812682
26822683 // WLEDMM recreate customMappingTable if more space needed
26832684 if (Segment::maxWidth * Segment::maxHeight > customMappingTableSize) {
@@ -2707,21 +2708,27 @@ bool WS2812FX::deserializeMap(uint8_t n) {
27072708 // WLEDMM reset mapping table before loading
27082709 // memset(customMappingTable, 0xFF, customMappingTableSize * sizeof(uint16_t)); // FFFF = no pixel
27092710 for (unsigned i=0 ; i<customMappingTableSize; i++) customMappingTable[i]=i; // "neutral" 1:1 mapping
2710-
27112711 // WLEDMM: find the map values
2712+ f.seek (0 ); // rewind to start
27122713 f.find (" \" map\" :" );
27132714 f.readBytesUntil (' [' , fileName, sizeof (fileName)-1 ); // drop everything until "["
27142715 uint16_t i=0 ;
2716+ bool endOfArray = false ;
27152717 do { // for each element in the array
2716- int mapi = f.readStringUntil (' ,' ).toInt ();
2717- // USER_PRINTF(", %d(%d)", mapi, i);
2718+ String entry = f.readStringUntil (' ,' );
2719+ int mapi = entry.toInt ();
2720+ // DEBUG_PRINTF("%c %d(%d)", i>0?',':' ', mapi, i);
27182721 if (i < customMappingSize) customMappingTable[i++] = (uint16_t ) (mapi<0 ? 0xFFFFU : mapi); // WLEDMM do not write past array bounds
2719- } while (f.available () && (i < customMappingSize));
2722+ endOfArray = entry.indexOf (" ]" ) >= 0 ; // if we hit "]", stop reading
2723+ } while (f.available () && (i < customMappingSize) && !endOfArray);
2724+ // DEBUG_PRINTLN("");
27202725
27212726 loadedLedmap = n;
27222727 f.close ();
27232728
2724- USER_PRINTF (" Custom ledmap: %d size=%d\n " , loadedLedmap, customMappingSize);
2729+ if ((customMappingTable != nullptr ) && (customMappingSize>0 )) {
2730+ USER_PRINTF (PSTR (" Ledmap #%d read. Size=%d (%d x %d); %d items found.\n " ), loadedLedmap, customMappingSize, Segment::maxWidth, Segment::maxHeight, i);
2731+ }
27252732 #ifdef WLED_DEBUG_MAPS
27262733 for (uint16_t j=0 ; j<customMappingSize; j++) { // fixing a minor warning: declaration of 'i' shadows a previous local
27272734 if (!(j%Segment::maxWidth)) DEBUG_PRINTLN ();
0 commit comments