diff --git a/matrix/screenNetwork/network_status b/matrix/screenNetwork/network_status index f079f5d..cbf6a66 100644 Binary files a/matrix/screenNetwork/network_status and b/matrix/screenNetwork/network_status differ diff --git a/matrix/screenNetwork/network_status.cc b/matrix/screenNetwork/network_status.cc index b87ecda..b8aba97 100644 --- a/matrix/screenNetwork/network_status.cc +++ b/matrix/screenNetwork/network_status.cc @@ -6,8 +6,8 @@ |_| \_|_____| |_| \_/\_/ \___/|_| \_\_|\_\ -Modern 4G Connection Status Display -Get 4G status and signal quality from SQLite database config_table +Modern Network Status Display (4G + WiFi) +Get 4G status, signal quality, and WiFi status from SQLite database config_table Pour compiler: g++ -I/var/www/moduleair_pro_4g/matrix/include -L/var/www/moduleair_pro_4g/matrix/lib /var/www/moduleair_pro_4g/matrix/screenNetwork/network_status.cc -o /var/www/moduleair_pro_4g/matrix/screenNetwork/network_status -lrgbmatrix -lsqlite3 @@ -70,6 +70,29 @@ void log(const std::string& type, const std::string& message) { std::cout << color << message << RESET << std::endl; } +// Function to get WiFi status from database +bool get_wifi_status(sqlite3* db, std::string& wifi_status) { + sqlite3_stmt* stmt; + bool status_found = false; + + log("BLUE", "Querying WiFi status from database..."); + + const char* query = "SELECT value FROM config_table WHERE key='WIFI_status'"; + if (sqlite3_prepare_v2(db, query, -1, &stmt, NULL) == SQLITE_OK) { + if (sqlite3_step(stmt) == SQLITE_ROW) { + wifi_status = (char*)sqlite3_column_text(stmt, 0); + status_found = true; + std::cout << " WiFi Status: " << wifi_status << std::endl; + } else { + std::cout << " No WiFi status found in config_table" << std::endl; + wifi_status = "unknown"; + } + sqlite3_finalize(stmt); + } + + return status_found; +} + // Function to get 4G status from database bool get_4g_status(sqlite3* db, std::string& network_status, int& signal_quality) { sqlite3_stmt* stmt; @@ -238,8 +261,8 @@ void draw_connection_icon(Canvas* canvas, int x, int y, const std::string& statu } } -// Function to draw the entire 4G status screen -void draw_4g_screen(Canvas* canvas, const std::string& network_status, int signal_quality) { +// Function to draw the entire network status screen (4G + WiFi) +void draw_network_screen(Canvas* canvas, const std::string& network_status, int signal_quality, const std::string& wifi_status) { rgb_matrix::Color white(255, 255, 255); rgb_matrix::Color cyan(0, 255, 255); rgb_matrix::Color bg_color(0, 0, 0); @@ -279,16 +302,16 @@ void draw_4g_screen(Canvas* canvas, const std::string& network_status, int signa // Draw basic status without fonts canvas->Clear(); - // Draw simple status indicators using pixels + // Draw simple 4G status indicators using pixels if (network_status == "connected") { - // Draw green rectangle + // Draw green rectangle for 4G for (int x = 10; x < 30; x++) { for (int y = 10; y < 20; y++) { canvas->SetPixel(x, y, 0, 255, 0); } } } else { - // Draw red rectangle + // Draw red rectangle for 4G for (int x = 10; x < 30; x++) { for (int y = 10; y < 20; y++) { canvas->SetPixel(x, y, 255, 0, 0); @@ -296,9 +319,33 @@ void draw_4g_screen(Canvas* canvas, const std::string& network_status, int signa } } - // Only draw signal bars if connected + // Draw simple WiFi status indicators using pixels + if (wifi_status == "connected") { + // Draw green rectangle for WiFi + for (int x = 35; x < 55; x++) { + for (int y = 10; y < 20; y++) { + canvas->SetPixel(x, y, 0, 255, 0); + } + } + } else if (wifi_status == "hotspot") { + // Draw orange rectangle for WiFi hotspot + for (int x = 35; x < 55; x++) { + for (int y = 10; y < 20; y++) { + canvas->SetPixel(x, y, 255, 165, 0); + } + } + } else { + // Draw red rectangle for WiFi disconnected/unknown + for (int x = 35; x < 55; x++) { + for (int y = 10; y < 20; y++) { + canvas->SetPixel(x, y, 255, 0, 0); + } + } + } + + // Only draw signal bars if 4G connected if (network_status == "connected") { - draw_signal_bars(canvas, 55, 30, signal_quality); + draw_signal_bars(canvas, 70, 30, signal_quality); } std::cout << "Using fallback display (no fonts)" << std::endl; @@ -309,15 +356,36 @@ void draw_4g_screen(Canvas* canvas, const std::string& network_status, int signa canvas->Clear(); // Draw title - rgb_matrix::DrawText(canvas, title_font, 2, title_font.baseline() + 2, cyan, &bg_color, "4G CONNECTION", 0); + rgb_matrix::DrawText(canvas, title_font, 2, title_font.baseline() + 2, cyan, &bg_color, "NETWORK STATUS", 0); - // Draw connection status section - int status_y = 25; - rgb_matrix::DrawText(canvas, value_font, 2, status_y, white, &bg_color, "Status:", 0); + // Draw WiFi connection status section (moved to first) + int wifi_y = 20; + rgb_matrix::DrawText(canvas, value_font, 2, wifi_y, white, &bg_color, "WiFi:", 0); - // Don't draw connection icon - removed for cleaner text-only display + // Draw WiFi status text + rgb_matrix::Color wifi_color; + std::string wifi_text = wifi_status; + std::transform(wifi_text.begin(), wifi_text.end(), wifi_text.begin(), ::toupper); - // Draw status text + if (wifi_status == "connected") { + wifi_color = rgb_matrix::Color(0, 255, 0); // Green + } else if (wifi_status == "hotspot") { + wifi_color = rgb_matrix::Color(255, 165, 0); // Orange + wifi_text = "HOTSPOT"; + } else if (wifi_status == "disconnected") { + wifi_color = rgb_matrix::Color(255, 0, 0); // Red + } else { + wifi_color = rgb_matrix::Color(128, 128, 128); // Gray + wifi_text = "UNKNOWN"; + } + + rgb_matrix::DrawText(canvas, value_font, 35, wifi_y, wifi_color, &bg_color, wifi_text.c_str(), 0); + + // Draw 4G connection status section (moved to second) + int status_y = 30; + rgb_matrix::DrawText(canvas, value_font, 2, status_y, white, &bg_color, "4G:", 0); + + // Draw 4G status text rgb_matrix::Color status_color; std::string status_text = network_status; std::transform(status_text.begin(), status_text.end(), status_text.begin(), ::toupper); @@ -327,7 +395,7 @@ void draw_4g_screen(Canvas* canvas, const std::string& network_status, int signa } else if (network_status == "connecting") { status_color = rgb_matrix::Color(255, 255, 0); // Yellow } else if (network_status == "booting") { - status_color = rgb_matrix::Color(255, 255, 0); // Changed from orange to yellow + status_color = rgb_matrix::Color(255, 255, 0); // Yellow status_text = "BOOTING"; } else if (network_status == "disconnected" || network_status == "error") { status_color = rgb_matrix::Color(255, 0, 0); // Red @@ -336,22 +404,22 @@ void draw_4g_screen(Canvas* canvas, const std::string& network_status, int signa status_text = "UNKNOWN"; } - rgb_matrix::DrawText(canvas, value_font, 45, status_y, status_color, &bg_color, status_text.c_str(), 0); + rgb_matrix::DrawText(canvas, value_font, 25, status_y, status_color, &bg_color, status_text.c_str(), 0); - // Only show signal section if connected (NOT for booting, disconnected, or error) + // Only show 4G signal section if 4G connected (NOT for booting, disconnected, or error) if (network_status == "connected") { - // Draw signal strength section - int signal_y = 45; - rgb_matrix::DrawText(canvas, value_font, 2, signal_y, white, &bg_color, "Signal:", 0); + // Draw 4G signal strength section (moved higher to prevent truncation) + int signal_y = 42; + rgb_matrix::DrawText(canvas, value_font, 2, signal_y, white, &bg_color, "4G Signal:", 0); // Draw signal bars - draw_signal_bars(canvas, 45, signal_y - 2, signal_quality); + draw_signal_bars(canvas, 65, signal_y - 2, signal_quality); - // Draw signal value + // Draw signal value with safe spacing from bottom edge if (signal_quality != -999) { std::stringstream ss; ss << "RSSI: " << signal_quality; - rgb_matrix::DrawText(canvas, small_font, 70, signal_y - 3, white, &bg_color, ss.str().c_str(), 0); + rgb_matrix::DrawText(canvas, small_font, 2, signal_y + 8, white, &bg_color, ss.str().c_str(), 0); // Draw signal quality text based on RSSI std::string quality_text; @@ -377,35 +445,35 @@ void draw_4g_screen(Canvas* canvas, const std::string& network_status, int signa quality_color = rgb_matrix::Color(255, 0, 0); } - // Position quality text higher to avoid clipping - rgb_matrix::DrawText(canvas, small_font, 70, signal_y + 5, quality_color, &bg_color, quality_text.c_str(), 0); + // Position quality text on the right side with safe spacing + rgb_matrix::DrawText(canvas, small_font, 70, signal_y + 8, quality_color, &bg_color, quality_text.c_str(), 0); } else { - rgb_matrix::DrawText(canvas, small_font, 70, signal_y - 3, rgb_matrix::Color(128, 128, 128), &bg_color, "NO DATA", 0); + rgb_matrix::DrawText(canvas, small_font, 2, signal_y + 8, rgb_matrix::Color(128, 128, 128), &bg_color, "NO DATA", 0); } } else { - // Clear the signal area completely for all non-connected states + // Clear the 4G signal area completely for all non-connected states for (int clear_x = 0; clear_x < 128; clear_x++) { - for (int clear_y = 35; clear_y < 55; clear_y++) { + for (int clear_y = 37; clear_y < 64; clear_y++) { canvas->SetPixel(clear_x, clear_y, 0, 0, 0); } } - // Show appropriate message based on status - int msg_y = 45; - int msg_y_second_line = 55; + // Show appropriate message based on 4G status (safe positioning) + int msg_y = 42; + int msg_y_second_line = 52; if (network_status == "booting") { - rgb_matrix::DrawText(canvas, value_font, 2, msg_y, rgb_matrix::Color(255, 255, 0), &bg_color, "Initializing modem...", 0); + rgb_matrix::DrawText(canvas, value_font, 2, msg_y, rgb_matrix::Color(255, 255, 0), &bg_color, "4G: Initializing...", 0); } else if (network_status == "disconnected") { - rgb_matrix::DrawText(canvas, value_font, 20, msg_y, rgb_matrix::Color(255, 0, 0), &bg_color, "Connection lost", 0); - rgb_matrix::DrawText(canvas, value_font, 20, msg_y_second_line, rgb_matrix::Color(255, 0, 0), &bg_color, " try reconnect", 0); + rgb_matrix::DrawText(canvas, value_font, 2, msg_y, rgb_matrix::Color(255, 0, 0), &bg_color, "4G: Connection lost", 0); + rgb_matrix::DrawText(canvas, value_font, 2, msg_y_second_line, rgb_matrix::Color(255, 0, 0), &bg_color, " Try reconnect", 0); } else if (network_status == "error") { - rgb_matrix::DrawText(canvas, value_font, 25, msg_y, rgb_matrix::Color(255, 0, 0), &bg_color, "Modem error", 0); - rgb_matrix::DrawText(canvas, value_font, 20, msg_y_second_line, rgb_matrix::Color(255, 0, 0), &bg_color, " try reconnect", 0); + rgb_matrix::DrawText(canvas, value_font, 2, msg_y, rgb_matrix::Color(255, 0, 0), &bg_color, "4G: Modem error", 0); + rgb_matrix::DrawText(canvas, value_font, 2, msg_y_second_line, rgb_matrix::Color(255, 0, 0), &bg_color, " Try reconnect", 0); } else if (network_status == "connecting") { - rgb_matrix::DrawText(canvas, value_font, 20, msg_y, rgb_matrix::Color(255, 255, 0), &bg_color, "Connecting...", 0); + rgb_matrix::DrawText(canvas, value_font, 2, msg_y, rgb_matrix::Color(255, 255, 0), &bg_color, "4G: Connecting...", 0); } } @@ -424,7 +492,7 @@ void draw_4g_screen(Canvas* canvas, const std::string& network_status, int signa } int main(int argc, char *argv[]) { - log("BLUE", "4G Status Display started"); + log("BLUE", "Network Status Display started"); // Handle signals for graceful exit signal(SIGINT, signal_handler); @@ -469,10 +537,11 @@ int main(int argc, char *argv[]) { log("GREEN", "LED matrix initialized successfully"); // Main loop - log("BLUE", "Starting 4G status display loop"); + log("BLUE", "Starting network status display loop"); while (running) { std::string network_status; int signal_quality; + std::string wifi_status; // Get 4G status from database bool data_success = get_4g_status(db, network_status, signal_quality); @@ -483,8 +552,16 @@ int main(int argc, char *argv[]) { signal_quality = -999; } + // Get WiFi status from database + bool wifi_success = get_wifi_status(db, wifi_status); + + if (!wifi_success) { + std::cerr << "Error retrieving WiFi data from database" << std::endl; + wifi_status = "unknown"; + } + // Draw the screen - draw_4g_screen(canvas, network_status, signal_quality); + draw_network_screen(canvas, network_status, signal_quality, wifi_status); // Sleep before next update std::cout << "Update complete, sleeping for 5 seconds..." << std::endl; @@ -498,6 +575,6 @@ int main(int argc, char *argv[]) { canvas->Clear(); delete canvas; sqlite3_close(db); - std::cout << "4G Status Display terminated" << std::endl; + std::cout << "Network Status Display terminated" << std::endl; return 0; } \ No newline at end of file