diff --git a/src/plugins/Display/Display.h b/src/plugins/Display/Display.h index fee4e35e..24c5b515 100644 --- a/src/plugins/Display/Display.h +++ b/src/plugins/Display/Display.h @@ -26,37 +26,29 @@ class Display { mLoopCnt = 0; mVersion = version; - if (mCfg->type == 0) - return; + switch (mCfg->type) { + case 0: mMono = NULL; break; + case 1: // fall-through + case 2: mMono = new DisplayMono128X64(); break; + case 3: mMono = new DisplayMono84X48(); break; + case 4: mMono = new DisplayMono128X32(); break; + case 5: mMono = new DisplayMono64X48(); break; - if ((0 < mCfg->type) && (mCfg->type < 10)) { - switch (mCfg->type) { - case 1: // fall-through - case 2: - mMono = new DisplayMono128X64(); - break; - case 3: - mMono = new DisplayMono84X48(); - break; - case 4: - mMono = new DisplayMono128X32(); - break; - case 5: - mMono = new DisplayMono64X48(); - break; - - default: - mMono = new DisplayMono128X64(); - break; - } - mMono->config(mCfg->pwrSaveAtIvOffline, mCfg->pxShift, mCfg->contrast); - mMono->init(mCfg->type, mCfg->rot, mCfg->disp_cs, mCfg->disp_dc, 0xff, mCfg->disp_clk, mCfg->disp_data, mUtcTs, mVersion); - } else if (mCfg->type >= 10) { #if defined(ESP32) - mRefreshCycle = 0; - mEpaper.config(mCfg->rot, mCfg->pwrSaveAtIvOffline); - mEpaper.init(mCfg->type, mCfg->disp_cs, mCfg->disp_dc, mCfg->disp_reset, mCfg->disp_busy, mCfg->disp_clk, mCfg->disp_data, mUtcTs, mVersion); + case 10: + mMono = NULL; // ePaper does not use this + mRefreshCycle = 0; + mEpaper.config(mCfg->rot, mCfg->pwrSaveAtIvOffline); + mEpaper.init(mCfg->type, mCfg->disp_cs, mCfg->disp_dc, mCfg->disp_reset, mCfg->disp_busy, mCfg->disp_clk, mCfg->disp_data, mUtcTs, mVersion); + break; #endif + + default: mMono = NULL; break; + } + if(mMono) + { + mMono->config(mCfg->pwrSaveAtIvOffline, mCfg->pxShift, mCfg->contrast); + mMono->init(mCfg->type, mCfg->rot, mCfg->disp_cs, mCfg->disp_dc, 0xff, mCfg->disp_clk, mCfg->disp_data, mUtcTs, mVersion); } } @@ -104,14 +96,16 @@ class Display { totalYieldTotal += iv->getChannelFieldValue(CH0, FLD_YT, rec); } - if ((0 < mCfg->type) && (mCfg->type < 10) && (mMono != NULL)) { + if (mMono ) { mMono->disp(totalPower, totalYieldDay, totalYieldTotal, isprod); - } else if (mCfg->type >= 10) { + } #if defined(ESP32) + else if (mCfg->type == 10) { + mEpaper.loop(totalPower, totalYieldDay, totalYieldTotal, isprod); mRefreshCycle++; -#endif } +#endif #if defined(ESP32) if (mRefreshCycle > 480) { @@ -133,7 +127,7 @@ class Display { #if defined(ESP32) DisplayEPaper mEpaper; #endif - DisplayMono *mMono; + DisplayMono *mMono = NULL; //default !!! }; #endif /*__DISPLAY__*/ diff --git a/src/plugins/Display/Display_ePaper.cpp b/src/plugins/Display/Display_ePaper.cpp index 924961a3..74000180 100644 --- a/src/plugins/Display/Display_ePaper.cpp +++ b/src/plugins/Display/Display_ePaper.cpp @@ -26,7 +26,7 @@ DisplayEPaper::DisplayEPaper() { void DisplayEPaper::init(uint8_t type, uint8_t _CS, uint8_t _DC, uint8_t _RST, uint8_t _BUSY, uint8_t _SCK, uint8_t _MOSI, uint32_t *utcTs, const char *version) { mUtcTs = utcTs; - if (type > 9) { + if (type == 10) { Serial.begin(115200); _display = new GxEPD2_BW(GxEPD2_150_BN(_CS, _DC, _RST, _BUSY)); hspi.begin(_SCK, _BUSY, _MOSI, _CS); diff --git a/src/web/html/setup.html b/src/web/html/setup.html index f5649ff7..1ee056df 100644 --- a/src/web/html/setup.html +++ b/src/web/html/setup.html @@ -791,6 +791,7 @@ document.getElementsByName(i)[0].checked = obj[i]; var e = document.getElementById("dispPins"); + //KEEP this order !!! var pins = [['clock', 'disp_clk'], ['data', 'disp_data'], ['cs', 'disp_cs'], ['dc', 'disp_dc'], ['reset', 'disp_rst']]; if("ESP32" == type) pins.push(['busy', 'disp_bsy']); @@ -806,7 +807,7 @@ } // keep display types grouped - var opts = [[0, "None"], [2, "SH1106 1.3\" 128X64"], [5, "SSD1306 0.66\" 64X48"], [4, "SSD1306 0.91\" 128X32"], [1, "SSD1306 0.96\" 128X64"], [3, "Nokia5110"]]; + var opts = [[0, "None"], [2, "SH1106 1.3\" 128X64"], [5, "SSD1306 0.66\" 64X48 (Wemos OLED Shield)"], [4, "SSD1306 0.91\" 128X32"], [1, "SSD1306 0.96\" 128X64"], [3, "Nokia5110"]]; if("ESP32" == type) opts.push([10, "ePaper"]); var dispType = sel("disp_typ", opts, obj["disp_typ"]); @@ -817,7 +818,7 @@ ]) ); dispType.addEventListener('change', (e) => { - hideDispPins(pins, e.target.value) + hideDispPins(pins, parseInt(e.target.value)) }); opts = [[0, "0°"], [2, "180°"]]; @@ -837,23 +838,26 @@ } function hideDispPins(pins, dispType) { + // create pin map for each display type. + // It depends on fix pin array (see var pins) + // var pins = [['clock', 'disp_clk'], ['data', 'disp_data'], ['cs', 'disp_cs'], ['dc', 'disp_dc'], ['reset', 'disp_rst']]; + const pinMap = new Map([ + [0, [0,0,0,0,0]], //none + [1, [1,1,0,0,0]], //SSD1306_128X64 + [2, [1,1,0,0,0]], //SH1106_128X64 + [3, [1,1,1,1,0]], //PCD8544_84X48 /nokia5110 + [4, [1,1,0,0,0]], //SSD1306_128X32 + [5, [1,1,0,0,0]], //SSD1306_64X48 + [10, [1,1,1,1,1]] //ePaper + ]) for(var i = 0; i < pins.length; i++) { var cl = document.getElementById("row_" + pins[i][1]).classList; - - if(0 == dispType) - cl.add("hide"); - else if(dispType <= 2 || dispType == 4) { // OLED - if(i < 2) - cl.remove("hide"); - else - cl.add("hide"); - } else if(dispType == 3) { // Nokia - if(i < 4) - cl.remove("hide"); - else - cl.add("hide"); - } else // ePaper + if(pinMap.get(dispType)[i]) { cl.remove("hide"); + } + else { + cl.add("hide"); + } } }