From 75c6a6c0f9b66c6659a9fbd812e16a7f90f959e0 Mon Sep 17 00:00:00 2001 From: Nic Limper Date: Sun, 24 Sep 2023 21:34:30 +0200 Subject: [PATCH] previews now also show for tags connected to external AP; removed extra debug msg --- ESP32_AP-Flasher/data/www/main.js.gz | Bin 9392 -> 9523 bytes ESP32_AP-Flasher/include/newproto.h | 2 +- ESP32_AP-Flasher/include/tag_db.h | 3 ++- ESP32_AP-Flasher/src/contentmanager.cpp | 4 ---- ESP32_AP-Flasher/src/newproto.cpp | 13 ++++++++---- ESP32_AP-Flasher/src/tag_db.cpp | 4 ++-- ESP32_AP-Flasher/src/udp.cpp | 2 +- ESP32_AP-Flasher/src/web.cpp | 25 ++++++++++++------------ ESP32_AP-Flasher/src/wifimanager.cpp | 5 ++--- ESP32_AP-Flasher/wwwroot/main.js | 19 +++++++++++++----- oepl-proto.h | 9 ++++++--- 11 files changed, 49 insertions(+), 37 deletions(-) diff --git a/ESP32_AP-Flasher/data/www/main.js.gz b/ESP32_AP-Flasher/data/www/main.js.gz index fc01257b18c42d0f3e9b029f3fd2c1d0d7a7f4ff..fba96a157e0e05a32233771ff5aa0c64bd93f21c 100644 GIT binary patch literal 9523 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 diff --git a/ESP32_AP-Flasher/include/newproto.h b/ESP32_AP-Flasher/include/newproto.h index f95f18a4..39c07f88 100644 --- a/ESP32_AP-Flasher/include/newproto.h +++ b/ESP32_AP-Flasher/include/newproto.h @@ -11,7 +11,7 @@ extern bool prepareDataAvail(String& filename, uint8_t dataType, uint8_t dataTyp extern void prepareExternalDataAvail(struct pendingData* pending, IPAddress remoteIP); extern void processXferComplete(struct espXferComplete* xfc, bool local); extern void processXferTimeout(struct espXferComplete* xfc, bool local); -extern void processDataReq(struct espAvailDataReq* adr, bool local); +extern void processDataReq(struct espAvailDataReq* adr, bool local, IPAddress remoteIP = IPAddress(0, 0, 0, 0)); extern void processTagReturnData(struct espTagReturnData* trd, uint8_t len, bool local); extern bool sendTagCommand(const uint8_t* dst, uint8_t cmd, bool local, const uint8_t* payload = nullptr); diff --git a/ESP32_AP-Flasher/include/tag_db.h b/ESP32_AP-Flasher/include/tag_db.h index 0ae729b2..c7653cab 100644 --- a/ESP32_AP-Flasher/include/tag_db.h +++ b/ESP32_AP-Flasher/include/tag_db.h @@ -21,7 +21,7 @@ class tagRecord { public: - tagRecord() : mac{0}, alias(""), lastseen(0), nextupdate(0), contentMode(0), pending(false), md5{0}, md5pending{0}, expectedNextCheckin(0), modeConfigJson(""), LQI(0), RSSI(0), temperature(0), batteryMv(0), hwType(0), wakeupReason(0), capabilities(0), lastfullupdate(0), isExternal(false), pendingIdle(0), hasCustomLUT(false), rotate(0), lut(0), tagSoftwareVersion(0), currentChannel(0), dataType(0), filename(""), data(nullptr), len(0) {} + tagRecord() : mac{0}, alias(""), lastseen(0), nextupdate(0), contentMode(0), pending(false), md5{0}, md5pending{0}, expectedNextCheckin(0), modeConfigJson(""), LQI(0), RSSI(0), temperature(0), batteryMv(0), hwType(0), wakeupReason(0), capabilities(0), lastfullupdate(0), isExternal(false), apIp(IPAddress(0, 0, 0, 0)), pendingIdle(0), hasCustomLUT(false), rotate(0), lut(0), tagSoftwareVersion(0), currentChannel(0), dataType(0), filename(""), data(nullptr), len(0) {} uint8_t mac[8]; String alias; @@ -42,6 +42,7 @@ class tagRecord { uint8_t capabilities; uint32_t lastfullupdate; bool isExternal; + IPAddress apIp; uint16_t pendingIdle; bool hasCustomLUT; uint8_t rotate; diff --git a/ESP32_AP-Flasher/src/contentmanager.cpp b/ESP32_AP-Flasher/src/contentmanager.cpp index e06dc97a..61a08c67 100644 --- a/ESP32_AP-Flasher/src/contentmanager.cpp +++ b/ESP32_AP-Flasher/src/contentmanager.cpp @@ -43,9 +43,7 @@ void contentRunner() { for (tagRecord *taginfo : tagDB) { if (taginfo->RSSI && (now >= taginfo->nextupdate || taginfo->wakeupReason == WAKEUP_REASON_GPIO || taginfo->wakeupReason == WAKEUP_REASON_NFC) && config.runStatus == RUNSTATUS_RUN && Storage.freeSpace() > 31000 && !util::isSleeping(config.sleepTime1, config.sleepTime2)) { - Serial.println("drawnew start"); drawNew(taginfo->mac, (taginfo->wakeupReason == WAKEUP_REASON_GPIO), taginfo); - Serial.println("drawnew end"); taginfo->wakeupReason = 0; } @@ -79,7 +77,6 @@ void contentRunner() { } void checkVars() { - Serial.println("checkvars begin"); DynamicJsonDocument cfgobj(500); for (tagRecord *tag : tagDB) { if (tag->contentMode == 19) { @@ -113,7 +110,6 @@ void checkVars() { for (const auto &entry : varDB) { if (entry.second.changed) varDB[entry.first].changed = false; } - Serial.println("checkvars end"); } /// @brief Draw a counter diff --git a/ESP32_AP-Flasher/src/newproto.cpp b/ESP32_AP-Flasher/src/newproto.cpp index 6439b811..9bcf2bfc 100644 --- a/ESP32_AP-Flasher/src/newproto.cpp +++ b/ESP32_AP-Flasher/src/newproto.cpp @@ -110,6 +110,7 @@ void prepareDataAvail(uint8_t* data, uint16_t len, uint8_t dataType, const uint8 } else { sendDataAvail(&pending); } + wsSendTaginfo(dst, SYNC_TAGSTATUS); } @@ -434,7 +435,7 @@ void processXferTimeout(struct espXferComplete* xfc, bool local) { if (local) udpsync.netProcessXferTimeout(xfc); } -void processDataReq(struct espAvailDataReq* eadr, bool local) { +void processDataReq(struct espAvailDataReq* eadr, bool local, IPAddress remoteIP) { if (config.runStatus == RUNSTATUS_STOP) return; char buffer[64]; @@ -454,13 +455,15 @@ void processDataReq(struct espAvailDataReq* eadr, bool local) { if (!local) { if (taginfo->isExternal == false) { wsLog("moved AP from local to external " + String(hexmac)); + taginfo->isExternal = true; } - taginfo->isExternal = true; + taginfo->apIp = remoteIP; } else { if (taginfo->isExternal == true) { wsLog("moved AP from external to local " + String(hexmac)); + taginfo->isExternal = false; } - taginfo->isExternal = false; + taginfo->apIp = IPAddress(0, 0, 0, 0); } if (taginfo->pendingIdle == 0) { @@ -512,9 +515,11 @@ void processDataReq(struct espAvailDataReq* eadr, bool local) { // sprintf(buffer, "src[7], eadr->src[6], eadr->src[5], eadr->src[4], eadr->src[3], eadr->src[2], eadr->src[1], eadr->src[0]); } - wsSendTaginfo(eadr->src, SYNC_TAGSTATUS); if (local) { + wsSendTaginfo(eadr->src, SYNC_TAGSTATUS); udpsync.netProcessDataReq(eadr); + } else { + wsSendTaginfo(eadr->src, SYNC_NOSYNC); } } diff --git a/ESP32_AP-Flasher/src/tag_db.cpp b/ESP32_AP-Flasher/src/tag_db.cpp index 9ed606ae..2ce32340 100644 --- a/ESP32_AP-Flasher/src/tag_db.cpp +++ b/ESP32_AP-Flasher/src/tag_db.cpp @@ -115,6 +115,7 @@ void fillNode(JsonObject& tag, const tagRecord* taginfo) { tag["capabilities"] = taginfo->capabilities; tag["modecfgjson"] = taginfo->modeConfigJson; tag["isexternal"] = taginfo->isExternal; + tag["apip"] = taginfo->apIp.toString(); tag["rotate"] = taginfo->rotate; tag["lut"] = taginfo->lut; tag["ch"] = taginfo->currentChannel; @@ -122,7 +123,6 @@ void fillNode(JsonObject& tag, const tagRecord* taginfo) { } void saveDB(const String& filename) { - Serial.println("saveDB start"); DynamicJsonDocument doc(2500); const long t = millis(); @@ -153,7 +153,6 @@ void saveDB(const String& filename) { file.close(); xSemaphoreGive(fsMutex); Serial.println("DB saved " + String(millis() - t) + "ms"); - Serial.println("saveDB end"); } void loadDB(const String& filename) { @@ -211,6 +210,7 @@ void loadDB(const String& filename) { taginfo->capabilities = tag["capabilities"]; taginfo->modeConfigJson = tag["modecfgjson"].as(); taginfo->isExternal = tag["isexternal"].as(); + taginfo->apIp.fromString(tag["apip"].as()); taginfo->rotate = tag["rotate"] | 0; taginfo->lut = tag["lut"] | 0; taginfo->currentChannel = tag["ch"] | 0; diff --git a/ESP32_AP-Flasher/src/udp.cpp b/ESP32_AP-Flasher/src/udp.cpp index ac73ac30..b0d6b079 100644 --- a/ESP32_AP-Flasher/src/udp.cpp +++ b/ESP32_AP-Flasher/src/udp.cpp @@ -50,7 +50,7 @@ void UDPcomm::processPacket(AsyncUDPPacket packet) { espAvailDataReq adr; memset(&adr, 0, sizeof(espAvailDataReq)); memcpy(&adr, &packet.data()[1], std::min(packet.length() - 1, sizeof(espAvailDataReq))); - processDataReq(&adr, false); + processDataReq(&adr, false, senderIP); break; } case PKT_XFER_COMPLETE: { diff --git a/ESP32_AP-Flasher/src/web.cpp b/ESP32_AP-Flasher/src/web.cpp index 6cfa2b5e..ba5761f2 100644 --- a/ESP32_AP-Flasher/src/web.cpp +++ b/ESP32_AP-Flasher/src/web.cpp @@ -63,47 +63,35 @@ size_t dbSize() { } void wsSendSysteminfo() { - Serial.println("wsSendSysteminfo begin"); DynamicJsonDocument doc(250); JsonObject sys = doc.createNestedObject("sys"); time_t now; time(&now); - Serial.print("1"); static int freeSpaceLastRun = 0; static size_t tagDBsize = 0; static size_t freeSpace = Storage.freeSpace(); - Serial.print("2"); sys["currtime"] = now; - Serial.print("3"); sys["heap"] = ESP.getFreeHeap(); - Serial.print("4"); sys["recordcount"] = tagDBsize; - Serial.print("5"); sys["dbsize"] = dbSize(); - Serial.print("6"); if (millis() - freeSpaceLastRun > 30000 || freeSpaceLastRun == 0) { freeSpace = Storage.freeSpace(); tagDBsize = tagDB.size(); freeSpaceLastRun = millis(); } - Serial.print("7"); sys["littlefsfree"] = freeSpace; sys["apstate"] = apInfo.state; sys["runstate"] = config.runStatus; - Serial.print("8"); #if !defined(CONFIG_IDF_TARGET_ESP32) // sys["temp"] = temperatureRead(); #endif - Serial.print("9"); sys["rssi"] = WiFi.RSSI(); sys["wifistatus"] = WiFi.status(); sys["wifissid"] = WiFi.SSID(); - Serial.print("a"); setVarDB("ap_ip", WiFi.localIP().toString()); setVarDB("ap_ch", String(apInfo.channel)); - Serial.print("b"); static uint32_t tagcounttimer = 0; if (millis() - tagcounttimer > 60000 || tagcounttimer == 0) { uint32_t timeoutcount = 0; @@ -117,7 +105,6 @@ void wsSendSysteminfo() { setVarDB("ap_tagcount", result); tagcounttimer = millis(); } - Serial.println("wsSendSysteminfo end"); xSemaphoreTake(wsMutex, portMAX_DELAY); ws.textAll(doc.as()); @@ -329,6 +316,7 @@ void init_web() { } if (strcmp(cmdValue, "ledflash") == 0) { struct ledFlash flashData = {0}; + flashData.mode = 1; flashData.flashDuration = 8; flashData.color1 = 0x3C; // green flashData.color2 = 0xE4; // red @@ -345,6 +333,7 @@ void init_web() { } if (strcmp(cmdValue, "ledflash_long") == 0) { struct ledFlash flashData = {0}; + flashData.mode = 1; flashData.flashDuration = 15; flashData.color1 = 0xE4; // red flashData.flashCount1 = 5; @@ -354,6 +343,12 @@ void init_web() { const uint8_t *payload = reinterpret_cast(&flashData); sendTagCommand(mac, CMD_DO_LEDFLASH, !taginfo->isExternal, payload); } + if (strcmp(cmdValue, "ledflash_stop") == 0) { + struct ledFlash flashData = {0}; + flashData.mode = 0; + const uint8_t *payload = reinterpret_cast(&flashData); + sendTagCommand(mac, CMD_DO_LEDFLASH, !taginfo->isExternal, payload); + } request->send(200, "text/plain", "Ok, done"); } else { request->send(400, "text/plain", "Error: mac not found"); @@ -367,6 +362,7 @@ void init_web() { server.on("/led_flash", HTTP_GET, [](AsyncWebServerRequest *request) { // color picker: https://roger-random.github.io/RGB332_color_wheel_three.js/ // http GET to /led_flash?mac=000000000000&pattern=3/0x1C,4,5/0xE0,3,1/0x4F,5,10/5 + // http://192.168.178.198/led_flash?mac=00007E1F250CB29C&pattern=1/0x1C,1,15/0xE0,1,15/0x4F,1,15/1 // (flashDuration/color1,flashCount1,delay1/color2,flashCount2,delay2/color3,flashCount3,delay3/repeats) if (request->hasParam("mac")) { String dst = request->getParam("mac")->value(); @@ -604,6 +600,9 @@ void init_web() { request->send(404); }); + DefaultHeaders::Instance().addHeader("Access-Control-Allow-Origin", "*"); + DefaultHeaders::Instance().addHeader("Access-Control-Allow-Headers", "content-type"); + server.begin(); } diff --git a/ESP32_AP-Flasher/src/wifimanager.cpp b/ESP32_AP-Flasher/src/wifimanager.cpp index 0c71ddbd..892caffc 100644 --- a/ESP32_AP-Flasher/src/wifimanager.cpp +++ b/ESP32_AP-Flasher/src/wifimanager.cpp @@ -215,7 +215,6 @@ void WifiManager::pollSerial() { } } -// temporary write some more debug info void WifiManager::WiFiEvent(WiFiEvent_t event) { Serial.printf("[WiFi-event %d] ", event); String eventname=""; @@ -259,8 +258,8 @@ void WifiManager::WiFiEvent(WiFiEvent_t event) { default: break; } - terminalLog(eventname); - logLine("WiFi event [" + String(event) + "]: " + eventname); + if (eventname) terminalLog(eventname); + // logLine("WiFi event [" + String(event) + "]: " + eventname); } // *** Improv diff --git a/ESP32_AP-Flasher/wwwroot/main.js b/ESP32_AP-Flasher/wwwroot/main.js index c7046a9f..bb36360e 100644 --- a/ESP32_AP-Flasher/wwwroot/main.js +++ b/ESP32_AP-Flasher/wwwroot/main.js @@ -12,6 +12,7 @@ const WAKEUP_REASON_WDT_RESET = 0xFE; let tagTypes = {}; let apConfig = {}; +let tagDB = {}; const apstate = [ { state: "offline", color: "red" }, @@ -93,7 +94,7 @@ function connect() { }); socket.addEventListener("message", (event) => { - // console.log(event.data) + console.log(event.data) const msg = JSON.parse(event.data); if (msg.logMsg) { showMessage(msg.logMsg, false); @@ -156,6 +157,7 @@ function convertSize(bytes) { function processTags(tagArray) { for (const element of tagArray) { const tagmac = element.mac; + tagDB[tagmac] = element; let div = $('#tag' + tagmac); if (div == null) { @@ -217,10 +219,16 @@ function processTags(tagArray) { $('#tag' + tagmac + ' .received').style.opacity = "0"; } - if (!apConfig.preview || element.contentMode == 20 || (element.isexternal && element.contentMode == 12)) { + if (!apConfig.preview || element.contentMode == 20) { $('#tag' + tagmac + ' .tagimg').style.display = 'none' - } else if (div.dataset.hash != element.hash && div.dataset.hwtype > -1 && (!element.isexternal || element.contentMode != 12)) { - loadImage(tagmac, '/current/' + tagmac + '.raw?' + element.hash); + } else if (div.dataset.hash != element.hash && div.dataset.hwtype > -1) { + let cachetag = element.hash; + if (element.hash == '00000000000000000000000000000000') cachetag = Math.random(); + if (element.isexternal && element.contentMode == 12) { + loadImage(tagmac, 'http://' + tagDB[tagmac].apip + '/current/' + tagmac + '.raw?' + cachetag); + } else { + loadImage(tagmac, '/current/' + tagmac + '.raw?' + cachetag); + } div.dataset.hash = element.hash; } @@ -1108,7 +1116,8 @@ $('#taglist').addEventListener('contextmenu', (e) => { if (tagTypes[hwtype].options?.includes("led")) { contextMenuOptions.push( { id: 'ledflash', label: 'Flash the LED' }, - { id: 'ledflash_long', label: 'Flash the LED (long)' } + { id: 'ledflash_long', label: 'Flash the LED (long)' }, + { id: 'ledflash_stop', label: 'Stop flashing' } ); } contextMenuOptions.push( diff --git a/oepl-proto.h b/oepl-proto.h index 33ea3528..6ad159f2 100755 --- a/oepl-proto.h +++ b/oepl-proto.h @@ -174,13 +174,16 @@ struct ledFlash { uint8_t flashDuration : 4; uint8_t color1; uint8_t flashCount1 : 4; - uint8_t delay1 : 4; + uint8_t flashSpeed1 : 4; + uint8_t delay1; uint8_t color2; uint8_t flashCount2 : 4; - uint8_t delay2 : 4; + uint8_t flashSpeed2 : 4; + uint8_t delay2; uint8_t color3; uint8_t flashCount3 : 4; - uint8_t delay3 : 4; + uint8_t flashSpeed3 : 4; + uint8_t delay3; uint8_t repeats; uint8_t spare; } __packed;