@@ -2705,6 +2705,7 @@ bool WS2812FX::deserializeMap(uint8_t n) {
27052705 // DEBUG_PRINTF(" (\"width\": %s) ", fileName)
27062706
27072707 memset (fileName, 0 , sizeof (fileName)); // clear old buffer
2708+ f.seek (0 ); // rewind to start
27082709 f.find (" \" height\" :" );
27092710 f.readBytesUntil (' \n ' , fileName, sizeof (fileName)-1 );
27102711 uint16_t maxHeight = atoi (cleanUpName (fileName));
@@ -2722,7 +2723,7 @@ bool WS2812FX::deserializeMap(uint8_t n) {
27222723 #endif
27232724 }
27242725
2725- USER_PRINTF (" deserializeMap %d x %d\n " , Segment::maxWidth, Segment::maxHeight);
2726+ DEBUG_PRINTF (" deserializeMap %d x %d\n " , Segment::maxWidth, Segment::maxHeight);
27262727
27272728 // WLEDMM recreate customMappingTable if more space needed
27282729 if (Segment::maxWidth * Segment::maxHeight > customMappingTableSize) {
@@ -2752,20 +2753,27 @@ bool WS2812FX::deserializeMap(uint8_t n) {
27522753 // WLEDMM reset mapping table before loading
27532754 // memset(customMappingTable, 0xFF, customMappingTableSize * sizeof(uint16_t)); // FFFF = no pixel
27542755 for (unsigned i=0 ; i<customMappingTableSize; i++) customMappingTable[i]=i; // "neutral" 1:1 mapping
2755-
27562756 // WLEDMM: find the map values
2757- f.find (" \" map\" :[" );
2757+ f.seek (0 ); // rewind to start
2758+ f.find (" \" map\" :" );
2759+ f.readBytesUntil (' [' , fileName, sizeof (fileName)-1 ); // drop everything until "["
27582760 uint16_t i=0 ;
2761+ bool endOfArray = false ;
27592762 do { // for each element in the array
2760- int mapi = f.readStringUntil (' ,' ).toInt ();
2761- // USER_PRINTF(", %d(%d)", mapi, i);
2763+ String entry = f.readStringUntil (' ,' );
2764+ int mapi = entry.toInt ();
2765+ // DEBUG_PRINTF("%c %d(%d)", i>0?',':' ', mapi, i);
27622766 if (i < customMappingSize) customMappingTable[i++] = (uint16_t ) (mapi<0 ? 0xFFFFU : mapi); // WLEDMM do not write past array bounds
2763- } while (f.available () && (i < customMappingSize));
2767+ endOfArray = entry.indexOf (" ]" ) >= 0 ; // if we hit "]", stop reading
2768+ } while (f.available () && (i < customMappingSize) && !endOfArray);
2769+ // DEBUG_PRINTLN("");
27642770
27652771 loadedLedmap = n;
27662772 f.close ();
27672773
2768- USER_PRINTF (" Custom ledmap: %d size=%d\n " , loadedLedmap, customMappingSize);
2774+ if ((customMappingTable != nullptr ) && (customMappingSize>0 )) {
2775+ USER_PRINTF (PSTR (" Ledmap #%d read. Size=%d (%d x %d); %d items found.\n " ), loadedLedmap, customMappingSize, Segment::maxWidth, Segment::maxHeight, i);
2776+ }
27692777 #ifdef WLED_DEBUG_MAPS
27702778 for (uint16_t j=0 ; j<customMappingSize; j++) { // fixing a minor warning: declaration of 'i' shadows a previous local
27712779 if (!(j%Segment::maxWidth)) DEBUG_PRINTLN ();
0 commit comments