Setting a max and min for gpsd timeout.
authorNicolas JOURDEN <nicolas.jourden@laposte.net>
Thu, 3 Dec 2015 15:33:24 +0000 (16:33 +0100)
committerNicolas JOURDEN <nicolas.jourden@laposte.net>
Thu, 3 Dec 2015 15:33:24 +0000 (16:33 +0100)
src/collectd.conf.pod
src/gps.c

index 5193701..bbee6b1 100644 (file)
@@ -2541,8 +2541,10 @@ Timeout in seconds (default 0.015 sec).
 The GPS data stream is fetch by the plugin form the daemon.
 It waits for data to be available, if none arrives it times out 
 and loop for another reading.
-Mind to put a low value gpsd expects value in the micro-seconds area (500 us) since 
-the waiting function is blocking.
+Mind to put a low value gpsd expects value in the micro-seconds area 
+(recommended is 500 us) since the waiting function is blocking.
+Value must be between 500 us and 5 sec., if outside that range the 
+default value is applied.
 
 This only applies from gpsd release-2.95.
 
index 82d4918..e43af4a 100644 (file)
--- a/src/gps.c
+++ b/src/gps.c
@@ -36,7 +36,7 @@
 #define CGPS_FALSE                 0
 #define CGPS_DEFAULT_HOST          "localhost"
 #define CGPS_DEFAULT_PORT          "2947" /* DEFAULT_GPSD_PORT */
-#define CGPS_DEFAULT_TIMEOUT       TIME_T_TO_CDTIME_T (0.015)
+#define CGPS_DEFAULT_TIMEOUT       MS_TO_CDTIME_T (15)
 #define CGPS_DEFAULT_PAUSE_CONNECT TIME_T_TO_CDTIME_T (5)
 #define CGPS_MAX_ERROR             100
 #define CGPS_CONFIG                "?WATCH={\"enable\":true,\"json\":true,\"nmea\":false}\r\n"
@@ -278,6 +278,22 @@ static int cgps_config (oconfig_item_t *ci)
       WARNING ("gps plugin: Ignoring unknown config option \"%s\".", child->key);
   }
 
+  // Controlling the value for timeout:
+  // If set too high it blocks the reading (> 5 s), too low it gets not reading (< 500 us).
+  // To avoid any issues we replace "out of range" value by the default value.
+  if (
+    cgps_config_data.timeout > TIME_T_TO_CDTIME_T(5)
+    ||
+    cgps_config_data.timeout < US_TO_CDTIME_T(500)
+  ) 
+  {
+    WARNING ("gps plugin: timeout set to %.6f sec. setting to default (%.6f).", 
+      CDTIME_T_TO_DOUBLE(cgps_config_data.timeout),
+      CDTIME_T_TO_DOUBLE(CGPS_DEFAULT_TIMEOUT)
+    );
+    cgps_config_data.timeout = CGPS_DEFAULT_TIMEOUT;
+  } 
+
   return (0);
 }