Added signal strength indicator to detail screen. Changed speed treshold to change...
[jspeed] / src / odometer.cpp
index 041ee33..e4da0a9 100644 (file)
@@ -33,8 +33,9 @@ namespace
     QString const MILE_UNIT = "mi";
     QString const KM_SPEEDUNIT = "km/h";
     QString const MILE_SPEEDUNIT = "mph";
-    double const SPEED_TRESHOLD = 0.9;
-    double const SPEED_IGNORE_LEVEL = 0.2;
+    double const DEFAULT_SPEED_TRESHOLD = 8.0;
+    double const MIN_SPEED_TRESHOLD = 0.9;
+    double const SPEED_IGNORE_LEVEL = 0.01;
 }
 
 Odometer::Odometer(): QObject(0), trip_(0), total_(0),
@@ -98,9 +99,21 @@ void Odometer::update(Location::Fix const& fix)
 
     fixTimer_->restart();
 
-    if(elapsed > 200 && fix.kmSpeed > SPEED_IGNORE_LEVEL && elapsed < 10000)
+    if(fix.kmSpeed > SPEED_IGNORE_LEVEL)
     {
-        if(fix.kmSpeed > SPEED_TRESHOLD)
+        double treshold = DEFAULT_SPEED_TRESHOLD;
+
+        if(fix.eps > 0.01)
+        {
+           treshold = fix.eps * 0.23822 + 0.471204;
+
+           if(treshold < MIN_SPEED_TRESHOLD)
+           {
+               treshold = MIN_SPEED_TRESHOLD;
+           }
+        }
+
+        if(fix.kmSpeed > treshold && elapsed > 200 && elapsed < 8000)
         {
             double km = fix.kmSpeed * (static_cast<double>(elapsed) / (1000 * 3600));
             trip_ += km;
@@ -121,7 +134,7 @@ void Odometer::update(Location::Fix const& fix)
     }
     else
     {
-        if(latestFix_.kmSpeed > 0.49)
+        if(latestFix_.kmSpeed > SPEED_IGNORE_LEVEL)
         {
             latestFix_ = fix;
             latestFix_.speed = 0.0;
@@ -222,6 +235,16 @@ Location::Fix const& Odometer::getLatestFix() const
     return latestFix_;
 }
 
+double Odometer::getSignalStrength() const
+{
+    if(!location_)
+    {
+        return 0.0;
+    }
+
+    return location_->getSignalStrength();
+}
+
 QString const& Odometer::getUnit()
 {
     if(Location::getUnit() == Location::KM)