Compare commits
No commits in common. "8373d49c4fecc2d26c72477ae526d9477d84e5fb" and "2e797644dbeb17e6ca080275e4cf5e3942272f66" have entirely different histories.
8373d49c4f
...
2e797644db
|
@ -49,9 +49,9 @@ String formatLongitude(double lon) {
|
|||
return String(degree, 0) + "\x90 " + String(minute, 4) + "' " + ((lon > 0) ? "E" : "W");
|
||||
}
|
||||
|
||||
FormattedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
||||
FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){
|
||||
GwLog *logger = commondata.logger;
|
||||
FormattedData result;
|
||||
FormatedData result;
|
||||
static int dayoffset = 0;
|
||||
double rawvalue = 0;
|
||||
|
|
@ -94,7 +94,7 @@ bool WindUtils::calcTrueWind(const double* awaVal, const double* awsVal,
|
|||
} else if (*cogVal != DBL_MIN) {
|
||||
hdt = *cogVal; // Use COG as fallback if HDT and HDM are not available
|
||||
} else {
|
||||
return false; // Cannot calculate without valid HDT or HDM+VAR or COG
|
||||
return false; // Cannot calculate without valid HDT or HDM
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -102,7 +102,8 @@ bool WindUtils::calcTrueWind(const double* awaVal, const double* awsVal,
|
|||
ctw = *cogVal; // Use COG as CTW if available
|
||||
// ctw = *cogVal + ((*cogVal - hdt) / 2); // Estimate CTW from COG
|
||||
} else {
|
||||
ctw = hdt; // 2nd approximation for CTW; hdt must exist if we reach this part of the code
|
||||
ctw = hdt; // 2nd approximation for CTW;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (*stwVal != DBL_MIN) {
|
||||
|
@ -114,11 +115,11 @@ bool WindUtils::calcTrueWind(const double* awaVal, const double* awsVal,
|
|||
return false;
|
||||
}
|
||||
|
||||
if ((*awaVal == DBL_MIN) || (*awsVal == DBL_MIN)) {
|
||||
// Cannot calculate true wind without valid AWA, AWS; other checks are done earlier
|
||||
if ((*awaVal == DBL_MIN) || (*awsVal == DBL_MIN) || (*cogVal == DBL_MIN) || (*stwVal == DBL_MIN)) {
|
||||
// Cannot calculate true wind without valid AWA, AWS, COG, or STW
|
||||
return false;
|
||||
} else {
|
||||
calcTwdSA(awaVal, awsVal, &ctw, &stw, &hdt, &twd, &tws, &twa);
|
||||
calcTwdSA(awaVal, awsVal, &ctw, stwVal, &hdt, &twd, &tws, &twa);
|
||||
*twdVal = twd;
|
||||
*twsVal = tws;
|
||||
*twaVal = twa;
|
||||
|
|
|
@ -120,7 +120,7 @@ bool homevalid = false; // homelat and homelon are valid
|
|||
}
|
||||
else{
|
||||
value1 = simtime++; // Simulation data for time value 11:36 in seconds
|
||||
} // Other simulation data see OBP60Formatter.cpp
|
||||
} // Other simulation data see OBP60Formater.cpp
|
||||
bool valid1 = bvalue1->valid; // Valid information
|
||||
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
|
||||
|
|
|
@ -83,7 +83,7 @@ class PageCompass : public Page
|
|||
String DataText[HowManyValues];
|
||||
String DataUnits[HowManyValues];
|
||||
String DataFormat[HowManyValues];
|
||||
FormattedData TheFormattedData;
|
||||
FormatedData TheFormattedData;
|
||||
|
||||
for (int i = 0; i < HowManyValues; i++){
|
||||
bvalue = pageData.values[i];
|
||||
|
|
|
@ -53,7 +53,7 @@ class PageFourValues : public Page
|
|||
String unit1 = formatValue(bvalue1, *commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #2
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue)
|
||||
String name2 = xdrDelete(bvalue2->getName()); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue2, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -63,7 +63,7 @@ class PageFourValues : public Page
|
|||
String unit2 = formatValue(bvalue2, *commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #3
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Third element in list
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue)
|
||||
String name3 = xdrDelete(bvalue3->getName()); // Value name
|
||||
name3 = name3.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue3, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -73,7 +73,7 @@ class PageFourValues : public Page
|
|||
String unit3 = formatValue(bvalue3, *commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #4
|
||||
GwApi::BoatValue *bvalue4 = pageData.values[3]; // Fourth element in list
|
||||
GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue)
|
||||
String name4 = xdrDelete(bvalue4->getName()); // Value name
|
||||
name4 = name4.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue4, logger); // Check if boat data value is to be calibrated
|
||||
|
|
|
@ -86,7 +86,8 @@ public:
|
|||
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
|
||||
const char *ii = " ";
|
||||
switch (i) {
|
||||
switch (i)
|
||||
{
|
||||
case 0: ii=" "; break; // Use a blank for a empty scale value
|
||||
case 30 : ii=" "; break;
|
||||
case 60 : ii=" "; break;
|
||||
|
|
|
@ -41,9 +41,9 @@ public:
|
|||
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);
|
||||
double rolloffset = roffset.toFloat()/360*(2*PI);
|
||||
String poffset = config->getString(config->pitchOffset);
|
||||
double pitchoffset = poffset.toFloat()/360*(2*M_PI);
|
||||
double pitchoffset = poffset.toFloat()/360*(2*PI);
|
||||
|
||||
// Get boat values for roll
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (xdrRoll)
|
||||
|
@ -55,17 +55,17 @@ public:
|
|||
}
|
||||
else{
|
||||
if(simulation == true){
|
||||
value1 = (20 + float(random(0, 50)) / 10.0)/360*2*M_PI;
|
||||
value1 = (20 + float(random(0, 50)) / 10.0)/360*2*PI;
|
||||
}
|
||||
else{
|
||||
value1 = 0;
|
||||
}
|
||||
}
|
||||
if(value1/(2*M_PI)*360 > -10 && value1/(2*M_PI)*360 < 10){
|
||||
svalue1 = String(value1/(2*M_PI)*360,1); // Convert raw value to string
|
||||
if(value1/(2*PI)*360 > -10 && value1/(2*PI)*360 < 10){
|
||||
svalue1 = String(value1/(2*PI)*360,1); // Convert raw value to string
|
||||
}
|
||||
else{
|
||||
svalue1 = String(value1/(2*M_PI)*360,0);
|
||||
svalue1 = String(value1/(2*PI)*360,0);
|
||||
}
|
||||
if(valid1 == true){
|
||||
svalue1old = svalue1; // Save the old value
|
||||
|
@ -80,17 +80,17 @@ public:
|
|||
}
|
||||
else{
|
||||
if(simulation == true){
|
||||
value2 = (float(random(-5, 5)))/360*2*M_PI;
|
||||
value2 = (float(random(-5, 5)))/360*2*PI;
|
||||
}
|
||||
else{
|
||||
value2 = 0;
|
||||
}
|
||||
}
|
||||
if(value2/(2*PI)*360 > -10 && value2/(2*M_PI)*360 < 10){
|
||||
svalue2 = String(value2/(2*M_PI)*360,1); // Convert raw value to string
|
||||
if(value2/(2*PI)*360 > -10 && value2/(2*PI)*360 < 10){
|
||||
svalue2 = String(value2/(2*PI)*360,1); // Convert raw value to string
|
||||
}
|
||||
else{
|
||||
svalue2 = String(value2/(2*M_PI)*360,0);
|
||||
svalue2 = String(value2/(2*PI)*360,0);
|
||||
}
|
||||
if(valid2 == true){
|
||||
svalue2old = svalue2; // Save the old value
|
||||
|
@ -99,7 +99,7 @@ public:
|
|||
// Optical warning by limit violation
|
||||
if(String(flashLED) == "Limit Violation"){
|
||||
// Limits for roll
|
||||
if(value1*360/(2*M_PI) >= -1*rolllimit && value1*360/(2*M_PI) <= rolllimit){
|
||||
if(value1*360/(2*PI) >= -1*rolllimit && value1*360/(2*PI) <= rolllimit){
|
||||
setBlinkingLED(false);
|
||||
setFlashLED(false);
|
||||
}
|
||||
|
@ -177,10 +177,11 @@ public:
|
|||
// Only scaling +/- 60 degrees
|
||||
if((i >= 0 && i <= 60) || (i >= 300 && i <= 360)){
|
||||
// Scaling values
|
||||
float x = 200 + (rInstrument+25)*sin(i/180.0*M_PI); // x-coordinate dots
|
||||
float y = 150 - (rInstrument+25)*cos(i/180.0*M_PI); // y-coordinate cots
|
||||
float x = 200 + (rInstrument+25)*sin(i/180.0*pi); // x-coordinate dots
|
||||
float y = 150 - (rInstrument+25)*cos(i/180.0*pi); // y-coordinate cots
|
||||
const char *ii = "";
|
||||
switch (i) {
|
||||
switch (i)
|
||||
{
|
||||
case 0: ii="0"; break;
|
||||
case 20 : ii="20"; break;
|
||||
case 40 : ii="40"; break;
|
||||
|
@ -202,11 +203,11 @@ public:
|
|||
}
|
||||
|
||||
// Draw sub scale with dots
|
||||
float x1c = 200 + rInstrument*sin(i/180.0*M_PI);
|
||||
float y1c = 150 - rInstrument*cos(i/180.0*M_PI);
|
||||
float x1c = 200 + rInstrument*sin(i/180.0*pi);
|
||||
float y1c = 150 - rInstrument*cos(i/180.0*pi);
|
||||
getdisplay().fillCircle((int)x1c, (int)y1c, 2, commonData->fgcolor);
|
||||
float sinx=sin(i/180.0*M_PI);
|
||||
float cosx=cos(i/180.0*M_PI);
|
||||
float sinx=sin(i/180.0*pi);
|
||||
float cosx=cos(i/180.0*pi);
|
||||
|
||||
// Draw sub scale with lines (two triangles)
|
||||
if(i % 20 == 0){
|
||||
|
@ -228,11 +229,11 @@ public:
|
|||
// Draw mast position pointer
|
||||
float startwidth = 8; // Start width of pointer
|
||||
|
||||
// value1 = (2 * M_PI ) - value1; // Mirror coordiante system for pointer, keel and boat
|
||||
// value1 = (2 * pi ) - value1; // Mirror coordiante system for pointer, keel and boat
|
||||
|
||||
if(valid1 == true || holdvalues == true || simulation == true){
|
||||
float sinx=sin(value1 + M_PI);
|
||||
float cosx=cos(value1 + M_PI);
|
||||
float sinx=sin(value1 + pi);
|
||||
float cosx=cos(value1 + pi);
|
||||
// Normal pointer
|
||||
// Pointer as triangle with center base 2*width
|
||||
float xx1 = -startwidth;
|
||||
|
|
|
@ -51,7 +51,7 @@ class PageThreeValues : public Page
|
|||
String unit1 = formatValue(bvalue1, *commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #2
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue)
|
||||
String name2 = xdrDelete(bvalue2->getName()); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue2, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -61,7 +61,7 @@ class PageThreeValues : public Page
|
|||
String unit2 = formatValue(bvalue2, *commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #3
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Third element in list
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue)
|
||||
String name3 = xdrDelete(bvalue3->getName()); // Value name
|
||||
name3 = name3.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue3, logger); // Check if boat data value is to be calibrated
|
||||
|
|
|
@ -49,7 +49,7 @@ class PageTwoValues : public Page
|
|||
String unit1 = formatValue(bvalue1, *commonData).unit; // Unit of value
|
||||
|
||||
// Get boat values #2
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list (only one value by PageOneValue)
|
||||
String name2 = xdrDelete(bvalue2->getName()); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue2, logger); // Check if boat data value is to be calibrated
|
||||
|
|
|
@ -206,7 +206,7 @@ public:
|
|||
// read boat data values; TWD only for validation test, TWS for display of current value
|
||||
for (int i = 0; i < numBoatData; i++) {
|
||||
bvalue = pageData.values[i];
|
||||
BDataName[i] = xdrDelete(bvalue->getName());
|
||||
// BDataName[i] = xdrDelete(bvalue->getName());
|
||||
BDataName[i] = BDataName[i].substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue, logger); // Check if boat data value is to be calibrated
|
||||
BDataValue[i] = bvalue->value; // Value as double in SI unit
|
||||
|
@ -326,13 +326,24 @@ public:
|
|||
chrtVal = static_cast<int>(pageData.boatHstry.twdHstry->get(bufStart + (i * dataIntv))); // show the latest wind values in buffer; keep 1st value constant in a rolling buffer
|
||||
if (chrtVal == INT16_MIN) {
|
||||
chrtPrevVal = INT16_MIN;
|
||||
/* if (i == linesToShow - 1) {
|
||||
numNoData++;
|
||||
// If more than 4 invalid values in a row, reset chart
|
||||
} else {
|
||||
numNoData = 0; // Reset invalid value counter
|
||||
}
|
||||
if (numNoData > 4) {
|
||||
// If more than 4 invalid values in a row, send message
|
||||
getdisplay().setFont(&Ubuntu_Bold10pt8b);
|
||||
getdisplay().fillRect(xCenter - 66, height / 2 - 20, 146, 24, commonData->bgcolor); // Clear area for TWS value
|
||||
drawTextCenter(xCenter, height / 2 - 10, "No sensor data");
|
||||
} */
|
||||
} else {
|
||||
chrtVal = static_cast<int>((chrtVal / 1000.0 * radToDeg) + 0.5); // Convert to degrees and round
|
||||
x = ((chrtVal - wndLeft + 360) % 360) * chrtScl;
|
||||
y = yOffset + cHeight - i; // Position in chart area
|
||||
|
||||
// if (i >= (numWndVals / dataIntv) - 10)
|
||||
if (i >= (numWndVals / dataIntv) - 1)
|
||||
if (i >= (numWndVals / dataIntv) - 10)
|
||||
LOG_DEBUG(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)) {
|
||||
|
@ -367,8 +378,7 @@ public:
|
|||
int minWndDir = pageData.boatHstry.twdHstry->getMin(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);
|
||||
// if ((minWndDir + 540 >= wndCenter + 540) || (maxWndDir + 540 <= wndCenter + 540)) {
|
||||
if (((minWndDir - wndCenter >= 0) && (minWndDir - wndCenter < 180)) || ((maxWndDir - wndCenter <= 0) && (maxWndDir - wndCenter >=180))) {
|
||||
if ((minWndDir + 540 >= wndCenter + 540) || (maxWndDir + 540 <= wndCenter + 540)) {
|
||||
// Check if all wind value are left or right of center value -> optimize chart range
|
||||
midWndDir = pageData.boatHstry.twdHstry->getMid(numWndVals) / 1000.0 * radToDeg;
|
||||
if (midWndDir != INT16_MIN) {
|
||||
|
|
|
@ -48,7 +48,7 @@ public:
|
|||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
|
||||
// Get boat value for AWA
|
||||
// Get boat values for AWA
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
|
||||
String name1 = xdrDelete(bvalue1->getName()); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
|
@ -63,8 +63,8 @@ public:
|
|||
unit1old = unit1; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat value for AWS
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list
|
||||
// Get boat values for AWS
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // First element in list (only one value by PageOneValue)
|
||||
String name2 = xdrDelete(bvalue2->getName()); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue2, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -77,8 +77,8 @@ public:
|
|||
unit2old = unit2; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat value for TWD
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Third element in list
|
||||
// Get boat values TWD
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue)
|
||||
String name3 = xdrDelete(bvalue3->getName()); // Value name
|
||||
name3 = name3.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue3, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -91,8 +91,8 @@ public:
|
|||
unit3old = unit3; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat value for TWS
|
||||
GwApi::BoatValue *bvalue4 = pageData.values[3]; // Fourth element in list
|
||||
// Get boat values TWS
|
||||
GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue)
|
||||
String name4 = xdrDelete(bvalue4->getName()); // Value name
|
||||
name4 = name4.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue4, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -105,8 +105,8 @@ public:
|
|||
unit4old = unit4; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat value for DBT
|
||||
GwApi::BoatValue *bvalue5 = pageData.values[4]; // Fifth element in list
|
||||
// Get boat values DBT
|
||||
GwApi::BoatValue *bvalue5 = pageData.values[4]; // Second element in list (only one value by PageOneValue)
|
||||
String name5 = xdrDelete(bvalue5->getName()); // Value name
|
||||
name5 = name5.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue5, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -119,8 +119,8 @@ public:
|
|||
unit5old = unit5; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat value for STW
|
||||
GwApi::BoatValue *bvalue6 = pageData.values[5]; // Sixth element in list
|
||||
// Get boat values STW
|
||||
GwApi::BoatValue *bvalue6 = pageData.values[5]; // Second element in list (only one value by PageOneValue)
|
||||
String name6 = xdrDelete(bvalue6->getName()); // Value name
|
||||
name6 = name6.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue6, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -248,7 +248,7 @@ public:
|
|||
float y = 150 - (rInstrument-30)*cos(i/180.0*pi); // y-coordinate cots
|
||||
const char *ii = "";
|
||||
switch (i)
|
||||
{
|
||||
{
|
||||
case 0: ii="0"; break;
|
||||
case 30 : ii="30"; break;
|
||||
case 60 : ii="60"; break;
|
||||
|
|
|
@ -48,7 +48,7 @@ public:
|
|||
String flashLED = config->getString(config->flashLED);
|
||||
String backlightMode = config->getString(config->backlight);
|
||||
|
||||
// Get boat values #1
|
||||
// Get boat values for AWA
|
||||
GwApi::BoatValue *bvalue1 = pageData.values[0]; // First element in list (only one value by PageOneValue)
|
||||
String name1 = xdrDelete(bvalue1->getName()); // Value name
|
||||
name1 = name1.substring(0, 6); // String length limit for value name
|
||||
|
@ -63,8 +63,8 @@ public:
|
|||
unit1old = unit1; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat values #2
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // Second element in list
|
||||
// Get boat values for AWS
|
||||
GwApi::BoatValue *bvalue2 = pageData.values[1]; // First element in list (only one value by PageOneValue)
|
||||
String name2 = xdrDelete(bvalue2->getName()); // Value name
|
||||
name2 = name2.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue2, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -77,8 +77,8 @@ public:
|
|||
unit2old = unit2; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat values #3
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Third element in list
|
||||
// Get boat values TWD
|
||||
GwApi::BoatValue *bvalue3 = pageData.values[2]; // Second element in list (only one value by PageOneValue)
|
||||
String name3 = xdrDelete(bvalue3->getName()); // Value name
|
||||
name3 = name3.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue3, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -91,8 +91,8 @@ public:
|
|||
unit3old = unit3; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat values #4
|
||||
GwApi::BoatValue *bvalue4 = pageData.values[3]; // Fourth element in list
|
||||
// Get boat values TWS
|
||||
GwApi::BoatValue *bvalue4 = pageData.values[3]; // Second element in list (only one value by PageOneValue)
|
||||
String name4 = xdrDelete(bvalue4->getName()); // Value name
|
||||
name4 = name4.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue4, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -105,8 +105,8 @@ public:
|
|||
unit4old = unit4; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat values #5
|
||||
GwApi::BoatValue *bvalue5 = pageData.values[4]; // Fifth element in list
|
||||
// Get boat values DBT
|
||||
GwApi::BoatValue *bvalue5 = pageData.values[4]; // Second element in list (only one value by PageOneValue)
|
||||
String name5 = xdrDelete(bvalue5->getName()); // Value name
|
||||
name5 = name5.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue5, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -119,8 +119,8 @@ public:
|
|||
unit5old = unit5; // Save old unit
|
||||
}
|
||||
|
||||
// Get boat values #5
|
||||
GwApi::BoatValue *bvalue6 = pageData.values[5]; // Sixth element in list
|
||||
// Get boat values STW
|
||||
GwApi::BoatValue *bvalue6 = pageData.values[5]; // Second element in list (only one value by PageOneValue)
|
||||
String name6 = xdrDelete(bvalue6->getName()); // Value name
|
||||
name6 = name6.substring(0, 6); // String length limit for value name
|
||||
calibrationData.calibrateInstance(bvalue6, logger); // Check if boat data value is to be calibrated
|
||||
|
@ -192,7 +192,7 @@ public:
|
|||
getdisplay().setFont(&DSEG7Classic_BoldItalic20pt7b);
|
||||
getdisplay().setCursor(295, 65);
|
||||
if(valid3 == true){
|
||||
// getdisplay().print(abs(value3 * 180 / M_PI), 0); // Value
|
||||
// getdisplay().print(abs(value3 * 180 / PI), 0); // Value
|
||||
getdisplay().print(svalue4); // Value
|
||||
}
|
||||
else{
|
||||
|
@ -236,6 +236,7 @@ public:
|
|||
|
||||
// Draw wind rose
|
||||
int rInstrument = 110; // Radius of grafic instrument
|
||||
float pi = 3.141592;
|
||||
|
||||
getdisplay().fillCircle(200, 150, rInstrument + 10, commonData->fgcolor); // Outer circle
|
||||
getdisplay().fillCircle(200, 150, rInstrument + 7, commonData->bgcolor); // Outer circle
|
||||
|
@ -245,10 +246,11 @@ public:
|
|||
for(int i=0; i<360; i=i+10)
|
||||
{
|
||||
// Scaling values
|
||||
float x = 200 + (rInstrument-30)*sin(i/180.0*M_PI); // x-coordinate dots
|
||||
float y = 150 - (rInstrument-30)*cos(i/180.0*M_PI); // y-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 dots
|
||||
const char *ii = "";
|
||||
switch (i) {
|
||||
switch (i)
|
||||
{
|
||||
case 0: ii="0"; break;
|
||||
case 30 : ii="30"; break;
|
||||
case 60 : ii="60"; break;
|
||||
|
@ -275,11 +277,11 @@ public:
|
|||
}
|
||||
|
||||
// Draw sub scale with dots
|
||||
float x1c = 200 + rInstrument*sin(i/180.0*M_PI);
|
||||
float y1c = 150 - rInstrument*cos(i/180.0*M_PI);
|
||||
float x1c = 200 + rInstrument*sin(i/180.0*pi);
|
||||
float y1c = 150 - rInstrument*cos(i/180.0*pi);
|
||||
getdisplay().fillCircle((int)x1c, (int)y1c, 2, commonData->fgcolor);
|
||||
float sinx=sin(i/180.0*M_PI);
|
||||
float cosx=cos(i/180.0*M_PI);
|
||||
float sinx=sin(i/180.0*pi);
|
||||
float cosx=cos(i/180.0*pi);
|
||||
|
||||
// Draw sub scale with lines (two triangles)
|
||||
if(i % 30 == 0){
|
||||
|
@ -329,19 +331,13 @@ public:
|
|||
|
||||
//*******************************************************************************************
|
||||
|
||||
// Show value6, so that it does not collide with the wind pointer
|
||||
// Show value6, so that it does not collide with the wind pointer
|
||||
if ( cos(value1) > 0){
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic16pt7b);
|
||||
if (cos(value1) > 0){
|
||||
getdisplay().setCursor(160, 200);
|
||||
getdisplay().print(svalue6); // Value
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt8b);
|
||||
getdisplay().setCursor(190, 215);
|
||||
} else{
|
||||
getdisplay().setCursor(160, 130);
|
||||
getdisplay().print(svalue6); // Value
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt8b);
|
||||
getdisplay().setCursor(190, 90);
|
||||
}
|
||||
getdisplay().print(" ");
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit6); // Unit
|
||||
|
@ -349,6 +345,22 @@ public:
|
|||
else{
|
||||
getdisplay().print(unit6old); // Unit
|
||||
}
|
||||
}
|
||||
else{
|
||||
getdisplay().setFont(&DSEG7Classic_BoldItalic16pt7b);
|
||||
getdisplay().setCursor(160, 130);
|
||||
getdisplay().print(svalue6); // Value
|
||||
getdisplay().setFont(&Ubuntu_Bold8pt8b);
|
||||
getdisplay().setCursor(190, 90);
|
||||
getdisplay().print(" ");
|
||||
if(holdvalues == false){
|
||||
getdisplay().print(unit6); // Unit
|
||||
}
|
||||
else{
|
||||
getdisplay().print(unit6old); // Unit
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return PAGE_UPDATE;
|
||||
};
|
||||
|
@ -368,6 +380,7 @@ PageDescription registerPageWindRoseFlex(
|
|||
"WindRoseFlex", // Page name
|
||||
createPage, // Action
|
||||
6, // Number of bus values depends on selection in Web configuration; was zero
|
||||
//{"AWA", "AWS", "COG", "SOG", "TWD", "TWS"}, // Bus values we need in the page, modified for WindRose2
|
||||
true // Show display header on/off
|
||||
);
|
||||
|
||||
|
|
|
@ -197,7 +197,7 @@ typedef struct{
|
|||
double value;
|
||||
String svalue;
|
||||
String unit;
|
||||
} FormattedData;
|
||||
} FormatedData;
|
||||
|
||||
// Formatter for boat values
|
||||
FormattedData formatValue(GwApi::BoatValue *value, CommonData &commondata);
|
||||
FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata);
|
||||
|
|
|
@ -406,9 +406,10 @@ bool addTrueWind(GwApi* api, BoatValueList* boatValues) {
|
|||
hdtVal = hdtBVal->valid ? hdtBVal->value : DBL_MIN;
|
||||
hdmVal = hdmBVal->valid ? hdmBVal->value : DBL_MIN;
|
||||
varVal = varBVal->valid ? varBVal->value : DBL_MIN;
|
||||
api->getLogger()->logDebug(GwLog::DEBUG,"obp60task addTrueWind: AWA %.1f, AWS %.1f, COG %.1f, STW %.1f, SOG %.1f, HDT %.1f, HDM %.1f, VAR %.1f", awaBVal->value * RAD_TO_DEG, awsBVal->value * 3.6 / 1.852,
|
||||
cogBVal->value * RAD_TO_DEG, stwBVal->value * 3.6 / 1.852, sogBVal->value * 3.6 / 1.852, hdtBVal->value * RAD_TO_DEG, hdmBVal->value * RAD_TO_DEG, varBVal->value * RAD_TO_DEG);
|
||||
api->getLogger()->logDebug(GwLog::DEBUG,"obp60task addTrueWind: AWA: %.1f, AWS: %.1f, COG: %.1f, STW: %.1f, HDT: %.1f, HDM: %.1f, VAR: %.1f", awaBVal->value * RAD_TO_DEG, awsBVal->value * 3.6 / 1.852,
|
||||
cogBVal->value * RAD_TO_DEG, stwBVal->value * 3.6 / 1.852, hdtBVal->value * RAD_TO_DEG, hdmBVal->value * RAD_TO_DEG, varBVal->value * RAD_TO_DEG);
|
||||
|
||||
// isCalculated = WindUtils::calcTrueWind(&awaVal, &awsVal, &cogVal, &stwVal, &sogVal, &hdtVal, &hdmVal, &varVal, &twdBVal->value, &twsBVal->value, &twaBVal->value);
|
||||
isCalculated = WindUtils::calcTrueWind(&awaVal, &awsVal, &cogVal, &stwVal, &sogVal, &hdtVal, &hdmVal, &varVal, &twd, &tws, &twa);
|
||||
|
||||
if (isCalculated) { // Replace values only, if successfully calculated and not already available
|
||||
|
@ -425,8 +426,8 @@ bool addTrueWind(GwApi* api, BoatValueList* boatValues) {
|
|||
twaBVal->valid = true;
|
||||
}
|
||||
}
|
||||
api->getLogger()->logDebug(GwLog::DEBUG,"obp60task addTrueWind: TWD_Valid %d, isCalculated %d, TWD %.1f, TWA %.1f, TWS %.1f", twdBVal->valid, isCalculated, twdBVal->value * RAD_TO_DEG,
|
||||
twaBVal->value * RAD_TO_DEG, twsBVal->value * 3.6 / 1.852);
|
||||
api->getLogger()->logDebug(GwLog::DEBUG,"obp60task calcTrueWind: TWD_Valid? %d, TWD=%.1f, TWS=%.1f, TWA=%.1f, isCalculated? %d", twdBVal->valid, twdBVal->value * RAD_TO_DEG, twsBVal->value * 3.6 / 1.852,
|
||||
twaBVal->value * RAD_TO_DEG, isCalculated);
|
||||
|
||||
return isCalculated;
|
||||
}
|
||||
|
@ -465,8 +466,8 @@ void handleHstryBuf(GwApi* api, BoatValueList* boatValues, tBoatHstryData hstryB
|
|||
GwApi::BoatValue *twsBVal = boatValues->findValueOrCreate(hstryBufList.twsHstry->getName());
|
||||
GwApi::BoatValue *twaBVal = boatValues->findValueOrCreate("TWA");
|
||||
|
||||
api->getLogger()->logDebug(GwLog::DEBUG,"obp60task handleHstryBuf: twdBVal: %.1f, twaBVal: %.1f, twsBVal: %.1f, TWD_isValid? %d", twdBVal->value * RAD_TO_DEG,
|
||||
twaBVal->value * RAD_TO_DEG, twsBVal->value * 3.6 / 1.852, twdBVal->valid);
|
||||
api->getLogger()->logDebug(GwLog::DEBUG,"obp60task handleHstryBuf: twdBVal: %f, twsBVal: %f, twaBVal: %f, TWD_isValid? %d", twdBVal->value * RAD_TO_DEG,
|
||||
twsBVal->value * 3.6 / 1.852, twaBVal->value * RAD_TO_DEG, twdBVal->valid);
|
||||
calBVal = new GwApi::BoatValue("TWD"); // temporary solution for calibration of history buffer values
|
||||
calBVal->setFormat(twdBVal->getFormat());
|
||||
if (twdBVal->valid) {
|
||||
|
|
Loading…
Reference in New Issue