From 67b4fa5b1a3c6408f2441bbe8a32510b7b30f418 Mon Sep 17 00:00:00 2001 From: tyeth Date: Fri, 10 Oct 2025 21:33:35 +0100 Subject: [PATCH 01/10] fix(esp32): add header to call runNetFSM for featherV2 from display/controller.cpp Feather ESP32 V2 was showing no network interface when submitting displayResponse from e-ink featherwing after initial add --- src/components/display/controller.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/display/controller.h b/src/components/display/controller.h index db463b3d4..929ff1803 100644 --- a/src/components/display/controller.h +++ b/src/components/display/controller.h @@ -15,6 +15,7 @@ #ifndef WS_DISPLAY_CONTROLLER_H #define WS_DISPLAY_CONTROLLER_H #include "Wippersnapper.h" +#include "Wippersnapper_Networking.h" // Include networking to call WS.runNetFSM() #include "hardware.h" class Wippersnapper_V2; ///< Forward declaration From b12431239f88ea3c8266424aae3cc981715785b7 Mon Sep 17 00:00:00 2001 From: tyeth Date: Fri, 10 Oct 2025 21:51:56 +0100 Subject: [PATCH 02/10] fix(controller.h): update forward declaration for Wippersnapper class --- src/components/display/controller.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/display/controller.h b/src/components/display/controller.h index 929ff1803..825cbbd38 100644 --- a/src/components/display/controller.h +++ b/src/components/display/controller.h @@ -18,7 +18,7 @@ #include "Wippersnapper_Networking.h" // Include networking to call WS.runNetFSM() #include "hardware.h" -class Wippersnapper_V2; ///< Forward declaration +class Wippersnapper; ///< Forward declaration class DisplayHardware; ///< Forward declaration /**************************************************************************/ From d84cd1834897da5749af4a6e99462a46c17e6857 Mon Sep 17 00:00:00 2001 From: tyeth Date: Fri, 10 Oct 2025 22:29:21 +0100 Subject: [PATCH 03/10] fix(controller.h): remove unnecessary include for Wippersnapper_Networking --- src/components/display/controller.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/display/controller.h b/src/components/display/controller.h index 825cbbd38..c21fd0edf 100644 --- a/src/components/display/controller.h +++ b/src/components/display/controller.h @@ -15,7 +15,6 @@ #ifndef WS_DISPLAY_CONTROLLER_H #define WS_DISPLAY_CONTROLLER_H #include "Wippersnapper.h" -#include "Wippersnapper_Networking.h" // Include networking to call WS.runNetFSM() #include "hardware.h" class Wippersnapper; ///< Forward declaration From 4510bcfaf51b13db22e07139af7c26e150b4d00d Mon Sep 17 00:00:00 2001 From: tyeth Date: Fri, 10 Oct 2025 22:43:53 +0100 Subject: [PATCH 04/10] chore(controller.h): align forward declaration comments for consistency --- src/components/display/controller.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/display/controller.h b/src/components/display/controller.h index c21fd0edf..0053cf253 100644 --- a/src/components/display/controller.h +++ b/src/components/display/controller.h @@ -17,8 +17,8 @@ #include "Wippersnapper.h" #include "hardware.h" -class Wippersnapper; ///< Forward declaration -class DisplayHardware; ///< Forward declaration +class Wippersnapper; ///< Forward declaration +class DisplayHardware; ///< Forward declaration /**************************************************************************/ /*! From 76896657115d21d376a07b2be01560b765162b85 Mon Sep 17 00:00:00 2001 From: tyeth Date: Sat, 11 Oct 2025 03:16:06 +0100 Subject: [PATCH 05/10] fix(controller.h): correct casing of global Wippersnapper instance --- src/components/display/controller.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/display/controller.h b/src/components/display/controller.h index 0053cf253..91be29323 100644 --- a/src/components/display/controller.h +++ b/src/components/display/controller.h @@ -43,5 +43,5 @@ class DisplayController { _hw_instances; ///< Holds pointers to DisplayHardware instances unsigned long _last_bar_update; ///< Timestamp of last status bar update }; -extern Wippersnapper Ws; ///< Global WS instance +extern Wippersnapper WS; ///< Global WS instance #endif \ No newline at end of file From 7857c9d07cc0e2f022731d8d2003268d9cb5c53a Mon Sep 17 00:00:00 2001 From: Tyeth Gundry Date: Tue, 14 Oct 2025 20:33:22 +0100 Subject: [PATCH 06/10] fix(e-ink): use correct degree symbols --- .../display/drivers/dispDrvThinkInkGrayscale4Eaamfgn.h | 2 +- src/components/display/drivers/dispDrvThinkInkGrayscale4T5.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/components/display/drivers/dispDrvThinkInkGrayscale4Eaamfgn.h b/src/components/display/drivers/dispDrvThinkInkGrayscale4Eaamfgn.h index 291174f64..22490f461 100644 --- a/src/components/display/drivers/dispDrvThinkInkGrayscale4Eaamfgn.h +++ b/src/components/display/drivers/dispDrvThinkInkGrayscale4Eaamfgn.h @@ -258,7 +258,7 @@ class drvDispThinkInkGrayscale4Eaamfgn : public dispDrvBase { } } else if (message[i] == 0xC2 && message[i + 1] == 0xB0) { // Degree symbol - _display->write(char(248)); + _display->write(char(247)); i++; } else { _display->print(message[i]); diff --git a/src/components/display/drivers/dispDrvThinkInkGrayscale4T5.h b/src/components/display/drivers/dispDrvThinkInkGrayscale4T5.h index ed266e00b..bc1840d57 100644 --- a/src/components/display/drivers/dispDrvThinkInkGrayscale4T5.h +++ b/src/components/display/drivers/dispDrvThinkInkGrayscale4T5.h @@ -124,7 +124,8 @@ class dispDrvThinkInkGrayscale4T5 : public dispDrvBase { i++; } } else if (message[i] == 0xC2 && message[i + 1] == 0xB0) { - _display->write(char(248)); + // Degree symbol + _display->write(char(247)); i++; } else { _display->print(message[i]); From 491baa321425c509f137f161f9f1124f2dad9eaa Mon Sep 17 00:00:00 2001 From: tyeth Date: Tue, 14 Oct 2025 22:10:10 +0100 Subject: [PATCH 07/10] wip: madness --- src/Wippersnapper.cpp | 5 ++++- src/Wippersnapper.h | 3 +++ src/components/display/controller.cpp | 5 +++++ src/components/display/controller.h | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Wippersnapper.cpp b/src/Wippersnapper.cpp index 5a189241c..48968a370 100644 --- a/src/Wippersnapper.cpp +++ b/src/Wippersnapper.cpp @@ -32,8 +32,11 @@ */ #include "Wippersnapper.h" +#include "Wippersnapper_Networking.h" -Wippersnapper WS; +// Define the global WS instance as the platform-specific derived class +// This ensures virtual methods like _connect() route to the correct implementation +Wippersnapper_WiFi WS; Wippersnapper::Wippersnapper() { _mqtt = 0; // MQTT Client object diff --git a/src/Wippersnapper.h b/src/Wippersnapper.h index 6395bcb98..b230a337e 100644 --- a/src/Wippersnapper.h +++ b/src/Wippersnapper.h @@ -501,6 +501,9 @@ class Wippersnapper { wippersnapper_signal_v1_CreateSignalRequest _outgoingSignalMsg; /*!< Outgoing signal message from device */ }; + +// Forward declaration - actual type is platform-specific (Wippersnapper_WiFi) +// but we declare as base class here to avoid circular dependencies extern Wippersnapper WS; ///< Global member variable for callbacks #endif // ADAFRUIT_WIPPERSNAPPER_H diff --git a/src/components/display/controller.cpp b/src/components/display/controller.cpp index 31595b0c3..2900e899b 100644 --- a/src/components/display/controller.cpp +++ b/src/components/display/controller.cpp @@ -13,6 +13,11 @@ * */ #include "controller.h" +#include "Wippersnapper_Networking.h" + +// Forward declaration of the global WS instance +// Use the platform-specific type so virtual methods resolve correctly +extern Wippersnapper_WiFi WS; /*! @brief Constructs a new DisplayController object diff --git a/src/components/display/controller.h b/src/components/display/controller.h index 91be29323..e03132db7 100644 --- a/src/components/display/controller.h +++ b/src/components/display/controller.h @@ -43,5 +43,5 @@ class DisplayController { _hw_instances; ///< Holds pointers to DisplayHardware instances unsigned long _last_bar_update; ///< Timestamp of last status bar update }; -extern Wippersnapper WS; ///< Global WS instance + #endif \ No newline at end of file From de5d1284520722bc10314993f1635f9d77c03235 Mon Sep 17 00:00:00 2001 From: tyeth Date: Tue, 14 Oct 2025 23:17:34 +0100 Subject: [PATCH 08/10] wip: madness --- src/Wippersnapper.h | 8 +++++--- src/components/analogIO/Wippersnapper_AnalogIO.h | 1 - src/components/digitalIO/Wippersnapper_DigitalGPIO.h | 1 - src/components/display/controller.cpp | 5 ----- src/components/i2c/WipperSnapper_I2C.h | 1 - src/network_interfaces/Wippersnapper_AIRLIFT.h | 1 - src/network_interfaces/Wippersnapper_ESP32.h | 1 - src/network_interfaces/Wippersnapper_ESP8266.h | 2 -- src/network_interfaces/ws_networking_pico.h | 1 - 9 files changed, 5 insertions(+), 16 deletions(-) diff --git a/src/Wippersnapper.h b/src/Wippersnapper.h index b230a337e..910847dbe 100644 --- a/src/Wippersnapper.h +++ b/src/Wippersnapper.h @@ -502,8 +502,10 @@ class Wippersnapper { _outgoingSignalMsg; /*!< Outgoing signal message from device */ }; -// Forward declaration - actual type is platform-specific (Wippersnapper_WiFi) -// but we declare as base class here to avoid circular dependencies -extern Wippersnapper WS; ///< Global member variable for callbacks +// Include networking to get the platform-specific Wippersnapper_WiFi typedef +#include "Wippersnapper_Networking.h" + +// Global WS instance - defined as platform-specific type in Wippersnapper.cpp +extern Wippersnapper_WiFi WS; ///< Global member variable for callbacks #endif // ADAFRUIT_WIPPERSNAPPER_H diff --git a/src/components/analogIO/Wippersnapper_AnalogIO.h b/src/components/analogIO/Wippersnapper_AnalogIO.h index d6a028e47..7cc17759f 100644 --- a/src/components/analogIO/Wippersnapper_AnalogIO.h +++ b/src/components/analogIO/Wippersnapper_AnalogIO.h @@ -81,6 +81,5 @@ class Wippersnapper_AnalogIO { int32_t _totalAnalogInputPins; /*!< Total number of analog input pins */ analogInputPin *_analog_input_pins; /*!< Array of analog pin objects */ }; -extern Wippersnapper WS; /*!< Wippersnapper variable. */ #endif // WIPPERSNAPPER_DIGITALGPIO_H \ No newline at end of file diff --git a/src/components/digitalIO/Wippersnapper_DigitalGPIO.h b/src/components/digitalIO/Wippersnapper_DigitalGPIO.h index 960687ee5..716c8e583 100644 --- a/src/components/digitalIO/Wippersnapper_DigitalGPIO.h +++ b/src/components/digitalIO/Wippersnapper_DigitalGPIO.h @@ -57,6 +57,5 @@ class Wippersnapper_DigitalGPIO { int32_t _totalDigitalInputPins; /*!< Total number of digital-input capable pins */ }; -extern Wippersnapper WS; #endif // WIPPERSNAPPER_DIGITALGPIO_H \ No newline at end of file diff --git a/src/components/display/controller.cpp b/src/components/display/controller.cpp index 2900e899b..31595b0c3 100644 --- a/src/components/display/controller.cpp +++ b/src/components/display/controller.cpp @@ -13,11 +13,6 @@ * */ #include "controller.h" -#include "Wippersnapper_Networking.h" - -// Forward declaration of the global WS instance -// Use the platform-specific type so virtual methods resolve correctly -extern Wippersnapper_WiFi WS; /*! @brief Constructs a new DisplayController object diff --git a/src/components/i2c/WipperSnapper_I2C.h b/src/components/i2c/WipperSnapper_I2C.h index d36ef0766..712b6fc7d 100644 --- a/src/components/i2c/WipperSnapper_I2C.h +++ b/src/components/i2c/WipperSnapper_I2C.h @@ -232,6 +232,5 @@ class WipperSnapper_Component_I2C { WipperSnapper_I2C_Driver_Out_SH1107 *_sh1107 = nullptr; WipperSnapper_I2C_Driver_Out_Ssd1306 *_ssd1306 = nullptr; }; -extern Wippersnapper WS; #endif // WipperSnapper_Component_I2C_H diff --git a/src/network_interfaces/Wippersnapper_AIRLIFT.h b/src/network_interfaces/Wippersnapper_AIRLIFT.h index 081b0692f..ad6473268 100644 --- a/src/network_interfaces/Wippersnapper_AIRLIFT.h +++ b/src/network_interfaces/Wippersnapper_AIRLIFT.h @@ -36,7 +36,6 @@ #define SPIWIFI SPI /*!< Instance of SPI interface used by an AirLift. */ #endif -extern Wippersnapper WS; /****************************************************************************/ /*! @brief Class for using the AirLift Co-Processor network iface. diff --git a/src/network_interfaces/Wippersnapper_ESP32.h b/src/network_interfaces/Wippersnapper_ESP32.h index dc251fe3c..4a22861d7 100644 --- a/src/network_interfaces/Wippersnapper_ESP32.h +++ b/src/network_interfaces/Wippersnapper_ESP32.h @@ -27,7 +27,6 @@ #include "WiFiMulti.h" #include #include -extern Wippersnapper WS; /****************************************************************************/ /*! diff --git a/src/network_interfaces/Wippersnapper_ESP8266.h b/src/network_interfaces/Wippersnapper_ESP8266.h index 7f0f6164d..ce67b10a9 100644 --- a/src/network_interfaces/Wippersnapper_ESP8266.h +++ b/src/network_interfaces/Wippersnapper_ESP8266.h @@ -39,8 +39,6 @@ // static const char *fingerprint PROGMEM = "47 D2 CB 14 DF 38 97 59 C6 65 1A // 1F 3E 00 1E 53 CC A5 17 E0"; -extern Wippersnapper WS; - /******************************************************************************/ /*! @brief Class for interacting with the Espressif ESP8266's network diff --git a/src/network_interfaces/ws_networking_pico.h b/src/network_interfaces/ws_networking_pico.h index e6ebf7348..282b741ef 100644 --- a/src/network_interfaces/ws_networking_pico.h +++ b/src/network_interfaces/ws_networking_pico.h @@ -29,7 +29,6 @@ #include "Arduino.h" #include #include -extern Wippersnapper WS; /****************************************************************************/ /*! From 5045d56a60cca281bfedebd89245c079c0d0d2ca Mon Sep 17 00:00:00 2001 From: tyeth Date: Tue, 14 Oct 2025 23:23:08 +0100 Subject: [PATCH 09/10] wip: drop old extern --- ci | 1 + src/components/ds18x20/ws_ds18x20.h | 1 - src/components/ledc/ws_ledc.h | 1 - src/components/pixels/ws_pixels.h | 2 +- src/components/pwm/ws_pwm.h | 1 - src/components/register/Wippersnapper_Register.cpp | 2 -- src/components/servo/ws_servo.h | 1 - src/components/statusLED/Wippersnapper_StatusLED.cpp | 1 - src/provisioning/littlefs/WipperSnapper_LittleFS.h | 1 - src/provisioning/tinyusb/Wippersnapper_FS.h | 1 - 10 files changed, 2 insertions(+), 10 deletions(-) create mode 160000 ci diff --git a/ci b/ci new file mode 160000 index 000000000..da37d5d23 --- /dev/null +++ b/ci @@ -0,0 +1 @@ +Subproject commit da37d5d2371435fa73fd5a1f4da7d92b7aafea26 diff --git a/src/components/ds18x20/ws_ds18x20.h b/src/components/ds18x20/ws_ds18x20.h index 5398d4c4f..293fda017 100644 --- a/src/components/ds18x20/ws_ds18x20.h +++ b/src/components/ds18x20/ws_ds18x20.h @@ -60,6 +60,5 @@ class ws_ds18x20 { std::vector _ds18xDrivers; ///< Vec. of ptrs. to ds18x driver objects }; -extern Wippersnapper WS; #endif // WIPPERSNAPPER_DS18X20_H \ No newline at end of file diff --git a/src/components/ledc/ws_ledc.h b/src/components/ledc/ws_ledc.h index d206767a6..10e287947 100644 --- a/src/components/ledc/ws_ledc.h +++ b/src/components/ledc/ws_ledc.h @@ -55,6 +55,5 @@ class ws_ledc { bool analogWrite(uint8_t pin, int value); uint32_t tone(uint8_t pin, uint32_t freq); }; -extern Wippersnapper WS; #endif // ws_ledc_H \ No newline at end of file diff --git a/src/components/pixels/ws_pixels.h b/src/components/pixels/ws_pixels.h index 9fbe98618..7267e3cdb 100644 --- a/src/components/pixels/ws_pixels.h +++ b/src/components/pixels/ws_pixels.h @@ -68,5 +68,5 @@ class ws_pixels { void publishAddStrandResponse(bool is_success, char *pixels_pin_data); uint32_t getGammaCorrectedColor(uint32_t pixel_color, strand_s strand); }; -extern Wippersnapper WS; + #endif // WS_PIXELS \ No newline at end of file diff --git a/src/components/pwm/ws_pwm.h b/src/components/pwm/ws_pwm.h index 6a201b2ce..480b82e70 100644 --- a/src/components/pwm/ws_pwm.h +++ b/src/components/pwm/ws_pwm.h @@ -45,6 +45,5 @@ class ws_pwm { private: ws_ledc *_ledcMgr = nullptr; ///< pointer to ws_ledc }; -extern Wippersnapper WS; #endif // WS_PWM \ No newline at end of file diff --git a/src/components/register/Wippersnapper_Register.cpp b/src/components/register/Wippersnapper_Register.cpp index c38a4dbd2..04828c3d8 100644 --- a/src/components/register/Wippersnapper_Register.cpp +++ b/src/components/register/Wippersnapper_Register.cpp @@ -15,8 +15,6 @@ */ #include "Wippersnapper.h" -extern Wippersnapper WS; - /****************************************************************************/ /*! @brief Encodes hardware registration request message and publishes diff --git a/src/components/servo/ws_servo.h b/src/components/servo/ws_servo.h index f0c8062a1..e24e2908f 100644 --- a/src/components/servo/ws_servo.h +++ b/src/components/servo/ws_servo.h @@ -71,6 +71,5 @@ class ws_servo { servoComponent _servos[MAX_SERVO_NUM]; ///< Container of servo objects and ///< their associated pin #s }; -extern Wippersnapper WS; #endif // WS_SERVO \ No newline at end of file diff --git a/src/components/statusLED/Wippersnapper_StatusLED.cpp b/src/components/statusLED/Wippersnapper_StatusLED.cpp index 4cbdd4c85..619470a2c 100644 --- a/src/components/statusLED/Wippersnapper_StatusLED.cpp +++ b/src/components/statusLED/Wippersnapper_StatusLED.cpp @@ -16,7 +16,6 @@ #include "Wippersnapper_StatusLED.h" #include "Wippersnapper.h" -extern Wippersnapper WS; #ifdef USE_STATUS_NEOPIXEL Adafruit_NeoPixel *statusPixel = new Adafruit_NeoPixel( STATUS_NEOPIXEL_NUM, STATUS_NEOPIXEL_PIN, NEO_GRB + NEO_KHZ800); diff --git a/src/provisioning/littlefs/WipperSnapper_LittleFS.h b/src/provisioning/littlefs/WipperSnapper_LittleFS.h index 782e8569b..9559de612 100644 --- a/src/provisioning/littlefs/WipperSnapper_LittleFS.h +++ b/src/provisioning/littlefs/WipperSnapper_LittleFS.h @@ -36,5 +36,4 @@ class WipperSnapper_LittleFS { void fsHalt(String msg); }; -extern Wippersnapper WS; #endif // WIPPERSNAPPER_LITTLEFS_H \ No newline at end of file diff --git a/src/provisioning/tinyusb/Wippersnapper_FS.h b/src/provisioning/tinyusb/Wippersnapper_FS.h index 7068cd691..3686029b2 100644 --- a/src/provisioning/tinyusb/Wippersnapper_FS.h +++ b/src/provisioning/tinyusb/Wippersnapper_FS.h @@ -61,5 +61,4 @@ class Wippersnapper_FS { WipperSnapper, False otherwise. */ }; -extern Wippersnapper WS; #endif // WIPPERSNAPPER_FS_H \ No newline at end of file From 3d601a92aeea619ca4a0fd98696060bc5de9ae81 Mon Sep 17 00:00:00 2001 From: Tyeth Gundry Date: Tue, 14 Oct 2025 23:56:36 +0100 Subject: [PATCH 10/10] wip: madness 2.0 --- src/Wippersnapper.h | 4 ++-- src/network_interfaces/Wippersnapper_ESP32.h | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Wippersnapper.h b/src/Wippersnapper.h index 910847dbe..ca38175e0 100644 --- a/src/Wippersnapper.h +++ b/src/Wippersnapper.h @@ -505,7 +505,7 @@ class Wippersnapper { // Include networking to get the platform-specific Wippersnapper_WiFi typedef #include "Wippersnapper_Networking.h" -// Global WS instance - defined as platform-specific type in Wippersnapper.cpp -extern Wippersnapper_WiFi WS; ///< Global member variable for callbacks +// // Global WS instance - defined as platform-specific type in Wippersnapper.cpp +// extern Wippersnapper_WiFi WS; ///< Global member variable for callbacks #endif // ADAFRUIT_WIPPERSNAPPER_H diff --git a/src/network_interfaces/Wippersnapper_ESP32.h b/src/network_interfaces/Wippersnapper_ESP32.h index 4a22861d7..43fc803f5 100644 --- a/src/network_interfaces/Wippersnapper_ESP32.h +++ b/src/network_interfaces/Wippersnapper_ESP32.h @@ -28,6 +28,9 @@ #include #include +class Wippersnapper_ESP32; +extern Wippersnapper_ESP32 WS; + /****************************************************************************/ /*! @brief Class for using the ESP32 network interface. @@ -358,5 +361,6 @@ class Wippersnapper_ESP32 : public Wippersnapper { } }; + #endif // ARDUINO_ARCH_ESP32_H #endif // Wippersnapper_ESP32_H \ No newline at end of file