Revert "Minor fixes"

This reverts commit cee219a55f1b375b56b0c7fbce4cc5fbb711f505.
This commit is contained in:
Theo Arends 2024-01-06 21:35:08 +01:00
parent 4e361538bc
commit 11da340c62

View File

@ -23,10 +23,12 @@ const char *GVRelease = "1.0.5";
#define GV_BASE_URL "https://thelastoutpostworkshop.github.io/microcontroller_devkit/gpio_viewer/assets/" #define GV_BASE_URL "https://thelastoutpostworkshop.github.io/microcontroller_devkit/gpio_viewer/assets/"
#ifdef ESP32 #ifdef ESP32
const int GVMaxGPIOPins = 49;
// Global variables to capture PMW pins // Global variables to capture PMW pins
const int GVMaxChannels = 64; const int GVMaxChannels = 64;
#endif // ESP32 #endif // ESP32
#ifdef ESP8266 #ifdef ESP8266
const int GVMaxGPIOPins = 18;
// Global variables to capture PMW pins // Global variables to capture PMW pins
const int GVMaxChannels = MAX_PWMS; const int GVMaxChannels = MAX_PWMS;
#endif // ESP8266 #endif // ESP8266
@ -47,7 +49,7 @@ const char HTTP_GV_PAGE[] PROGMEM =
"var ip='%s';" // WiFi.localIP().toString().c_str() "var ip='%s';" // WiFi.localIP().toString().c_str()
"var source=new EventSource('http://%s:" STR(GV_PORT) "/events');" // WiFi.localIP().toString().c_str() "var source=new EventSource('http://%s:" STR(GV_PORT) "/events');" // WiFi.localIP().toString().c_str()
"var sampling_interval='" STR(GV_SAMPLING_INTERVAL) "';" "var sampling_interval='" STR(GV_SAMPLING_INTERVAL) "';"
"var freeSketchSpace='%s';" // GVFormatBytes(ESP_getFreeSketchSpace()).c_str() "var freeSketchSpace='%d';" // GV.freeRAM
"</script>" "</script>"
"</head>" "</head>"
"<body>" "<body>"
@ -64,13 +66,6 @@ const char HTTP_GV_PAGE[] PROGMEM =
"</body>" "</body>"
"</html>"; "</html>";
const char HTTP_GV_EVENT[] PROGMEM =
"HTTP/1.1 200 OK\n"
"Content-Type: text/event-stream;\n"
"Connection: keep-alive\n"
"Cache-Control: no-cache\n"
"Access-Control-Allow-Origin: *\n\n";
enum GVPinTypes { enum GVPinTypes {
digitalPin = 0, digitalPin = 0,
PWMPin = 1, PWMPin = 1,
@ -81,12 +76,12 @@ struct {
WiFiClient WebClient; WiFiClient WebClient;
ESP8266WebServer *WebServer; ESP8266WebServer *WebServer;
int freeHeap; int freeHeap;
uint32_t lastPinStates[MAX_GPIO_PIN]; uint32_t lastPinStates[GVMaxGPIOPins];
int ledcChannelPin[GVMaxChannels][2]; int ledcChannelPin[GVMaxChannels][2];
int ledcChannelPinCount; int ledcChannelPinCount;
int ledcChannelResolution[GVMaxChannels][2]; int ledcChannelResolution[GVMaxChannels][2];
int ledcChannelResolutionCount; int ledcChannelResolutionCount;
bool sse_ready; bool first;
bool active; bool active;
} GV; } GV;
@ -220,7 +215,7 @@ void GVResetStatePins(void) {
uint32_t pintype; uint32_t pintype;
AddLog(LOG_LEVEL_INFO, "IOV: GPIOViewer Connected, sampling interval is " STR(GV_SAMPLING_INTERVAL) "ms"); AddLog(LOG_LEVEL_INFO, "IOV: GPIOViewer Connected, sampling interval is " STR(GV_SAMPLING_INTERVAL) "ms");
for (int i = 0; i < MAX_GPIO_PIN; i++) { for (int i = 0; i < GVMaxGPIOPins; i++) {
GV.lastPinStates[i] = GVReadGPIO(i, &originalValue, &pintype); GV.lastPinStates[i] = GVReadGPIO(i, &originalValue, &pintype);
} }
} }
@ -242,7 +237,7 @@ void GVMonitorTask(void) {
String jsonMessage = "{"; String jsonMessage = "{";
bool hasChanges = false; bool hasChanges = false;
for (int i = 0; i < MAX_GPIO_PIN; i++) { for (int i = 0; i < GVMaxGPIOPins; i++) {
int currentState = GVReadGPIO(i, &originalValue, &pintype); int currentState = GVReadGPIO(i, &originalValue, &pintype);
if (originalValue != GV.lastPinStates[i]) { if (originalValue != GV.lastPinStates[i]) {
@ -274,43 +269,44 @@ void GVBegin(void) {
GVPrintPWNTraps(); GVPrintPWNTraps();
GV.WebServer = new ESP8266WebServer(GV_PORT); GV.WebServer = new ESP8266WebServer(GV_PORT);
// GV.WebServer->setContentLength(CONTENT_LENGTH_UNKNOWN); // the payload can go on forever
// Set CORS headers for global responses // Set CORS headers for global responses
GV.WebServer->sendHeader("Access-Control-Allow-Origin", "*"); GV.WebServer->sendHeader("Access-Control-Allow-Origin", "*");
GV.WebServer->sendHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); GV.WebServer->sendHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
GV.WebServer->sendHeader("Access-Control-Allow-Headers", "Content-Type"); GV.WebServer->sendHeader("Access-Control-Allow-Headers", "Content-Type");
GV.WebServer->on("/events", GVHandleEvents); GV.WebServer->on("/events", GVHandleEvents);
GV.WebServer->on("/", GVHandleRoot); GV.WebServer->on("/", GVHandleRoot);
GV.WebServer->on("/release", GVHandleRelease); GV.WebServer->on("/release", GVHandleRelease);
GV.WebServer->begin(); GV.WebServer->begin();
} }
void GVHandleEvents(void) { void GVHandleEvents(void) {
// if (!GV.sse_ready) { if (!GV.first) {
GVResetStatePins(); GVResetStatePins();
GV.first = true;
GV.WebClient = GV.WebServer->client(); GV.WebClient = GV.WebServer->client();
GV.WebClient.setNoDelay(true); GV.WebClient.setNoDelay(true);
// GV.WebClient.setSync(true); // GV.WebClient.setSync(true);
GV.WebServer->setContentLength(CONTENT_LENGTH_UNKNOWN); // The payload can go on forever GV.WebServer->setContentLength(CONTENT_LENGTH_UNKNOWN); // The payload can go on forever
GV.WebServer->sendContent_P(HTTP_GV_EVENT); GV.WebServer->sendContent_P(PSTR("HTTP/1.1 200 OK\nContent-Type: text/event-stream;\nConnection: keep-alive\nCache-Control: no-cache\nAccess-Control-Allow-Origin: *\n\n"));
}
GV.sse_ready = true; // Ready to
// }
} }
void GVHandleRoot(void) { void GVHandleRoot(void) {
char* content = ext_snprintf_malloc_P(HTTP_GV_PAGE, char* content = ext_snprintf_malloc_P(HTTP_GV_PAGE,
WiFi.localIP().toString().c_str(), WiFi.localIP().toString().c_str(),
WiFi.localIP().toString().c_str(), WiFi.localIP().toString().c_str(),
GVFormatBytes(ESP_getFreeSketchSpace()).c_str()); GVFormatBytes(ESP.getFreeSketchSpace()).c_str());
if (content == nullptr) { return; } // Avoid crash if (content == nullptr) { return; } // Avoid crash
GV.WebServer->send_P(200, "text/html", content); GV.WebServer->send_P(200, "text/html", content);
free(content); free(content);
GV.sse_ready = false; // Allow restart on page load
} }
void GVHandleRelease(void) { void GVHandleRelease(void) {
@ -332,7 +328,7 @@ bool Xdrv121(uint32_t function) {
if (GV.WebServer) { GV.WebServer->handleClient(); } if (GV.WebServer) { GV.WebServer->handleClient(); }
break; break;
case FUNC_EVERY_100_MSECOND: case FUNC_EVERY_100_MSECOND:
if (GV.sse_ready) { GVMonitorTask(); } if (GV.first) { GVMonitorTask(); }
break; break;
case FUNC_ACTIVE: case FUNC_ACTIVE:
result = true; result = true;