diff --git a/wled00/FX_2Dfcn.cpp b/wled00/FX_2Dfcn.cpp index 1452de7d..d9955d5b 100644 --- a/wled00/FX_2Dfcn.cpp +++ b/wled00/FX_2Dfcn.cpp @@ -51,8 +51,9 @@ void WS2812FX::setUpMatrix() { } } - // safety check - if (Segment::maxWidth * Segment::maxHeight > MAX_LEDS || Segment::maxWidth <= 1 || Segment::maxHeight <= 1) { + // safety check + // WLEDMM no chech on Segment::maxWidth * Segment::maxHeight > MAX_LEDS || + if (Segment::maxWidth <= 1 || Segment::maxHeight <= 1) { DEBUG_PRINTF("2D Bounds error. %d x %d\n", Segment::maxWidth, Segment::maxHeight); isMatrix = false; Segment::maxWidth = _length; @@ -158,7 +159,7 @@ void WS2812FX::setUpMatrix() { } else { // memory allocation error customMappingTableSize = 0; USER_PRINTLN(F("Ledmap alloc error.")); - isMatrix = false; + isMatrix = false; //WLEDMM does not like this done in teh background while end users are confused whats happened... panels = 0; panel.clear(); Segment::maxWidth = _length; diff --git a/wled00/data/index.js b/wled00/data/index.js index d448403e..6b836f1c 100644 --- a/wled00/data/index.js +++ b/wled00/data/index.js @@ -1129,14 +1129,13 @@ function populateNodes(i,n) //WLEDMM starts here nodesData = []; //WLEDMM reset nodes - var nodesDone = 0; function showPanel(panel) { return "(" + panel.x + "," + panel.y + ") - " + panel.w + "x" + panel.h + " " + (panel.b?1:0) + (panel.r?1:0) + (panel.v?1:0) + (panel.s?1:0); } function checkNode(nodeNr) { - // console.log(nodeNr, nodesData[nodeNr]); + console.log("CheckNode", nodeNr, nodesData[nodeNr]); let errFound = false; //warnings @@ -1207,7 +1206,7 @@ function populateNodes(i,n) gId(`fx${nodeNr}`).innerText = effects[state.seg[0].fx]; //store data - nodesData[nodeNr] = {}; + if (!nodesData[nodeNr]) nodesData[nodeNr] = {}; nodesData[nodeNr].info = info; //if the node has a matrix, show matrix info @@ -1226,9 +1225,6 @@ function populateNodes(i,n) gId(`gcc${nodeNr}`).innerText = cfg.light.gc.col > 1; gId(`fps${nodeNr}`).innerText = cfg.hw.led.fps; - //store data - // nodesData[nodeNr].cfg = cfg; - //if the node has a matrix, show matrix info if (cfg.hw.led.matrix) { gId(`pnl0${nodeNr}`).innerText = showPanel(cfg.hw.led.matrix.panels[0]); //show the first panel @@ -1238,12 +1234,15 @@ function populateNodes(i,n) if (ip == lastinfo.ip) { let panelIndex = 0; //loop over panels for (let i=0; i${name}`; + gId(`ins${nodeNr}`).innerHTML = url; + gId(`ip${nodeNr}`).innerText = ip; + console.log("json error", nodeNr, ip, name, text); + callback(nodeNr); //also callback on error + }); } //fetchInfoAndCfg if (n.nodes) { @@ -1304,14 +1311,17 @@ function populateNodes(i,n) urows += ``; //show other nodes e.g. {name: "MM 32 L", type: 32, ip: "192.168.121.249", age: 1, vid: 2305080} + var nodesDone = 0; for (let o of n.nodes) { if (o.name) { if (o.ip) { //in ap mode no ip... - fetchInfoAndCfg(o.ip, nnodes, -1, function() { + fetchInfoAndCfg(o.ip, nnodes, -1, function(nodeNr) { + nodesDone++; + console.log("nodesDone", nodesDone, nodeNr, n.nodes.length, nnodes, n.nodes[nodeNr].name); //if all done - if (nodesDone == nnodes ) { - for (let i=0; i MAX_LIVE_LEDS_WS*4) + n = 4; + else if (Segment::maxWidth * Segment::maxHeight > MAX_LIVE_LEDS_WS) + n = 2; + else + n = 1; + } + #endif size_t pos = (strip.isMatrix ? 4 : 2); size_t bufSize = pos + (used/n)*3; - //WLEDMM: no skipLines if ((bufSize < 1) || (used < 1)) return(false); // WLEDMM should not happen //AsyncWebSocketMessageBuffer * wsBuf = ws.makeBuffer(bufSize); @@ -225,19 +235,24 @@ static bool sendLiveLedsWs(uint32_t wsClient) // WLEDMM added "static" wsBuf->lock(); // protect buffer from being cleaned by another WS instance buffer[0] = 'L'; buffer[1] = 1; //version -#ifndef WLED_DISABLE_2D - if (strip.isMatrix) { - buffer[1] = 2; //version - buffer[2] = min(Segment::maxWidth, (uint16_t) 255); // WLEDMM prevent overflow on buffer type uint8_t - buffer[3] = min(Segment::maxHeight, (uint16_t) 255); - //WLEDMM: no skipLines - } -#endif + #ifndef WLED_DISABLE_2D + if (strip.isMatrix) { + buffer[1] = 2; //version + //WLEDMM skipping lines done right + buffer[2] = MIN(Segment::maxWidth/n, (uint16_t) 255); // WLEDMM prevent overflow on buffer type uint8_t + buffer[3] = MIN(Segment::maxHeight/n, (uint16_t) 255); + } + #endif uint8_t stripBrightness = strip.getBrightness(); for (size_t i = 0; pos < bufSize -2; i += n) { - //WLEDMM: no skipLines + //WLEDMM skipping lines done right + #ifndef WLED_DISABLE_2D + if (strip.isMatrix && n > 1) { + if ((i/Segment::maxWidth)%(n)) i += Segment::maxWidth * (n-1); + } + #endif uint32_t c = restoreColorLossy(strip.getPixelColor(i), stripBrightness); // WLEDMM full bright preview - does _not_ recover ABL reductions // WLEDMM begin: preview with color gamma correction if (gammaCorrectPreview) {