Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: AP3000.cpp
- Revision:
- 0:0ee5e6b7245e
diff -r 000000000000 -r 0ee5e6b7245e AP3000.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/AP3000.cpp Mon Jul 23 12:24:05 2018 +0000
@@ -0,0 +1,2002 @@
+#include "mbed.h"
+#include "AP3000.h"
+#include "FT_Platform.h"
+#include "SDBlockDevice.h"
+#include "FATFileSystem.h"
+//#include "HeapBlockDevice.h"
+#include "SPIFBlockDevice.h"
+#include "I2CEEBlockDevice.h"
+//#include "FRAMSPI.h"
+#include "BurstSPI.h"
+#include "NMEA0183.h"
+#include "nmea_parser.h"
+
+
+Button main_button;
+Indicator main_indicator;
+Indicator main_indicator_previous; // Track changes
+Indicator main_indicator_backup;
+
+//Timer touchTimer;
+Timer blinker;
+//Ticker blinkLights;
+
+uint8_t brightnessLow;
+uint8_t brightnessHigh;
+uint8_t brightnessSelect;
+
+uint8_t mainBlink;
+
+void InitAP3000(void)
+{
+// blinkLights.attach(&updateAlarmLights, 0.5);
+
+ blinker.reset();
+ blinker.start();
+ mainBlink = false;
+
+ setDisplayBrighnessLow(40);
+ setDisplayBrighnessHigh(255);
+ setDisplayBrighnessSelect(BIGHTNESS_SELECT_HIGH);
+
+ main_button.accept_alarm_pressed = BUTTON_RELEASED;
+ main_button.accept_horn_pressed = BUTTON_RELEASED;
+ main_button.set_pressed = BUTTON_RELEASED;
+ main_button.dim_pressed = BUTTON_RELEASED;
+
+ setPumpInUse(PUMP_OFF);
+ setPumpInUseBlinkStatus(STEADY_OFF);
+
+// main_indicator.pump_in_use = PUMP_IN_USE_MAIN;
+// main_indicator.pump_in_use_light = STEADY_OFF;
+
+ // All Main and Aux alarms
+ for(int system = MAIN_SYSTEM; system <= GLOBAL_SYSTEM; system++) {
+ // MAIN_SYSTEM, AUX_SYSTEM, GLOBAL_SYSTEM
+ for(int alarm = PHASE_FAIL; alarm <= FU_FAILURE; alarm++) {
+ // PHASE_FAIL, MAIN_POWER, CTRL_POWER, OIL_PRESS, HYDR_LOCK,
+ // OVERLOAD, OIL_LEVEL, OIL_FILTER, OIL_TEMP, FU_FAILURE
+ setAlarmStatus((System)system, (Alarm)alarm, ALARM_STATUS_OFF);
+ setAlarmBlinkStatus((System)system, (Alarm)alarm, STEADY_OFF);
+ }
+ if (system != GLOBAL_SYSTEM) {
+ setPumpRunningStatus((System)system, RUN_STATUS_OFF);
+ setPumpRunningBlinkStatus((System)system, STEADY_OFF);
+ }
+ }
+
+// main_indicator.md_main_running = RUN_STATUS_OFF;
+// main_indicator.md_main_running_light = STEADY_OFF;
+// main_indicator.md_aux_running = RUN_STATUS_OFF;
+// main_indicator.md_aux_running_light = STEADY_OFF;
+
+// main_indicator.rb_main_phase_fail = ALARM_STATUS_OFF;
+// main_indicator.rb_main_phase_fail_light = STEADY_OFF;
+// main_indicator.rb_main_main_power = ALARM_STATUS_OFF;
+// main_indicator.rb_main_main_power_light = STEADY_OFF;
+// main_indicator.rb_main_ctrl_power = ALARM_STATUS_OFF;
+// main_indicator.rb_main_ctrl_power_light = STEADY_OFF;
+// main_indicator.rb_main_oil_press = ALARM_STATUS_OFF;
+// main_indicator.rb_main_oil_press_light = STEADY_OFF;
+// main_indicator.rb_main_hydr_lock = ALARM_STATUS_OFF;
+// main_indicator.rb_main_hydr_lock_light = STEADY_OFF;
+// main_indicator.rb_main_overload = ALARM_STATUS_OFF;
+// main_indicator.rb_main_overload_light = STEADY_OFF;
+// main_indicator.rb_main_oil_level = ALARM_STATUS_OFF;
+// main_indicator.rb_main_oil_level_light = STEADY_OFF;
+// main_indicator.rb_main_oil_filter = ALARM_STATUS_OFF;
+// main_indicator.rb_main_oil_filter_light = STEADY_OFF;
+// main_indicator.rb_main_oil_temp = ALARM_STATUS_OFF;
+// main_indicator.rb_main_oil_temp_light = STEADY_OFF;
+//
+// main_indicator.rb_aux_phase_fail = ALARM_STATUS_OFF;
+// main_indicator.rb_aux_phase_fail_light = STEADY_OFF;
+// main_indicator.rb_aux_main_power = ALARM_STATUS_OFF;
+// main_indicator.rb_aux_main_power_light = STEADY_OFF;
+// main_indicator.rb_aux_ctrl_power = ALARM_STATUS_OFF;
+// main_indicator.rb_aux_ctrl_power_light = STEADY_OFF;
+// main_indicator.rb_aux_oil_press = ALARM_STATUS_OFF;
+// main_indicator.rb_aux_oil_press_light = STEADY_OFF;
+// main_indicator.rb_aux_hydr_lock = ALARM_STATUS_OFF;
+// main_indicator.rb_aux_hydr_lock_light = STEADY_OFF;
+// main_indicator.rb_aux_overload = ALARM_STATUS_OFF;
+// main_indicator.rb_aux_overload_light = STEADY_OFF;
+// main_indicator.rb_aux_oil_level = ALARM_STATUS_OFF;
+// main_indicator.rb_aux_oil_level_light = STEADY_OFF;
+// main_indicator.rb_aux_oil_filter = ALARM_STATUS_OFF;
+// main_indicator.rb_aux_oil_filter_light = STEADY_OFF;
+// main_indicator.rb_aux_oil_temp = ALARM_STATUS_OFF;
+// main_indicator.rb_aux_oil_temp_light = STEADY_OFF;
+//
+// main_indicator.rb_fu_failure = ALARM_STATUS_OFF;
+// main_indicator.rb_fu_failure_light = STEADY_OFF;
+
+ main_indicator_previous = main_indicator; // Copy to previous state
+}
+
+void loadBitmaps(void)
+{
+ TFT.ResetInflateFileBitmap();
+
+// TFT.LoadInflateFileBitmap("/fs/BACKGROUND_01_C_20x20_BL.bin", L8, 20, 20);
+// TFT.LoadInflateFileBitmap("/fs/BACKGROUND_01_C_20x20_BR.bin", L8, 20, 20);
+// TFT.LoadInflateFileBitmap("/fs/BACKGROUND_01_C_20x20_TL.bin", L8, 20, 20);
+// TFT.LoadInflateFileBitmap("/fs/BACKGROUND_01_C_20x20_TR.bin", L8, 20, 20);
+// TFT.LoadInflateFileBitmap("/fs/BACKGROUND_01_H_5x4.bin", L8, 5, 4);
+// TFT.LoadInflateFileBitmap("/fs/BACKGROUND_01_H_10x4.bin", L8, 10, 4);
+// TFT.LoadInflateFileBitmap("/fs/BACKGROUND_01_H_25x4.bin", L8, 25, 4);
+// TFT.LoadInflateFileBitmap("/fs/BACKGROUND_01_H_190x4.bin", L8, 190, 4);
+// TFT.LoadInflateFileBitmap("/fs/BACKGROUND_01_V_4x535.bin", L8, 4, 535);
+// TFT.LoadInflateFileBitmap("/fs/BACKGROUND_01_V_4x21.bin", L8, 4, 21);
+
+// TFT.LoadInflateFileBitmap("/fs/RegularButtonBlk_220x51r4t.bin", ARGB4, 220, 51);
+// TFT.LoadInflateFileBitmap("/fs/RegularButtonGray_220x51r10t.bin", ARGB4, 220, 51);
+// TFT.LoadInflateFileBitmap("/fs/RegularButtonRed_220x51r10t.bin", ARGB4, 220, 51);
+// TFT.LoadInflateFileBitmap("/fs/RegularButtonYel_220x51r10t.bin", ARGB4, 220, 51);
+// TFT.LoadInflateFileBitmap("/fs/RegularButtonGray_220x51r0t.bin", ARGB4, 220, 51);
+// TFT.LoadInflateFileBitmap("/fs/RegularButtonRed_220x51r0t.bin", ARGB4, 220, 51);
+// TFT.LoadInflateFileBitmap("/fs/RegularButtonYel_220x51r0t.bin", ARGB4, 220, 51);
+// TFT.LoadInflateFileBitmap("/fs/RegularButtonGray_220x51r0r10t.bin", ARGB4, 220, 51); // 40 characters
+// TFT.LoadInflateFileBitmap("/fs/RegularButtonRed_220x51r0r10t.bin", ARGB4, 220, 51);
+// TFT.LoadInflateFileBitmap("/fs/RegularButtonYel_220x51r0r10t.bin", ARGB4, 220, 51);
+
+ TFT.LoadInflateFileBitmap("/fs/SwitchOn_234x132_blk.bin", L8, 234, 132);
+ TFT.LoadInflateFileBitmap("/fs/SwitchOff_234x132_blk.bin", L8, 234, 132);
+ TFT.LoadInflateFileBitmap("/fs/SwitchOn_100x132_blk.bin", L8, 100, 132);
+ TFT.LoadInflateFileBitmap("/fs/SwitchOff_100x132_blk.bin", L8, 100, 132);
+ TFT.LoadInflateFileBitmap("/fs/SwitchOn_115x66_t.bin", L8, 115, 66);
+ TFT.LoadInflateFileBitmap("/fs/SwitchOff_115x66_t.bin", L8, 115, 66);
+
+ TFT.LoadInflateFileBitmap("/fs/settings_40x40.bin", L8, 40, 40);
+ TFT.LoadInflateFileBitmap("/fs/light-bulb_40x40.bin", L8, 40, 40);
+
+
+ // Markus Adobe Ilustrator
+// TFT.LoadInflateFileBitmap("/fs/MD_DISABLED_230x70.bin", ARGB4, 230, 70);
+// TFT.LoadInflateFileBitmap("/fs/MD_OFF_230x70.bin", ARGB4, 230, 70);
+// TFT.LoadInflateFileBitmap("/fs/MD_OFF_GREY_230x70.bin", ARGB4, 230, 70);
+// TFT.LoadInflateFileBitmap("/fs/MD_RUNNING_230x70.bin", ARGB4, 230, 70);
+// TFT.LoadInflateFileBitmap("/fs/MD_WARNING_230x70.bin", ARGB4, 230, 70);
+
+ // SVG generated bitmaps, FT813 Font: Google Yantramanav
+ // https://www.w3schools.com/howto/tryit.asp?font=Yantramanav
+ // https://fonts.google.com/?query=Yantramanav
+ TFT.LoadInflateFileBitmap("/fs/MD_DISABLED_220x51bt.bin", ARGB4, 220, 51);
+ TFT.LoadInflateFileBitmap("/fs/MD_OFF_Grey_220x51bt.bin", ARGB4, 220, 51);
+ TFT.LoadInflateFileBitmap("/fs/MD_OFF_Red_220x51bt.bin", ARGB4, 220, 51);
+ TFT.LoadInflateFileBitmap("/fs/MD_RUNNING_220x51bt.bin", ARGB4, 220, 51);
+ TFT.LoadInflateFileBitmap("/fs/MD_WARNING_220x51bt.bin", ARGB4, 220, 51);
+
+ TFT.LoadInflateFileBitmap("/fs/RUN_TIME_C_ON_21_X_21.bin", ARGB4, 21, 21);
+ TFT.LoadInflateFileBitmap("/fs/RUN_TIME_C_OFF_21_X_21.bin", ARGB4, 21, 21);
+ TFT.LoadInflateFileBitmap("/fs/RUN_TIME_L_ON_21_X_21.bin", ARGB4, 21, 21);
+ TFT.LoadInflateFileBitmap("/fs/RUN_TIME_L_OFF_21_X_21.bin", ARGB4, 21, 21);
+ TFT.LoadInflateFileBitmap("/fs/RUN_TIME_R_ON_21_X_21.bin", ARGB4, 21, 21);
+ TFT.LoadInflateFileBitmap("/fs/RUN_TIME_R_OFF_21_X_21.bin", ARGB4, 21, 21);
+
+// TFT.DL(DISPLAY()); // Display the image
+ TFT.Swap(); // Swap the current display list
+ TFT.Flush_Co_Buffer(); // Download the command list into fifo
+ TFT.WaitCmdfifo_empty(); // Wait till coprocessor completes the operation
+}
+
+void loadSplashScreen(void)
+{
+ TFT.DLstart(); // start a new display command list
+ TFT.DL(CLEAR_COLOR_RGB(0x00, 0x00, 0x00)); // set the clear color to white
+ TFT.DL(CLEAR(1, 1, 1)); // clear buffers -> color buffer,stencil buffer, tag buffer
+ TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set the clear color to white
+ TFT.DL(DISPLAY()); // Display the image
+ TFT.Swap(); // Swap the current display list
+ TFT.Flush_Co_Buffer(); // Download the command list into fifo
+ TFT.WaitCmdfifo_empty(); // Wait till coprocessor completes the operation
+
+ TFT.ResetInflateFileBitmap();
+ TFT.LoadInflateFileBitmap("/fs/DMC_logo_438x154.bin", ARGB4, 438, 154);
+// TFT.LoadInflateFileBitmap("/fs/DMC_logo_black_438x154.bin", RGB332, 438, 154); // smaller, scattering effect
+}
+
+void showSplashScreen(void)
+{
+ TFT.DLstart(); // start a new display command list
+ TFT.DL(CLEAR_COLOR_RGB(0x00, 0x00, 0x00)); // set the clear color to white
+ TFT.DL(CLEAR(1, 1, 1)); // clear buffers -> color buffer,stencil buffer, tag buffer
+ TFT.DL(COLOR_RGB(0xff, 0x80, 0x00)); // set current color to gray
+
+// // Use bitmap
+// TFT.DL(BEGIN(BITMAPS));
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("DMC_logo", 21, 323);
+
+ // Use text (preserves space)
+ TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+ TFT.Text(240, 400, 31, OPT_CENTER, "DMC"); // text SYSTEM
+
+ TFT.DL(DISPLAY()); // Display the image
+ TFT.Swap(); // Swap the current display list
+ TFT.Flush_Co_Buffer(); // Download the command list into fifo
+ TFT.WaitCmdfifo_empty(); // Wait till coprocessor completes the operation
+}
+
+void showMainPage(void)
+{
+// printf("showMainPage\n");
+
+ TFT.DLstart(); // start a new display command list
+ TFT.DL(CLEAR_COLOR_RGB(0x10, 0x10, 0x10)); // set the clear color to white
+ TFT.DL(CLEAR(1, 1, 1)); // clear buffers -> color buffer,stencil buffer, tag buffer
+ TFT.DL(COLOR_RGB(0xff, 0xff, 0xff)); // set the clear color to white
+
+ TFT.DL(BEGIN(BITMAPS));
+
+// Main box
+RoundedRectangle(5, 5, 229, 541, 20, 2, 0xC8, 0xC8, 0xC8, 0x00, 0x00, 0x00, 0, "");
+// Black cut-out at the top
+RoundedRectangle(50, 3, 140, 8, 0, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0, "");
+
+// Aux box
+RoundedRectangle(245, 5, 229, 541, 20, 2, 0xC8, 0xC8, 0xC8, 0x00, 0x00, 0x00, 0, "");
+// Black cut-out at the top
+RoundedRectangle(290, 3, 140, 8, 0, 0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0, "");
+
+int yFuBox = 557;
+
+// FU box
+RoundedRectangle(125, yFuBox, 229, 58, 20, 2, 0xC8, 0xC8, 0xC8, 0x00, 0x00, 0x00, 0, "");
+
+ TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+
+ // Build the background for main and aux
+// TFT.ShowBitmapByName("BACKGROUND_01_C_20x20_TL", 5, 5);
+// TFT.ShowBitmapByName("BACKGROUND_01_C_20x20_TL", 5 + 240, 5);
+// TFT.ShowBitmapByName("BACKGROUND_01_H_25x4", 25, 5);
+// TFT.ShowBitmapByName("BACKGROUND_01_H_25x4", 190, 5);
+// TFT.ShowBitmapByName("BACKGROUND_01_H_25x4", 25 + 240, 5);
+// TFT.ShowBitmapByName("BACKGROUND_01_H_25x4", 190 + 240, 5);
+// TFT.ShowBitmapByName("BACKGROUND_01_C_20x20_TR", 215, 5);
+// TFT.ShowBitmapByName("BACKGROUND_01_C_20x20_TR", 215 + 240, 5);
+// TFT.ShowBitmapByName("BACKGROUND_01_V_4x535", 5, 25);
+// TFT.ShowBitmapByName("BACKGROUND_01_V_4x535", 231, 25);
+// TFT.ShowBitmapByName("BACKGROUND_01_V_4x535", 5 + 240, 25);
+// TFT.ShowBitmapByName("BACKGROUND_01_V_4x535", 231 + 240, 25);
+// TFT.ShowBitmapByName("BACKGROUND_01_C_20x20_BL", 5, 560);
+// TFT.ShowBitmapByName("BACKGROUND_01_C_20x20_BL", 5 + 240, 560);
+// TFT.ShowBitmapByName("BACKGROUND_01_C_20x20_BR", 215, 560);
+// TFT.ShowBitmapByName("BACKGROUND_01_C_20x20_BR", 215 + 240, 560);
+// TFT.ShowBitmapByName("BACKGROUND_01_H_190x4", 25, 576);
+// TFT.ShowBitmapByName("BACKGROUND_01_H_190x4", 25 + 240, 576);
+
+ // Build the background for FU FAILURE box
+// TFT.ShowBitmapByName("BACKGROUND_01_C_20x20_TL", 125, 588);
+// TFT.ShowBitmapByName("BACKGROUND_01_C_20x20_TR", 335, 588);
+// TFT.ShowBitmapByName("BACKGROUND_01_C_20x20_BL", 125, 629);
+// TFT.ShowBitmapByName("BACKGROUND_01_C_20x20_BR", 335, 629);
+// TFT.ShowBitmapByName("BACKGROUND_01_V_4x21", 125, 608);
+// TFT.ShowBitmapByName("BACKGROUND_01_V_4x21", 351, 608);
+// TFT.ShowBitmapByName("BACKGROUND_01_H_190x4", 145, 588);
+// TFT.ShowBitmapByName("BACKGROUND_01_H_190x4", 145, 645);
+
+ // Text SYSTEM at the top
+ TFT.DL(COLOR_RGB(0xC8, 0xC8, 0xC8)); // set current color to gray
+ TFT.Text(118, 15, 30, OPT_CENTER, "SYSTEM"); // text SYSTEM
+ TFT.Text(118 + 240, 15, 30, OPT_CENTER, "SYSTEM"); // text SYSTEM
+// TFT.Text(118, 25, 30, OPT_CENTER, "RUNNING"); // text SYSTEM
+// TFT.Text(118 + 240, 25, 30, OPT_CENTER, "WARNING"); // text SYSTEM
+
+
+ // Draw indicators
+
+ // Pump Running Indicators (small triangles)
+ TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+ switch(main_indicator.pump_in_use) {
+ case PUMP_IN_USE :
+ TFT.ShowBitmapByName("RUN_TIME_C_ON_21_X_21", 230, 2);
+ TFT.ShowBitmapByName("RUN_TIME_L_OFF_21_X_21", 207, 9);
+ TFT.ShowBitmapByName("RUN_TIME_R_OFF_21_X_21", 253, 9);
+ break;
+ case PUMP_IN_USE_MAIN :
+ TFT.ShowBitmapByName("RUN_TIME_C_OFF_21_X_21", 230, 2);
+ TFT.ShowBitmapByName("RUN_TIME_L_ON_21_X_21", 207, 9);
+ TFT.ShowBitmapByName("RUN_TIME_R_OFF_21_X_21", 253, 9);
+ break;
+ case PUMP_IN_USE_AUX :
+ TFT.ShowBitmapByName("RUN_TIME_C_OFF_21_X_21", 230, 2);
+ TFT.ShowBitmapByName("RUN_TIME_L_OFF_21_X_21", 207, 9);
+ TFT.ShowBitmapByName("RUN_TIME_R_ON_21_X_21", 253, 9);
+ break;
+ default :
+ // PUMP_OFF
+ TFT.ShowBitmapByName("RUN_TIME_C_OFF_21_X_21", 230, 2);
+ TFT.ShowBitmapByName("RUN_TIME_L_OFF_21_X_21", 207, 9);
+ TFT.ShowBitmapByName("RUN_TIME_R_OFF_21_X_21", 253, 9);
+ }
+
+ // Draw indicators and buttons
+ int y = 0;
+ int x1 = 120;
+ int x2 = 120 + 240;
+ int xc = 240;
+ int x1b = 10;
+ int x2b = 250;
+ int xcb = 130;
+ uint8_t box_radius = 15;
+
+
+ // MD Running indicators
+ y += 65;
+ TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonBlk_220x51r4t", 10, y-25);
+// TFT.ShowBitmapByName("RegularButtonBlk_220x51r4t", 10 + 240, y-25);
+
+RoundedRectangle(x1b, y-25+1, 219, 48, 5, 2, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0, "");
+RoundedRectangle(x2b, y-25+1, 219, 48, 5, 2, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0, "");
+
+ // SVG indicators, FT813 Font: Google Yantramanav
+ // https://www.w3schools.com/howto/tryit.asp?font=Yantramanav
+ // https://fonts.google.com/?query=Yantramanav
+// TFT.ShowBitmapByName("MD_RUNNING_220x51", 10, y-27);
+// TFT.ShowBitmapByName("MD_WARNING_220x51", 10 + 240, y-27);
+// Markus Adobe Ilustrator
+// TFT.ShowBitmapByName("MD_RUNNING_230x70", 5, y-35);
+// TFT.ShowBitmapByName("MD_WARNING_230x70", 245, y-35);
+
+ TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+ switch(main_indicator.md_main_running) {
+ case RUN_STATUS_RUNNING :
+ TFT.ShowBitmapByName("MD_RUNNING_220x51bt", 10, y-27);
+ break;
+ case RUN_STATUS_WARNING :
+ TFT.ShowBitmapByName("MD_WARNING_220x51bt", 10, y-27);
+ break;
+ case RUN_STATUS_DISABLED :
+ TFT.ShowBitmapByName("MD_DISABLED_220x51bt", 10, y-27);
+ break;
+ case RUN_STATUS_OFF_RED :
+ TFT.ShowBitmapByName("MD_OFF_Red_220x51bt", 10, y-27);
+ break;
+ case RUN_STATUS_OFF :
+ TFT.ShowBitmapByName("MD_OFF_Grey_220x51bt", 10, y-27);
+ break;
+ default :
+ // RUN_STATUS_BLANK: No bitmap
+ break;
+ }
+
+ switch(main_indicator.md_aux_running) {
+ case RUN_STATUS_RUNNING :
+ TFT.ShowBitmapByName("MD_RUNNING_220x51bt", 250, y-27);
+ break;
+ case RUN_STATUS_WARNING :
+ TFT.ShowBitmapByName("MD_WARNING_220x51bt", 250, y-27);
+ break;
+ case RUN_STATUS_DISABLED :
+ TFT.ShowBitmapByName("MD_DISABLED_220x51bt", 250, y-27);
+ break;
+ case RUN_STATUS_OFF_RED :
+ TFT.ShowBitmapByName("MD_OFF_Red_220x51bt", 250, y-27);
+ break;
+ case RUN_STATUS_OFF :
+ TFT.ShowBitmapByName("MD_OFF_Grey_220x51bt", 250, y-27);
+ break;
+ default :
+ // RUN_STATUS_BLANK: No bitmap
+ break;
+ }
+
+ // PHASE FAIL
+ y += 60;
+ switch(main_indicator.rb_main_phase_fail) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "PHASE FAIL"); // text PHASE FAIL
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "PHASE FAIL");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "PHASE FAIL"); // text PHASE FAIL
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "PHASE FAIL");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x1, y, 30, OPT_CENTER, "PHASE FAIL"); // text PHASE FAIL
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "PHASE FAIL");
+ }
+
+ switch(main_indicator.rb_aux_phase_fail) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "PHASE FAIL"); // text PHASE FAIL
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "PHASE FAIL");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "PHASE FAIL"); // text PHASE FAIL
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "PHASE FAIL");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x2, y, 30, OPT_CENTER, "PHASE FAIL"); // text PHASE FAIL
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "PHASE FAIL");
+ }
+
+ // MAIN POWER
+ y += 49;
+ switch(main_indicator.rb_main_main_power) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "MAIN POWER"); // text MAIN POWER
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "MAIN POWER");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "MAIN POWER"); // text MAIN POWER
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "MAIN POWER");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x1, y, 30, OPT_CENTER, "MAIN POWER"); // text MAIN POWER
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "MAIN POWER");
+ }
+
+ switch(main_indicator.rb_aux_main_power) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "MAIN POWER"); // text MAIN POWER
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "MAIN POWER");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "MAIN POWER"); // text MAIN POWER
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "MAIN POWER");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x2, y, 30, OPT_CENTER, "MAIN POWER"); // text MAIN POWER
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "MAIN POWER");
+ }
+
+ // CTRL POWER
+ y += 49;
+ switch(main_indicator.rb_main_ctrl_power) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "CTRL POWER"); // text CTRL POWER
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "CTRL POWER");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "CTRL POWER"); // text CTRL POWER
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "CTRL POWER");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x1, y, 30, OPT_CENTER, "CTRL POWER"); // text CTRL POWER
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "CTRL POWER");
+ }
+
+ switch(main_indicator.rb_aux_ctrl_power) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "CTRL POWER"); // text CTRL POWER
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "CTRL POWER");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "CTRL POWER"); // text CTRL POWER
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "CTRL POWER");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x2, y, 30, OPT_CENTER, "CTRL POWER"); // text CTRL POWER
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "CTRL POWER");
+ }
+
+ // OIL PRESS
+ y += 49;
+ switch(main_indicator.rb_main_oil_press) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL PRESS"); // text OIL PRESS
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "OIL PRESS");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL PRESS"); // text OIL PRESS
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "OIL PRESS");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL PRESS"); // text OIL PRESS
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "OIL PRESS");
+ }
+
+ switch(main_indicator.rb_aux_oil_press) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "OIL PRESS"); // text OIL PRESS
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "OIL PRESS");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "OIL PRESS"); // text OIL PRESS
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "OIL PRESS");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x2, y, 30, OPT_CENTER, "OIL PRESS"); // text OIL PRESS
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "OIL PRESS");
+ }
+
+ // HYDR LOCK
+ y += 49;
+ TFT.DL(TAG(100)); // assign TAG
+ switch(main_indicator.rb_main_hydr_lock) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "HYDR LOCK"); // text HYDR LOCK
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "HYDR LOCK");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "HYDR LOCK"); // text HYDR LOCK
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "HYDR LOCK");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x1, y, 30, OPT_CENTER, "HYDR LOCK"); // text HYDR LOCK
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "HYDR LOCK");
+ }
+
+ TFT.DL(TAG(101)); // assign TAG
+ switch(main_indicator.rb_aux_hydr_lock) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "HYDR LOCK"); // text HYDR LOCK
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "HYDR LOCK");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "HYDR LOCK"); // text HYDR LOCK
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "HYDR LOCK");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x2, y, 30, OPT_CENTER, "HYDR LOCK"); // text HYDR LOCK
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "HYDR LOCK");
+ }
+
+ // OVERLOAD
+ y += 49;
+
+ switch(main_indicator.rb_main_overload) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "OVERLOAD"); // text OVERLOAD
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "OVERLOAD");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "OVERLOAD"); // text OVERLOAD
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "OVERLOAD");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x1, y, 30, OPT_CENTER, "OVERLOAD"); // text OVERLOAD
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "OVERLOAD");
+ }
+
+ switch(main_indicator.rb_aux_overload) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "OVERLOAD"); // text OVERLOAD
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "OVERLOAD");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "OVERLOAD"); // text OVERLOAD
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "OVERLOAD");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x2, y, 30, OPT_CENTER, "OVERLOAD"); // text OVERLOAD
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "OVERLOAD");
+ }
+
+ // OIL LEVEL
+ y += 49;
+ switch(main_indicator.rb_main_oil_level) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL LEVEL"); // text OIL LEVEL
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "OIL LEVEL");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL LEVEL"); // text OIL LEVEL
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "OIL LEVEL");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL LEVEL"); // text OIL LEVEL
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "OIL LEVEL");
+ }
+
+ switch(main_indicator.rb_aux_oil_level) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "OIL LEVEL"); // text OIL LEVEL
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "OIL LEVEL");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "OIL LEVEL"); // text OIL LEVEL
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "OIL LEVEL");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x2, y, 30, OPT_CENTER, "OIL LEVEL"); // text OIL LEVEL
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "OIL LEVEL");
+ }
+
+ // OIL FILTER
+ y += 49;
+ switch(main_indicator.rb_main_oil_filter) {
+ case ALARM_STATUS_OFF :
+ TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.DL(COLOR_RGB(0x60, 0x60, 0x60)); // set current color to white
+// TFT.RectWH(x1b+1, y-25+1, 217, 48, 1);
+// TFT.DL(COLOR_RGB(0x80, 0x80, 0x80)); // set current color to white
+// TFT.RectWH(x1b+1+4, y-25+1+4, 217-8, 48-8, 1);
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "OIL FILTER");
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL FILTER"); // text OIL FILTER
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "OIL FILTER");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL FILTER"); // text OIL FILTER
+ RegularButton(x1b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "OIL FILTER");
+ }
+
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to white
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL FILTER"); // text OIL FILTER
+
+
+
+ switch(main_indicator.rb_aux_oil_filter) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "OIL FILTER"); // text OIL FILTER
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0x80, 0x80, 0x80, 0, "OIL FILTER");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "OIL FILTER"); // text OIL FILTER
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFF, 0xFF, 0x00, 0, "OIL FILTER");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x2, y, 30, OPT_CENTER, "OIL FILTER"); // text OIL FILTER
+ RegularButton(x2b, y-25+1, 219, 48, 1, 0, 0xFE, 0x00, 0x00, 1, "OIL FILTER");
+ }
+
+ // OIL TEMP
+ y += 49;
+ switch(main_indicator.rb_main_oil_temp) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0r10t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL TEMP"); // text OIL TEMP
+ RegularButton(x1b, y-25+1, 219, 48, box_radius, 1, 0x80, 0x80, 0x80, 0, "OIL TEMP");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0r10t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL TEMP"); // text OIL TEMP
+ RegularButton(x1b, y-25+1, 219, 48, box_radius, 1, 0xFF, 0xFF, 0x00, 0, "OIL TEMP");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0r10t", x1b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL TEMP"); // text OIL TEMP
+ RegularButton(x1b, y-25+1, 219, 48, box_radius, 1, 0xFE, 0x00, 0x00, 1, "OIL TEMP");
+ }
+
+// TFT.Text(x1, y, 30, OPT_CENTER, "OIL TEMP"); // text OIL TEMP
+
+ switch(main_indicator.rb_aux_oil_temp) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r0r10t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "OIL TEMP"); // text OIL TEMP
+ RegularButton(x2b, y-25+1, 219, 48, box_radius, 1, 0x80, 0x80, 0x80, 0, "OIL TEMP");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r0r10t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(x2, y, 30, OPT_CENTER, "OIL TEMP"); // text OIL TEMP
+ RegularButton(x2b, y-25+1, 219, 48, box_radius, 1, 0xFF, 0xFF, 0x00, 0, "OIL TEMP");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r0r10t", x2b, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(x2, y, 30, OPT_CENTER, "OIL TEMP"); // text OIL TEMP
+ RegularButton(x2b, y-25+1, 219, 48, box_radius, 1, 0xFE, 0x00, 0x00, 1, "OIL TEMP");
+ }
+
+ // FU FAILURE
+ y = yFuBox; // 557
+ switch(main_indicator.rb_fu_failure) {
+ case ALARM_STATUS_OFF :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonGray_220x51r10t", xcb, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(xc, y, 30, OPT_CENTER, "FU FAILURE"); // text FU FAILURE
+ RegularButton(xcb, y+5, 219, 48, box_radius, 2, 0x80, 0x80, 0x80, 0, "FU FAILURE");
+ break;
+ case ALARM_STATUS_WARNING :
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonYel_220x51r10t", xcb, y-25);
+// TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+// TFT.Text(xc, y, 30, OPT_CENTER, "FU FAILURE"); // text FU FAILURE
+ RegularButton(xcb, y+5, 219, 48, box_radius, 2, 0xFF, 0xFF, 0x00, 0, "FU FAILURE");
+ break;
+ default : // ALARM_STATUS_FAILURE
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.ShowBitmapByName("RegularButtonRed_220x51r10t", xcb, y-25);
+// TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+// TFT.Text(xc, y, 30, OPT_CENTER, "FU FAILURE"); // text FU FAILURE
+ RegularButton(xcb, y+5, 219, 48, box_radius, 2, 0xFE, 0x00, 0x00, 1, "FU FAILURE");
+ }
+
+
+ // BUTTON SET
+ TFT.DL(TAG(BUTTON_SET_TAG)); // assign TAG
+ TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+ if (main_button.set_pressed == 0) {
+ TFT.ShowBitmapByName("SwitchOn_115x66_t", 5, y-4);
+ TFT.DL(COLOR_RGB(0xB0, 0xB0, 0xB0)); // set current color to white
+ } else {
+ TFT.ShowBitmapByName("SwitchOff_115x66_t", 5, y-4);
+ TFT.DL(COLOR_RGB(0x90, 0x90, 0x90)); // set current color to white
+ }
+// TFT.Text(63, y+1, 30, OPT_CENTER, "SET"); // text SET
+ TFT.ShowBitmapByName("settings_40x40", 42, y-4+13);
+
+ // BUTTON DIM
+ TFT.DL(TAG(BUTTON_DIM_TAG)); // assign TAG
+ TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+ if (main_button.dim_pressed == 0) {
+ TFT.ShowBitmapByName("SwitchOn_115x66_t", 360, y-4);
+ TFT.DL(COLOR_RGB(0xB0, 0xB0, 0xB0)); // set current color to white
+ } else {
+ TFT.ShowBitmapByName("SwitchOff_115x66_t", 360, y-4);
+ TFT.DL(COLOR_RGB(0x90, 0x90, 0x90)); // set current color to white
+ }
+// TFT.Text(418, y+1, 30, OPT_CENTER, "DIM"); // text DIM
+ TFT.ShowBitmapByName("light-bulb_40x40", 397, y-4+13);
+
+
+ // Accept Switches
+ y = 623;
+ // BUTTON ACCEPT ALARM
+ TFT.DL(TAG(BUTTON_ACCEPT_ALARM_TAG)); // assign TAG
+ TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+ if (main_button.accept_alarm_pressed == 0)
+ TFT.ShowBitmapByName("SwitchOn_234x132", 3, y);
+ else
+ TFT.ShowBitmapByName("SwitchOff_234x132", 3, y);
+ TFT.Text(x1, y+49, 30, OPT_CENTER, "ACCEPT"); // text OIL PRESS
+ TFT.Text(x1, y+84, 30, OPT_CENTER, "ALARM"); // text OIL PRESS
+
+ // BUTTON ACCEPT HORN
+ TFT.DL(TAG(BUTTON_ACCEPT_HORN_TAG)); // assign TAG
+ TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+ if (main_button.accept_horn_pressed == 0)
+ TFT.ShowBitmapByName("SwitchOn_234x132", 3 + 240, y);
+ else
+ TFT.ShowBitmapByName("SwitchOff_234x132", 3 + 240, y);
+ TFT.Text(x2, y+49, 30, OPT_CENTER, "ACCEPT"); // text OIL PRESS
+ TFT.Text(x2, y+84, 30, OPT_CENTER, "HORN"); // text OIL PRESS
+
+ TFT.DL(DISPLAY()); // Display the image
+ TFT.Swap(); // Swap the current display list
+ TFT.Flush_Co_Buffer(); // Download the command list into fifo
+ TFT.WaitCmdfifo_empty(); // Wait till coprocessor completes the operation
+}
+
+void RegularButton(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t corner, uint8_t style, uint8_t R, uint8_t G, uint8_t B, uint8_t text_color, char *text)
+{
+ uint8_t linewidth = 4;
+ uint8_t corner_inner = corner - linewidth;
+ if (corner_inner < 1) {
+ corner_inner = 1;
+ }
+ uint8_t Rd = R * 0.5;
+ uint8_t Gd = G * 0.5;
+ uint8_t Bd = B * 0.5;
+ uint16_t x1 = x0 + w / 2;
+ uint16_t y1 = y0 + h / 2;
+ if (style == 0) {
+ TFT.DL(COLOR_RGB(Rd, Gd, Bd)); // set current color to white
+ TFT.RectWH(x0, y0, w, h, 1);
+ TFT.DL(COLOR_RGB(R, G, B)); // set current color to white
+ TFT.RectWH(x0+linewidth, y0+linewidth, w-linewidth*2, h-linewidth*2, 1);
+ } else if (style == 1) {
+ if (corner < linewidth) {
+ corner = linewidth;
+ }
+ if (corner_inner < 1) {
+ corner_inner = 1;
+ }
+ TFT.DL(COLOR_RGB(Rd, Gd, Bd)); // set current color to white
+ TFT.RectWH(x0, y0, corner, corner, 1); // left top rect
+ TFT.RectWH(x0+w-corner, y0, corner, corner, 1); // right top rect
+ TFT.RectWH(x0, y0, w, h, corner);
+ TFT.DL(COLOR_RGB(R, G, B)); // set current color to white
+ TFT.RectWH(x0+linewidth, y0+linewidth, corner, corner, 1); // left top rect
+ TFT.RectWH(x0+w-linewidth-corner, y0+linewidth, corner, corner, 1); // right top rect
+ TFT.RectWH(x0+linewidth, y0+linewidth, w-linewidth*2, h-linewidth*2, corner_inner);
+ } else if (style == 2) {
+ if (corner < linewidth) {
+ corner = linewidth;
+ }
+ if (corner_inner < 1) {
+ corner_inner = 1;
+ }
+ TFT.DL(COLOR_RGB(Rd, Gd, Bd)); // set current color to white
+ TFT.RectWH(x0, y0, w, h, corner);
+ TFT.DL(COLOR_RGB(R, G, B)); // set current color to white
+ TFT.RectWH(x0+linewidth, y0+linewidth, w-linewidth*2, h-linewidth*2, corner_inner);
+ }
+ if (text_color == 0) {
+ TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+ }
+ else {
+ TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+ }
+ TFT.Text(x1, y1, 30, OPT_CENTER, text); // text OIL TEMP
+}
+
+void RoundedRectangle(int16_t x0, int16_t y0, int16_t w, int16_t h, int16_t corner, uint8_t style, uint8_t Ro, uint8_t Go, uint8_t Bo, uint8_t Ri, uint8_t Gi, uint8_t Bi, uint8_t text_color, char *text)
+{
+ uint8_t linewidth = 4;
+ uint8_t corner_inner = corner - linewidth;
+ uint16_t x1 = x0 + w / 2;
+ uint16_t y1 = y0 + h / 2;
+ if (style == 0) {
+ TFT.DL(COLOR_RGB(Ro, Go, Bo)); // set current color to white
+ TFT.RectWH(x0, y0, w, h, 1);
+ TFT.DL(COLOR_RGB(Ri, Gi, Bi)); // set current color to white
+ TFT.RectWH(x0+linewidth, y0+linewidth, w-linewidth*2, h-linewidth*2, 1);
+ } else if (style == 1) {
+ if (corner < linewidth) {
+ corner = linewidth;
+ }
+ if (corner_inner < linewidth) {
+ corner_inner = linewidth;
+ }
+ TFT.DL(COLOR_RGB(Ro, Go, Bo)); // set current color to white
+ TFT.RectWH(x0, y0, corner, corner, 1);
+ TFT.RectWH(x0+w-corner, y0, corner, corner, 1);
+ TFT.RectWH(x0, y0, w, h, corner);
+ TFT.DL(COLOR_RGB(Ri, Gi, Bi)); // set current color to white
+ TFT.RectWH(x0+linewidth, y0+linewidth, corner, corner, 1);
+ TFT.RectWH(x0+linewidth+w-corner-corner_inner, y0+linewidth, corner, corner, 1);
+ TFT.RectWH(x0+linewidth, y0+linewidth, w-linewidth*2, h-linewidth*2, corner_inner);
+ } else if (style == 2) {
+ if (corner < linewidth) {
+ corner = linewidth;
+ }
+ if (corner_inner < linewidth) {
+ corner_inner = linewidth;
+ }
+ TFT.DL(COLOR_RGB(Ro, Go, Bo)); // set current color to white
+ TFT.RectWH(x0, y0, w, h, corner);
+ TFT.DL(COLOR_RGB(Ri, Gi, Bi)); // set current color to white
+ TFT.RectWH(x0+linewidth, y0+linewidth, w-linewidth*2, h-linewidth*2, corner_inner);
+ }
+ // Text
+// if (strlen(text) > 0) {
+ if (text_color == 0) {
+ TFT.DL(COLOR_RGB(0x00, 0x00, 0x00)); // set current color to black
+ }
+ else {
+ TFT.DL(COLOR_RGB(0xFF, 0xFF, 0xFF)); // set current color to white
+ }
+ TFT.Text(x1, y1, 30, OPT_CENTER, text); // text
+// }
+}
+
+void updateAlarmLights(void)
+{
+ // Set indicators to OFF, BLINK, or STEADY_OFF ON
+ // Status can be OFF, WARNING, and FAILURE
+ // Update screen if something changed
+
+ bool updatePage = false;
+ if (blinker.read() >= 0.5) {
+ blinker.reset();
+
+
+ // Blink all indicators synchonously
+ mainBlink = !mainBlink;
+
+ // All Main and Aux alarms
+ for(int system = MAIN_SYSTEM; system <= GLOBAL_SYSTEM; system++) {
+ // MAIN_SYSTEM, AUX_SYSTEM, GLOBAL_SYSTEM
+ for(int alarm = PHASE_FAIL; alarm <= FU_FAILURE; alarm++) {
+ // PHASE_FAIL, MAIN_POWER, CTRL_POWER, OIL_PRESS, HYDR_LOCK,
+ // OVERLOAD, OIL_LEVEL, OIL_FILTER, OIL_TEMP, FU_FAILURE
+
+ if (getAlarmBlinkStatus((System)system, (Alarm)alarm) == STEADY_OFF) {
+ setAlarmStatus((System)system, (Alarm)alarm, ALARM_STATUS_OFF);
+ }
+ if (getAlarmBlinkStatus((System)system, (Alarm)alarm) == BLINK_WARNING_ON) {
+ toggleAlarmStatus((System)system, (Alarm)alarm, ALARM_STATUS_WARNING);
+ }
+ if (getAlarmBlinkStatus((System)system, (Alarm)alarm) == STEADY_WARNING_ON) {
+ setAlarmStatus((System)system, (Alarm)alarm, ALARM_STATUS_WARNING);
+ }
+ if (getAlarmBlinkStatus((System)system, (Alarm)alarm) == BLINK_FAILURE_ON) {
+ toggleAlarmStatus((System)system, (Alarm)alarm, ALARM_STATUS_FAILURE);
+ }
+ if (getAlarmBlinkStatus((System)system, (Alarm)alarm) == STEADY_FAILURE_ON) {
+ setAlarmStatus((System)system, (Alarm)alarm, ALARM_STATUS_FAILURE);
+ }
+ }
+ if (system != GLOBAL_SYSTEM) {
+// printf("getPumpRunningBlinkStatus(%d) = %d\n", system, getPumpRunningBlinkStatus((System)system));
+ if (getPumpRunningBlinkStatus((System)system) == STEADY_OFF) {
+ setPumpRunningStatus((System)system, RUN_STATUS_OFF);
+ }
+ if (getPumpRunningBlinkStatus((System)system) == BLINK_WARNING_ON) {
+ togglePumpRunningStatus((System)system, RUN_STATUS_WARNING);
+ }
+ if (getPumpRunningBlinkStatus((System)system) == STEADY_WARNING_ON) {
+ setPumpRunningStatus((System)system, RUN_STATUS_WARNING);
+ }
+ if (getPumpRunningBlinkStatus((System)system) == BLINK_DISABLED_ON) {
+ togglePumpRunningStatus((System)system, RUN_STATUS_DISABLED);
+ }
+ if (getPumpRunningBlinkStatus((System)system) == STEADY_DISABLED_ON) {
+ setPumpRunningStatus((System)system, RUN_STATUS_DISABLED);
+ }
+ if (getPumpRunningBlinkStatus((System)system) == BLINK_RUNNING_ON) {
+ togglePumpRunningStatus((System)system, RUN_STATUS_RUNNING);
+ }
+ if (getPumpRunningBlinkStatus((System)system) == STEADY_RUNNING_ON) {
+ setPumpRunningStatus((System)system, RUN_STATUS_RUNNING);
+ }
+ if (getPumpRunningBlinkStatus((System)system) == BLINK_OFF_RED_ON) {
+ togglePumpRunningStatus((System)system, RUN_STATUS_OFF_RED);
+ }
+ if (getPumpRunningBlinkStatus((System)system) == STEADY_OFF_RED_ON) {
+ setPumpRunningStatus((System)system, RUN_STATUS_OFF_RED);
+ }
+ }
+ }
+ if (checkIndicatorsChanged()) {
+ main_indicator_previous = main_indicator;
+ updatePage = true;
+ }
+ if (updatePage) {
+ showMainPage();
+ }
+ }
+}
+
+void processButtonPressed(uint16_t tagval)
+{
+ switch(tagval) {
+ case BUTTON_ACCEPT_ALARM_TAG :
+ setButtonAcceptAlarm(BUTTON_PRESSED); // Flag Accept Alarm button is in pressed state
+ break;
+ case BUTTON_ACCEPT_HORN_TAG :
+ setButtonAcceptHorn(BUTTON_PRESSED); // Flag Accept Horn button is in pressed state
+ break;
+ case BUTTON_SET_TAG :
+ setButtonSet(BUTTON_PRESSED); // Flag Set button is in pressed state
+// testIndicators(); // Jack TEST
+ break;
+ case BUTTON_DIM_TAG :
+ setButtonDim(BUTTON_PRESSED); // Flag Dim button is in pressed state
+ toggleDisplayBrighnessSelect(); // Toggle display brightness
+ break;
+ case 100 :
+ testIndicators(); // Jack TEST
+ break;
+ }
+}
+
+void processButtonReleased(void)
+{
+ if (getButtonAcceptAlarm() != BUTTON_RELEASED) {
+ setButtonAcceptAlarm(BUTTON_RELEASED); // Flag Accept Alarm button is in released state
+ }
+ if (getButtonAcceptHorn() != BUTTON_RELEASED) {
+ setButtonAcceptHorn(BUTTON_RELEASED); // Flag Accept Horn button is in released state
+ }
+ if (getButtonSet() != BUTTON_RELEASED) {
+ setButtonSet(BUTTON_RELEASED); // Flag Set button is in released state
+ }
+ if (getButtonDim() != BUTTON_RELEASED) {
+ setButtonDim(BUTTON_RELEASED); // Flag Dim button is in released state
+ }
+}
+
+void backupAlarms(void)
+{
+ main_indicator_backup = main_indicator;
+}
+
+void restoreAlarms(void)
+{
+ main_indicator = main_indicator_backup;
+}
+
+uint8_t getDisplayBrighnessSelect(void)
+{
+ return brightnessSelect;
+}
+
+void setDisplayBrighnessSelect(uint8_t select)
+{
+ brightnessSelect = select;
+ if (select == BIGHTNESS_SELECT_LOW) {
+ TFT.SetBacklight(brightnessLow); // Brightness Low
+ }
+ if (select == BIGHTNESS_SELECT_HIGH) {
+ TFT.SetBacklight(brightnessHigh); // Brightness High
+ }
+}
+
+void toggleDisplayBrighnessSelect(void)
+{
+ if (getDisplayBrighnessSelect() == BIGHTNESS_SELECT_HIGH) {
+ setDisplayBrighnessSelect(BIGHTNESS_SELECT_LOW);
+ } else {
+ setDisplayBrighnessSelect(BIGHTNESS_SELECT_HIGH);
+ }
+}
+
+void setDisplayBrighnessHigh(uint8_t value)
+{
+ brightnessHigh = value;
+}
+
+void setDisplayBrighnessLow(uint8_t value)
+{
+ brightnessLow = value;
+}
+
+uint8_t getButtonAcceptAlarm(void)
+{
+ return main_button.accept_alarm_pressed;
+}
+
+void setButtonAcceptAlarm(uint8_t status)
+{
+ main_button.accept_alarm_pressed = status;
+}
+
+uint8_t getButtonAcceptHorn(void)
+{
+ return main_button.accept_horn_pressed;
+}
+
+void setButtonAcceptHorn(uint8_t status)
+{
+ main_button.accept_horn_pressed = status;
+}
+
+uint8_t getButtonSet(void)
+{
+ return main_button.set_pressed;
+}
+
+void setButtonSet(uint8_t status)
+{
+ main_button.set_pressed = status;
+}
+
+uint8_t getButtonDim(void)
+{
+ return main_button.dim_pressed;
+}
+
+void setButtonDim(uint8_t status)
+{
+ main_button.dim_pressed = status;
+}
+
+Pump getPumpInUse(void)
+{
+ return main_indicator.pump_in_use;
+}
+
+void setPumpInUse(Pump status)
+{
+ main_indicator.pump_in_use = status;
+}
+
+IndicatorLightStatus getPumpInUseBlinkStatus(void)
+{
+ return main_indicator.pump_in_use_light;
+}
+
+void setPumpInUseBlinkStatus(IndicatorLightStatus status)
+{
+ main_indicator.pump_in_use_light = status;
+}
+
+
+
+IndicatorLightStatus getPumpRunningBlinkStatus(System system)
+{
+ if (system == MAIN_SYSTEM) {
+ return main_indicator.md_main_running_light;
+ }
+ if (system == AUX_SYSTEM) {
+ return main_indicator.md_aux_running_light;
+ }
+ return STEADY_OFF;
+}
+
+void setPumpRunningBlinkStatus(System system, IndicatorLightStatus status)
+{
+ if (system == MAIN_SYSTEM) {
+ main_indicator.md_main_running_light = status;
+ } else if (system == AUX_SYSTEM) {
+ main_indicator.md_aux_running_light = status;
+ }
+}
+
+IndicatorRunStatus getPumpRunningStatus(System system)
+{
+ if (system == MAIN_SYSTEM) {
+ return main_indicator.md_main_running;
+ } else if (system == AUX_SYSTEM) {
+ return main_indicator.md_aux_running;
+ }
+ return RUN_STATUS_BLANK;
+}
+
+void setPumpRunningStatus(System system, IndicatorRunStatus status)
+{
+ if (system == MAIN_SYSTEM) {
+ main_indicator.md_main_running = status;
+ } else if (system == AUX_SYSTEM) {
+ main_indicator.md_aux_running = status;
+ }
+}
+
+void togglePumpRunningStatus(System system, IndicatorRunStatus status)
+{
+ if (mainBlink) {
+ setPumpRunningStatus(system, status);
+ } else {
+ setPumpRunningStatus(system, RUN_STATUS_BLANK);
+ }
+}
+
+IndicatorLightStatus getAlarmBlinkStatus(System system, Alarm alarm)
+{
+ if (system == MAIN_SYSTEM) {
+ // MAIN_SYSTEM
+ switch(alarm) {
+ case PHASE_FAIL :
+ return main_indicator.rb_main_phase_fail_light;
+ case MAIN_POWER :
+ return main_indicator.rb_main_main_power_light;
+ case CTRL_POWER :
+ return main_indicator.rb_main_ctrl_power_light;
+ case OIL_PRESS :
+ return main_indicator.rb_main_oil_press_light;
+ case HYDR_LOCK :
+ return main_indicator.rb_main_hydr_lock_light;
+ case OVERLOAD :
+ return main_indicator.rb_main_overload_light;
+ case OIL_LEVEL :
+ return main_indicator.rb_main_oil_level_light;
+ case OIL_FILTER :
+ return main_indicator.rb_main_oil_filter_light;
+ case OIL_TEMP :
+ return main_indicator.rb_main_oil_temp_light;
+ default :
+ return STEADY_OFF;
+ }
+ } else if (system == AUX_SYSTEM) {
+ // AUX_SYSTEM
+ switch(alarm) {
+ case PHASE_FAIL :
+ return main_indicator.rb_aux_phase_fail_light;
+ case MAIN_POWER :
+ return main_indicator.rb_aux_main_power_light;
+ case CTRL_POWER :
+ return main_indicator.rb_aux_ctrl_power_light;
+ case OIL_PRESS :
+ return main_indicator.rb_aux_oil_press_light;
+ case HYDR_LOCK :
+ return main_indicator.rb_aux_hydr_lock_light;
+ case OVERLOAD :
+ return main_indicator.rb_aux_overload_light;
+ case OIL_LEVEL :
+ return main_indicator.rb_aux_oil_level_light;
+ case OIL_FILTER :
+ return main_indicator.rb_aux_oil_filter_light;
+ case OIL_TEMP :
+ return main_indicator.rb_aux_oil_temp_light;
+ default :
+ return STEADY_OFF;
+ }
+ } else if (system == GLOBAL_SYSTEM) {
+ // GLOBAL_SYSTEM
+ switch(alarm) {
+ case FU_FAILURE :
+ return main_indicator.rb_fu_failure_light;
+ default :
+ return STEADY_OFF;
+ }
+ }
+ return STEADY_OFF;
+}
+
+void setAlarmBlinkStatus(System system, Alarm alarm, IndicatorLightStatus status)
+{
+ if (system == MAIN_SYSTEM) {
+ // MAIN_SYSTEM
+ switch(alarm) {
+ case PHASE_FAIL :
+ main_indicator.rb_main_phase_fail_light = status;
+ break;
+ case MAIN_POWER :
+ main_indicator.rb_main_main_power_light = status;
+ break;
+ case CTRL_POWER :
+ main_indicator.rb_main_ctrl_power_light = status;
+ break;
+ case OIL_PRESS :
+ main_indicator.rb_main_oil_press_light = status;
+ break;
+ case HYDR_LOCK :
+ main_indicator.rb_main_hydr_lock_light = status;
+ break;
+ case OVERLOAD :
+ main_indicator.rb_main_overload_light = status;
+ break;
+ case OIL_LEVEL :
+ main_indicator.rb_main_oil_level_light = status;
+ break;
+ case OIL_FILTER :
+ main_indicator.rb_main_oil_filter_light = status;
+ break;
+ case OIL_TEMP :
+ main_indicator.rb_main_oil_temp_light = status;
+ break;
+ }
+ } else if (system == AUX_SYSTEM) {
+ // AUX_SYSTEM
+ switch(alarm) {
+ case PHASE_FAIL :
+ main_indicator.rb_aux_phase_fail_light = status;
+ break;
+ case MAIN_POWER :
+ main_indicator.rb_aux_main_power_light = status;
+ break;
+ case CTRL_POWER :
+ main_indicator.rb_aux_ctrl_power_light = status;
+ break;
+ case OIL_PRESS :
+ main_indicator.rb_aux_oil_press_light = status;
+ break;
+ case HYDR_LOCK :
+ main_indicator.rb_aux_hydr_lock_light = status;
+ break;
+ case OVERLOAD :
+ main_indicator.rb_aux_overload_light = status;
+ break;
+ case OIL_LEVEL :
+ main_indicator.rb_aux_oil_level_light = status;
+ break;
+ case OIL_FILTER :
+ main_indicator.rb_aux_oil_filter_light = status;
+ break;
+ case OIL_TEMP :
+ main_indicator.rb_aux_oil_temp_light = status;
+ break;
+ }
+ } else if (system == GLOBAL_SYSTEM) {
+ // GLOBAL_SYSTEM
+ switch(alarm) {
+ case FU_FAILURE :
+ main_indicator.rb_fu_failure_light = status;
+ break;
+ }
+ }
+}
+
+IndicatorAlarmStatus getAlarmStatus(System system, Alarm alarm)
+{
+ if (system == MAIN_SYSTEM) {
+ // MAIN_SYSTEM
+ switch(alarm) {
+ case PHASE_FAIL :
+ return main_indicator.rb_main_phase_fail;
+ case MAIN_POWER :
+ return main_indicator.rb_main_main_power;
+ case CTRL_POWER :
+ return main_indicator.rb_main_ctrl_power;
+ case OIL_PRESS :
+ return main_indicator.rb_main_oil_press;
+ case HYDR_LOCK :
+ return main_indicator.rb_main_hydr_lock;
+ case OVERLOAD :
+ return main_indicator.rb_main_overload;
+ case OIL_LEVEL :
+ return main_indicator.rb_main_oil_level;
+ case OIL_FILTER :
+ return main_indicator.rb_main_oil_filter;
+ case OIL_TEMP :
+ return main_indicator.rb_main_oil_temp;
+ default :
+ return ALARM_STATUS_OFF;
+ }
+ } else if (system == AUX_SYSTEM) {
+ // AUX_SYSTEM
+ switch(alarm) {
+ case PHASE_FAIL :
+ return main_indicator.rb_aux_phase_fail;
+ case MAIN_POWER :
+ return main_indicator.rb_aux_main_power;
+ case CTRL_POWER :
+ return main_indicator.rb_aux_ctrl_power;
+ case OIL_PRESS :
+ return main_indicator.rb_aux_oil_press;
+ case HYDR_LOCK :
+ return main_indicator.rb_aux_hydr_lock;
+ case OVERLOAD :
+ return main_indicator.rb_aux_overload;
+ case OIL_LEVEL :
+ return main_indicator.rb_aux_oil_level;
+ case OIL_FILTER :
+ return main_indicator.rb_aux_oil_filter;
+ case OIL_TEMP :
+ return main_indicator.rb_aux_oil_temp;
+ default :
+ return ALARM_STATUS_OFF;
+ }
+ } else if (system == GLOBAL_SYSTEM) {
+ // GLOBAL_SYSTEM
+ switch(alarm) {
+ case FU_FAILURE :
+ return main_indicator.rb_fu_failure;
+ default :
+ return ALARM_STATUS_OFF;
+ }
+ }
+ return ALARM_STATUS_OFF;
+}
+
+void setAlarmStatus(System system, Alarm alarm, IndicatorAlarmStatus status)
+{
+ if (system == MAIN_SYSTEM) {
+ // MAIN_SYSTEM
+ switch(alarm) {
+ case PHASE_FAIL :
+ main_indicator.rb_main_phase_fail = status;
+ break;
+ case MAIN_POWER :
+ main_indicator.rb_main_main_power = status;
+ break;
+ case CTRL_POWER :
+ main_indicator.rb_main_ctrl_power = status;
+ break;
+ case OIL_PRESS :
+ main_indicator.rb_main_oil_press = status;
+ break;
+ case HYDR_LOCK :
+ main_indicator.rb_main_hydr_lock = status;
+ break;
+ case OVERLOAD :
+ main_indicator.rb_main_overload = status;
+ break;
+ case OIL_LEVEL :
+ main_indicator.rb_main_oil_level = status;
+ break;
+ case OIL_FILTER :
+ main_indicator.rb_main_oil_filter = status;
+ break;
+ case OIL_TEMP :
+ main_indicator.rb_main_oil_temp = status;
+ break;
+ }
+ } else if (system == AUX_SYSTEM) {
+ // AUX_SYSTEM
+ switch(alarm) {
+ case PHASE_FAIL :
+ main_indicator.rb_aux_phase_fail = status;
+ break;
+ case MAIN_POWER :
+ main_indicator.rb_aux_main_power = status;
+ break;
+ case CTRL_POWER :
+ main_indicator.rb_aux_ctrl_power = status;
+ break;
+ case OIL_PRESS :
+ main_indicator.rb_aux_oil_press = status;
+ break;
+ case HYDR_LOCK :
+ main_indicator.rb_aux_hydr_lock = status;
+ break;
+ case OVERLOAD :
+ main_indicator.rb_aux_overload = status;
+ break;
+ case OIL_LEVEL :
+ main_indicator.rb_aux_oil_level = status;
+ break;
+ case OIL_FILTER :
+ main_indicator.rb_aux_oil_filter = status;
+ break;
+ case OIL_TEMP :
+ main_indicator.rb_aux_oil_temp = status;
+ break;
+ }
+ } else if (system == GLOBAL_SYSTEM) {
+ // GLOBAL_SYSTEM
+ switch(alarm) {
+ case FU_FAILURE :
+ main_indicator.rb_fu_failure = status;
+ break;
+ }
+ }
+}
+
+void toggleAlarmStatus(System system, Alarm alarm, IndicatorAlarmStatus status)
+{
+ int changed = false;
+ if (mainBlink) {
+ setAlarmStatus(system, alarm, status);
+ } else {
+ setAlarmStatus(system, alarm, ALARM_STATUS_OFF);
+ }
+}
+
+bool checkIndicatorsChanged(void)
+{
+ bool changed = false;
+
+ // Check if anything on the Main page was chnaged, so it can be refreshed
+ // C provides no language facilities to compare two instances of structs for equality (in standard C)
+ // Problems with memcmp: Structures can be padded, and the contents of padding bytes are undefined,
+ // dynamically allocated memory pointed to by struct members, and no guarantee of contiguity.
+ // memcmp doesn't know this and will blindly compare all bytes.
+ // Don't do this:
+ // uint8_t ret = memcmp(&main_indicator, &main_indicator_previous, sizeof(main_indicator));
+ // if (ret != 0) {
+ // changed = true;
+ // }
+ // The only thing to do is compare each member
+
+ // The safest ways is to compare member for member (can exclude something, intended or not intended)
+ if (main_indicator.md_main_running != main_indicator_previous.md_main_running) {
+ changed = true;
+ }
+ if (main_indicator.md_main_running_light != main_indicator_previous.md_main_running_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_phase_fail != main_indicator_previous.rb_main_phase_fail) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_phase_fail_light != main_indicator_previous.rb_main_phase_fail_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_main_power != main_indicator_previous.rb_main_main_power) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_main_power_light != main_indicator_previous.rb_main_main_power_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_ctrl_power != main_indicator_previous.rb_main_ctrl_power) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_ctrl_power_light != main_indicator_previous.rb_main_ctrl_power_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_oil_press != main_indicator_previous.rb_main_oil_press) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_oil_press_light != main_indicator_previous.rb_main_oil_press_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_hydr_lock != main_indicator_previous.rb_main_hydr_lock) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_hydr_lock_light != main_indicator_previous.rb_main_hydr_lock_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_overload != main_indicator_previous.rb_main_overload) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_overload_light != main_indicator_previous.rb_main_overload_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_oil_level != main_indicator_previous.rb_main_oil_level) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_oil_level_light != main_indicator_previous.rb_main_oil_level_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_oil_filter != main_indicator_previous.rb_main_oil_filter) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_oil_filter_light != main_indicator_previous.rb_main_oil_filter_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_oil_temp != main_indicator_previous.rb_main_oil_temp) {
+ changed = true;
+ }
+ if (main_indicator.rb_main_oil_temp_light != main_indicator_previous.rb_main_oil_temp_light) {
+ changed = true;
+ }
+
+ if (main_indicator.md_aux_running != main_indicator_previous.md_aux_running) {
+ changed = true;
+ }
+ if (main_indicator.md_aux_running_light != main_indicator_previous.md_aux_running_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_phase_fail != main_indicator_previous.rb_aux_phase_fail) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_phase_fail_light != main_indicator_previous.rb_aux_phase_fail_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_main_power != main_indicator_previous.rb_aux_main_power) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_main_power_light != main_indicator_previous.rb_aux_main_power_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_ctrl_power != main_indicator_previous.rb_aux_ctrl_power) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_ctrl_power_light != main_indicator_previous.rb_aux_ctrl_power_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_oil_press != main_indicator_previous.rb_aux_oil_press) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_oil_press_light != main_indicator_previous.rb_aux_oil_press_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_hydr_lock != main_indicator_previous.rb_aux_hydr_lock) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_hydr_lock_light != main_indicator_previous.rb_aux_hydr_lock_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_overload != main_indicator_previous.rb_aux_overload) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_overload_light != main_indicator_previous.rb_aux_overload_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_oil_level != main_indicator_previous.rb_aux_oil_level) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_oil_level_light != main_indicator_previous.rb_aux_oil_level_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_oil_filter != main_indicator_previous.rb_aux_oil_filter) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_oil_filter_light != main_indicator_previous.rb_aux_oil_filter_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_oil_temp != main_indicator_previous.rb_aux_oil_temp) {
+ changed = true;
+ }
+ if (main_indicator.rb_aux_oil_temp_light != main_indicator_previous.rb_aux_oil_temp_light) {
+ changed = true;
+ }
+ if (main_indicator.rb_fu_failure != main_indicator_previous.rb_fu_failure) {
+ changed = true;
+ }
+ if (main_indicator.rb_fu_failure_light != main_indicator_previous.rb_fu_failure_light) {
+ changed = true;
+ }
+ if (main_indicator.pump_in_use != main_indicator_previous.pump_in_use) {
+ changed = true;
+ }
+ if (main_indicator.pump_in_use_light != main_indicator_previous.pump_in_use_light) {
+ changed = true;
+ }
+
+ return changed;
+}
+
+void testIndicators(void)
+{
+ float delay = 0.5;
+ backupAlarms();
+
+ setPumpInUse(PUMP_OFF);
+ setPumpRunningStatus(MAIN_SYSTEM, RUN_STATUS_OFF);
+ setPumpRunningStatus(AUX_SYSTEM, RUN_STATUS_OFF);
+ setAlarmStatus(MAIN_SYSTEM, PHASE_FAIL, ALARM_STATUS_OFF);
+ setAlarmStatus(AUX_SYSTEM, PHASE_FAIL, ALARM_STATUS_OFF);
+ setAlarmStatus(MAIN_SYSTEM, MAIN_POWER, ALARM_STATUS_OFF);
+ setAlarmStatus(AUX_SYSTEM, MAIN_POWER, ALARM_STATUS_OFF);
+ setAlarmStatus(MAIN_SYSTEM, CTRL_POWER, ALARM_STATUS_OFF);
+ setAlarmStatus(AUX_SYSTEM, CTRL_POWER, ALARM_STATUS_OFF);
+ setAlarmStatus(MAIN_SYSTEM, OIL_PRESS, ALARM_STATUS_OFF);
+ setAlarmStatus(AUX_SYSTEM, OIL_PRESS, ALARM_STATUS_OFF);
+ setAlarmStatus(MAIN_SYSTEM, HYDR_LOCK, ALARM_STATUS_OFF);
+ setAlarmStatus(AUX_SYSTEM, HYDR_LOCK, ALARM_STATUS_OFF);
+ setAlarmStatus(MAIN_SYSTEM, OVERLOAD, ALARM_STATUS_OFF);
+ setAlarmStatus(AUX_SYSTEM, OVERLOAD, ALARM_STATUS_OFF);
+ setAlarmStatus(MAIN_SYSTEM, OIL_LEVEL, ALARM_STATUS_OFF);
+ setAlarmStatus(AUX_SYSTEM, OIL_LEVEL, ALARM_STATUS_OFF);
+ setAlarmStatus(MAIN_SYSTEM, OIL_FILTER, ALARM_STATUS_OFF);
+ setAlarmStatus(AUX_SYSTEM, OIL_FILTER, ALARM_STATUS_OFF);
+ setAlarmStatus(MAIN_SYSTEM, OIL_TEMP, ALARM_STATUS_OFF);
+ setAlarmStatus(AUX_SYSTEM, OIL_TEMP, ALARM_STATUS_OFF);
+ setAlarmStatus(GLOBAL_SYSTEM, FU_FAILURE, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(1);
+ wdt.Service();
+
+// for (int i = 0; i < 2; i++) {
+ setPumpInUse(PUMP_IN_USE);
+ showMainPage();
+ wait(delay);
+ setPumpInUse(PUMP_IN_USE_MAIN);
+ showMainPage();
+ wait(delay);
+ setPumpInUse(PUMP_IN_USE_AUX);
+ showMainPage();
+ wait(delay);
+ setPumpInUse(PUMP_OFF);
+ showMainPage();
+ wait(delay);
+// }
+
+ setPumpRunningStatus(MAIN_SYSTEM, RUN_STATUS_RUNNING);
+ showMainPage();
+ wait(delay);
+ setPumpRunningStatus(MAIN_SYSTEM, RUN_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setPumpRunningStatus(MAIN_SYSTEM, RUN_STATUS_DISABLED);
+ showMainPage();
+ wait(delay);
+ setPumpRunningStatus(MAIN_SYSTEM, RUN_STATUS_OFF_RED);
+ showMainPage();
+ wait(delay);
+ setPumpRunningStatus(MAIN_SYSTEM, RUN_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+ wdt.Service();
+
+ setPumpRunningStatus(AUX_SYSTEM, RUN_STATUS_RUNNING);
+ showMainPage();
+ wait(delay);
+ setPumpRunningStatus(AUX_SYSTEM, RUN_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setPumpRunningStatus(AUX_SYSTEM, RUN_STATUS_DISABLED);
+ showMainPage();
+ wait(delay);
+ setPumpRunningStatus(AUX_SYSTEM, RUN_STATUS_OFF_RED);
+ showMainPage();
+ wait(delay);
+ setPumpRunningStatus(AUX_SYSTEM, RUN_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+ wdt.Service();
+
+ setAlarmStatus(MAIN_SYSTEM, PHASE_FAIL, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, PHASE_FAIL, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, PHASE_FAIL, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+
+ setAlarmStatus(AUX_SYSTEM, PHASE_FAIL, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, PHASE_FAIL, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, PHASE_FAIL, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+
+ setAlarmStatus(MAIN_SYSTEM, MAIN_POWER, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, MAIN_POWER, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, MAIN_POWER, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+ wdt.Service();
+
+ setAlarmStatus(AUX_SYSTEM, MAIN_POWER, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, MAIN_POWER, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, MAIN_POWER, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+
+ setAlarmStatus(MAIN_SYSTEM, CTRL_POWER, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, CTRL_POWER, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, CTRL_POWER, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+ wdt.Service();
+
+ setAlarmStatus(AUX_SYSTEM, CTRL_POWER, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, CTRL_POWER, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, CTRL_POWER, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+
+ setAlarmStatus(MAIN_SYSTEM, OIL_PRESS, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, OIL_PRESS, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, OIL_PRESS, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+
+ setAlarmStatus(AUX_SYSTEM, OIL_PRESS, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, OIL_PRESS, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, OIL_PRESS, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+ wdt.Service();
+
+ setAlarmStatus(MAIN_SYSTEM, HYDR_LOCK, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, HYDR_LOCK, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, HYDR_LOCK, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+
+ setAlarmStatus(AUX_SYSTEM, HYDR_LOCK, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, HYDR_LOCK, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, HYDR_LOCK, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+
+ setAlarmStatus(MAIN_SYSTEM, OVERLOAD, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, OVERLOAD, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, OVERLOAD, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+ wdt.Service();
+
+ setAlarmStatus(AUX_SYSTEM, OVERLOAD, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, OVERLOAD, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, OVERLOAD, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+
+ setAlarmStatus(MAIN_SYSTEM, OIL_LEVEL, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, OIL_LEVEL, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, OIL_LEVEL, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+
+ setAlarmStatus(AUX_SYSTEM, OIL_LEVEL, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, OIL_LEVEL, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, OIL_LEVEL, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+ wdt.Service();
+
+ setAlarmStatus(MAIN_SYSTEM, OIL_FILTER, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, OIL_FILTER, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, OIL_FILTER, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+
+ setAlarmStatus(AUX_SYSTEM, OIL_FILTER, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, OIL_FILTER, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, OIL_FILTER, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+
+ setAlarmStatus(MAIN_SYSTEM, OIL_TEMP, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, OIL_TEMP, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(MAIN_SYSTEM, OIL_TEMP, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+ wdt.Service();
+
+ setAlarmStatus(AUX_SYSTEM, OIL_TEMP, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, OIL_TEMP, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(AUX_SYSTEM, OIL_TEMP, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+
+ setAlarmStatus(GLOBAL_SYSTEM, FU_FAILURE, ALARM_STATUS_WARNING);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(GLOBAL_SYSTEM, FU_FAILURE, ALARM_STATUS_FAILURE);
+ showMainPage();
+ wait(delay);
+ setAlarmStatus(GLOBAL_SYSTEM, FU_FAILURE, ALARM_STATUS_OFF);
+ showMainPage();
+ wait(delay);
+ wdt.Service();
+
+ restoreAlarms();
+ showMainPage();
+}