X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fgps.c;h=f72cef4961bfa860f2481b0663ce822a36f592ad;hb=4d370741101aeb037ae52f3529a4a0869e0dc08a;hp=d0cec6c42847a89dd2df56569a9f29dc875bb2e8;hpb=c61ec55cd5685ef5998e4f72dc88f62c6f5e5cfd;p=collectd.git diff --git a/src/gps.c b/src/gps.c index d0cec6c4..f72cef49 100644 --- a/src/gps.c +++ b/src/gps.c @@ -30,14 +30,12 @@ #include "common.h" #include "plugin.h" #include "utils_time.h" -#include "configfile.h" #define CGPS_TRUE 1 #define CGPS_FALSE 0 #define CGPS_DEFAULT_HOST "localhost" -#define CGPS_DEFAULT_PORT "2947" -#define CGPS_DEFAULT_TIMEOUT TIME_T_TO_CDTIME_T (0.015) -#define CGPS_DEFAULT_PAUSE_READ TIME_T_TO_CDTIME_T (1) +#define CGPS_DEFAULT_PORT "2947" /* DEFAULT_GPSD_PORT */ +#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" @@ -49,7 +47,6 @@ typedef struct { char *host; char *port; cdtime_t timeout; - cdtime_t pause_read; cdtime_t pause_connect; } cgps_config_t; @@ -157,11 +154,6 @@ static void * cgps_thread (void * pData) if (!gps_waiting (&gpsd_conn)) #endif { - if (cgps_thread_pause(cgps_config_data.pause_read) == CGPS_FALSE) - { - goto stop; - } - continue; } @@ -246,7 +238,7 @@ static void cgps_submit (const char *type, gauge_t value, const char *type_insta /** * Read the data and submit by piece. */ -static int cgps_read () +static int cgps_read (void) { cgps_data_t data_copy; @@ -279,14 +271,28 @@ static int cgps_config (oconfig_item_t *ci) cf_util_get_service (child, &cgps_config_data.port); else if (strcasecmp ("Timeout", child->key) == 0) cf_util_get_cdtime (child, &cgps_config_data.timeout); - else if (strcasecmp ("Pauseread", child->key) == 0) - cf_util_get_cdtime (child, &cgps_config_data.pause_read); else if (strcasecmp ("PauseConnect", child->key) == 0) cf_util_get_cdtime (child, &cgps_config_data.pause_connect); else 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); } @@ -303,11 +309,9 @@ static int cgps_init (void) return 0; } - DEBUG ("gps plugin: config{host: \"%s\", port: \"%s\", timeout: %.6f sec., \ -pause read: %.3f sec, pause connect: %.3f sec.}", + DEBUG ("gps plugin: config{host: \"%s\", port: \"%s\", timeout: %.6f sec., pause connect: %.3f sec.}", cgps_config_data.host, cgps_config_data.port, CDTIME_T_TO_DOUBLE (cgps_config_data.timeout), - CDTIME_T_TO_DOUBLE (cgps_config_data.pause_read), CDTIME_T_TO_DOUBLE (cgps_config_data.pause_connect)); status = plugin_thread_create (&cgps_thread_id, NULL, cgps_thread, NULL); @@ -354,7 +358,6 @@ void module_register (void) cgps_config_data.host = sstrdup (CGPS_DEFAULT_HOST); cgps_config_data.port = sstrdup (CGPS_DEFAULT_PORT); cgps_config_data.timeout = CGPS_DEFAULT_TIMEOUT; - cgps_config_data.pause_read = CGPS_DEFAULT_PAUSE_READ; cgps_config_data.pause_connect = CGPS_DEFAULT_PAUSE_CONNECT; plugin_register_complex_config ("gps", cgps_config);