Compare commits

..

3 Commits

38 changed files with 710 additions and 755 deletions

View File

@ -62,6 +62,7 @@ sdmmc_card_t *sdcard;
bool hasSDCard = false; bool hasSDCard = false;
// Global vars // Global vars
bool heartbeat = false; // Heartbeat indicator with two different states
bool blinkingLED = false; // Enable / disable blinking flash LED bool blinkingLED = false; // Enable / disable blinking flash LED
bool statusLED = false; // Actual status of flash LED on/off bool statusLED = false; // Actual status of flash LED on/off
bool statusBacklightLED = false;// Actual status of flash LED on/off bool statusBacklightLED = false;// Actual status of flash LED on/off
@ -302,8 +303,8 @@ void toggleBacklightLED(uint brightness, const Color &color) {
void setFlashLED(bool status) { void setFlashLED(bool status) {
if (ledTaskData == nullptr) return; if (ledTaskData == nullptr) return;
Color c = status?COLOR_RED:COLOR_BLACK; Color c = status ? COLOR_RED : COLOR_BLACK;
LedInterface current=ledTaskData->getLedData(); LedInterface current = ledTaskData->getLedData();
current.setFlash(c); current.setFlash(c);
ledTaskData->setLedData(current); ledTaskData->setLedData(current);
} }
@ -459,7 +460,6 @@ void displayTrendLow(int16_t x, int16_t y, uint16_t size, uint16_t color){
// Show header informations // Show header informations
void displayHeader(CommonData &commonData, bool symbolmode, GwApi::BoatValue *date, GwApi::BoatValue *time, GwApi::BoatValue *hdop){ void displayHeader(CommonData &commonData, bool symbolmode, GwApi::BoatValue *date, GwApi::BoatValue *time, GwApi::BoatValue *hdop){
static bool heartbeat = false;
static unsigned long usbRxOld = 0; static unsigned long usbRxOld = 0;
static unsigned long usbTxOld = 0; static unsigned long usbTxOld = 0;
static unsigned long serRxOld = 0; static unsigned long serRxOld = 0;

View File

@ -38,6 +38,8 @@ extern bool hasSDCard;
extern sdmmc_card_t *sdcard; extern sdmmc_card_t *sdcard;
#endif #endif
extern bool heartbeat;
// Fonts declarations for display (#includes see OBP60Extensions.cpp) // Fonts declarations for display (#includes see OBP60Extensions.cpp)
extern const GFXfont DSEG7Classic_BoldItalic16pt7b; extern const GFXfont DSEG7Classic_BoldItalic16pt7b;
extern const GFXfont DSEG7Classic_BoldItalic20pt7b; extern const GFXfont DSEG7Classic_BoldItalic20pt7b;

View File

@ -90,16 +90,16 @@ void sensorTask(void *param){
double voffset = (api->getConfig()->getConfigItem(api->getConfig()->vOffset,true)->asString()).toFloat(); double voffset = (api->getConfig()->getConfigItem(api->getConfig()->vOffset,true)->asString()).toFloat();
double vslope = (api->getConfig()->getConfigItem(api->getConfig()->vSlope,true)->asString()).toFloat(); double vslope = (api->getConfig()->getConfigItem(api->getConfig()->vSlope,true)->asString()).toFloat();
if(String(powsensor1) == "off"){ if(String(powsensor1) == "off"){
#ifdef VOLTAGE_SENSOR #ifdef VOLTAGE_SENSOR
float rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40 float rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40
#else #else
float rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60 float rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60
#endif #endif
sensors.batteryVoltage = rawVoltage * vslope + voffset; // Calibration sensors.batteryVoltage = rawVoltage * vslope + voffset; // Calibration
#ifdef LIPO_ACCU_1200 #ifdef LIPO_ACCU_1200
sensors.BatteryChargeStatus = 0; // Set to discharging sensors.BatteryChargeStatus = 0; // Set to discharging
sensors.batteryLevelLiPo = 0; // Level 0...100% sensors.batteryLevelLiPo = 0; // Level 0...100%
#endif #endif
sensors.batteryCurrent = 0; sensors.batteryCurrent = 0;
sensors.batteryPower = 0; sensors.batteryPower = 0;
// Fill average arrays with start values // Fill average arrays with start values
@ -499,24 +499,24 @@ void sensorTask(void *param){
if(millis() > starttime5 + 1000 && String(powsensor1) == "off"){ if(millis() > starttime5 + 1000 && String(powsensor1) == "off"){
starttime5 = millis(); starttime5 = millis();
float rawVoltage = 0; // Default value float rawVoltage = 0; // Default value
#ifdef BOARD_OBP40S3 #ifdef BOARD_OBP40S3
sensors.batteryVoltage = 0; // If no sensor then zero voltage sensors.batteryVoltage = 0; // If no sensor then zero voltage
#endif #endif
#if defined(BOARD_OBP40S3) && defined(VOLTAGE_SENSOR) #if defined(BOARD_OBP40S3) && defined(VOLTAGE_SENSOR)
rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40 rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40
sensors.batteryVoltage = rawVoltage * vslope + voffset; // Calibration sensors.batteryVoltage = rawVoltage * vslope + voffset; // Calibration
#endif #endif
#ifdef BOARD_OBP60S3 #ifdef BOARD_OBP60S3
rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60 rawVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60
sensors.batteryVoltage = rawVoltage * vslope + voffset; // Calibration sensors.batteryVoltage = rawVoltage * vslope + voffset; // Calibration
#endif #endif
// Save new data in average array // Save new data in average array
batV.reading(int(sensors.batteryVoltage * 100)); batV.reading(int(sensors.batteryVoltage * 100));
// Calculate the average values for different time lines from integer values // Calculate the average values for different time lines from integer values
sensors.batteryVoltage10 = batV.getAvg(10) / 100.0; sensors.batteryVoltage10 = batV.getAvg(10) / 100.0;
sensors.batteryVoltage60 = batV.getAvg(60) / 100.0; sensors.batteryVoltage60 = batV.getAvg(60) / 100.0;
sensors.batteryVoltage300 = batV.getAvg(300) / 100.0; sensors.batteryVoltage300 = batV.getAvg(300) / 100.0;
#if BOARD_OBP40S3 && defined LIPO_ACCU_1200 && defined VOLTAGE_SENSOR #if BOARD_OBP40S3 && defined LIPO_ACCU_1200 && defined VOLTAGE_SENSOR
// Polynomfit for LiPo capacity calculation for 3,7V LiPo accus, 0...100% // Polynomfit for LiPo capacity calculation for 3,7V LiPo accus, 0...100%
sensors.batteryLevelLiPo = sensors.batteryVoltage60 * 203.8312 -738.1635; sensors.batteryLevelLiPo = sensors.batteryVoltage60 * 203.8312 -738.1635;
// Limiter // Limiter
@ -555,14 +555,14 @@ void sensorTask(void *param){
SetN2kDCBatStatus(N2kMsg, 10, sensors.batteryVoltage, N2kDoubleNA, N2kDoubleNA, 0); SetN2kDCBatStatus(N2kMsg, 10, sensors.batteryVoltage, N2kDoubleNA, N2kDoubleNA, 0);
api->sendN2kMessage(N2kMsg); api->sendN2kMessage(N2kMsg);
} }
#endif #endif
#ifdef BOARD_OBP60S3 #ifdef BOARD_OBP60S3
// Send to NMEA200 bus // Send to NMEA200 bus
if(!isnan(sensors.batteryVoltage)){ if(!isnan(sensors.batteryVoltage)){
SetN2kDCBatStatus(N2kMsg, 0, sensors.batteryVoltage, N2kDoubleNA, N2kDoubleNA, 1); SetN2kDCBatStatus(N2kMsg, 0, sensors.batteryVoltage, N2kDoubleNA, N2kDoubleNA, 1);
api->sendN2kMessage(N2kMsg); api->sendN2kMessage(N2kMsg);
} }
#endif #endif
} }
// Send data from environment sensor all 2s // Send data from environment sensor all 2s

View File

@ -19,10 +19,6 @@
class PageAIS : public Page class PageAIS : public Page
{ {
private: private:
bool simulation = false;
bool holdvalues = false;
String flashLED;
String backlightMode;
int scale = 5; // Radius of display circle in nautical miles int scale = 5; // Radius of display circle in nautical miles
@ -36,7 +32,7 @@ private:
// TBD Boatvalues: ... // TBD Boatvalues: ...
LOG_DEBUG(GwLog::DEBUG,"Drawing at PageAIS"); logger->logDebug(GwLog::DEBUG,"Drawing at PageAIS");
Point c = {200, 150}; // center = current boat position Point c = {200, 150}; // center = current boat position
uint16_t r = 125; uint16_t r = 125;
@ -84,16 +80,8 @@ private:
public: public:
PageAIS(CommonData &common) : Page(common) PageAIS(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG,"Instantiate PageAIS"); logger->logDebug(GwLog::LOG, "Instantiate PageAIS");
// preload configuration data
simulation = config->getBool(config->useSimuData);
holdvalues = config->getBool(config->holdvalues);
flashLED = config->getString(config->flashLED);
backlightMode = config->getString(config->backlight);
alarm_range = 3; alarm_range = 3;
} }
void setupKeys(){ void setupKeys(){
@ -137,13 +125,20 @@ public:
} }
#endif #endif
void displayNew(PageData &pageData){ void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
}; };
int displayPage(PageData &pageData){ int displayPage(PageData &pageData){
// Logging boat values // Logging boat values
LOG_DEBUG(GwLog::LOG,"Drawing at PageAIS; Mode=%c", mode); logger->logDebug(GwLog::LOG, "Drawing at PageAIS; Mode=%c", mode);
// Set display in partial refresh mode // Set display in partial refresh mode
epd->setPartialWindow(0, 0, epd->width(), epd->height()); epd->setPartialWindow(0, 0, epd->width(), epd->height());

View File

@ -51,10 +51,6 @@ static unsigned char anchor_bits[] = {
class PageAnchor : public Page class PageAnchor : public Page
{ {
private: private:
bool simulation = false;
bool holdvalues = false;
String flashLED;
String backlightMode;
String lengthformat; String lengthformat;
int scale = 50; // Radius of display circle in meter int scale = 50; // Radius of display circle in meter
@ -98,7 +94,7 @@ private:
String sval_hdop = formatValue(bv_hdop, *commonData).svalue; String sval_hdop = formatValue(bv_hdop, *commonData).svalue;
String sunit_hdop = formatValue(bv_hdop, *commonData).unit; String sunit_hdop = formatValue(bv_hdop, *commonData).unit;
LOG_DEBUG(GwLog::DEBUG,"Drawing at PageAnchor; DBS=%f, HDT=%f, AWS=%f", bv_dbs->value, bv_hdt->value, bv_aws->value); logger->logDebug(GwLog::DEBUG, "Drawing at PageAnchor; DBS=%f, HDT=%f, AWS=%f", bv_dbs->value, bv_hdt->value, bv_aws->value);
Point c = {200, 150}; // center = anchor position Point c = {200, 150}; // center = anchor position
uint16_t r = 125; uint16_t r = 125;
@ -194,7 +190,7 @@ private:
// alarm range in meter has to be smaller than the scale in meter // alarm range in meter has to be smaller than the scale in meter
// r and r_range are pixel values // r and r_range are pixel values
uint16_t r_range = int(alarm_range * r / scale); uint16_t r_range = int(alarm_range * r / scale);
LOG_DEBUG(GwLog::LOG,"Drawing at PageAnchor; Alarm range = %d", r_range); logger->logDebug(GwLog::LOG, "Drawing at PageAnchor; Alarm range = %d", r_range);
epd->drawCircle(c.x, c.y, r_range, commonData->fgcolor); epd->drawCircle(c.x, c.y, r_range, commonData->fgcolor);
} }
@ -220,7 +216,7 @@ private:
for (int i = 0 ; i < menu->getItemCount(); i++) { for (int i = 0 ; i < menu->getItemCount(); i++) {
ConfigMenuItem *itm = menu->getItemByIndex(i); ConfigMenuItem *itm = menu->getItemByIndex(i);
if (!itm) { if (!itm) {
LOG_DEBUG(GwLog::ERROR, "Menu item not found: %d", i); logger->logDebug(GwLog::ERROR, "Menu item not found: %d", i);
} else { } else {
Rect r = menu->getItemRect(i); Rect r = menu->getItemRect(i);
bool inverted = (i == menu->getActiveIndex()); bool inverted = (i == menu->getActiveIndex());
@ -244,13 +240,9 @@ private:
public: public:
PageAnchor(CommonData &common) : Page(common) PageAnchor(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG,"Instantiate PageAnchor"); logger->logDebug(GwLog::LOG, "Instantiate PageAnchor");
// preload configuration data // preload configuration data
simulation = config->getBool(config->useSimuData);
holdvalues = config->getBool(config->holdvalues);
flashLED = config->getString(config->flashLED);
backlightMode = config->getString(config->backlight);
lengthformat = config->getString(config->lengthFormat); lengthformat = config->getString(config->lengthFormat);
chain_length = config->getInt(config->chainLength); chain_length = config->getInt(config->chainLength);
@ -266,7 +258,7 @@ public:
newitem = menu->addItem("chain", "Chain out", "int", 0, "m"); newitem = menu->addItem("chain", "Chain out", "int", 0, "m");
if (! newitem) { if (! newitem) {
// Demo: in case of failure exit here, should never be happen // Demo: in case of failure exit here, should never be happen
logger->logDebug(GwLog::ERROR,"Menu item creation failed"); logger->logDebug(GwLog::ERROR, "Menu item creation failed");
return; return;
} }
newitem->setRange(0, 200, {1, 5, 10}); newitem->setRange(0, 200, {1, 5, 10});
@ -387,12 +379,19 @@ public:
#endif #endif
void displayNew(PageData &pageData){ void displayNew(PageData &pageData){
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
}; };
int displayPage(PageData &pageData){ int displayPage(PageData &pageData){
// Logging boat values // Logging boat values
LOG_DEBUG(GwLog::LOG,"Drawing at PageAnchor; Mode=%c", mode); logger->logDebug(GwLog::LOG, "Drawing at PageAnchor; Mode=%c", mode);
// Set display in partial refresh mode // Set display in partial refresh mode
epd->setPartialWindow(0, 0, epd->width(), epd->height()); // Set partial update epd->setPartialWindow(0, 0, epd->width(), epd->height()); // Set partial update

View File

@ -12,18 +12,13 @@
class PageAutopilot : public Page class PageAutopilot : public Page
{ {
private: private:
bool simulation = false;
bool holdvalues = false;
String flashLED;
String backlightMode;
char mode = 'N'; // (N)ormal, (C)onfig char mode = 'N'; // (N)ormal, (C)onfig
void displayModeNormal(PageData &pageData) { void displayModeNormal(PageData &pageData) {
// TBD Boatvalues: ... // TBD Boatvalues: ...
LOG_DEBUG(GwLog::DEBUG,"Drawing at PageAutopilot"); logger->logDebug(GwLog::DEBUG, "Drawing at PageAutopilot");
// Title and corner value headings // Title and corner value headings
epd->setTextColor(commonData->fgcolor); epd->setTextColor(commonData->fgcolor);
@ -49,22 +44,15 @@ public:
PageAutopilot(CommonData &common) : Page(common) PageAutopilot(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageAutopilot"); logger->logDebug(GwLog::LOG, "Instantiate PageAutopilot");
// preload configuration data
simulation = config->getBool(config->useSimuData);
holdvalues = config->getBool(config->holdvalues);
flashLED = config->getString(config->flashLED);
backlightMode = config->getString(config->backlight);
} }
void setupKeys(){ void setupKeys() {
Page::setupKeys(); Page::setupKeys();
commonData->keydata[0].label = "MODE"; commonData->keydata[0].label = "MODE";
} }
#ifdef BOARD_OBP60S3 #ifdef BOARD_OBP60S3
int handleKey(int key){ int handleKey(int key) {
if (key == 1) { // Switch between normal and config mode if (key == 1) { // Switch between normal and config mode
if (mode == 'N') { if (mode == 'N') {
mode = 'C'; mode = 'C';
@ -101,12 +89,19 @@ public:
#endif #endif
void displayNew(PageData &pageData){ void displayNew(PageData &pageData){
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
}; };
int displayPage(PageData &pageData){ int displayPage(PageData &pageData){
// Logging boat values // Logging boat values
LOG_DEBUG(GwLog::LOG,"Drawing at PageAutopilot; Mode=%c", mode); logger->logDebug(GwLog::LOG, "Drawing at PageAutopilot; Mode=%c", mode);
// Set display in partial refresh mode // Set display in partial refresh mode
epd->setPartialWindow(0, 0, epd->width(), epd->height()); epd->setPartialWindow(0, 0, epd->width(), epd->height());

View File

@ -6,13 +6,21 @@
class PageBME280 : public Page class PageBME280 : public Page
{ {
private:
String tempformat;
String useenvsensor;
public: public:
PageBME280(CommonData &common) : Page(common) PageBME280(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG,"Instantiate PageBME280"); logger->logDebug(GwLog::LOG, "Instantiate PageBME280");
// Get config data
tempformat = config->getString(config->tempFormat);
useenvsensor = config->getString(config->useEnvSensor);
} }
virtual int handleKey(int key){ int handleKey(int key){
// Code for keylock // Code for keylock
if(key == 11){ if(key == 11){
commonData->keylock = !commonData->keylock; commonData->keylock = !commonData->keylock;
@ -30,13 +38,6 @@ public:
String svalue2 = ""; String svalue2 = "";
String svalue3 = ""; String svalue3 = "";
// Get config data
String tempformat = config->getString(config->tempFormat);
bool simulation = config->getBool(config->useSimuData);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
String useenvsensor = config->getString(config->useEnvSensor);
// Get sensor values #1 // Get sensor values #1
String name1 = "Temp"; // Value name String name1 = "Temp"; // Value name
name1 = name1.substring(0, 6); // String length limit for value name name1 = name1.substring(0, 6); // String length limit for value name
@ -98,7 +99,7 @@ public:
} }
// Logging boat values // Logging boat values
LOG_DEBUG(GwLog::LOG,"Drawing at PageBME280, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3); logger->logDebug(GwLog::LOG, "Drawing at PageBME280, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -6,20 +6,25 @@
class PageBattery : public Page class PageBattery : public Page
{ {
private:
String powsensor1;
int average = 0; // Average type [0...3], 0=off, 1=10s, 2=60s, 3=300s int average = 0; // Average type [0...3], 0=off, 1=10s, 2=60s, 3=300s
public: public:
PageBattery(CommonData &common) : Page(common) PageBattery(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageBattery"); logger->logDebug(GwLog::LOG, "Instantiate PageBattery");
// Get config data
String powsensor1 = config->getString(config->usePowSensor1);
} }
virtual void setupKeys(){ void setupKeys(){
Page::setupKeys(); Page::setupKeys();
commonData->keydata[0].label = "AVG"; commonData->keydata[0].label = "AVG";
} }
virtual int handleKey(int key){ int handleKey(int key){
// Change average // Change average
if(key == 1){ if(key == 1){
average ++; average ++;
@ -35,6 +40,16 @@ class PageBattery : public Page
return key; return key;
} }
void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData){ int displayPage(PageData &pageData){
// Old values for hold function // Old values for hold function
@ -48,14 +63,6 @@ class PageBattery : public Page
static String svalue3old = ""; static String svalue3old = "";
static String unit3old = ""; static String unit3old = "";
// Get config data
String lengthformat = config->getString(config->lengthFormat);
// bool simulation = config->getBool(config->useSimuData);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
String powsensor1 = config->getString(config->usePowSensor1);
bool simulation = config->getBool(config->useSimuData);
// Get voltage value // Get voltage value
String name1 = "VBat"; // Value name String name1 = "VBat"; // Value name
if(String(powsensor1) == "INA219" || String(powsensor1) == "INA226"){ if(String(powsensor1) == "INA219" || String(powsensor1) == "INA226"){
@ -144,14 +151,8 @@ class PageBattery : public Page
String svalue3 = String(value3); // Formatted value as string including unit conversion and switching decimal places String svalue3 = String(value3); // Formatted value as string including unit conversion and switching decimal places
String unit3 = "W"; // Unit of value String unit3 = "W"; // Unit of value
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
// Logging boat values // Logging boat values
LOG_DEBUG(GwLog::LOG,"Drawing at PageBattery, %s: %f, %s: %f, %s: %f, Avg: %d", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, average); logger->logDebug(GwLog::LOG, "Drawing at PageBattery, %s: %f, %s: %f, %s: %f, Avg: %d", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, average);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -7,15 +7,26 @@
class PageBattery2 : public Page class PageBattery2 : public Page
{ {
bool init = false; // Marker for init done private:
int average = 0; // Average type [0...3], 0=off, 1=10s, 2=60s, 3=300s String batVoltage;
bool trend = true; // Trend indicator [0|1], 0=off, 1=on int batCapacity;
double raw = 0; String batType;
String powerSensor;
bool init = false; // Marker for init done
int average = 0; // Average type [0...3], 0=off, 1=10s, 2=60s, 3=300s
bool trend = true; // Trend indicator [0|1], 0=off, 1=on
double raw = 0;
public: public:
PageBattery2(CommonData &common) : Page(common) PageBattery2(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageBattery2"); logger->logDebug(GwLog::LOG, "Instantiate PageBattery2");
// Get config data
batVoltage = config->getString(config->batteryVoltage);
batCapacity = config->getInt(config->batteryCapacity);
batType = config->getString(config->batteryType);
powerSensor = config->getString(config->usePowSensor1);
} }
void setupKeys(){ void setupKeys(){
@ -54,16 +65,6 @@ public:
int batPercentage = 0; // Battery level int batPercentage = 0; // Battery level
float batRange = 0; // Range in hours float batRange = 0; // Range in hours
// Get config data
bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String batVoltage = config->getString(config->batteryVoltage);
int batCapacity = config->getInt(config->batteryCapacity);
String batType = config->getString(config->batteryType);
String backlightMode = config->getString(config->backlight);
String powerSensor = config->getString(config->usePowSensor1);
double value1 = 0; // Battery voltage double value1 = 0; // Battery voltage
double value2 = 0; // Battery current double value2 = 0; // Battery current
double value3 = 0; // Battery power consumption double value3 = 0; // Battery power consumption
@ -139,43 +140,27 @@ public:
if(batRange > 99) batRange = 99; if(batRange > 99) batRange = 99;
// Optical warning by limit violation // Optical warning by limit violation
if(String(flashLED) == "Limit Violation"){ if (flashLED == "Limit Violation") {
// Limits for Pb battery bool violation = false;
if(String(batType) == "Pb" && (raw < 11.8 || raw > 14.8)){ if (batType == "Pb") {
violation = (raw < 11.8 || raw > 14.8);
} else if (batType == "Gel") {
violation = (raw < 11.8 || raw > 14.4);
} else if (batType == "AGM") {
violation = (raw < 11.8 || raw > 14.7);
} else if (batType == "LiFePo4") {
violation = (raw < 12.0 || raw > 14.6);
}
if (violation) {
setBlinkingLED(true); setBlinkingLED(true);
} } else {
if(String(batType) == "Pb" && (raw >= 11.8 && raw <= 14.8)){
setBlinkingLED(false);
setFlashLED(false);
}
// Limits for Gel battery
if(String(batType) == "Gel" && (raw < 11.8 || raw > 14.4)){
setBlinkingLED(true);
}
if(String(batType) == "Gel" && (raw >= 11.8 && raw <= 14.4)){
setBlinkingLED(false);
setFlashLED(false);
}
// Limits for AGM battery
if(String(batType) == "AGM" && (raw < 11.8 || raw > 14.7)){
setBlinkingLED(true);
}
if(String(batType) == "AGM" && (raw >= 11.8 && raw <= 14.7)){
setBlinkingLED(false);
setFlashLED(false);
}
// Limits for LiFePo4 battery
if(String(batType) == "LiFePo4" && (raw < 12.0 || raw > 14.6)){
setBlinkingLED(true);
}
if(String(batType) == "LiFePo4" && (raw >= 12.0 && raw <= 14.6)){
setBlinkingLED(false); setBlinkingLED(false);
setFlashLED(false); setFlashLED(false);
} }
} }
// Logging voltage value // Logging voltage value
LOG_DEBUG(GwLog::LOG,"Drawing at PageBattery2, Type:%s %s:=%f", batType.c_str(), name1.c_str(), raw); logger->logDebug(GwLog::LOG, "Drawing at PageBattery2, Type:%s %s:=%f", batType.c_str(), name1.c_str(), raw);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -18,7 +18,7 @@
class PageClock : public Page class PageClock : public Page
{ {
private: private:
bool simulation = false; String dateformat;
int simtime; int simtime;
bool keylock = false; bool keylock = false;
char source = 'R'; // time source (R)TC | (G)PS | (N)TP char source = 'R'; // time source (R)TC | (G)PS | (N)TP
@ -34,23 +34,24 @@ public:
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageClock"); logger->logDebug(GwLog::LOG, "Instantiate PageClock");
// WIP time source // Get config data
#ifdef BOARD_OBP60S3 dateformat = config->getString(config->dateFormat);
String use_rtc = config->getString(config->useRTC);
if (use_rtc == "off") {
source = 'G';
}
#endif
simulation = config->getBool(config->useSimuData);
timezone = config->getString(config->timeZone).toDouble(); timezone = config->getString(config->timeZone).toDouble();
homelat = config->getString(config->homeLAT).toDouble(); homelat = config->getString(config->homeLAT).toDouble();
homelon = config->getString(config->homeLON).toDouble(); homelon = config->getString(config->homeLON).toDouble();
homevalid = homelat >= -180.0 and homelat <= 180 and homelon >= -90.0 and homelon <= 90.0; homevalid = homelat >= -180.0 and homelat <= 180 and homelon >= -90.0 and homelon <= 90.0;
simtime = 38160; // time value 11:36 simtime = 38160; // time value 11:36
#ifdef BOARD_OBP60S3
// WIP time source
String use_rtc = config->getString(config->useRTC);
if (use_rtc == "off") {
source = 'G';
}
#endif
} }
virtual void setupKeys(){ void setupKeys(){
Page::setupKeys(); Page::setupKeys();
commonData->keydata[0].label = "SRC"; commonData->keydata[0].label = "SRC";
commonData->keydata[1].label = "MODE"; commonData->keydata[1].label = "MODE";
@ -58,7 +59,7 @@ public:
} }
// Key functions // Key functions
virtual int handleKey(int key){ int handleKey(int key){
// Time source // Time source
if (key == 1) { if (key == 1) {
if (source == 'G') { if (source == 'G') {
@ -96,8 +97,18 @@ public:
return key; return key;
} }
int displayPage(PageData &pageData) void displayNew(PageData &pageData) {
{ #ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData) {
static String svalue1old = ""; static String svalue1old = "";
static String unit1old = ""; static String unit1old = "";
static String svalue2old = ""; static String svalue2old = "";
@ -113,13 +124,6 @@ public:
double value3 = 0; // HDOP double value3 = 0; // HDOP
bool gpsvalid = false; bool gpsvalid = false;
// Get config data
String lengthformat = config->getString(config->lengthFormat);
String dateformat = config->getString(config->dateFormat);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
// Get boat values for GPS time // Get boat values for GPS time
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
String name1 = bvalue1->getName().c_str(); // Value name String name1 = bvalue1->getName().c_str(); // Value name
@ -175,7 +179,7 @@ public:
// Logging boat values // Logging boat values
if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement? if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement?
LOG_DEBUG(GwLog::LOG,"Drawing at PageClock, %s:%f, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3); logger->logDebug(GwLog::LOG, "Drawing at PageClock, %s:%f, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3);
// Draw page // Draw page
//*********************************************************** //***********************************************************
@ -392,7 +396,7 @@ public:
if (hour > 12) { if (hour > 12) {
hour -= 12.0; hour -= 12.0;
} }
LOG_DEBUG(GwLog::DEBUG,"... PageClock, value1: %f hour: %f minute:%f", value1, hour, minute); logger->logDebug(GwLog::DEBUG, "... PageClock, value1: %f hour: %f minute:%f", value1, hour, minute);
// Draw hour pointer // Draw hour pointer
float startwidth = 8; // Start width of pointer float startwidth = 8; // Start width of pointer

View File

@ -25,56 +25,58 @@ const float Compass_LineDelta = 8.0;// compass band: 1deg = 5 Pixels, 10deg = 50
class PageCompass : public Page class PageCompass : public Page
{ {
private:
int WhichDataCompass = ShowHDM; int WhichDataCompass = ShowHDM;
int WhichDataDisplay = ShowHDM; int WhichDataDisplay = ShowHDM;
public: public:
PageCompass(CommonData &common) : Page(common) PageCompass(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageCompass"); logger->logDebug(GwLog::LOG, "Instantiate PageCompass");
} }
virtual void setupKeys(){ void setupKeys(){
Page::setupKeys(); Page::setupKeys();
commonData->keydata[0].label = "CMP"; commonData->keydata[0].label = "CMP";
commonData->keydata[1].label = "SRC"; commonData->keydata[1].label = "SRC";
} }
virtual int handleKey(int key){ int handleKey(int key){
// Code for keylock // Code for keylock
if (key == 1) {
if ( key == 1 ) {
WhichDataCompass += 1; WhichDataCompass += 1;
if ( WhichDataCompass > ShowCOG) if ( WhichDataCompass > ShowCOG)
WhichDataCompass = ShowHDM; WhichDataCompass = ShowHDM;
return 0; return 0;
} }
if ( key == 2 ) { if (key == 2) {
WhichDataDisplay += 1; WhichDataDisplay += 1;
if ( WhichDataDisplay > ShowDBS) if (WhichDataDisplay > ShowDBS)
WhichDataDisplay = ShowHDM; WhichDataDisplay = ShowHDM;
} }
if (key == 11) {
if(key == 11){
commonData->keylock = !commonData->keylock; commonData->keylock = !commonData->keylock;
return 0; // Commit the key return 0; // Commit the key
} }
return key; return key;
} }
int displayPage(PageData &pageData){ void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData) {
// Old values for hold function // Old values for hold function
static String OldDataText[HowManyValues] = {"", "", "","", "", ""}; static String OldDataText[HowManyValues] = {"", "", "","", "", ""};
static String OldDataUnits[HowManyValues] = {"", "", "","", "", ""}; static String OldDataUnits[HowManyValues] = {"", "", "","", "", ""};
// Get config data
String lengthformat = config->getString(config->lengthFormat);
// bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
GwApi::BoatValue *bvalue; GwApi::BoatValue *bvalue;
String DataName[HowManyValues]; String DataName[HowManyValues];
double DataValue[HowManyValues]; double DataValue[HowManyValues];
@ -94,13 +96,7 @@ class PageCompass : public Page
DataValue[i] = TheFormattedData.value; // Value as double in SI unit DataValue[i] = TheFormattedData.value; // Value as double in SI unit
DataValid[i] = bvalue->valid; DataValid[i] = bvalue->valid;
DataFormat[i] = bvalue->getFormat(); // Unit of value DataFormat[i] = bvalue->getFormat(); // Unit of value
LOG_DEBUG(GwLog::LOG,"Drawing at PageCompass: %d %s %f %s %s", i, DataName[i], DataValue[i], DataFormat[i], DataText[i] ); logger->logDebug(GwLog::LOG, "Drawing at PageCompass: %d %s %f %s %s", i, DataName[i], DataValue[i], DataFormat[i], DataText[i] );
}
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
} }
if (bvalue == NULL) return PAGE_OK; // WTF why this statement? if (bvalue == NULL) return PAGE_OK; // WTF why this statement?

View File

@ -6,13 +6,19 @@
class PageDST810 : public Page class PageDST810 : public Page
{ {
private:
String lengthformat;
public: public:
PageDST810(CommonData &common) : Page(common) PageDST810(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageDST810"); logger->logDebug(GwLog::LOG, "Instantiate PageDST810");
// Get config data
lengthformat = config->getString(config->lengthFormat);
} }
virtual int handleKey(int key){ int handleKey(int key) {
// Code for keylock // Code for keylock
if(key == 11){ if(key == 11){
commonData->keylock = !commonData->keylock; commonData->keylock = !commonData->keylock;
@ -21,7 +27,7 @@ public:
return key; return key;
} }
int displayPage(PageData &pageData){ int displayPage(PageData &pageData) {
// Old values for hold function // Old values for hold function
static String svalue1old = ""; static String svalue1old = "";
@ -33,13 +39,6 @@ public:
static String svalue4old = ""; static String svalue4old = "";
static String unit4old = ""; static String unit4old = "";
// Get config data
String lengthformat = config->getString(config->lengthFormat);
// bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
// Get boat values #1 // Get boat values #1
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
String name1 = xdrDelete(bvalue1->getName()); // Value name String name1 = xdrDelete(bvalue1->getName()); // Value name
@ -84,7 +83,7 @@ public:
// Logging boat values // Logging boat values
if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement? if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement?
LOG_DEBUG(GwLog::LOG,"Drawing at PageDST810, %s: %f, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4); logger->logDebug(GwLog::LOG, "Drawing at PageDST810, %s: %f, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -12,18 +12,13 @@
class PageEPropulsion : public Page class PageEPropulsion : public Page
{ {
private: private:
bool simulation = false;
bool holdvalues = false;
String flashLED;
String backlightMode;
char mode = 'N'; // (N)ormal, (C)onfig char mode = 'N'; // (N)ormal, (C)onfig
void displayModeNormal(PageData &pageData) { void displayModeNormal(PageData &pageData) {
// TBD Boatvalues: ... // TBD Boatvalues: ...
LOG_DEBUG(GwLog::DEBUG,"Drawing at PageEPropulsion"); logger->logDebug(GwLog::DEBUG, "Drawing at PageEPropulsion");
// Title and corner value headings // Title and corner value headings
epd->setTextColor(commonData->fgcolor); epd->setTextColor(commonData->fgcolor);
@ -49,13 +44,6 @@ public:
PageEPropulsion(CommonData &common) : Page(common) PageEPropulsion(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG,"Instantiate PageEPropulsion"); logger->logDebug(GwLog::LOG,"Instantiate PageEPropulsion");
// preload configuration data
simulation = config->getBool(config->useSimuData);
holdvalues = config->getBool(config->holdvalues);
flashLED = config->getString(config->flashLED);
backlightMode = config->getString(config->backlight);
} }
void setupKeys(){ void setupKeys(){
@ -100,12 +88,19 @@ public:
#endif #endif
void displayNew(PageData &pageData){ void displayNew(PageData &pageData){
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
}; };
int displayPage(PageData &pageData){ int displayPage(PageData &pageData){
// Logging boat values // Logging boat values
LOG_DEBUG(GwLog::LOG,"Drawing at PageEPropulsion; Mode=%c", mode); logger->logDebug(GwLog::LOG,"Drawing at PageEPropulsion; Mode=%c", mode);
// Set display in partial refresh mode // Set display in partial refresh mode
epd->setPartialWindow(0, 0, epd->width(), epd->height()); epd->setPartialWindow(0, 0, epd->width(), epd->height());

View File

@ -67,25 +67,22 @@ static unsigned char fish_bits[] = {
class PageFluid : public Page class PageFluid : public Page
{ {
bool simulation = false; private:
double simgoto; double simgoto;
double simval; double simval;
double simstep; double simstep;
bool holdvalues = false;
int fluidtype; int fluidtype;
public: public:
PageFluid(CommonData &common) : Page(common) PageFluid(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG,"Instantiate PageFluid"); logger->logDebug(GwLog::LOG, "Instantiate PageFluid");
simulation = config->getBool(config->useSimuData);
holdvalues = config->getBool(config->holdvalues);
simval = double(random(0, 100)); simval = double(random(0, 100));
simgoto = double(random(0, 100)); simgoto = double(random(0, 100));
simstep = (simgoto - simval) / 20.0; simstep = (simgoto - simval) / 20.0;
} }
virtual int handleKey(int key){ int handleKey(int key) {
// Code for keylock // Code for keylock
if(key == 11){ if(key == 11){
commonData->keylock = !commonData->keylock; commonData->keylock = !commonData->keylock;
@ -94,25 +91,22 @@ class PageFluid : public Page
return key; return key;
} }
virtual void displayNew(PageData &pageData){ void displayNew(PageData &pageData) {
fluidtype = config->getInt("page" + String(pageData.pageNumber) + "fluid", 0); fluidtype = config->getInt("page" + String(pageData.pageNumber) + "fluid", 0);
logger->logDebug(GwLog::LOG, "New PageFluid: fluidtype=%d", fluidtype); logger->logDebug(GwLog::LOG, "New PageFluid: fluidtype=%d", fluidtype);
} #ifdef BOARD_OBP60S3
// Clear optical warning
int displayPage(PageData &pageData){ if (flashLED == "Limit Violation") {
// Old values for hold function
static double value1old;
// Get config data
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false); setBlinkingLED(false);
setFlashLED(false); setFlashLED(false);
} }
#endif
}
int displayPage(PageData &pageData) {
// Old values for hold function
static double value1old;
GwApi::BoatValue *bvalue1 = pageData.values[0]; GwApi::BoatValue *bvalue1 = pageData.values[0];
String name1 = bvalue1->getName(); String name1 = bvalue1->getName();
@ -131,7 +125,7 @@ class PageFluid : public Page
} }
// Logging boat values // Logging boat values
LOG_DEBUG(GwLog::LOG,"Drawing at PageFluid: value=%f", bvalue1->value); logger->logDebug(GwLog::LOG, "Drawing at PageFluid: value=%f", bvalue1->value);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -7,10 +7,16 @@
class PageFourValues : public Page class PageFourValues : public Page
{ {
private:
String lengthformat;
public: public:
PageFourValues(CommonData &common) : Page(common) PageFourValues(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageFourValues"); logger->logDebug(GwLog::LOG, "Instantiate PageFourValues");
// Get config data
lengthformat = config->getString(config->lengthFormat);
} }
int handleKey(int key){ int handleKey(int key){
@ -22,6 +28,16 @@ public:
return key; return key;
} }
void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData){ int displayPage(PageData &pageData){
// Old values for hold function // Old values for hold function
@ -34,13 +50,6 @@ public:
static String svalue4old = ""; static String svalue4old = "";
static String unit4old = ""; static String unit4old = "";
// Get config data
String lengthformat = config->getString(config->lengthFormat);
// bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
// Get boat values #1 // Get boat values #1
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
String name1 = xdrDelete(bvalue1->getName()); // Value name String name1 = xdrDelete(bvalue1->getName()); // Value name
@ -81,15 +90,9 @@ public:
String svalue4 = formatValue(bvalue4, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String svalue4 = formatValue(bvalue4, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
String unit4 = formatValue(bvalue4, *commonData).unit; // Unit of value String unit4 = formatValue(bvalue4, *commonData).unit; // Unit of value
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
// Logging boat values // Logging boat values
if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement? if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement?
LOG_DEBUG(GwLog::LOG,"Drawing at PageFourValues, %s: %f, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4); logger->logDebug(GwLog::LOG, "Drawing at PageFourValues, %s: %f, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4);
// Draw page // Draw page
//*********************************************************** //***********************************************************
@ -288,8 +291,15 @@ public:
return PAGE_UPDATE; return PAGE_UPDATE;
}; };
void leavePage(PageData &pageData) {
logger->logDebug(GwLog::LOG, "Leaving PageFourvalues");
}
}; };
static Page *createPage(CommonData &common){ static Page *createPage(CommonData &common){
return new PageFourValues(common); return new PageFourValues(common);
}/** }/**

View File

@ -7,13 +7,19 @@
class PageFourValues2 : public Page class PageFourValues2 : public Page
{ {
private:
String lengthformat;
public: public:
PageFourValues2(CommonData &common) : Page(common) PageFourValues2(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG,"Instantiate PageFourValues2"); logger->logDebug(GwLog::LOG, "Instantiate PageFourValues2");
// Get config data
lengthformat = config->getString(config->lengthFormat);
} }
virtual int handleKey(int key){ int handleKey(int key) {
// Code for keylock // Code for keylock
if(key == 11){ if(key == 11){
commonData->keylock = !commonData->keylock; // Toggle keylock commonData->keylock = !commonData->keylock; // Toggle keylock
@ -22,7 +28,17 @@ public:
return key; return key;
} }
int displayPage(PageData &pageData){ void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData) {
// Old values for hold function // Old values for hold function
static String svalue1old = ""; static String svalue1old = "";
@ -34,13 +50,6 @@ public:
static String svalue4old = ""; static String svalue4old = "";
static String unit4old = ""; static String unit4old = "";
// Get config data
String lengthformat = config->getString(config->lengthFormat);
// bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
// Get boat values #1 // Get boat values #1
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
String name1 = xdrDelete(bvalue1->getName()); // Value name String name1 = xdrDelete(bvalue1->getName()); // Value name
@ -81,15 +90,9 @@ public:
String svalue4 = formatValue(bvalue4, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String svalue4 = formatValue(bvalue4, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
String unit4 = formatValue(bvalue4, *commonData).unit; // Unit of value String unit4 = formatValue(bvalue4, *commonData).unit; // Unit of value
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
// Logging boat values // Logging boat values
if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement? if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement?
LOG_DEBUG(GwLog::LOG,"Drawing at PageFourValues2, %s: %f, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4); logger->logDebug(GwLog::LOG, "Drawing at PageFourValues2, %s: %f, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -7,10 +7,20 @@
class PageGenerator : public Page class PageGenerator : public Page
{ {
private:
String batVoltage;
int genPower;
String powerSensor;
public: public:
PageGenerator(CommonData &common) : Page(common) PageGenerator(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageGenerator"); logger->logDebug(GwLog::LOG, "Instantiate PageGenerator");
// Get config data
batVoltage = config->getString(config->batteryVoltage);
genPower = config->getInt(config->genPower);
powerSensor = config->getString(config->usePowSensor3);
} }
int handleKey(int key){ int handleKey(int key){
@ -24,15 +34,6 @@ public:
int displayPage(PageData &pageData) { int displayPage(PageData &pageData) {
// Get config data
bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String batVoltage = config->getString(config->batteryVoltage);
int genPower = config->getInt(config->genPower);
String backlightMode = config->getString(config->backlight);
String powerSensor = config->getString(config->usePowSensor3);
double value1 = 0; // Solar voltage double value1 = 0; // Solar voltage
double value2 = 0; // Solar current double value2 = 0; // Solar current
double value3 = 0; // Solar output power double value3 = 0; // Solar output power
@ -59,24 +60,19 @@ public:
bool valid1 = true; bool valid1 = true;
// Optical warning by limit violation // Optical warning by limit violation
if(String(flashLED) == "Limit Violation"){ if (flashLED == "Limit Violation") {
// Over voltage // Over voltage?
if(value1 > 14.8 && batVoltage == "12V"){ if (batVoltage == "12V") {
setBlinkingLED(true); setBlinkingLED(value1 > 14.8);
} } else if (batVoltage == "24V") {
if(value1 <= 14.8 && batVoltage == "12V"){ setBlinkingLED(value1 > 29.6);
setBlinkingLED(false); } else {
}
if(value1 > 29.6 && batVoltage == "24V"){
setBlinkingLED(true);
}
if(value1 <= 29.6 && batVoltage == "24V"){
setBlinkingLED(false); setBlinkingLED(false);
} }
} }
// Logging voltage value // Logging voltage value
LOG_DEBUG(GwLog::LOG,"Drawing at PageGenerator, Type:%iW %s:=%f", genPower, name1.c_str(), value1); logger->logDebug(GwLog::LOG, "Drawing at PageGenerator, Type:%iW %s:=%f", genPower, name1.c_str(), value1);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -6,10 +6,20 @@
class PageKeelPosition : public Page class PageKeelPosition : public Page
{ {
private:
String lengthformat;
String rotsensor;
String rotfunction;
public: public:
PageKeelPosition(CommonData &common) : Page(common) PageKeelPosition(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageKeelPosition"); logger->logDebug(GwLog::LOG, "Instantiate PageKeelPosition");
// Get config data
lengthformat = config->getString(config->lengthFormat);
rotsensor = config->getString(config->useRotSensor);
rotfunction = config->getString(config->rotFunction);
} }
// Key functions // Key functions
@ -22,20 +32,21 @@ public:
return key; return key;
} }
void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData) { int displayPage(PageData &pageData) {
double value1 = 0; double value1 = 0;
double value1old = 0; double value1old = 0;
// Get config data
String lengthformat = config->getString(config->lengthFormat);
bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
String rotsensor = config->getString(config->useRotSensor);
String rotfunction = config->getString(config->rotFunction);
// Get boat values for Keel position // Get boat values for Keel position
bool valid1 = commonData->data.validRotAngle; // Valid information bool valid1 = commonData->data.validRotAngle; // Valid information
if(simulation == false && rotsensor == "AS5600" && rotfunction == "Keel"){ if(simulation == false && rotsensor == "AS5600" && rotfunction == "Keel"){
@ -53,14 +64,8 @@ public:
value1old = value1; // Save old value value1old = value1; // Save old value
} }
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
// Logging boat values // Logging boat values
LOG_DEBUG(GwLog::LOG,"Drawing at PageKeelPosition, Keel:%f", value1); logger->logDebug(GwLog::LOG, "Drawing at PageKeelPosition, Keel:%f", value1);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -7,10 +7,16 @@
class PageOneValue : public Page class PageOneValue : public Page
{ {
public: private:
String lengthformat;
public:
PageOneValue(CommonData &common) : Page(common) PageOneValue(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageOneValue"); logger->logDebug(GwLog::LOG, "Instantiate PageOneValue");
// Get config data
lengthformat = config->getString(config->lengthFormat);
} }
int handleKey(int key) { int handleKey(int key) {
@ -22,18 +28,22 @@ class PageOneValue : public Page
return key; return key;
} }
void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData) { int displayPage(PageData &pageData) {
// Old values for hold function // Old values for hold function
static String svalue1old = ""; static String svalue1old = "";
static String unit1old = ""; static String unit1old = "";
// Get config data
String lengthformat = config->getString(config->lengthFormat);
// bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
// Get boat values // Get boat values
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
@ -45,15 +55,9 @@ class PageOneValue : public Page
String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
String unit1 = formatValue(bvalue1, *commonData).unit; // Unit of value String unit1 = formatValue(bvalue1, *commonData).unit; // Unit of value
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
// Logging boat values // Logging boat values
if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement? if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement?
LOG_DEBUG(GwLog::LOG,"Drawing at PageOneValue, %s: %f", name1.c_str(), value1); logger->logDebug(GwLog::LOG, "Drawing at PageOneValue, %s: %f", name1.c_str(), value1);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -6,10 +6,26 @@
class PageRollPitch : public Page class PageRollPitch : public Page
{ {
private:
String lengthformat;
int rolllimit;
String roffset;
double rolloffset;
String poffset;
double pitchoffset;
public: public:
PageRollPitch(CommonData &common) : Page(common) PageRollPitch(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageRollPitch"); logger->logDebug(GwLog::LOG, "Instantiate PageRollPitch");
// Get config data
String lengthformat = config->getString(config->lengthFormat);
rolllimit = config->getInt(config->rollLimit);
roffset = config->getString(config->rollOffset);
rolloffset = roffset.toFloat() / 360 * (2 * M_PI);
poffset = config->getString(config->pitchOffset);
pitchoffset = poffset.toFloat() / 360 * (2 * M_PI);
} }
// Key functions // Key functions
@ -31,18 +47,6 @@ public:
String svalue2 = ""; String svalue2 = "";
String svalue2old = ""; String svalue2old = "";
// Get config data
String lengthformat = config->getString(config->lengthFormat);
bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
int rolllimit = config->getInt(config->rollLimit);
String roffset = config->getString(config->rollOffset);
double rolloffset = roffset.toFloat()/360*(2*M_PI);
String poffset = config->getString(config->pitchOffset);
double pitchoffset = poffset.toFloat()/360*(2*M_PI);
// Get boat values for roll // Get boat values for roll
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (xdrRoll) GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (xdrRoll)
String name1 = xdrDelete(bvalue1->getName()); // Value name String name1 = xdrDelete(bvalue1->getName()); // Value name
@ -95,20 +99,19 @@ public:
} }
// Optical warning by limit violation // Optical warning by limit violation
if(String(flashLED) == "Limit Violation"){ if (flashLED == "Limit Violation") {
// Limits for roll // Limits for roll
if(value1*360/(2*M_PI) >= -1*rolllimit && value1*360/(2*M_PI) <= rolllimit){ if (value1*360/(2*M_PI) >= -1*rolllimit && value1*360/(2*M_PI) <= rolllimit) {
setBlinkingLED(false); setBlinkingLED(false);
setFlashLED(false); setFlashLED(false);
} } else {
else{
setBlinkingLED(true); setBlinkingLED(true);
} }
} }
// Logging boat values // Logging boat values
if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement? if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement?
LOG_DEBUG(GwLog::LOG,"Drawing at PageRollPitch, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2); logger->logDebug(GwLog::LOG, "Drawing at PageRollPitch, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -7,14 +7,20 @@
class PageRudderPosition : public Page class PageRudderPosition : public Page
{ {
private:
String lengthformat;
public: public:
PageRudderPosition(CommonData &common) : Page(common) PageRudderPosition(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Show PageRudderPosition"); logger->logDebug(GwLog::LOG, "Instantiate PageRudderPosition");
// Get config data
String lengthformat = config->getString(config->lengthFormat);
} }
// Key functions // Key functions
int handleKey(int key){ int handleKey(int key) {
// Code for keylock // Code for keylock
if(key == 11){ if(key == 11){
commonData->keylock = !commonData->keylock; commonData->keylock = !commonData->keylock;
@ -23,19 +29,22 @@ public:
return key; return key;
} }
void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData) { int displayPage(PageData &pageData) {
static String unit1old = ""; static String unit1old = "";
double value1 = 0.1; double value1 = 0.1;
double value1old = 0.1; double value1old = 0.1;
// Get config data
String lengthformat = config->getString(config->lengthFormat);
bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
// Get boat values for rudder position // Get boat values for rudder position
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list
String name1 = bvalue1->getName().c_str(); // Value name String name1 = bvalue1->getName().c_str(); // Value name
@ -46,28 +55,21 @@ public:
String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String svalue1 = formatValue(bvalue1, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
String unit1 = formatValue(bvalue1, *commonData).unit; // Unit of value String unit1 = formatValue(bvalue1, *commonData).unit; // Unit of value
if(valid1 == true){ if (valid1 == true) {
value1old = value1; // Save old value value1old = value1; // Save old value
unit1old = unit1; // Save old unit unit1old = unit1; // Save old unit
} else { } else {
if(simulation == true){ if (simulation == true) {
value1 = (3 + float(random(0, 50)) / 10.0)/360*2*PI; value1 = (3 + float(random(0, 50)) / 10.0) / 360 * 2 * M_PI;
unit1 = "Deg"; unit1 = "Deg";
} } else {
else{
value1 = 0; value1 = 0;
} }
} }
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
// Logging boat values // Logging boat values
if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement? if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement?
LOG_DEBUG(GwLog::LOG,"Drawing at PageRudderPosition, %s:%f", name1.c_str(), value1); logger->logDebug(GwLog::LOG, "Drawing at PageRudderPosition, %s:%f", name1.c_str(), value1);
// Draw page // Draw page
//*********************************************************** //***********************************************************
@ -79,7 +81,7 @@ public:
// Draw RudderPosition // Draw RudderPosition
int rInstrument = 110; // Radius of RudderPosition int rInstrument = 110; // Radius of RudderPosition
float pi = 3.141592; const float pi = 3.141592;
epd->fillCircle(200, 150, rInstrument + 10, commonData->fgcolor); // Outer circle epd->fillCircle(200, 150, rInstrument + 10, commonData->fgcolor); // Outer circle
epd->fillCircle(200, 150, rInstrument + 7, commonData->bgcolor); // Outer circle epd->fillCircle(200, 150, rInstrument + 7, commonData->bgcolor); // Outer circle
@ -91,8 +93,7 @@ public:
float x = 200 + (rInstrument-30)*sin(i/180.0*pi); // x-coordinate dots float x = 200 + (rInstrument-30)*sin(i/180.0*pi); // x-coordinate dots
float y = 150 - (rInstrument-30)*cos(i/180.0*pi); // y-coordinate cots float y = 150 - (rInstrument-30)*cos(i/180.0*pi); // y-coordinate cots
const char *ii = " "; const char *ii = " ";
switch (i) switch (i) {
{
case 0: ii=" "; break; // Use a blank for a empty scale value case 0: ii=" "; break; // Use a blank for a empty scale value
case 30 : ii=" "; break; case 30 : ii=" "; break;
case 60 : ii=" "; break; case 60 : ii=" "; break;
@ -127,7 +128,7 @@ public:
// Draw sub scale with lines (two triangles) // Draw sub scale with lines (two triangles)
if(i % 30 == 0){ if(i % 30 == 0){
float dx=2; // Line thickness = 2*dx+1 float dx = 2; // Line thickness = 2*dx+1
float xx1 = -dx; float xx1 = -dx;
float xx2 = +dx; float xx2 = +dx;
float yy1 = -(rInstrument-10); float yy1 = -(rInstrument-10);

View File

@ -21,7 +21,7 @@ public:
logger->logDebug(GwLog::LOG, "Instantiate PageSixValues"); logger->logDebug(GwLog::LOG, "Instantiate PageSixValues");
} }
virtual int handleKey(int key){ int handleKey(int key) {
// Code for keylock // Code for keylock
if(key == 11){ if(key == 11){
commonData->keylock = !commonData->keylock; commonData->keylock = !commonData->keylock;
@ -30,6 +30,16 @@ public:
return key; return key;
} }
void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData) { int displayPage(PageData &pageData) {
// Old values for hold function // Old values for hold function
@ -63,12 +73,6 @@ public:
DataFormat[i] = bvalue->getFormat(); // Unit of value DataFormat[i] = bvalue->getFormat(); // Unit of value
} }
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
if (bvalue == NULL) return PAGE_OK; // WTF why this statement? if (bvalue == NULL) return PAGE_OK; // WTF why this statement?
// Draw page // Draw page

View File

@ -13,7 +13,7 @@ class PageSkyView : public Page
public: public:
PageSkyView(CommonData &common) : Page(common) PageSkyView(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG,"Instantiate PageSkyView"); logger->logDebug(GwLog::LOG, "Instantiate PageSkyView");
} }
int handleKey(int key){ int handleKey(int key){
@ -25,18 +25,17 @@ public:
return key; return key;
} }
int displayPage(PageData &pageData) { void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Get config data // Clear optical warning
String flashLED = config->getString(config->flashLED); if (flashLED == "Limit Violation") {
String displaycolor = config->getString(config->displaycolor);
String backlightMode = config->getString(config->backlight);
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false); setBlinkingLED(false);
setFlashLED(false); setFlashLED(false);
} }
#endif
};
int displayPage(PageData &pageData) {
// Logging boat values // Logging boat values
logger->logDebug(GwLog::LOG, "Drawing at PageSkyView"); logger->logDebug(GwLog::LOG, "Drawing at PageSkyView");

View File

@ -7,10 +7,20 @@
class PageSolar : public Page class PageSolar : public Page
{ {
private:
String batVoltage;
int solPower;
String powerSensor;
public: public:
PageSolar(CommonData &common) : Page(common) PageSolar(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG,"Instantiate PageSolar"); logger->logDebug(GwLog::LOG, "Instantiate PageSolar");
// Get config data
String batVoltage = config->getString(config->batteryVoltage);
int solPower = config->getInt(config->solarPower);
String powerSensor = config->getString(config->usePowSensor2);
} }
int handleKey(int key){ int handleKey(int key){
@ -24,15 +34,6 @@ public:
int displayPage(PageData &pageData) { int displayPage(PageData &pageData) {
// Get config data
bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String batVoltage = config->getString(config->batteryVoltage);
int solPower = config->getInt(config->solarPower);
String backlightMode = config->getString(config->backlight);
String powerSensor = config->getString(config->usePowSensor2);
double value1 = 0; // Solar voltage double value1 = 0; // Solar voltage
double value2 = 0; // Solar current double value2 = 0; // Solar current
double value3 = 0; // Solar output power double value3 = 0; // Solar output power
@ -59,24 +60,19 @@ public:
bool valid1 = true; bool valid1 = true;
// Optical warning by limit violation // Optical warning by limit violation
if(String(flashLED) == "Limit Violation"){ if (flashLED == "Limit Violation") {
// Over voltage // Over voltage?
if(value1 > 14.8 && batVoltage == "12V"){ if (batVoltage == "12V") {
setBlinkingLED(true); setBlinkingLED(value1 > 14.8);
} } else if (batVoltage == "24V") {
if(value1 <= 14.8 && batVoltage == "12V"){ setBlinkingLED(value1 > 29.6);
setBlinkingLED(false); } else {
}
if(value1 > 29.6 && batVoltage == "24V"){
setBlinkingLED(true);
}
if(value1 <= 29.6 && batVoltage == "24V"){
setBlinkingLED(false); setBlinkingLED(false);
} }
} }
// Logging voltage value // Logging voltage value
LOG_DEBUG(GwLog::LOG,"Drawing at PageSolar, Type:%iW %s:=%f", solPower, name1.c_str(), value1); logger->logDebug(GwLog::LOG, "Drawing at PageSolar, Type:%iW %s:=%f", solPower, name1.c_str(), value1);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -1,29 +1,6 @@
// SPDX-License-Identifier: GPL-2.0-or-later // SPDX-License-Identifier: GPL-2.0-or-later
#if defined BOARD_OBP60S3 || defined BOARD_OBP40S3 #if defined BOARD_OBP60S3 || defined BOARD_OBP40S3
#include "Pagedata.h"
#include "OBP60Extensions.h"
#include "ConfigMenu.h"
#include "images/logo64.xbm"
#include <esp32/clk.h>
#include "qrcode.h"
#include "Nmea2kTwai.h"
#ifdef BOARD_OBP40S3
// #include <SD.h>
// #include <FS.h>
#include "dirent.h"
#endif
#define STRINGIZE_IMPL(x) #x
#define STRINGIZE(x) STRINGIZE_IMPL(x)
#define VERSINFO STRINGIZE(GWDEVVERSION)
#define BOARDINFO STRINGIZE(BOARD)
#define PCBINFO STRINGIZE(PCBVERS)
#define DISPLAYINFO STRINGIZE(EPDTYPE)
#define GXEPD2INFO STRINGIZE(GXEPD2VERS)
/* /*
* Special system page, called directly with fast key sequence 5,4 * Special system page, called directly with fast key sequence 5,4
* Out of normal page order. * Out of normal page order.
@ -46,6 +23,26 @@
* powerInit(powermode); * powerInit(powermode);
*/ */
#include "Pagedata.h"
#include "OBP60Extensions.h"
#include "ConfigMenu.h"
#include "images/logo64.xbm"
#include <esp32/clk.h>
#include "qrcode.h"
#include "Nmea2kTwai.h"
#ifdef BOARD_OBP40S3
#include "dirent.h"
#endif
#define STRINGIZE_IMPL(x) #x
#define STRINGIZE(x) STRINGIZE_IMPL(x)
#define VERSINFO STRINGIZE(GWDEVVERSION)
#define BOARDINFO STRINGIZE(BOARD)
#define PCBINFO STRINGIZE(PCBVERS)
#define DISPLAYINFO STRINGIZE(EPDTYPE)
#define GXEPD2INFO STRINGIZE(GXEPD2VERS)
class PageSystem : public Page class PageSystem : public Page
{ {
private: private:
@ -55,7 +52,6 @@ private:
// Generic data access // Generic data access
uint64_t chipid; uint64_t chipid;
bool simulation;
bool use_sdcard; bool use_sdcard;
String buzzer_mode; String buzzer_mode;
uint8_t buzzer_power; uint8_t buzzer_power;
@ -86,7 +82,7 @@ private:
} else if (mode == 'C') { // Config } else if (mode == 'C') { // Config
mode = 'D'; mode = 'D';
} else if (mode == 'D') { // Device list } else if (mode == 'D') { // Device list
if (use_sdcard) { if (hasSDCard) {
mode = 'A'; // SD-Card mode = 'A'; // SD-Card
} else { } else {
mode = 'N'; mode = 'N';
@ -99,7 +95,7 @@ private:
void decMode() { void decMode() {
if (mode == 'N') { if (mode == 'N') {
if (use_sdcard) { if (hasSDCard) {
mode = 'A'; mode = 'A';
} else { } else {
mode = 'D'; mode = 'D';
@ -188,8 +184,10 @@ private:
epd->setCursor(90, y0 + 48); epd->setCursor(90, y0 + 48);
if (hasSDCard) { if (hasSDCard) {
uint64_t cardsize = ((uint64_t) sdcard->csd.capacity) * sdcard->csd.sector_size / (1024 * 1024); uint64_t cardsize = ((uint64_t) sdcard->csd.capacity) * sdcard->csd.sector_size / (1024 * 1024);
// epd->print(String(cardsize) + String(" MB"));
epd->printf("%llu MB", cardsize); epd->printf("%llu MB", cardsize);
if (!use_sdcard) {
epd->print(" (disabled)");
}
} else { } else {
epd->print("off"); epd->print("off");
} }
@ -393,9 +391,22 @@ private:
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(x0, y0); epd->setCursor(x0, y0);
epd->print("Work in progress..."); epd->print("Work in progress...");
#ifdef BOARD_OBP60S3
// TODO directories IMG, MAP, HIST should exist. // This mode should not be callable by devices without card hardware
// Show state: Files and used size // In case of accidential reaching this, display a friendly message
epd->print("This mode is not indended to be reached!\n");
epd->print("There's nothing to see here. Move on.");
#endif
#ifdef BOARD_OBP40S3
/* TODO identify card as OBP-Card:
magic.dat
version.dat
readme.txt
IMAGES/
CHARTS/
LOGS/
DATA/
*/
// Simple test for one file in root // Simple test for one file in root
epd->setCursor(x0, y0 + 32); epd->setCursor(x0, y0 + 32);
@ -480,6 +491,7 @@ private:
fclose(fh); fclose(fh);
// epd->drawXBitmap(20, 200, buffer, width, height, commonData.fgcolor); // epd->drawXBitmap(20, 200, buffer, width, height, commonData.fgcolor);
} }
#endif
} }
void displayModeDevicelist() { void displayModeDevicelist() {
@ -516,7 +528,6 @@ public:
flashLED = config->getString(config->flashLED); flashLED = config->getString(config->flashLED);
chipid = ESP.getEfuseMac(); chipid = ESP.getEfuseMac();
simulation = config->getBool(config->useSimuData);
#ifdef BOARD_OBP40S3 #ifdef BOARD_OBP40S3
use_sdcard = config->getBool(config->useSDCard); use_sdcard = config->getBool(config->useSDCard);
#endif #endif
@ -639,6 +650,13 @@ public:
} }
void displayNew(PageData &pageData) { void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
// Get references from API // Get references from API
logger->logDebug(GwLog::LOG, "New page display: PageSystem"); logger->logDebug(GwLog::LOG, "New page display: PageSystem");
NMEA2000 = pageData.api->getNMEA2000(); NMEA2000 = pageData.api->getNMEA2000();
@ -646,12 +664,6 @@ public:
int displayPage(PageData &pageData) { int displayPage(PageData &pageData) {
// Optical warning by limit violation (unused)
if(flashLED == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
// Logging page information // Logging page information
logger->logDebug(GwLog::LOG, "Drawing at PageSystem, Mode=%c", mode); logger->logDebug(GwLog::LOG, "Drawing at PageSystem, Mode=%c", mode);

View File

@ -7,10 +7,16 @@
class PageThreeValues : public Page class PageThreeValues : public Page
{ {
public: private:
String lengthformat;
public:
PageThreeValues(CommonData &common) : Page(common) PageThreeValues(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageThreeValue"); logger->logDebug(GwLog::LOG, "Instantiate PageThreeValue");
// Get config data
lengthformat = config->getString(config->lengthFormat);
} }
int handleKey(int key){ int handleKey(int key){
@ -22,6 +28,16 @@ class PageThreeValues : public Page
return key; return key;
} }
void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData) { int displayPage(PageData &pageData) {
// Old values for hold function // Old values for hold function
@ -32,13 +48,6 @@ class PageThreeValues : public Page
static String svalue3old = ""; static String svalue3old = "";
static String unit3old = ""; static String unit3old = "";
// Get config data
String lengthformat = config->getString(config->lengthFormat);
// bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
// Get boat values #1 // Get boat values #1
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
String name1 = xdrDelete(bvalue1->getName()); // Value name String name1 = xdrDelete(bvalue1->getName()); // Value name
@ -69,15 +78,9 @@ class PageThreeValues : public Page
String svalue3 = formatValue(bvalue3, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String svalue3 = formatValue(bvalue3, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
String unit3 = formatValue(bvalue3, *commonData).unit; // Unit of value String unit3 = formatValue(bvalue3, *commonData).unit; // Unit of value
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
// Logging boat values // Logging boat values
if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement? if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement?
LOG_DEBUG(GwLog::LOG,"Drawing at PageThreeValues, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3); logger->logDebug(GwLog::LOG, "Drawing at PageThreeValues, %s: %f, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -7,10 +7,16 @@
class PageTwoValues : public Page class PageTwoValues : public Page
{ {
public: private:
String lengthformat;
public:
PageTwoValues(CommonData &common) : Page(common) PageTwoValues(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageTwoValue"); logger->logDebug(GwLog::LOG, "Instantiate PageTwoValue");
// Get config data
lengthformat = config->getString(config->lengthFormat);
} }
int handleKey(int key){ int handleKey(int key){
@ -22,6 +28,16 @@ class PageTwoValues : public Page
return key; return key;
} }
void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData) { int displayPage(PageData &pageData) {
// Old values for hold function // Old values for hold function
@ -30,12 +46,6 @@ class PageTwoValues : public Page
static String svalue2old = ""; static String svalue2old = "";
static String unit2old = ""; static String unit2old = "";
// Get config data
String lengthformat = config->getString(config->lengthFormat);
// bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
// Get boat values #1 // Get boat values #1
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
@ -57,15 +67,9 @@ class PageTwoValues : public Page
String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
String unit2 = formatValue(bvalue2, *commonData).unit; // Unit of value String unit2 = formatValue(bvalue2, *commonData).unit; // Unit of value
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
// Logging boat values // Logging boat values
if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement? if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement?
LOG_DEBUG(GwLog::LOG,"Drawing at PageTwoValues, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2); logger->logDebug(GwLog::LOG, "Drawing at PageTwoValues, %s: %f, %s: %f", name1.c_str(), value1, name2.c_str(), value2);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -8,6 +8,8 @@
class PageVoltage : public Page class PageVoltage : public Page
{ {
private: private:
String batVoltage;
String batType;
bool init = false; // Marker for init done bool init = false; // Marker for init done
uint8_t average = 0; // Average type [0...3], 0=off, 1=10s, 2=60s, 3=300s uint8_t average = 0; // Average type [0...3], 0=off, 1=10s, 2=60s, 3=300s
bool trend = true; // Trend indicator [0|1], 0=off, 1=on bool trend = true; // Trend indicator [0|1], 0=off, 1=on
@ -18,6 +20,11 @@ public:
PageVoltage(CommonData &common) : Page(common) PageVoltage(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageVoltage"); logger->logDebug(GwLog::LOG, "Instantiate PageVoltage");
// Get config data
batVoltage = config->getString(config->batteryVoltage);
batType = config->getString(config->batteryType);
if (hasFRAM) { if (hasFRAM) {
average = fram.read(FRAM_VOLTAGE_AVG); average = fram.read(FRAM_VOLTAGE_AVG);
trend = fram.read(FRAM_VOLTAGE_TREND); trend = fram.read(FRAM_VOLTAGE_TREND);
@ -29,14 +36,14 @@ public:
logger->logDebug(GwLog::LOG, "Destroy PageVoltage"); logger->logDebug(GwLog::LOG, "Destroy PageVoltage");
} }
void setupKeys(){ void setupKeys() {
Page::setupKeys(); Page::setupKeys();
commonData->keydata[0].label = "AVG"; commonData->keydata[0].label = "AVG";
commonData->keydata[1].label = "MODE"; commonData->keydata[1].label = "MODE";
commonData->keydata[4].label = "TRD"; commonData->keydata[4].label = "TRD";
} }
int handleKey(int key){ int handleKey(int key) {
// Change average // Change average
if(key == 1){ if(key == 1){
average ++; average ++;
@ -108,14 +115,6 @@ public:
int displayPage(PageData &pageData) { int displayPage(PageData &pageData) {
// Get config data
bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String batVoltage = config->getString(config->batteryVoltage);
String batType = config->getString(config->batteryType);
String backlightMode = config->getString(config->backlight);
double value1 = 0; double value1 = 0;
double valueTrend = 0; // Average over 10 values double valueTrend = 0; // Average over 10 values
@ -155,43 +154,27 @@ public:
bool valid1 = true; bool valid1 = true;
// Optical warning by limit violation // Optical warning by limit violation
if(String(flashLED) == "Limit Violation"){ if (flashLED == "Limit Violation") {
// Limits for Pb battery bool violation = false;
if(String(batType) == "Pb" && (raw < 11.8 || raw > 14.8)){ if (batType == "Pb") {
violation = (raw < 11.8 || raw > 14.8);
} else if (batType == "Gel") {
violation = (raw < 11.8 || raw > 14.4);
} else if (batType == "AGM") {
violation = (raw < 11.8 || raw > 14.7);
} else if (batType == "LiFePo4") {
violation = (raw < 12.0 || raw > 14.6);
}
if (violation) {
setBlinkingLED(true); setBlinkingLED(true);
} } else {
if(String(batType) == "Pb" && (raw >= 11.8 && raw <= 14.8)){
setBlinkingLED(false);
setFlashLED(false);
}
// Limits for Gel battery
if(String(batType) == "Gel" && (raw < 11.8 || raw > 14.4)){
setBlinkingLED(true);
}
if(String(batType) == "Gel" && (raw >= 11.8 && raw <= 14.4)){
setBlinkingLED(false);
setFlashLED(false);
}
// Limits for AGM battery
if(String(batType) == "AGM" && (raw < 11.8 || raw > 14.7)){
setBlinkingLED(true);
}
if(String(batType) == "AGM" && (raw >= 11.8 && raw <= 14.7)){
setBlinkingLED(false);
setFlashLED(false);
}
// Limits for LiFePo4 battery
if(String(batType) == "LiFePo4" && (raw < 12.0 || raw > 14.6)){
setBlinkingLED(true);
}
if(String(batType) == "LiFePo4" && (raw >= 12.0 && raw <= 14.6)){
setBlinkingLED(false); setBlinkingLED(false);
setFlashLED(false); setFlashLED(false);
} }
} }
// Logging voltage value // Logging voltage value
LOG_DEBUG(GwLog::LOG,"Drawing at PageVoltage, Type:%s %s:=%f", batType, name1.c_str(), raw); logger->logDebug(GwLog::LOG, "Drawing at PageVoltage, Type:%s %s:=%f", batType, name1.c_str(), raw);
// Draw page // Draw page
//*********************************************************** //***********************************************************
@ -208,7 +191,7 @@ public:
epd->setCursor(20, 100); epd->setCursor(20, 100);
epd->print(name1); // Value name epd->print(name1); // Value name
#if defined BOARD_OBP40S3 && defined LIPO_ACCU_1200 && defined VOLTAGE_SENSOR #if defined BOARD_OBP40S3 && defined LIPO_ACCU_1200 && defined VOLTAGE_SENSOR
// Show charge status // Show charge status
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(185, 100); epd->setCursor(185, 100);
@ -218,7 +201,7 @@ public:
else{ else{
epd->print("Discharge"); epd->print("Discharge");
} }
#endif #endif
// Show unit // Show unit
epd->setFont(&Ubuntu_Bold20pt8b); epd->setFont(&Ubuntu_Bold20pt8b);
@ -228,12 +211,12 @@ public:
// Show battery type // Show battery type
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(295, 100); epd->setCursor(295, 100);
#ifdef BOARD_OBP60S3 #ifdef BOARD_OBP60S3
epd->print(batType); epd->print(batType);
#endif #endif
#if defined BOARD_OBP40S3 && defined LIPO_ACCU_1200 && defined VOLTAGE_SENSOR #if defined BOARD_OBP40S3 && defined LIPO_ACCU_1200 && defined VOLTAGE_SENSOR
epd->print("LiPo"); epd->print("LiPo");
#endif #endif
// Show average settings // Show average settings
printAvg(average, 320, 84, true); printAvg(average, 320, 84, true);

View File

@ -14,7 +14,8 @@
class PageWhite : public Page class PageWhite : public Page
{ {
char mode = 'W'; // display mode (W)hite | (L)ogo | (M)FD logo private:
char mode = 'W'; // display mode (W)hite | (L)ogo | (M)FD logo
public: public:
PageWhite(CommonData &common) : Page(common) PageWhite(CommonData &common) : Page(common)
@ -23,7 +24,7 @@ public:
refreshtime = 15000; refreshtime = 15000;
} }
virtual int handleKey(int key) { int handleKey(int key) {
// Change display mode // Change display mode
if (key == 1) { if (key == 1) {
if (mode == 'W') { if (mode == 'W') {
@ -38,19 +39,20 @@ public:
return key; return key;
} }
int displayPage(PageData &pageData){ void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Get config data // Clear optical warning
String flashLED = config->getString(config->flashLED); if (flashLED == "Limit Violation") {
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false); setBlinkingLED(false);
setFlashLED(false); setFlashLED(false);
} }
#endif
};
int displayPage(PageData &pageData) {
// Logging boat values // Logging boat values
LOG_DEBUG(GwLog::LOG,"Drawing at PageWhite"); logger->logDebug(GwLog::LOG, "Drawing at PageWhite");
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -215,15 +215,21 @@ static unsigned char front_bits[] PROGMEM = {
class PageWind : public Page class PageWind : public Page
{ {
bool keylock = false; // Keylock private:
int8_t lp = 80; // Pointer length String lengthformat;
char mode = 'N'; // page mode (N)ormal | (L)ens | e(X)ample bool keylock = false; // Keylock
char source = 'A'; // data source (A)pparent | (T)rue int8_t lp = 80; // Pointer length
char mode = 'N'; // page mode (N)ormal | (L)ens | e(X)ample
char source = 'A'; // data source (A)pparent | (T)rue
public: public:
PageWind(CommonData &common) : Page(common) PageWind(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageWind"); logger->logDebug(GwLog::LOG, "Instantiate PageWind");
// Get config data
lengthformat = config->getString(config->lengthFormat);
if (hasFRAM) { if (hasFRAM) {
lp = fram.read(FRAM_WIND_SIZE); lp = fram.read(FRAM_WIND_SIZE);
source = fram.read(FRAM_WIND_SRC); source = fram.read(FRAM_WIND_SRC);
@ -231,7 +237,7 @@ public:
} }
} }
void setupKeys(){ void setupKeys() {
Page::setupKeys(); Page::setupKeys();
commonData->keydata[0].label = "MODE"; commonData->keydata[0].label = "MODE";
if (mode == 'X') { if (mode == 'X') {
@ -243,7 +249,7 @@ public:
} }
// Key functions // Key functions
int handleKey(int key){ int handleKey(int key) {
if(key == 1){ // Mode switch if(key == 1){ // Mode switch
if(mode == 'N'){ if(mode == 'N'){
@ -297,6 +303,16 @@ public:
return key; return key;
} }
void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData) { int displayPage(PageData &pageData) {
static String svalue1old = ""; static String svalue1old = "";
@ -304,13 +320,6 @@ public:
static String svalue2old = ""; static String svalue2old = "";
static String unit2old = ""; static String unit2old = "";
// Get config data
String lengthformat = config->getString(config->lengthFormat);
bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
GwApi::BoatValue *bvalue1; // Value 1 for speed on top GwApi::BoatValue *bvalue1; // Value 1 for speed on top
GwApi::BoatValue *bvalue2; // Value 2 for angle on bottom GwApi::BoatValue *bvalue2; // Value 2 for angle on bottom
@ -345,15 +354,9 @@ public:
String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places String svalue2 = formatValue(bvalue2, *commonData).svalue; // Formatted value as string including unit conversion and switching decimal places
String unit2 = formatValue(bvalue2, *commonData).unit; // Unit of value String unit2 = formatValue(bvalue2, *commonData).unit; // Unit of value
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
// Logging boat values // Logging boat values
if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement? if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement?
LOG_DEBUG(GwLog::LOG,"Drawing at PageWind, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2); logger->logDebug(GwLog::LOG, "Drawing at PageWind, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2);
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -49,7 +49,7 @@ int getRng(const RingBuffer<int16_t>& windDirHstry, int center, size_t amount)
// **************************************************************** // ****************************************************************
class PageWindPlot : public Page { class PageWindPlot : public Page {
private:
bool keylock = false; // Keylock bool keylock = false; // Keylock
char chrtMode = 'D'; // Chart mode: 'D' for TWD, 'S' for TWS, 'B' for both char chrtMode = 'D'; // Chart mode: 'D' for TWD, 'S' for TWS, 'B' for both
int dataIntv = 1; // Update interval for wind history chart: int dataIntv = 1; // Update interval for wind history chart:
@ -62,8 +62,7 @@ public:
logger->logDebug(GwLog::LOG, "Instantiate PageWindPlot"); logger->logDebug(GwLog::LOG, "Instantiate PageWindPlot");
} }
void setupKeys() void setupKeys() {
{
Page::setupKeys(); Page::setupKeys();
// commonData->keydata[0].label = "MODE"; // commonData->keydata[0].label = "MODE";
commonData->keydata[1].label = "INTV"; commonData->keydata[1].label = "INTV";
@ -71,8 +70,7 @@ public:
} }
// Key functions // Key functions
int handleKey(int key) int handleKey(int key) {
{
// Set chart mode TWD | TWS -> to be implemented // Set chart mode TWD | TWS -> to be implemented
if (key == 1) { if (key == 1) {
if (chrtMode == 'D') { if (chrtMode == 'D') {
@ -113,6 +111,16 @@ public:
return key; return key;
} }
void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData& pageData) { int displayPage(PageData& pageData) {
float twsValue; // TWS value in chart area float twsValue; // TWS value in chart area
@ -134,8 +142,6 @@ public:
static bool isInitialized = false; // Flag to indicate that page is initialized static bool isInitialized = false; // Flag to indicate that page is initialized
static bool wndDataValid = false; // Flag to indicate if wind data is valid static bool wndDataValid = false; // Flag to indicate if wind data is valid
static int numNoData; // Counter for multiple invalid data values in a row static int numNoData; // Counter for multiple invalid data values in a row
static bool simulation = false;
static bool holdValues = false;
static int width; // Screen width static int width; // Screen width
static int height; // Screen height static int height; // Screen height
@ -169,13 +175,7 @@ public:
int chrtVal; // Current wind value int chrtVal; // Current wind value
static int chrtPrevVal; // Last wind value in chart area for check if value crosses 180 degree line static int chrtPrevVal; // Last wind value in chart area for check if value crosses 180 degree line
LOG_DEBUG(GwLog::LOG, "Display page WindPlot"); logger->logDebug(GwLog::LOG, "Display page WindPlot");
// Get config data
simulation = config->getBool(config->useSimuData);
holdValues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
if (!isInitialized) { if (!isInitialized) {
width = epd->width(); width = epd->width();
@ -237,7 +237,7 @@ public:
bufStart = max(0, bufStart - numAddedBufVals); bufStart = max(0, bufStart - numAddedBufVals);
} }
} }
LOG_DEBUG(GwLog::DEBUG, "PageWindPlot Dataset: count: %d, TWD: %.0f, TWS: %.1f, TWD_valid? %d, intvBufSize: %d, numWndVals: %d, bufStart: %d, numAddedBufVals: %d, lastIdx: %d, old: %d, act: %d", logger->logDebug(GwLog::DEBUG, "PageWindPlot Dataset: count: %d, TWD: %.0f, TWS: %.1f, TWD_valid? %d, intvBufSize: %d, numWndVals: %d, bufStart: %d, numAddedBufVals: %d, lastIdx: %d, old: %d, act: %d",
count, pageData.boatHstry.twdHstry->getLast() / 1000.0 * radToDeg, pageData.boatHstry.twsHstry->getLast() / 10.0 * 1.94384, BDataValid[0], count, pageData.boatHstry.twdHstry->getLast() / 1000.0 * radToDeg, pageData.boatHstry.twsHstry->getLast() / 10.0 * 1.94384, BDataValid[0],
intvBufSize, numWndVals, bufStart, numAddedBufVals, pageData.boatHstry.twdHstry->getLastIdx(), oldDataIntv, dataIntv); intvBufSize, numWndVals, bufStart, numAddedBufVals, pageData.boatHstry.twdHstry->getLastIdx(), oldDataIntv, dataIntv);
@ -250,7 +250,7 @@ public:
} else { } else {
wndCenter = 0; wndCenter = 0;
} }
LOG_DEBUG(GwLog::DEBUG, "PageWindPlot Range Init: count: %d, TWD: %.0f, wndCenter: %d, diffRng: %d, chrtRng: %d", count, pageData.boatHstry.twdHstry->getLast() / 1000.0 * radToDeg, logger->logDebug(GwLog::DEBUG, "PageWindPlot Range Init: count: %d, TWD: %.0f, wndCenter: %d, diffRng: %d, chrtRng: %d", count, pageData.boatHstry.twdHstry->getLast() / 1000.0 * radToDeg,
wndCenter, diffRng, chrtRng); wndCenter, diffRng, chrtRng);
} else { } else {
// check and adjust range between left, center, and right chart limit // check and adjust range between left, center, and right chart limit
@ -330,7 +330,7 @@ public:
// if (i >= (numWndVals / dataIntv) - 10) // if (i >= (numWndVals / dataIntv) - 10)
if (i >= (numWndVals / dataIntv) - 1) if (i >= (numWndVals / dataIntv) - 1)
LOG_DEBUG(GwLog::DEBUG, "PageWindPlot Chart: i: %d, chrtVal: %d, bufStart: %d, count: %d, linesToShow: %d", i, chrtVal, bufStart, count, (numWndVals / dataIntv)); logger->logDebug(GwLog::DEBUG, "PageWindPlot Chart: i: %d, chrtVal: %d, bufStart: %d, count: %d, linesToShow: %d", i, chrtVal, bufStart, count, (numWndVals / dataIntv));
if ((i == 0) || (chrtPrevVal == INT16_MIN)) { if ((i == 0) || (chrtPrevVal == INT16_MIN)) {
// just a dot for 1st chart point or after some invalid values // just a dot for 1st chart point or after some invalid values
@ -363,7 +363,7 @@ public:
int minWndDir = pageData.boatHstry.twdHstry->getMin(numWndVals) / 1000.0 * radToDeg; int minWndDir = pageData.boatHstry.twdHstry->getMin(numWndVals) / 1000.0 * radToDeg;
int maxWndDir = pageData.boatHstry.twdHstry->getMax(numWndVals) / 1000.0 * radToDeg; int maxWndDir = pageData.boatHstry.twdHstry->getMax(numWndVals) / 1000.0 * radToDeg;
LOG_DEBUG(GwLog::DEBUG, "PageWindPlot FreeTop: Minimum: %d, Maximum: %d, OldwndCenter: %d", minWndDir, maxWndDir, wndCenter); logger->logDebug(GwLog::DEBUG, "PageWindPlot FreeTop: Minimum: %d, Maximum: %d, OldwndCenter: %d", minWndDir, maxWndDir, wndCenter);
// if ((minWndDir + 540 >= wndCenter + 540) || (maxWndDir + 540 <= wndCenter + 540)) { // if ((minWndDir + 540 >= wndCenter + 540) || (maxWndDir + 540 <= wndCenter + 540)) {
if (((minWndDir - wndCenter >= 0) && (minWndDir - wndCenter < 180)) || ((maxWndDir - wndCenter <= 0) && (maxWndDir - wndCenter >=180))) { if (((minWndDir - wndCenter >= 0) && (minWndDir - wndCenter < 180)) || ((maxWndDir - wndCenter <= 0) && (maxWndDir - wndCenter >=180))) {
// Check if all wind value are left or right of center value -> optimize chart range // Check if all wind value are left or right of center value -> optimize chart range
@ -372,14 +372,14 @@ public:
wndCenter = int((midWndDir + (midWndDir >= 0 ? 5 : -5)) / 10) * 10; // Set new center value; round to nearest 10 degree value wndCenter = int((midWndDir + (midWndDir >= 0 ? 5 : -5)) / 10) * 10; // Set new center value; round to nearest 10 degree value
} }
} }
LOG_DEBUG(GwLog::DEBUG, "PageWindPlot FreeTop: cHeight: %d, bufStart: %d, numWndVals: %d, wndCenter: %d", cHeight, bufStart, numWndVals, wndCenter); logger->logDebug(GwLog::DEBUG, "PageWindPlot FreeTop: cHeight: %d, bufStart: %d, numWndVals: %d, wndCenter: %d", cHeight, bufStart, numWndVals, wndCenter);
break; break;
} }
} }
} else { } else {
// No valid data available // No valid data available
LOG_DEBUG(GwLog::LOG, "PageWindPlot: No valid data available"); logger->logDebug(GwLog::LOG, "PageWindPlot: No valid data available");
epd->setFont(&Ubuntu_Bold10pt8b); epd->setFont(&Ubuntu_Bold10pt8b);
epd->fillRect(xCenter - 33, height / 2 - 20, 66, 24, commonData->bgcolor); // Clear area for message epd->fillRect(xCenter - 33, height / 2 - 20, 66, 24, commonData->bgcolor); // Clear area for message
drawTextCenter(xCenter, height / 2 - 10, "No data"); drawTextCenter(xCenter, height / 2 - 10, "No data");

View File

@ -7,16 +7,21 @@
class PageWindRose : public Page class PageWindRose : public Page
{ {
int16_t lp = 80; // Pointer length private:
String lengthformat;
int16_t lp = 80; // Pointer length
public: public:
PageWindRose(CommonData &common) PageWindRose(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageWindRose"); logger->logDebug(GwLog::LOG, "Instantiate PageWindRose");
// Get config data
String lengthformat = config->getString(config->lengthFormat);
} }
// Key functions // Key functions
int handleKey(int key){ int handleKey(int key) {
// Code for keylock // Code for keylock
if(key == 11){ if(key == 11){
commonData->keylock = !commonData->keylock; commonData->keylock = !commonData->keylock;
@ -25,6 +30,16 @@ public:
return key; return key;
} }
void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData) { int displayPage(PageData &pageData) {
static String svalue1old = ""; static String svalue1old = "";
@ -40,13 +55,6 @@ public:
static String svalue6old = ""; static String svalue6old = "";
static String unit6old = ""; static String unit6old = "";
// Get config data
String lengthformat = config->getString(config->lengthFormat);
bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
// Get boat value for AWA // Get boat value for AWA
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
String name1 = xdrDelete(bvalue1->getName()); // Value name String name1 = xdrDelete(bvalue1->getName()); // Value name
@ -132,15 +140,9 @@ public:
unit6old = unit6; // Save old unit unit6old = unit6; // Save old unit
} }
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
// Logging boat values // Logging boat values
if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement? if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement?
LOG_DEBUG(GwLog::LOG,"Drawing at PageWindRose, %s:%f, %s:%f, %s:%f, %s:%f, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4, name5.c_str(), value5, name6.c_str(), value6); logger->logDebug(GwLog::LOG, "Drawing at PageWindRose, %s:%f, %s:%f, %s:%f, %s:%f, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4, name5.c_str(), value5, name6.c_str(), value6);
// Draw page // Draw page
//*********************************************************** //***********************************************************
@ -160,12 +162,7 @@ public:
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(10, 115); epd->setCursor(10, 115);
epd->print(" "); epd->print(" ");
if(holdvalues == false){ epd->print(holdvalues ? unit1old : unit1);
epd->print(unit1); // Unit
}
else{
epd->print(unit1old); // Unit
}
// Horizintal separator left // Horizintal separator left
epd->fillRect(0, 149, 60, 3, commonData->fgcolor); epd->fillRect(0, 149, 60, 3, commonData->fgcolor);
@ -180,12 +177,7 @@ public:
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(10, 190); epd->setCursor(10, 190);
epd->print(" "); epd->print(" ");
if(holdvalues == false){ epd->print(holdvalues ? unit2old : unit2);
epd->print(unit2); // Unit
}
else{
epd->print(unit2old); // Unit
}
// Show values TWD // Show values TWD
epd->setFont(&DSEG7Classic_BoldItalic20pt7b); epd->setFont(&DSEG7Classic_BoldItalic20pt7b);
@ -202,12 +194,7 @@ public:
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(335, 115); epd->setCursor(335, 115);
epd->print(" "); epd->print(" ");
if(holdvalues == false){ epd->print(holdvalues ? unit3old : unit3);
epd->print(unit3); // Unit
}
else{
epd->print(unit3old); // Unit
}
// Horizintal separator right // Horizintal separator right
epd->fillRect(340, 149, 80, 3, commonData->fgcolor); epd->fillRect(340, 149, 80, 3, commonData->fgcolor);
@ -222,12 +209,7 @@ public:
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(335, 190); epd->setCursor(335, 190);
epd->print(" "); epd->print(" ");
if(holdvalues == false){ epd->print(holdvalues ? unit4old : unit4);
epd->print(unit4); // Unit
}
else{
epd->print(unit4old); // Unit
}
//******************************************************************************************* //*******************************************************************************************
@ -246,8 +228,7 @@ public:
float x = 200 + (rInstrument-30)*sin(i/180.0*pi); // x-coordinate dots float x = 200 + (rInstrument-30)*sin(i/180.0*pi); // x-coordinate dots
float y = 150 - (rInstrument-30)*cos(i/180.0*pi); // y-coordinate cots float y = 150 - (rInstrument-30)*cos(i/180.0*pi); // y-coordinate cots
const char *ii = ""; const char *ii = "";
switch (i) switch (i) {
{
case 0: ii="0"; break; case 0: ii="0"; break;
case 30 : ii="30"; break; case 30 : ii="30"; break;
case 60 : ii="60"; break; case 60 : ii="60"; break;
@ -268,7 +249,7 @@ public:
uint16_t w, h; // Return values of getTextBounds uint16_t w, h; // Return values of getTextBounds
epd->getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string epd->getTextBounds(ii, int(x), int(y), &x1, &y1, &w, &h); // Calc width of new string
epd->setCursor(x-w/2, y+h/2); epd->setCursor(x-w/2, y+h/2);
if(i % 30 == 0){ if (i % 30 == 0) {
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->print(ii); epd->print(ii);
} }
@ -335,12 +316,7 @@ public:
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(190, 215); epd->setCursor(190, 215);
epd->print(" "); epd->print(" ");
if(holdvalues == false){ epd->print(holdvalues ? unit5old : unit5);
epd->print(unit5); // Unit
}
else{
epd->print(unit5old); // Unit
}
// Show values STW // Show values STW
epd->setFont(&DSEG7Classic_BoldItalic16pt7b); epd->setFont(&DSEG7Classic_BoldItalic16pt7b);
@ -349,12 +325,7 @@ public:
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(190, 90); epd->setCursor(190, 90);
epd->print(" "); epd->print(" ");
if(holdvalues == false){ epd->print(holdvalues ? unit6old : unit6);
epd->print(unit6); // Unit
}
else{
epd->print(unit6old); // Unit
}
return PAGE_UPDATE; return PAGE_UPDATE;
}; };

View File

@ -7,16 +7,21 @@
class PageWindRoseFlex : public Page class PageWindRoseFlex : public Page
{ {
int16_t lp = 80; // Pointer length private:
String lengthformat;
int16_t lp = 80; // Pointer length
public: public:
PageWindRoseFlex(CommonData &common) : Page(common) PageWindRoseFlex(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageWindRoseFlex"); logger->logDebug(GwLog::LOG, "Instantiate PageWindRoseFlex");
// Get config data
lengthformat = config->getString(config->lengthFormat);
} }
// Key functions // Key functions
int handleKey(int key){ int handleKey(int key) {
// Code for keylock // Code for keylock
if(key == 11){ if(key == 11){
commonData->keylock = !commonData->keylock; commonData->keylock = !commonData->keylock;
@ -25,7 +30,17 @@ public:
return key; return key;
} }
int displayPage(PageData &pageData){ void displayNew(PageData &pageData) {
#ifdef BOARD_OBP60S3
// Clear optical warning
if (flashLED == "Limit Violation") {
setBlinkingLED(false);
setFlashLED(false);
}
#endif
};
int displayPage(PageData &pageData) {
static String svalue1old = ""; static String svalue1old = "";
static String unit1old = ""; static String unit1old = "";
@ -40,13 +55,6 @@ public:
static String svalue6old = ""; static String svalue6old = "";
static String unit6old = ""; static String unit6old = "";
// Get config data
String lengthformat = config->getString(config->lengthFormat);
bool simulation = config->getBool(config->useSimuData);
bool holdvalues = config->getBool(config->holdvalues);
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
// Get boat values #1 // Get boat values #1
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue) GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
String name1 = xdrDelete(bvalue1->getName()); // Value name String name1 = xdrDelete(bvalue1->getName()); // Value name
@ -132,15 +140,9 @@ public:
unit6old = unit6; // Save old unit unit6old = unit6; // Save old unit
} }
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false);
setFlashLED(false);
}
// Logging boat values // Logging boat values
if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement? if (bvalue1 == NULL) return PAGE_OK; // WTF why this statement?
LOG_DEBUG(GwLog::LOG, "Drawing at PageWindRoseFlex, %s:%f, %s:%f, %s:%f, %s:%f, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4, name5.c_str(), value5, name6.c_str(), value6); logger->logDebug(GwLog::LOG, "Drawing at PageWindRoseFlex, %s:%f, %s:%f, %s:%f, %s:%f, %s:%f, %s:%f", name1.c_str(), value1, name2.c_str(), value2, name3.c_str(), value3, name4.c_str(), value4, name5.c_str(), value5, name6.c_str(), value6);
// Draw page // Draw page
//*********************************************************** //***********************************************************
@ -160,12 +162,7 @@ public:
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(10, 115); epd->setCursor(10, 115);
epd->print(" "); epd->print(" ");
if(holdvalues == false){ epd->print(holdvalues ? unit2old : unit2);
epd->print(unit2); // Unit
}
else{
epd->print(unit2old); // Unit
}
// Horizintal separator left // Horizintal separator left
epd->fillRect(0, 149, 60, 3, commonData->fgcolor); epd->fillRect(0, 149, 60, 3, commonData->fgcolor);
@ -180,12 +177,8 @@ public:
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(10, 190); epd->setCursor(10, 190);
epd->print(" "); epd->print(" ");
if(holdvalues == false){ epd->print(holdvalues ? unit3old : unit3);
epd->print(unit3); // Unit
}
else{
epd->print(unit3old); // Unit
}
// Show value 4 at top right // Show value 4 at top right
epd->setFont(&DSEG7Classic_BoldItalic20pt7b); epd->setFont(&DSEG7Classic_BoldItalic20pt7b);
@ -203,12 +196,8 @@ public:
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(335, 115); epd->setCursor(335, 115);
epd->print(" "); epd->print(" ");
if(holdvalues == false){ epd->print(holdvalues ? unit4old : unit4);
epd->print(unit4); // Unit
}
else{
epd->print(unit4old); // Unit
}
// Horizintal separator right // Horizintal separator right
epd->fillRect(340, 149, 80, 3, commonData->fgcolor); epd->fillRect(340, 149, 80, 3, commonData->fgcolor);
@ -223,13 +212,7 @@ public:
epd->setFont(&Ubuntu_Bold8pt8b); epd->setFont(&Ubuntu_Bold8pt8b);
epd->setCursor(335, 190); epd->setCursor(335, 190);
epd->print(" "); epd->print(" ");
if(holdvalues == false){ epd->print(holdvalues ? unit5old : unit5);
epd->print(unit5); // Unit
}
else{
epd->print(unit5old); // Unit
}
//******************************************************************************************* //*******************************************************************************************
@ -342,12 +325,7 @@ public:
epd->setCursor(190, 90); epd->setCursor(190, 90);
} }
epd->print(" "); epd->print(" ");
if(holdvalues == false){ epd->print(holdvalues ? unit6old : unit6);
epd->print(unit6); // Unit
}
else{
epd->print(unit6old); // Unit
}
return PAGE_UPDATE; return PAGE_UPDATE;
}; };

View File

@ -29,15 +29,18 @@ static unsigned char ship_bits[] PROGMEM = {
class PageXTETrack : public Page class PageXTETrack : public Page
{ {
bool simulation = false; private:
bool holdvalues = false; String trackStep;
double seg_step;
public: public:
PageXTETrack(CommonData &common) : Page(common) PageXTETrack(CommonData &common) : Page(common)
{ {
logger->logDebug(GwLog::LOG, "Instantiate PageXTETrack"); logger->logDebug(GwLog::LOG, "Instantiate PageXTETrack");
simulation = config->getBool(config->useSimuData);
holdvalues = config->getBool(config->holdvalues); // Get config data
String trackStep = config->getString(config->trackStep);
seg_step = trackStep.toDouble() * M_PI / 180;
} }
void drawSegment(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1, void drawSegment(uint16_t x0, uint16_t y0, uint16_t x1, uint16_t y1,
@ -57,7 +60,7 @@ class PageXTETrack : public Page
} }
} }
virtual int handleKey(int key){ int handleKey(int key) {
// Code for keylock // Code for keylock
if(key == 11){ if(key == 11){
commonData->keylock = !commonData->keylock; commonData->keylock = !commonData->keylock;
@ -66,25 +69,20 @@ class PageXTETrack : public Page
return key; return key;
} }
int displayPage(PageData &pageData){ void displayNew(PageData &pageData) {
GwConfigHandler *config = commonData->config; #ifdef BOARD_OBP60S3
GwLog *logger = commonData->logger; // Clear optical warning
if (flashLED == "Limit Violation") {
// Get config data
String flashLED = config->getString(config->flashLED);
String backlightMode = config->getString(config->backlight);
String trackStep = config->getString(config->trackStep);
double seg_step = trackStep.toFloat() * PI / 180;
// Optical warning by limit violation (unused)
if(String(flashLED) == "Limit Violation"){
setBlinkingLED(false); setBlinkingLED(false);
setFlashLED(false); setFlashLED(false);
} }
#endif
};
int displayPage(PageData &pageData) {
// Logging boat values // Logging boat values
LOG_DEBUG(GwLog::LOG,"Drawing at PageXTETrack"); logger->logDebug(GwLog::LOG, "Drawing at PageXTETrack");
// Draw page // Draw page
//*********************************************************** //***********************************************************

View File

@ -129,16 +129,25 @@ protected:
CommonData *commonData; CommonData *commonData;
GwConfigHandler *config; GwConfigHandler *config;
GwLog *logger; GwLog *logger;
bool simulation = false;
bool holdvalues = false;
String flashLED;
String backlightMode;
public: public:
Page(){}
Page(CommonData &common) { Page(CommonData &common) {
commonData = &common; commonData = &common;
config = commonData->config; config = commonData->config;
logger = commonData->logger; logger = commonData->logger;
// preload generic configuration data
simulation = config->getBool(config->useSimuData);
holdvalues = config->getBool(config->holdvalues);
flashLED = config->getString(config->flashLED);
backlightMode = config->getString(config->backlight);
} }
int refreshtime = 1000; int refreshtime = 1000;
virtual int displayPage(PageData &pageData)=0; virtual int displayPage(PageData &pageData)=0;
virtual void displayNew(PageData &pageData){} virtual void displayNew(PageData &pageData){}
virtual void leavePage(PageData &pageData){}
virtual void setupKeys() { virtual void setupKeys() {
#ifdef HARDWARE_V21 #ifdef HARDWARE_V21
commonData->keydata[0].label = ""; commonData->keydata[0].label = "";

View File

@ -4,6 +4,12 @@ Development information
This file contains some hints concerning building the firmware as well as This file contains some hints concerning building the firmware as well as
developing and debugging it. developing and debugging it.
Coding style
------------
WIP
Please format your new code the same as already existing code.
Preprocessor directives go to column zero.
Git commands Git commands
------------ ------------

View File

@ -2,8 +2,6 @@
- page refresh after page change and not connected to key codes - page refresh after page change and not connected to key codes
- fix sd card code
- config: getFloat, getDouble - config: getFloat, getDouble
- dseg7 font to new version - dseg7 font to new version

View File

@ -66,13 +66,13 @@ void OBP60Init(GwApi *api){
// Settings for e-paper display // Settings for e-paper display
String fastrefresh = api->getConfig()->getConfigItem(api->getConfig()->fastRefresh,true)->asString(); String fastrefresh = api->getConfig()->getConfigItem(api->getConfig()->fastRefresh,true)->asString();
logger->logDebug(GwLog::DEBUG,"Fast Refresh Mode is: %s", fastrefresh.c_str()); logger->logDebug(GwLog::DEBUG,"Fast Refresh Mode is: %s", fastrefresh.c_str());
#ifdef DISPLAY_GDEY042T81 #ifdef DISPLAY_GDEY042T81
if(fastrefresh == "true"){ if(fastrefresh == "true"){
static const bool useFastFullUpdate = true; // Enable fast full display update only for GDEY042T81 static const bool useFastFullUpdate = true; // Enable fast full display update only for GDEY042T81
} }
#endif #endif
#ifdef BOARD_OBP60S3 #ifdef BOARD_OBP60S3
touchSleepWakeUpEnable(TP1, 45); // TODO sensitivity should be configurable via web interface touchSleepWakeUpEnable(TP1, 45); // TODO sensitivity should be configurable via web interface
touchSleepWakeUpEnable(TP2, 45); touchSleepWakeUpEnable(TP2, 45);
touchSleepWakeUpEnable(TP3, 45); touchSleepWakeUpEnable(TP3, 45);
@ -80,7 +80,7 @@ void OBP60Init(GwApi *api){
touchSleepWakeUpEnable(TP5, 45); touchSleepWakeUpEnable(TP5, 45);
touchSleepWakeUpEnable(TP6, 45); touchSleepWakeUpEnable(TP6, 45);
esp_sleep_enable_touchpad_wakeup(); esp_sleep_enable_touchpad_wakeup();
#endif #endif
// Get CPU speed // Get CPU speed
int freq = getCpuFrequencyMhz(); int freq = getCpuFrequencyMhz();
@ -282,16 +282,16 @@ void underVoltageDetection(GwApi *api, CommonData &common){
double voffset = (api->getConfig()->getConfigItem(api->getConfig()->vOffset,true)->asString()).toFloat(); double voffset = (api->getConfig()->getConfigItem(api->getConfig()->vOffset,true)->asString()).toFloat();
double vslope = (api->getConfig()->getConfigItem(api->getConfig()->vSlope,true)->asString()).toFloat(); double vslope = (api->getConfig()->getConfigItem(api->getConfig()->vSlope,true)->asString()).toFloat();
// Read supply voltage // Read supply voltage
#if defined VOLTAGE_SENSOR && defined LIPO_ACCU_1200 #if defined VOLTAGE_SENSOR && defined LIPO_ACCU_1200
float actVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40 float actVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.53) * 2; // Vin = 1/2 for OBP40
float minVoltage = 3.65; // Absolut minimum volatge for 3,7V LiPo accu float minVoltage = 3.65; // Absolut minimum volatge for 3,7V LiPo accu
#else #else
float actVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60 float actVoltage = (float(analogRead(OBP_ANALOG0)) * 3.3 / 4096 + 0.17) * 20; // Vin = 1/20 for OBP60
float minVoltage = MIN_VOLTAGE; float minVoltage = MIN_VOLTAGE;
#endif #endif
double calVoltage = actVoltage * vslope + voffset; // Calibration double calVoltage = actVoltage * vslope + voffset; // Calibration
if(calVoltage < minVoltage){ if(calVoltage < minVoltage){
#if defined VOLTAGE_SENSOR && defined LIPO_ACCU_1200 #if defined VOLTAGE_SENSOR && defined LIPO_ACCU_1200
// Switch off all power lines // Switch off all power lines
setPortPin(OBP_BACKLIGHT_LED, false); // Backlight Off setPortPin(OBP_BACKLIGHT_LED, false); // Backlight Off
setFlashLED(false); // Flash LED Off setFlashLED(false); // Flash LED Off
@ -311,7 +311,7 @@ void underVoltageDetection(GwApi *api, CommonData &common){
epd->powerOff(); // Display power off epd->powerOff(); // Display power off
setPortPin(OBP_POWER_EPD, false); // Power off ePaper display setPortPin(OBP_POWER_EPD, false); // Power off ePaper display
setPortPin(OBP_POWER_SD, false); // Power off SD card setPortPin(OBP_POWER_SD, false); // Power off SD card
#else #else
// Switch off all power lines // Switch off all power lines
setPortPin(OBP_BACKLIGHT_LED, false); // Backlight Off setPortPin(OBP_BACKLIGHT_LED, false); // Backlight Off
setFlashLED(false); // Flash LED Off setFlashLED(false); // Flash LED Off
@ -329,7 +329,7 @@ void underVoltageDetection(GwApi *api, CommonData &common){
epd->print("To wake up repower system"); epd->print("To wake up repower system");
epd->nextPage(); // Partial update epd->nextPage(); // Partial update
epd->powerOff(); // Display power off epd->powerOff(); // Display power off
#endif #endif
// Stop system // Stop system
while(true){ while(true){
esp_deep_sleep_start(); // Deep Sleep without weakup. Weakup only after power cycle (restart). esp_deep_sleep_start(); // Deep Sleep without weakup. Weakup only after power cycle (restart).
@ -500,15 +500,15 @@ void OBP60Task(GwApi *api){
bool symbolmode = (config->getString(config->headerFormat) == "ICON"); bool symbolmode = (config->getString(config->headerFormat) == "ICON");
String fastrefresh = api->getConfig()->getConfigItem(api->getConfig()->fastRefresh,true)->asString(); String fastrefresh = api->getConfig()->getConfigItem(api->getConfig()->fastRefresh,true)->asString();
uint fullrefreshtime = uint(api->getConfig()->getConfigItem(api->getConfig()->fullRefreshTime,true)->asInt()); uint fullrefreshtime = uint(api->getConfig()->getConfigItem(api->getConfig()->fullRefreshTime,true)->asInt());
#ifdef BOARD_OBP40S3 #ifdef BOARD_OBP40S3
bool syspage_enabled = config->getBool(config->systemPage); bool syspage_enabled = config->getBool(config->systemPage);
#endif #endif
#ifdef DISPLAY_GDEY042T81 #ifdef DISPLAY_GDEY042T81
epd->init(115200, true, 2, false); // Init for Waveshare boards with "clever" reset circuit, 2ms reset pulse epd->init(115200, true, 2, false); // Init for Waveshare boards with "clever" reset circuit, 2ms reset pulse
#else #else
epd->init(115200); // Init for normal displays epd->init(115200); // Init for normal displays
#endif #endif
epd->setRotation(0); // Set display orientation (horizontal) epd->setRotation(0); // Set display orientation (horizontal)
epd->setFullWindow(); // Set full Refresh epd->setFullWindow(); // Set full Refresh
@ -643,9 +643,9 @@ void OBP60Task(GwApi *api){
allParameters.page0=3; allParameters.page0=3;
allParameters.queue=xQueueCreate(10,sizeof(int)); allParameters.queue=xQueueCreate(10,sizeof(int));
allParameters.sensitivity= api->getConfig()->getInt(GwConfigDefinitions::tSensitivity); allParameters.sensitivity= api->getConfig()->getInt(GwConfigDefinitions::tSensitivity);
#ifdef BOARD_OBP40S3 #ifdef BOARD_OBP40S3
allParameters.use_syspage = syspage_enabled; allParameters.use_syspage = syspage_enabled;
#endif #endif
xTaskCreate(keyboardTask,"keyboard",2000,&allParameters,configMAX_PRIORITIES-1,NULL); xTaskCreate(keyboardTask,"keyboard",2000,&allParameters,configMAX_PRIORITIES-1,NULL);
SharedData *shared=new SharedData(api); SharedData *shared=new SharedData(api);
createSensorTask(shared); createSensorTask(shared);
@ -785,12 +785,12 @@ void OBP60Task(GwApi *api){
toggleBacklightLED(commonData.backlight.brightness, commonData.backlight.color); toggleBacklightLED(commonData.backlight.brightness, commonData.backlight.color);
} }
} }
#ifdef BOARD_OBP40S3 #ifdef BOARD_OBP40S3
// #3 Deep sleep mode for OBP40 // #3 Deep sleep mode for OBP40
if ((keyboardMessage == 3) and !syspage_enabled){ if ((keyboardMessage == 3) and !syspage_enabled){
deepSleep(commonData); deepSleep(commonData);
} }
#endif #endif
// #9 Swipe right or #4 key right // #9 Swipe right or #4 key right
if ((keyboardMessage == 9) or (keyboardMessage == 4)) if ((keyboardMessage == 9) or (keyboardMessage == 4))
{ {
@ -854,11 +854,11 @@ void OBP60Task(GwApi *api){
} }
else{ else{
epd->fillScreen(commonData.fgcolor); // Clear display epd->fillScreen(commonData.fgcolor); // Clear display
#ifdef DISPLAY_GDEY042T81 #ifdef DISPLAY_GDEY042T81
epd->init(115200, true, 2, false); // Init for Waveshare boards with "clever" reset circuit, 2ms reset pulse epd->init(115200, true, 2, false); // Init for Waveshare boards with "clever" reset circuit, 2ms reset pulse
#else #else
epd->init(115200); // Init for normal displays epd->init(115200); // Init for normal displays
#endif #endif
epd->firstPage(); // Full update epd->firstPage(); // Full update
epd->nextPage(); // Full update epd->nextPage(); // Full update
// epd->setPartialWindow(0, 0, epd->width(), epd->height()); // Set partial update // epd->setPartialWindow(0, 0, epd->width(), epd->height()); // Set partial update
@ -881,11 +881,11 @@ void OBP60Task(GwApi *api){
} }
else{ else{
epd->fillScreen(commonData.fgcolor); // Clear display epd->fillScreen(commonData.fgcolor); // Clear display
#ifdef DISPLAY_GDEY042T81 #ifdef DISPLAY_GDEY042T81
epd->init(115200, true, 2, false); // Init for Waveshare boards with "clever" reset circuit, 2ms reset pulse epd->init(115200, true, 2, false); // Init for Waveshare boards with "clever" reset circuit, 2ms reset pulse
#else #else
epd->init(115200); // Init for normal displays epd->init(115200); // Init for normal displays
#endif #endif
epd->firstPage(); // Full update epd->firstPage(); // Full update
epd->nextPage(); // Full update epd->nextPage(); // Full update
// epd->setPartialWindow(0, 0, epd->width(), epd->height()); // Set partial update // epd->setPartialWindow(0, 0, epd->width(), epd->height()); // Set partial update
@ -905,11 +905,11 @@ void OBP60Task(GwApi *api){
} }
else{ else{
epd->fillScreen(commonData.fgcolor); // Clear display epd->fillScreen(commonData.fgcolor); // Clear display
#ifdef DISPLAY_GDEY042T81 #ifdef DISPLAY_GDEY042T81
epd->init(115200, true, 2, false); // Init for Waveshare boards with "clever" reset circuit, 2ms reset pulse epd->init(115200, true, 2, false); // Init for Waveshare boards with "clever" reset circuit, 2ms reset pulse
#else #else
epd->init(115200); // Init for normal displays epd->init(115200); // Init for normal displays
#endif #endif
epd->firstPage(); // Full update epd->firstPage(); // Full update
epd->nextPage(); // Full update epd->nextPage(); // Full update
// epd->setPartialWindow(0, 0, epd->width(), epd->height()); // Set partial update // epd->setPartialWindow(0, 0, epd->width(), epd->height()); // Set partial update
@ -973,12 +973,13 @@ void OBP60Task(GwApi *api){
epd->print("Here be dragons!"); epd->print("Here be dragons!");
epd->nextPage(); // Partial update (fast) epd->nextPage(); // Partial update (fast)
} }
else{ else {
if (lastPage != pageNumber){ if (lastPage != pageNumber){
if (hasFRAM) fram.write(FRAM_PAGE_NO, pageNumber); // remember page for device restart pages[lastPage].page->leavePage(pages[lastPage].parameters); // call page cleanup code
if (hasFRAM) fram.write(FRAM_PAGE_NO, pageNumber); // remember new page for device restart
currentPage->setupKeys(); currentPage->setupKeys();
currentPage->displayNew(pages[pageNumber].parameters); currentPage->displayNew(pages[pageNumber].parameters);
lastPage=pageNumber; lastPage = pageNumber;
} }
//call the page code //call the page code
LOG_DEBUG(GwLog::DEBUG,"calling page %d",pageNumber); LOG_DEBUG(GwLog::DEBUG,"calling page %d",pageNumber);