From 89281345d6ca9929e66f52602bf60760c8e3cbe5 Mon Sep 17 00:00:00 2001 From: Norbert Walter Date: Wed, 22 Dec 2021 18:35:05 +0100 Subject: [PATCH] Add all setup data in structure --- lib/obp60task/GwOBP60Task.cpp | 45 ++++++++++++--- lib/obp60task/OBP60Data.h | 33 ++++++++++- lib/obp60task/OBP60Pages.h | 90 ++++++++++++++++++++---------- lib/obp60task/partitions_obp60.csv | 6 +- 4 files changed, 130 insertions(+), 44 deletions(-) diff --git a/lib/obp60task/GwOBP60Task.cpp b/lib/obp60task/GwOBP60Task.cpp index 287432d..ce76b22 100644 --- a/lib/obp60task/GwOBP60Task.cpp +++ b/lib/obp60task/GwOBP60Task.cpp @@ -218,18 +218,40 @@ void OBP60Task(void *param){ bool hasPosition = false; - // Get some configuration data from webside + // Get configuration data from webside + // OBP60 Settings bool exampleSwitch = api->getConfig()->getConfigItem(api->getConfig()->obp60Config,true)->asBoolean(); LOG_DEBUG(GwLog::DEBUG,"example switch ist %s",exampleSwitch?"true":"false"); - bool gpsOn = api->getConfig()->getConfigItem(api->getConfig()->useGPS,true)->asBoolean(); - bool bme280On = api->getConfig()->getConfigItem(api->getConfig()->useBME280,true)->asBoolean(); - bool onewireOn = api->getConfig()->getConfigItem(api->getConfig()->use1Wire,true)->asBoolean(); + api->getConfig()->getConfigItem(api->getConfig()->dateFormat,true)->asString().toCharArray(busInfo.dateformat, 3); + busInfo.timezone = api->getConfig()->getConfigItem(api->getConfig()->timeZone,true)->asInt(); + busInfo.draft = api->getConfig()->getConfigItem(api->getConfig()->draft,true)->asString().toFloat(); + busInfo.fueltank = api->getConfig()->getConfigItem(api->getConfig()->fuelTank,true)->asString().toFloat(); + busInfo.fuelconsumption = api->getConfig()->getConfigItem(api->getConfig()->fuelConsumption,true)->asString().toFloat(); + busInfo.watertank = api->getConfig()->getConfigItem(api->getConfig()->waterTank,true)->asString().toFloat(); + busInfo.wastetank = api->getConfig()->getConfigItem(api->getConfig()->wasteTank,true)->asString().toFloat(); + busInfo.batvoltage = api->getConfig()->getConfigItem(api->getConfig()->batteryVoltage,true)->asString().toFloat(); + api->getConfig()->getConfigItem(api->getConfig()->batteryType,true)->asString().toCharArray(busInfo.battype, 16); + busInfo.batcapacity = api->getConfig()->getConfigItem(api->getConfig()->batteryCapacity,true)->asString().toFloat(); + // OBP60 Hardware + busInfo.gps = api->getConfig()->getConfigItem(api->getConfig()->useGPS,true)->asBoolean(); + busInfo.bme280 = api->getConfig()->getConfigItem(api->getConfig()->useBME280,true)->asBoolean(); + busInfo.onewire = api->getConfig()->getConfigItem(api->getConfig()->use1Wire,true)->asBoolean(); + String powerMode = api->getConfig()->getConfigItem(api->getConfig()->powerMode,true)->asString(); busInfo.simulation = api->getConfig()->getConfigItem(api->getConfig()->useSimuData,true)->asBoolean(); - String powerMode=api->getConfig()->getConfigItem(api->getConfig()->powerMode,true)->asString(); - String displayMode=api->getConfig()->getConfigItem(api->getConfig()->display,true)->asString(); + // OBP60 Display + String displayMode = api->getConfig()->getConfigItem(api->getConfig()->display,true)->asString(); busInfo.statusline = api->getConfig()->getConfigItem(api->getConfig()->statusLine,true)->asBoolean(); - bool refreshOn = api->getConfig()->getConfigItem(api->getConfig()->refresh,true)->asBoolean(); - String backlightMode=api->getConfig()->getConfigItem(api->getConfig()->backlight,true)->asString(); + busInfo.refresh = api->getConfig()->getConfigItem(api->getConfig()->refresh,true)->asBoolean(); + String backlightMode = api->getConfig()->getConfigItem(api->getConfig()->backlight,true)->asString(); + api->getConfig()->getConfigItem(api->getConfig()->flashLED,true)->asString().toCharArray(busInfo.flashled, 16); + // OBP60 Buzzer + busInfo.buzerror = api->getConfig()->getConfigItem(api->getConfig()->buzzerError,true)->asBoolean(); + busInfo.buzgps = api->getConfig()->getConfigItem(api->getConfig()->buzzerGps,true)->asBoolean(); + busInfo.buzlimits = api->getConfig()->getConfigItem(api->getConfig()->buzzerLim,true)->asBoolean(); + api->getConfig()->getConfigItem(api->getConfig()->buzzerMode,true)->asString().toCharArray(busInfo.buzmode, 16); + busInfo.buzpower = api->getConfig()->getConfigItem(api->getConfig()->buzzerPower,true)->asInt(); + // OBP60 Pages + busInfo.numpages = api->getConfig()->getConfigItem(api->getConfig()->numberPages,true)->asInt(); // Initializing all necessary boat data GwApi::BoatValue *sog=new GwApi::BoatValue(F("SOG")); @@ -308,7 +330,7 @@ void OBP60Task(void *param){ } // Send NMEA0183 GPS data on several bus systems - if(gpsOn == true){ // If config enabled + if(busInfo.gps == true){ // If config enabled if(gps_ready = true){ tNMEA0183Msg NMEA0183Msg; while(NMEA0183.GetMessage(NMEA0183Msg)){ @@ -319,16 +341,21 @@ void OBP60Task(void *param){ //fetch the current values of the items that we have in itemNames api->getBoatDataValues(7,valueList); + busInfo.WaterDepth.fvalue = waterdepth->value; waterdepth->getFormat().toCharArray(busInfo.WaterDepth.unit, 8, 0); busInfo.WaterDepth.valid = int(waterdepth->valid); + busInfo.SOG.fvalue = sog->value; sog->getFormat().toCharArray(busInfo.SOG.unit, 8, 0); busInfo.SOG.valid = int(sog->valid); + formatValue(date).toCharArray(busInfo.Date.svalue, 16, 0); busInfo.Date.valid = date->valid; + formatValue(time).toCharArray(busInfo.Time.svalue, 16, 0); busInfo.Time.valid = time->valid; + busInfo.PDOP.fvalue = pdop->value; busInfo.PDOP.valid = pdop->valid; diff --git a/lib/obp60task/OBP60Data.h b/lib/obp60task/OBP60Data.h index c3f6417..a5acdb4 100644 --- a/lib/obp60task/OBP60Data.h +++ b/lib/obp60task/OBP60Data.h @@ -7,15 +7,42 @@ typedef struct{ float fvalue = 0; // Float value char svalue[16] = ""; // Char value char unit[8] = ""; // Unit - int valid = 0; // Valid flag + bool valid = 0; // Valid flag } dataContainer; typedef struct{ - bool simulation = false; // Simulate boat data - bool statusline = true; + // OBP60 Settings char dateformat[3] = "GB"; int timezone = 0; + float draft = 0; + float fueltank = 0; + float fuelconsumption = 0; + float watertank = 0; + float wastetank = 0; + float batvoltage = 0; + char battype[16] = "Pb"; + float batcapacity = 0; + // OBP60 Hardware + bool gps = false; + bool bme280 = false; + bool onewire = false; + char powermode[16] = "Max Power"; + bool simulation = false; + // OBP60 Display + char displaymode[16] = "Logo + QR Code"; + bool statusline = true; bool refresh = false; + char backlight[16] = "Control by Key"; + char flashled[16] = "Off"; + // OBP60 Buzzer + bool buzerror = false; + bool buzgps = false; + bool buzlimits = false; + char buzmode[16] = "Off"; + int buzpower = 0; + // OBP60 Pages + int numpages = 1; + // Bus data dataContainer AWA; dataContainer AWD; dataContainer AWS; diff --git a/lib/obp60task/OBP60Pages.h b/lib/obp60task/OBP60Pages.h index 0935368..14c8731 100644 --- a/lib/obp60task/OBP60Pages.h +++ b/lib/obp60task/OBP60Pages.h @@ -18,7 +18,7 @@ void showPage(busData values){ display.setTextColor(GxEPD_BLACK); display.setCursor(0, 15); display.print(" WiFi AP TCP N2K 183 "); - if(values.PDOP.valid == true && values.PDOP.fvalue <= 50){ + if(values.gps == true && values.PDOP.valid == true && values.PDOP.fvalue <= 50){ display.print("GPS"); } @@ -36,34 +36,60 @@ void showPage(busData values){ // Date and time display.setFont(&Ubuntu_Bold8pt7b); display.setCursor(230, 15); - char newdate[16] = ""; - if(values.PDOP.valid == true && values.PDOP.fvalue <= 50){ - if(String(values.dateformat) == "DE"){ - display.print(values.Date.svalue); - } - if(String(values.dateformat) == "GB"){ - values.Date.svalue[2] = '/'; - values.Date.svalue[5] = '/'; - display.print(values.Date.svalue); - } - if(String(values.dateformat) == "US"){ + if(values.gps == true){ + if(values.PDOP.valid == true && values.PDOP.fvalue <= 50){ char newdate[16] = ""; - strcpy(newdate, values.Date.svalue); - newdate[0] = values.Date.svalue[3]; - newdate[1] = values.Date.svalue[4]; - newdate[2] = '/'; - newdate[3] = values.Date.svalue[0]; - newdate[4] = values.Date.svalue[1]; - newdate[5] = '/'; - display.print(newdate); + if(String(values.dateformat) == "DE"){ + display.print(values.Date.svalue); + } + if(String(values.dateformat) == "GB"){ + values.Date.svalue[2] = '/'; + values.Date.svalue[5] = '/'; + display.print(values.Date.svalue); + } + if(String(values.dateformat) == "US"){ + char newdate[16] = ""; + strcpy(newdate, values.Date.svalue); + newdate[0] = values.Date.svalue[3]; + newdate[1] = values.Date.svalue[4]; + newdate[2] = '/'; + newdate[3] = values.Date.svalue[0]; + newdate[4] = values.Date.svalue[1]; + newdate[5] = '/'; + display.print(newdate); + } + display.print(" "); + if(values.timezone == 0){ + display.print(values.Time.svalue); + display.print(" "); + display.print("UTC"); + } + else{ + char newtime[16] = ""; + char newhour[3] = ""; + int hour = 0; + strcpy(newtime, values.Time.svalue); + newhour[0] = values.Time.svalue[0]; + newhour[1] = values.Time.svalue[1]; + hour = strtol(newhour, 0, 10); + if(values.timezone > 0){ + hour += values.timezone; + } + else{ + hour += values.timezone + 24; + } + hour %= 24; + sprintf(newhour, "%d", hour); + newtime[0] = newhour[0]; + newtime[1] = newhour[1]; + display.print(newtime); + display.print(" "); + display.print("LOT"); + } + } + else{ + display.print("No GPS data"); } - display.print(" "); - display.print(values.Time.svalue); - display.print(" "); - display.print("UTC"); - } - else{ - display.print("No GPS data"); } } @@ -94,8 +120,14 @@ void showPage(busData values){ // Update display if(values.refresh == true){ - display.update(); // Full update - } + if(first_view == true){ + display.updateWindow(0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, true); // Needs partial update before full update to refresh the frame buffer + display.update(); // Full update + } + else{ + display.updateWindow(0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, true); // Partial update (fast) + } + } else{ display.updateWindow(0, 0, GxEPD_WIDTH, GxEPD_HEIGHT, true); // Partial update (fast) } diff --git a/lib/obp60task/partitions_obp60.csv b/lib/obp60task/partitions_obp60.csv index 37189db..6e9cbdc 100644 --- a/lib/obp60task/partitions_obp60.csv +++ b/lib/obp60task/partitions_obp60.csv @@ -1,5 +1,5 @@ # Name, Type, SubType, Offset, Size, Flags -nvs, data, nvs, 0x9000, 0x4000, -otadata, data, ota, 0xd000, 0x2000, +nvs, data, nvs, 0x9000, 0x5000 +otadata, data, ota, 0xe000, 0x2000, app0, app, ota_0, 0x10000, 0x1f0000, -app1, app, ota_1, 0x200000,0x1f0000, \ No newline at end of file +app1, app, ota_1, 0x200000,0x1f0000,