From 2c1d1054e54bb3670a3b01df8e86840ec72f568b Mon Sep 17 00:00:00 2001 From: Luca Erbetta <luca.erbetta105@gmail.com> Date: Fri, 29 Mar 2019 20:26:22 +0100 Subject: [PATCH] [ScreenManager] Display pn status --- src/boards/HeliTest/ScreenManager.cpp | 33 +++++++++++++++++++++++---- src/boards/HeliTest/ScreenManager.h | 8 +++++-- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/src/boards/HeliTest/ScreenManager.cpp b/src/boards/HeliTest/ScreenManager.cpp index 641a6b4..5e46acb 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 b5a4990..df32ca2 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 */ -- GitLab