From 50fe2bcff151f42dd9f2f3154efeafd0ac9dd75a Mon Sep 17 00:00:00 2001 From: Alessandro Gatti Date: Sat, 26 May 2018 06:21:42 +0200 Subject: [PATCH] Shrink GUI code and simplify LCD rotation. (#300) * Inline more methods in FRToSI2C. * Shrink down GUI code. * Simplify LCD rotation handling. * Extract version headers. --- workspace/TS100/inc/FRToSI2C.hpp | 22 ++++++++---- workspace/TS100/src/FRToSI2C.cpp | 14 -------- workspace/TS100/src/gui.cpp | 41 +++++++-------------- workspace/TS100/src/main.cpp | 61 ++++++++++---------------------- 4 files changed, 46 insertions(+), 92 deletions(-) diff --git a/workspace/TS100/inc/FRToSI2C.hpp b/workspace/TS100/inc/FRToSI2C.hpp index d3959e35..a3544081 100644 --- a/workspace/TS100/inc/FRToSI2C.hpp +++ b/workspace/TS100/inc/FRToSI2C.hpp @@ -11,20 +11,28 @@ #include "cmsis_os.h" class FRToSI2C { -public: - FRToSI2C(I2C_HandleTypeDef* i2chandle); - void FRToSInit(); + public: + + FRToSI2C(I2C_HandleTypeDef *i2chandle) : i2c(i2chandle), + I2CSemaphore(nullptr) { + } + + void FRToSInit() { + I2CSemaphore = xSemaphoreCreateBinary(); + xSemaphoreGive(I2CSemaphore); + } + void CpltCallback(); //Normal Tx Callback void Mem_Read(uint16_t DevAddress, uint16_t MemAddress, uint16_t MemAddSize, - uint8_t *pData, uint16_t Size); + uint8_t *pData, uint16_t Size); void Mem_Write(uint16_t DevAddress, uint16_t MemAddress, - uint16_t MemAddSize, uint8_t *pData, uint16_t Size); + uint16_t MemAddSize, uint8_t *pData, uint16_t Size); void Transmit(uint16_t DevAddress, uint8_t *pData, uint16_t Size); -private: - I2C_HandleTypeDef* i2c; + private: + I2C_HandleTypeDef *i2c; SemaphoreHandle_t I2CSemaphore; }; diff --git a/workspace/TS100/src/FRToSI2C.cpp b/workspace/TS100/src/FRToSI2C.cpp index 9a81f9ad..63784d50 100644 --- a/workspace/TS100/src/FRToSI2C.cpp +++ b/workspace/TS100/src/FRToSI2C.cpp @@ -7,11 +7,6 @@ #include "FRToSI2C.hpp" -FRToSI2C::FRToSI2C(I2C_HandleTypeDef* i2chandle) { - i2c = i2chandle; - I2CSemaphore = NULL; -} - void FRToSI2C::CpltCallback() { BaseType_t xHigherPriorityTaskWoken = pdFALSE; i2c->State = HAL_I2C_STATE_READY;//Force state reset @@ -19,8 +14,6 @@ void FRToSI2C::CpltCallback() { xSemaphoreGiveFromISR(I2CSemaphore, &xHigherPriorityTaskWoken); portYIELD_FROM_ISR(xHigherPriorityTaskWoken); } - - } void FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t MemAddress, @@ -69,14 +62,7 @@ void FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, } else { NVIC_SystemReset(); } - } - -} - -void FRToSI2C::FRToSInit() { - I2CSemaphore = xSemaphoreCreateBinary(); - xSemaphoreGive(I2CSemaphore); } void FRToSI2C::Transmit(uint16_t DevAddress, uint8_t* pData, uint16_t Size) { diff --git a/workspace/TS100/src/gui.cpp b/workspace/TS100/src/gui.cpp index 63106688..266ba909 100644 --- a/workspace/TS100/src/gui.cpp +++ b/workspace/TS100/src/gui.cpp @@ -646,55 +646,40 @@ static void settings_setCalibrateVIN(void) { } } -static void settings_displayCalibrateVIN(void) { - printShortDescription(14, 5); -} -static void settings_displaySolderingMenu(void) { +static void displayMenu(size_t index) { //Call into the menu lcd.setFont(1); lcd.setCursor(0, 0); //Draw title - lcd.print(SettingsMenuEntries[0]); + lcd.print(SettingsMenuEntries[index]); //Draw symbol //16 pixel wide image - lcd.drawArea(96 - 16, 0, 16, 16, (&SettingsMenuIcons[(16 * 2) * 0])); + lcd.drawArea(96 - 16, 0, 16, 16, (&SettingsMenuIcons[(16 * 2) * index])); +} + +static void settings_displayCalibrateVIN(void) { + printShortDescription(14, 5); +} +static void settings_displaySolderingMenu(void) { + displayMenu(0); } static void settings_enterSolderingMenu(void) { gui_Menu(solderingMenu); } static void settings_displayPowerMenu(void) { - lcd.setFont(1); - lcd.setCursor(0, 0); - //Draw title - lcd.print(SettingsMenuEntries[1]); - //Draw symbol - //16 pixel wide image - lcd.drawArea(96 - 16, 0, 16, 16, (&SettingsMenuIcons[(16 * 2) * 1])); + displayMenu(1); } static void settings_enterPowerMenu(void) { gui_Menu(PowerMenu); } static void settings_displayUIMenu(void) { - lcd.setFont(1); - lcd.setCursor(0, 0); - //Draw title - lcd.print(SettingsMenuEntries[2]); - //Draw symbol - //16 pixel wide image - lcd.drawArea(96 - 16, 0, 16, 16, (&SettingsMenuIcons[(16 * 2) * 2])); + displayMenu(2); } static void settings_enterUIMenu(void) { gui_Menu(UIMenu); } static void settings_displayAdvancedMenu(void) { - lcd.setFont(1); - lcd.setCursor(0, 0); - //Draw title - lcd.print(SettingsMenuEntries[3]); - //Draw symbol - //16 pixel wide image - lcd.drawArea(96 - 16, 0, 16, 16, (&SettingsMenuIcons[(16 * 2) * 3])); - + displayMenu(3); } static void settings_enterAdvancedMenu(void) { gui_Menu(advancedMenu); diff --git a/workspace/TS100/src/main.cpp b/workspace/TS100/src/main.cpp index 4ba84714..4baa241c 100644 --- a/workspace/TS100/src/main.cpp +++ b/workspace/TS100/src/main.cpp @@ -580,6 +580,16 @@ static void gui_solderingMode() { } } +static const char *HEADERS[] = { + __DATE__, + "Heap: ", + "HWMG: ", + "HWMP: ", + "HWMM: ", + "Time: ", + "Move: " +}; + void showVersion(void) { uint8_t screen = 0; ButtonState b; @@ -590,35 +600,27 @@ void showVersion(void) { lcd.print((char *) "V2.05 PCB"); // Print version number lcd.printNumber(PCBVersion, 1); //Print PCB ID number lcd.setCursor(0, 8); // second line + lcd.print(HEADERS[screen]); switch (screen) { - case 0: - lcd.print(__DATE__); // print the compile date - break; case 1: - lcd.print("Heap: "); lcd.printNumber(xPortGetFreeHeapSize(), 5); break; case 2: - lcd.print("HWMG: "); lcd.printNumber(uxTaskGetStackHighWaterMark(GUITaskHandle), 5); break; case 3: - lcd.print("HWMP: "); lcd.printNumber(uxTaskGetStackHighWaterMark(PIDTaskHandle), 5); break; case 4: - lcd.print("HWMM: "); lcd.printNumber(uxTaskGetStackHighWaterMark(MOVTaskHandle), 5); break; - case 5: - lcd.print("Time: "); lcd.printNumber(xTaskGetTickCount() / 100, 5); break; case 6: - lcd.print("Move: "); lcd.printNumber(lastMovementTime / 100, 5); - + break; + default: break; } @@ -640,19 +642,7 @@ void startGUITask(void const *argument) { uint8_t tempWarningState = 0; bool buttonLockout = false; bool tempOnDisplay = false; - switch (systemSettings.OrientationMode) { - case 0: - lcd.setRotation(false); - break; - case 1: - lcd.setRotation(true); - break; - case 2: - lcd.setRotation(false); - break; - default: - break; - } + lcd.setRotation(systemSettings.OrientationMode & 1); uint32_t ticks = xTaskGetTickCount(); ticks += 400; //4 seconds from now while (xTaskGetTickCount() < ticks) { @@ -889,27 +879,12 @@ void startPIDTask(void const *argument) { #define MOVFilter 8 void startMOVTask(void const *argument) { osDelay(250); // wait for accelerometer to stabilize - switch (systemSettings.OrientationMode) { - case 0: - lcd.setRotation(false); - break; - case 1: - lcd.setRotation(true); - break; - case 2: - lcd.setRotation(false); - break; - default: - break; - } + lcd.setRotation(systemSettings.OrientationMode & 1); lastMovementTime = 0; - int16_t datax[MOVFilter]; - int16_t datay[MOVFilter]; - int16_t dataz[MOVFilter]; + int16_t datax[MOVFilter] = { 0 }; + int16_t datay[MOVFilter] = { 0 }; + int16_t dataz[MOVFilter] = { 0 }; uint8_t currentPointer = 0; - memset(datax, 0, MOVFilter * sizeof(int16_t)); - memset(datay, 0, MOVFilter * sizeof(int16_t)); - memset(dataz, 0, MOVFilter * sizeof(int16_t)); int16_t tx, ty, tz; int32_t avgx, avgy, avgz; if (systemSettings.sensitivity > 9)