From 7c14b05db2cd7b17321f1e37bfb852c1a9a3832d Mon Sep 17 00:00:00 2001 From: Nicolas JOURDEN Date: Thu, 3 Dec 2015 16:33:24 +0100 Subject: [PATCH] Setting a max and min for gpsd timeout. --- src/collectd.conf.pod | 6 ++++-- src/gps.c | 18 +++++++++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/collectd.conf.pod b/src/collectd.conf.pod index 5193701d..bbee6b13 100644 --- a/src/collectd.conf.pod +++ b/src/collectd.conf.pod @@ -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. diff --git a/src/gps.c b/src/gps.c index 82d49189..e43af4a4 100644 --- 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); } -- 2.11.0