From 59aa8c6c1cc1846dacf7aa891cfae4a0c99e6b20 Mon Sep 17 00:00:00 2001 From: Vector Von Date: Sun, 3 Jul 2022 22:03:58 +0800 Subject: [PATCH] add local mode --- include/LocalConnector.h | 26 +++++++++++++++++++ src/LocalConnector.cpp | 56 ++++++++++++++++++++++++++++++++++++++++ src/main.cpp | 22 +++++++++++++--- 3 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 include/LocalConnector.h create mode 100644 src/LocalConnector.cpp diff --git a/include/LocalConnector.h b/include/LocalConnector.h new file mode 100644 index 0000000..97a0967 --- /dev/null +++ b/include/LocalConnector.h @@ -0,0 +1,26 @@ +#include +#include +#include + +struct UdpData +{ + uint8_t cpuPercent; + uint8_t memPercent; + uint8_t disk0Percent; + uint8_t disk1Percent; + uint32_t diskReadRate; + uint32_t diskWriteRate; + uint32_t netSentRate; + uint32_t netReceiveRate; +}; + +class LocalConnector +{ +public: + LocalConnector(); + void FetchNewData(); + UdpData* data; + +private: + WiFiUDP Udp; +}; diff --git a/src/LocalConnector.cpp b/src/LocalConnector.cpp new file mode 100644 index 0000000..8a160b8 --- /dev/null +++ b/src/LocalConnector.cpp @@ -0,0 +1,56 @@ +#include "LocalConnector.h" +#include "StatusLed.h" +#include "UserData.h" +#include "DisplayPanel.h" + +extern DisplayPanel* displayPanel; +extern UserData* userdataManager; +extern StatusLed* statusLed; + +static byte packRecv[256]; + +LocalConnector::LocalConnector() +{ + WiFi.begin(userdataManager->GetWifiSsid(), userdataManager->GetWifiPasswd()); + + statusLed->SetBlinkRate(StatusLed::BlinkRate::Rate2Hz); + while (WiFi.status() != WL_CONNECTED) + { + delay(1000); + } + statusLed->SetBlinkRate(StatusLed::BlinkRate::RateAlwaysOff); + + displayPanel->DisplayDiskRate((uint32_t)(WiFi.localIP()[0]) * 1024, (uint32_t)(WiFi.localIP()[1]) * 1024); + displayPanel->DisplayNetRate((uint32_t)(WiFi.localIP()[2]) * 1024, (uint32_t)(WiFi.localIP()[3]) * 1024); + + delay(2000); + + data = (UdpData*)(packRecv + 4); + uint32_t port = 32737; + Udp.begin(port); +} + +void LocalConnector::FetchNewData() +{ + int packetSize = Udp.parsePacket(); + if (packetSize) { + int len = Udp.read(packRecv, 255); + byte packSend[2]; + + if (len <= 0) { + return; + } + if (packRecv[0] == 0x19 && packRecv[1] == 0x26 && packRecv[2] == 0x08 && packRecv[3] == 0x17) { + packSend[0] = 0x00; + packSend[1] = 0x00; + } else { + packSend[0] = 0x11; + packSend[1] = 0x22; + memset(packRecv, 0, sizeof(packRecv)); + } + + Udp.beginPacket(Udp.remoteIP(), Udp.remotePort()); + Udp.write(packSend, 2); + Udp.endPacket(); + } +} diff --git a/src/main.cpp b/src/main.cpp index ce22512..ae06972 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,6 +2,7 @@ #include "DisplayPanel.h" #include "OnlineConnector.h" #include "UsbConnector.h" +#include "LocalConnector.h" #include "MonitorItems.h" #include "StatusLed.h" #include "WifiConfigManager.h" @@ -9,14 +10,15 @@ #include "FuncButton.h" DisplayPanel* displayPanel; -OnlineConnector* onlineConnector; -UsbConnector* usbConnector; - StatusLed* statusLed; UserData* userdataManager; WifiConfigManager* wifiConfigManager; FuncButton* funcButton; +OnlineConnector* onlineConnector; +UsbConnector* usbConnector; +LocalConnector* localConnector; + RunMode runMode; void RunMode_Usb_Setup() @@ -36,6 +38,12 @@ void RunMode_Online_Setup() void RunMode_Local_Setup() { + if (!userdataManager->WifiInfoValid()) { + wifiConfigManager = new WifiConfigManager(); + wifiConfigManager->ProcessConfig(); + } else { + localConnector = new LocalConnector(); + } } void setup() @@ -102,6 +110,14 @@ void RunMode_Online_Loop() void RunMode_Local_Loop() { + localConnector->FetchNewData(); + + displayPanel->DisplayCpuPercent(localConnector->data->cpuPercent); + displayPanel->DisplayMemPercent(localConnector->data->memPercent); + displayPanel->DisplayDisk0Percent(localConnector->data->disk0Percent); + displayPanel->DisplayDisk1Percent(localConnector->data->disk1Percent); + displayPanel->DisplayDiskRate(localConnector->data->diskReadRate, localConnector->data->diskWriteRate); + displayPanel->DisplayNetRate(localConnector->data->netSentRate, localConnector->data->netReceiveRate); } void loop()