diff --git a/lib/obp60task/OBP60Formater.cpp b/lib/obp60task/OBP60Formater.cpp index 9a0367d..2ab387b 100644 --- a/lib/obp60task/OBP60Formater.cpp +++ b/lib/obp60task/OBP60Formater.cpp @@ -34,6 +34,9 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){ static const int bsize = 30; char buffer[bsize+1]; buffer[0]=0; + + //######################################################## + // Formats for several boat data //######################################################## if (value->getFormat() == "formatDate"){ @@ -383,7 +386,98 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){ } } //######################################################## - else if (value->getFormat() == "formatXdrD"){ + // Special XDR formats + // Refer XDR formats in GwXDRMappings.cpp line 40 + //######################################################## + else if (value->getFormat() == "formatXdr:P:P"){ + double pressure = 0; + if(usesimudata == false) { + pressure = value->value; + pressure = pressure / 1000.0; // Unit conversion form Pa to kPa + } + else{ + pressure = 96 + float(random(0, 20)) / 10.0; + } + if(pressure <= 99.9){ + snprintf(buffer,bsize,"%3.1f",pressure); + } + else{ + snprintf(buffer,bsize,"%3.0f",pressure); + } + result.unit = "kPa"; + } + //######################################################## + else if (value->getFormat() == "formatXdr:P:B"){ + double pressure = 0; + if(usesimudata == false) { + pressure = value->value; + pressure = pressure / 100.0; // Unit conversion form Pa to mBar + } + else{ + pressure = 968 + float(random(0, 10)); + } + snprintf(buffer,bsize,"%4.0f",pressure); + result.unit = "mBar"; + } + //######################################################## + else if (value->getFormat() == "formatXdr:U:V"){ + double voltage = 0; + if(usesimudata == false) { + voltage = value->value; + } + else{ + voltage = 12 + float(random(0, 30)) / 10.0; + } + if(voltage < 10){ + snprintf(buffer,bsize,"%3.2f",voltage); + } + else{ + snprintf(buffer,bsize,"%3.1f",voltage); + } + result.unit = "V"; + } + //######################################################## + else if (value->getFormat() == "formatXdr:I:A"){ + double current = 0; + if(usesimudata == false) { + current = value->value; + } + else{ + current = 8.2 + float(random(0, 50)) / 10.0; + } + if(current < 10){ + snprintf(buffer,bsize,"%3.2f",current); + } + if(current >= 10 && current < 100){ + snprintf(buffer,bsize,"%3.1f",current); + } + if(current >= 100){ + snprintf(buffer,bsize,"%3.0f",current); + } + result.unit = "A"; + } + //######################################################## + else if (value->getFormat() == "formatXdr:C:K"){ + double temperature = 0; + if(usesimudata == false) { + temperature = value->value; + } + else{ + temperature = 21.8 + float(random(0, 50)) / 10.0; + } + if(temperature < 10){ + snprintf(buffer,bsize,"%3.2f",temperature); + } + if(temperature >= 10 && temperature < 100){ + snprintf(buffer,bsize,"%3.1f",temperature); + } + if(temperature >= 100){ + snprintf(buffer,bsize,"%3.0f",temperature); + } + result.unit = "K"; + } + //######################################################## + else if (value->getFormat() == "formatXdr:A:D"){ double angle = 0; if(usesimudata == false) { angle = value->value; @@ -401,6 +495,8 @@ FormatedData formatValue(GwApi::BoatValue *value, CommonData &commondata){ result.unit = "Deg"; } //######################################################## + // Default format + //######################################################## else{ if(value->value < 10){ snprintf(buffer,bsize,"%3.2f",value->value); diff --git a/lib/obp60task/PageClock.cpp b/lib/obp60task/PageClock.cpp index 72b655c..82b870a 100644 --- a/lib/obp60task/PageClock.cpp +++ b/lib/obp60task/PageClock.cpp @@ -168,7 +168,7 @@ public: display.fillCircle(200, 150, rInstrument + 10, pixelcolor); // Outer circle display.fillCircle(200, 150, rInstrument + 7, bgcolor); // Outer circle - for(int i=0; i<360; i=i+10) + for(int i=0; i<360; i=i+1) { // Scaling values float x = 200 + (rInstrument-30)*sin(i/180.0*pi); // x-coordinate dots @@ -202,11 +202,15 @@ public: } // Draw sub scale with dots - float x1c = 200 + rInstrument*sin(i/180.0*pi); - float y1c = 150 - rInstrument*cos(i/180.0*pi); - display.fillCircle((int)x1c, (int)y1c, 2, pixelcolor); - float sinx=sin(i/180.0*pi); - float cosx=cos(i/180.0*pi); + float sinx = 0; + float cosx = 0; + if(i % 6 == 0){ + float x1c = 200 + rInstrument*sin(i/180.0*pi); + float y1c = 150 - rInstrument*cos(i/180.0*pi); + display.fillCircle((int)x1c, (int)y1c, 2, pixelcolor); + sinx=sin(i/180.0*pi); + cosx=cos(i/180.0*pi); + } // Draw sub scale with lines (two triangles) if(i % 30 == 0){ @@ -245,7 +249,8 @@ public: if (value1 < 0) {value1 = value1 + 86400;} hour = (value1 / 3600.0); if(hour > 12) hour = hour - 12.0; - minute = (hour - int(hour)) * 3600.0 / 60.0; +// minute = (hour - int(hour)) * 3600.0 / 60.0; // Analog minute pointer smoth moving + minute = int((hour - int(hour)) * 3600.0 / 60.0); // Jumping minute pointer from minute to minute LOG_DEBUG(GwLog::DEBUG,"... PageClock, value1: %f hour: %f minute:%f", value1, hour, minute); // Draw hour pointer