X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fonewire.c;h=cae0d63d4c22f529aab642a3e3f6dd37e8195fb4;hb=0d5c879672770e3b8a740727fb223a6febdeaa27;hp=c40d5ad73077c4243074d4ae27ff3424d76b4204;hpb=619f112a584fcd89d2e8df7781a0a01341188189;p=collectd.git diff --git a/src/onewire.c b/src/onewire.c index c40d5ad7..cae0d63d 100644 --- a/src/onewire.c +++ b/src/onewire.c @@ -59,12 +59,14 @@ static ow_family_features_t ow_family_features[] = static int ow_family_features_num = STATIC_ARRAY_SIZE (ow_family_features); static char *device_g = NULL; +static int ow_interval = 0; static const char *config_keys[] = { "Device", "IgnoreSelected", "Sensor", + "Interval" }; static int config_keys_num = STATIC_ARRAY_SIZE (config_keys); @@ -87,9 +89,7 @@ static int cow_load_config (const char *key, const char *value) else if (strcasecmp (key, "IgnoreSelected") == 0) { ignorelist_set_invert (sensor_list, 1); - if ((strcasecmp (value, "True") == 0) - || (strcasecmp (value, "Yes") == 0) - || (strcasecmp (value, "On") == 0)) + if (IS_TRUE (value)) ignorelist_set_invert (sensor_list, 0); } else if (strcasecmp (key, "Device") == 0) @@ -104,33 +104,22 @@ static int cow_load_config (const char *key, const char *value) sfree (device_g); device_g = temp; } - else + else if (strcasecmp ("Interval", key) == 0) { - return (-1); + int tmp; + tmp = atoi (value); + if (tmp > 0) + ow_interval = tmp; + else + ERROR ("onewire plugin: Invalid `Interval' setting: %s", value); } - - return (0); -} - -static int cow_init (void) -{ - int status; - - if (device_g == NULL) + else { - ERROR ("onewire plugin: cow_init: No device configured."); return (-1); } - status = (int) OW_init (device_g); - if (status != 0) - { - ERROR ("onewire plugin: OW_init(%s) failed: %i.", device_g, status); - return (1); - } - return (0); -} /* int cow_init */ +} static int cow_read_values (const char *path, const char *name, const ow_family_features_t *family_info) @@ -287,7 +276,7 @@ static int cow_read_bus (const char *path) return (0); } /* int cow_read_bus */ -static int cow_read (void) +static int cow_read (user_data_t *ud __attribute__((unused))) { return (cow_read_bus ("/")); } /* int cow_read */ @@ -299,11 +288,38 @@ static int cow_shutdown (void) return (0); } /* int cow_shutdown */ +static int cow_init (void) +{ + int status; + struct timespec cb_interval; + + if (device_g == NULL) + { + ERROR ("onewire plugin: cow_init: No device configured."); + return (-1); + } + + status = (int) OW_init (device_g); + if (status != 0) + { + ERROR ("onewire plugin: OW_init(%s) failed: %i.", device_g, status); + return (1); + } + + memset (&cb_interval, 0, sizeof (cb_interval)); + if (ow_interval > 0) + cb_interval.tv_sec = (time_t) ow_interval; + + plugin_register_complex_read ("onewire", cow_read, + &cb_interval, /* user data = */ NULL); + plugin_register_shutdown ("onewire", cow_shutdown); + + return (0); +} /* int cow_init */ + void module_register (void) { plugin_register_init ("onewire", cow_init); - plugin_register_read ("onewire", cow_read); - plugin_register_shutdown ("onewire", cow_shutdown); plugin_register_config ("onewire", cow_load_config, config_keys, config_keys_num); }