]> pilppa.org Git - lib1wire.git/blobdiff - src/W1DataList.cc
Initial support for reading and writing device specific config data.
[lib1wire.git] / src / W1DataList.cc
index 5f85db07b6420b9ae18c4810ca02099bef9c3d92..9f2674f0971b35b328fcb56f74272212fd0427f8 100644 (file)
@@ -12,6 +12,7 @@
 #include "W1Util.hh"
 #include "W1DataList.hh"
 #include "W1Store.hh"
+#include "DeviceConfig.hh"
 
 #include "plp/log.h"
 
@@ -22,19 +23,21 @@ using namespace plp;
 W1DataList::W1DataList(string device_id_param) {
        string          base_dir;
 
-       device_id       = device_id_param;
-       base_dir        = W1Store::get_base_dir_name();
-       device_dir      = W1Util::concat_paths(base_dir, device_id);
-       device_ch_dir   = W1Util::concat_paths(base_dir, "cache");
-       device_ch_dir   = W1Util::concat_paths(device_ch_dir, device_id);
+       device_config           = new DeviceConfig(device_id_param);
+       summary_calc_type       = device_config->get_summary_calculation_type();
+       device_id               = device_id_param;
+       base_dir                = DeviceConfig::get_base_dir_name();
+       device_dir              = W1Util::concat_paths(base_dir, device_id);
+       device_ch_dir           = W1Util::concat_paths(base_dir, "cache");
+       device_ch_dir           = W1Util::concat_paths(device_ch_dir, device_id);
 }
 
 W1DataList::~W1DataList() {
-       //delete(device_dir);
+       delete(device_config);
 }
 
 Data *W1DataList::find_oldest_data(vector<string> year_vector) {
-       int             ii;
+       unsigned int    ii;
        string          year_dir;
        string          month_dir;
        vector<string>  month_vector;
@@ -106,8 +109,6 @@ Data *W1DataList::find_newest_data(vector<string> year_vector) {
 
 DataRange *W1DataList::get_data_range() {
        DataRange       *ret_val;
-       DIR             *data_dir;
-       struct dirent   *year_dirent;
        vector<string>  year_list;
        Data            *first_data;
        Data            *newest_data;
@@ -168,16 +169,33 @@ long int get_interval_type(Date *start_date,
 }
 
 Data *W1DataList::get_daily_summary(Date *date) {
-       Data    *data;
+       Data    *ret_val;
        W1Store *store;
 
        store   = new W1Store(device_id, date);
        store->load();
-       data    = store->get_mean();
-       data->printout();
+       switch(summary_calc_type) {
+               case SUM:
+                       ret_val = store->get_sum();
+                       break;
+               case DELTA:
+                       ret_val = store->get_delta();
+                       break;
+               case MEAN:
+               default:
+                       ret_val = store->get_mean();
+                       break;
+               case MAX:
+                       ret_val = store->get_max();
+                       break;
+               case MIN:
+                       ret_val = store->get_min();
+                       break;
+       }
+       ret_val->printout();
        delete(store);
 
-       return data;
+       return ret_val;
 }
 
 DataRange *W1DataList::get_daily_summary(Date *start_date,