diff --git a/src/boards/HeliTest/ScreenManager.cpp b/src/boards/HeliTest/ScreenManager.cpp index 641a6b48b3808f2818f719d6273a657d87f5d088..5e46acb7848f441e349d7d53c3d4016171d78490 100644 --- a/src/boards/HeliTest/ScreenManager.cpp +++ b/src/boards/HeliTest/ScreenManager.cpp @@ -45,9 +45,10 @@ static char buffer[256]; namespace RogallinaBoard { -ScreenManager::ScreenManager(SensorManager* sm) +ScreenManager::ScreenManager(SensorManager* sm, HeliFMM* heli_fmm, + PinObserverWrapper* pinobs) : display(DisplayManager::instance().getDisplay()), dc(display), dw(dc), - sm(sm) + sm(sm), heli_fmm(heli_fmm), pin_obs(pinobs) { D(printf("Screenmanager constructor\n")); clearScreen(); @@ -73,7 +74,9 @@ void ScreenManager::fetchData() sensorData = sm->getSensorData(); logging_sensors = sm->loggingSensors(); - status_fmm = sHeliFMM->getStatus(); + status_fmm = heli_fmm->getStatus(); + + pin_status = pin_obs->getPinStatus(); } cpu_usage = sSystemDiagnostics->getCpuUsage(); @@ -155,6 +158,28 @@ void ScreenManager::drawRogallinaFMM() sprintf(buffer, "State: %-20s", state.c_str()); writeLine(1, 0, "STATE MACHINE"); writeLine(2, 0, buffer, fgcolor, bgcolor); + + string pin_state; + if (pin_status.state == 1) + { + bgcolor = green; + fgcolor = black; + pin_state = "CONNECTED "; + } + else + { + bgcolor = red; + fgcolor = white; + pin_state = "DISCONNECTED"; + } + + float last_change = + -(pin_status.last_state_change - miosix::getTick()) / 1000.0f; + sprintf(buffer, "PIN1: %s", pin_state.c_str()); + writeLine(21, 0, buffer, fgcolor, bgcolor); + sprintf(buffer, "Num: %3d (%-5.1fs ago)", pin_status.num_state_changes, + last_change); + writeLine(21, 115, buffer); } void ScreenManager::drawLoggerStatus() @@ -326,7 +351,7 @@ void ScreenManager::drawSensorSamples() void ScreenManager::drawSystemStats() { #ifdef DEBUG - writeLine(21, 0, "DEBUG BUILD. DO NOT FLY.", white, red); + writeLine(22, 0, "DEBUG BUILD. DO NOT FLY.", white, red); #endif sprintf(buffer, "CpuUsage: %4.1f Worst stack:%2d %6d bytes", cpu_usage, min_stack.thread_id, min_stack.abs_free_stack); diff --git a/src/boards/HeliTest/ScreenManager.h b/src/boards/HeliTest/ScreenManager.h index b5a4990438748e9c3c20394647a3ccb25f0e5c2a..df32ca2d5392923d57db31f7e579cf6f979f1232 100644 --- a/src/boards/HeliTest/ScreenManager.h +++ b/src/boards/HeliTest/ScreenManager.h @@ -30,6 +30,7 @@ #include "config.h" #include "display/displayWrapper.h" #include "logger/Logger.h" +#include "PinObserverWrapper.h" // class RogallinaFMM; // Type definitions @@ -41,7 +42,7 @@ class ScreenManager { public: - ScreenManager(SensorManager* sm); + ScreenManager(SensorManager* sm, HeliFMM* heli_fmm, PinObserverWrapper* pinobs); ~ScreenManager(); void update(); @@ -77,7 +78,8 @@ private: string logger_file = ""; SensorData sensorData; - + PinStatus pin_status; + float cpu_usage; StackData min_stack; @@ -90,6 +92,8 @@ private: Logger& logger = Logger::instance(); SensorManager* sm; + HeliFMM* heli_fmm; + PinObserverWrapper* pin_obs; }; } // namespace RogallinaBoard #endif /* SRC_SCREENMANAGER_H */