]> 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 e05f9baaec76c2f8fec5f67ed9d0a4a2eed6f6a6..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;
@@ -167,27 +168,37 @@ long int get_interval_type(Date *start_date,
        return ret_val;
 }
 
-string W1DataList::get_day_data(Date *date) {
-       string ret_val;
-
-       ret_val = W1Store::get_file_name(device_id, date);
-       return ret_val;
-}
-
-Data *W1DataList::get_avg_day_data(Date *date) {
-       Data    *data;
+Data *W1DataList::get_daily_summary(Date *date) {
+       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_avg_day_data(Date *start_date,
+DataRange *W1DataList::get_daily_summary(Date *start_date,
                                        Date *end_date) {
        DataRange       *ret_val;
        Data            *data;
@@ -196,7 +207,7 @@ DataRange *W1DataList::get_avg_day_data(Date *start_date,
        ret_val = NULL;
        date    = start_date->clone();
        while(date->before(*end_date)) {
-               data    = get_avg_day_data(date);
+               data    = get_daily_summary(date);
                if (ret_val == NULL) {
                        ret_val = new DataRange(*data);
                }
@@ -221,23 +232,23 @@ DataRange *W1DataList::get_data(Date *start_date,
        int_type        = get_interval_type(start_date, end_date);
        switch(int_type) {
                case 0:
-                       log_debug("get avg year data\n");
+                       log_debug("get yearly summary\n");
                        break;
                case 1:
-                       log_debug("get avg month data\n");
+                       log_debug("get monthly summary\n");
                        break;
                case 2:
-                       log_debug("get avg day data\n");
-                       ret_val = get_avg_day_data(start_date, end_date);
+                       log_debug("get daily summary\n");
+                       ret_val = get_daily_summary(start_date, end_date);
                        break;
                case 3:
-                       log_debug("get avg hour data\n");
+                       log_debug("get hourly summary\n");
                        break;
                case 4:
-                       log_debug("get avg min data\n");
+                       log_debug("get minute summary data\n");
                        break;
                case 5:
-                       log_debug("get avg sec data\n");
+                       log_debug("get second summary data\n");
                        break;
        }
        return ret_val;