@@ -107,13 +107,13 @@ class dispDrvSt7789 : public dispDrvBase {
107107 if (_width == 240 && _height == 240 ) {
108108 _display->drawBitmap (0 , 0 , tft_bmp_logo_240240, 240 , 240 , ST77XX_WHITE);
109109 } else if (_width == 240 && _height == 135 ) {
110- _display->drawBitmap (0 , 0 , tft_bmp_logo_240135, 240 , 135 , EPD_BLACK );
110+ _display->drawBitmap (0 , 0 , tft_bmp_logo_240135, 240 , 135 , ST77XX_BLACK );
111111 } else {
112112 // Unsupported resolution
113113 return ;
114114 }
115115
116- delay (1000 );
116+ delay (500 );
117117 }
118118
119119 /* !
@@ -149,7 +149,7 @@ class dispDrvSt7789 : public dispDrvBase {
149149
150150 // Draw username on left side of the status bar
151151 _display->setTextSize (1 );
152- _display->setTextColor (EPD_BLACK );
152+ _display->setTextColor (ST77XX_BLACK );
153153 _display->setCursor (5 , 6 );
154154 _display->print (io_username);
155155
@@ -162,11 +162,11 @@ class dispDrvSt7789 : public dispDrvBase {
162162 if (_height == 240 ) {
163163 // Draw 16px icons on right side of the status bar
164164 _display->drawBitmap (cloudX, iconY, epd_bmp_cloud_online,
165- _status_bar_icon_sz, _status_bar_icon_sz, EPD_BLACK );
165+ _status_bar_icon_sz, _status_bar_icon_sz, ST77XX_BLACK );
166166 _display->drawBitmap (wifiX, iconY, epd_bmp_wifi_full, _status_bar_icon_sz,
167- _status_bar_icon_sz, EPD_BLACK );
167+ _status_bar_icon_sz, ST77XX_BLACK );
168168 _display->drawBitmap (batteryX, iconY, epd_bmp_bat_full,
169- _status_bar_icon_sz, _status_bar_icon_sz, EPD_BLACK );
169+ _status_bar_icon_sz, _status_bar_icon_sz, ST77XX_BLACK );
170170 } else if (_height == 135 ) {
171171 // TODO: Draw 12px icons on right side of the status bar
172172 } else {
@@ -189,7 +189,41 @@ class dispDrvSt7789 : public dispDrvBase {
189189 if (!_display)
190190 return ;
191191
192- // TODO - needs to be implemented!
192+ WS_DEBUG_PRINTLN (" Updating ST7789 status bar" );
193+
194+ int iconY = (_status_bar_height - _status_bar_icon_sz) / 2 ;
195+ int batteryX = _display->width () - _status_bar_icon_sz - _status_bar_icon_margin;
196+ int wifiX = batteryX - _status_bar_icon_sz - _status_bar_icon_spacing;
197+ int cloudX = wifiX - _status_bar_icon_sz - _status_bar_icon_spacing;
198+
199+ // Clear and draw the new cloud icon, based on MQTT connection status
200+ _display->fillRect (cloudX, iconY, _status_bar_icon_sz, _status_bar_icon_sz,
201+ ST77XX_WHITE);
202+ if (mqtt_status == 21 ) {
203+ _display->drawBitmap (cloudX, iconY, epd_bmp_cloud_online,
204+ _status_bar_icon_sz, _status_bar_icon_sz, ST77XX_BLACK);
205+ } else {
206+ _display->drawBitmap (cloudX, iconY, epd_bmp_cloud_offline,
207+ _status_bar_icon_sz, _status_bar_icon_sz, ST77XX_BLACK);
208+ }
209+
210+ // Update WiFi icon only if RSSI has changed significantly (+/-3dB)
211+ const unsigned char * wifi_icon = epd_bmp_wifi_no_signal;
212+ if (rssi >= -50 ) {
213+ wifi_icon = epd_bmp_wifi_full;
214+ } else if (rssi < -50 && rssi >= -60 ) {
215+ wifi_icon = epd_bmp_wifi_fair;
216+ } else if (rssi < -60 && rssi >= -70 ) {
217+ wifi_icon = epd_bmp_wifi_weak;
218+ } else if (rssi < -70 && rssi >= -80 ) {
219+ wifi_icon = epd_bmp_wifi_no_signal;
220+ } else {
221+ wifi_icon = epd_bmp_wifi_no_signal;
222+ }
223+ // Clear and draw the new WiFi icon, based on RSSI
224+ _display->fillRect (wifiX, iconY, _status_bar_icon_sz, _status_bar_icon_sz,
225+ ST77XX_WHITE);
226+ _display->drawBitmap (wifiX, iconY, wifi_icon, _status_bar_icon_sz, _status_bar_icon_sz, ST77XX_BLACK);
193227 }
194228
195229 /* !
0 commit comments