diff --git a/usermods/GPU_Fan_Controller/GPU_Fan_Controller.cpp b/usermods/GPU_Fan_Controller/GPU_Fan_Controller.cpp index 106bd0d1..1b6227a1 100644 --- a/usermods/GPU_Fan_Controller/GPU_Fan_Controller.cpp +++ b/usermods/GPU_Fan_Controller/GPU_Fan_Controller.cpp @@ -41,6 +41,7 @@ class GPUFanControllerUsermod : public Usermod { // Configuration bool enabled = true; bool initDone = false; + bool webHandlerRegistered = false; int8_t pwmPin = PWM_FAN_PIN; #ifdef ARDUINO_ARCH_ESP32 @@ -219,9 +220,16 @@ class GPUFanControllerUsermod : public Usermod { } } - // Serve the curve editor page - static void serveGpuFanPage(AsyncWebServerRequest *request) { - request->send_P(200, "text/html", GPU_FAN_HTML); + // Register web handler - call this once + void registerWebHandler() { + if (webHandlerRegistered) return; + + server.on("/gpu-fan", HTTP_GET, [](AsyncWebServerRequest *request) { + request->send_P(200, "text/html", GPU_FAN_HTML); + }); + + webHandlerRegistered = true; + DEBUG_PRINTLN(F("GPU Fan: Web handler registered at /gpu-fan")); } public: @@ -231,11 +239,16 @@ class GPUFanControllerUsermod : public Usermod { setFanPWM((fixedSpeedPct * 255) / 100); // Initial speed lastTempUpdate = millis(); initDone = true; + + // Register web handler immediately during setup + registerWebHandler(); + DEBUG_PRINTLN(F("GPU Fan Controller initialized")); } void connected() override { - // Nothing special needed on WiFi connect + // Also try to register here in case setup was too early + registerWebHandler(); } void loop() override { @@ -265,16 +278,6 @@ class GPUFanControllerUsermod : public Usermod { return false; } - // Register the /gpu-fan endpoint - void addToJsonState(JsonObject& root) override { - // This is called during setup, we can use it to register our endpoint - } - - // Called when web server is ready - register our custom page - void onStateChange(uint8_t callMode) override { - // Not the best place, but works - } - // Add info to the WLED info panel void addToJsonInfo(JsonObject& root) override { JsonObject user = root["u"]; @@ -291,7 +294,7 @@ class GPUFanControllerUsermod : public Usermod { uiDomString += F("}});\">"); - uiDomString += F(" [Curve Editor]"); + uiDomString += F(" [Editor]"); infoArr.add(uiDomString); if (enabled) { @@ -450,11 +453,6 @@ class GPUFanControllerUsermod : public Usermod { return !top["curve-t1"].isNull(); } - // Register web handler - void addToWebHandlers(AsyncWebServer& server) { - server.on("/gpu-fan", HTTP_GET, serveGpuFanPage); - } - uint16_t getId() override { return USERMOD_ID_UNSPECIFIED; // Change this if you add to const.h }