@@ -79,8 +79,8 @@ class drvDispThinkInkGrayscale4Eaamfgn : public dispDrvBase {
7979 /* !
8080 @brief Displays a splash screen
8181 */
82- virtual void showSplash () override {
83- if (! _display)
82+ virtual void showSplash () override {
83+ if (!_display)
8484 return ;
8585 _display->drawBitmap (0 , 0 , epd_bitmap_ws_logo_296128, 296 , 128 , EPD_BLACK);
8686 _display->display ();
@@ -90,32 +90,68 @@ class drvDispThinkInkGrayscale4Eaamfgn : public dispDrvBase {
9090 /* !
9191 @brief Draws a status bar at the top of the display.
9292 */
93- virtual void drawStatusBar () override {
93+ virtual void drawStatusBar (const char *io_username ) override {
9494 if (!_display)
9595 return ;
96- _display->clearBuffer ();
97- _display->fillScreen (EPD_WHITE);
98-
99- int barHeight = 15 ;
96+
97+ // Draw status bar
98+ int barHeight = 20 ; // Assumes 16x16 icons
10099 int borderWidth = 1 ;
101- // Black rect outline
102- _display->fillRect (0 , 0 , _width, barHeight, EPD_BLACK);
103- // White rect inside for icons/text
104- _display->fillRect (borderWidth, borderWidth,
105- _width - (2 * borderWidth),
106- barHeight - (2 * borderWidth),
107- EPD_WHITE);
108-
109- // Vertically center text in the bar
110- _display->setTextSize (1 ); // Text size 1 = 8 pixels tall
111- int textHeight = 8 ;
112- int usableHeight = barHeight - (2 * borderWidth); // 13px usable
113- int textY = borderWidth + (usableHeight - textHeight) / 2 ; // = 1 + (13-8)/2 = 3
114- // Draw status text
100+ _display->fillRect (0 , 0 , _display->width (), barHeight, EPD_BLACK);
101+ _display->fillRect (borderWidth, borderWidth,
102+ _display->width () - (2 * borderWidth),
103+ barHeight - (2 * borderWidth), EPD_WHITE);
104+
105+ // Draw username on left side of the status bar
106+ _display->setTextSize (1 );
115107 _display->setTextColor (EPD_BLACK);
116- _display->setCursor (5 , textY);
117- _display->print (" [IO] OK|[WiFi] OK|[Bat] 100%" );
118- _display->display ();
108+ _display->setCursor (5 , 6 );
109+ _display->print (io_username);
110+
111+ // Calculate icon positions and center vertically
112+ int iconSize = 16 ;
113+ int iconSpacing = 4 ;
114+ int rightMargin = 5 ;
115+ int iconY = borderWidth + ((barHeight - 2 * borderWidth - iconSize) / 2 );
116+ int batteryX = _display->width () - iconSize - rightMargin;
117+ int wifiX = batteryX - iconSize - iconSpacing;
118+ int cloudX = wifiX - iconSize - iconSpacing;
119+ // Draw icons on right side of the status bar
120+ _display->drawBitmap (cloudX, iconY, epd_bmp_cloud, iconSize, iconSize,
121+ EPD_BLACK);
122+ _display->drawBitmap (wifiX, iconY, epd_bmp_wifi, iconSize, iconSize,
123+ EPD_BLACK);
124+ _display->drawBitmap (batteryX, iconY, epd_bmp_bat_full, iconSize, iconSize,
125+ EPD_BLACK);
126+ }
127+
128+ /* !
129+ @brief Updates the status bar with current information (battery level,
130+ connectivity status, etc).
131+ @param rssi
132+ The current RSSI value to display.
133+ @param bat
134+ The current battery level (0-100) to display.
135+ @param mqtt_connected
136+ The current MQTT connection status to display.
137+ */
138+ void updateStatusBar (int8_t rssi, uint8_t bat,
139+ ws_status_t mqtt_connected) override {
140+ if (!_display)
141+ return ;
142+
143+ if (bat != _statusbar_bat) {
144+ // Update battery icon
145+ _statusbar_bat = bat;
146+ }
147+ if (rssi != _statusbar_rssi) {
148+ // Update WiFi icon
149+ _statusbar_rssi = rssi;
150+ }
151+ if (mqtt_connected != _statusbar_mqtt_connected) {
152+ // Update cloud icon
153+ _statusbar_mqtt_connected = mqtt_connected;
154+ }
119155 }
120156
121157 /* !
0 commit comments