]> pilppa.org Git - libplpdevicebus.git/blobdiff - src_server/DeviceManagerServer.cc
do not ship src/Makefile.in
[libplpdevicebus.git] / src_server / DeviceManagerServer.cc
index 3eb8a0106526a191691584934f7c2f11ad78f89c..53e9c0f6bbae60f609784dd0657a57fa134d6639 100644 (file)
@@ -6,6 +6,7 @@
  */
 #include <sstream>
 #include <typeinfo>
+#include <unistd.h>
 
 #include <plp/log.h>
 #include <plp/retval.h>
@@ -52,7 +53,7 @@ DeviceManagerServer::DeviceManagerServer(list<Device *> dev_lst_param) {
        //_dev_lst      = Factory::get_device_list();
        _dev_lst        = dev_lst_param;
        /* In some toolchains the size is not unsigned int instead of long
-           unsigned int, and that can cause warnings/errors without typecasting 
+           unsigned int, and that can cause warnings/errors without typecasting
          */
        log_info("device count: %lu\n", (long unsigned int)_dev_lst.size());
        _lstnr_thrd     = 0;
@@ -148,7 +149,7 @@ static void add_data_values_to_bus_message(const BusMessage *msg_rsp_param,
        ((BusMessage *)msg_rsp_param)->add_string_parameter(key_name_base_param, val_str);
 }
 
-void decode_data_to_busmessage(const BusMessage *ret_val,
+void decode_latest_data_to_busmessage(const BusMessage *ret_val,
                        const DataReader *reader) {
        DataRange       *dr;
        Data            *data;
@@ -157,7 +158,7 @@ void decode_data_to_busmessage(const BusMessage *ret_val,
        if (data != NULL) {
                add_data_values_to_bus_message(ret_val,
                                        data,
-                                       RSP__GET_LATEST_DATA__VALUE);
+                                       RSP__LATEST_DATA_VALUE);
                //((BusMessage *)ret_val)->printout();
                delete(data);
        }
@@ -167,7 +168,7 @@ void decode_data_to_busmessage(const BusMessage *ret_val,
                        data    = dr->get_first();;
                        add_data_values_to_bus_message(ret_val,
                                        data,
-                                       RSP__GET_LATEST_DATA__MIN_VALUE);
+                                       RSP__MIN_DATA_VALUE);
                        delete(data);
                }
                delete(dr);
@@ -178,13 +179,57 @@ void decode_data_to_busmessage(const BusMessage *ret_val,
                        data    = dr->get_first();
                        add_data_values_to_bus_message(ret_val,
                                                data,
-                                               RSP__GET_LATEST_DATA__MAX_VALUE);
+                                               RSP__MAX_DATA_VALUE);
                        delete(data);
                }
                delete(dr);
        }
 }
 
+void decode_first_and_last_data_to_busmessage(const BusMessage *ret_val,
+                                               DataRange *dr) {
+       Data    *data;
+
+       data    = dr->get_first();
+       if (data != NULL) {
+               add_data_values_to_bus_message(ret_val,
+                                       data,
+                                       RSP__FIRST_DATA_VALUE);
+               //((BusMessage *)ret_val)->printout();
+               delete(data);
+       }
+       data    = dr->get_last();
+       if (data != NULL) {
+               add_data_values_to_bus_message(ret_val,
+                                       data,
+                                       RSP__LATEST_DATA_VALUE);
+               //((BusMessage *)ret_val)->printout();
+               delete(data);
+       }
+}
+
+void decode_data_range_to_busmessage(const BusMessage *ret_val,
+                               DataRange *dr) {
+       Data            *data;
+       int             ii;
+       int             count;
+       ostringstream   key;
+
+       count   = dr->get_count();
+       ((BusMessage *)ret_val)->add_int_parameter(RSP__COUNT, count);
+       for (ii = 0; ii < count; ii++) {
+               data    = dr->get(ii);
+               if (data != NULL) {
+                       key.str("");
+                       key << RSP__DATA_VALUE << ii;
+                       add_data_values_to_bus_message(ret_val,
+                                               data,
+                                               key.str());
+                       delete(data);
+               }
+       }
+}
+
 void DeviceManagerServer::get_latest_data(BusMessage *msg_req_param,
                                        const BusMessage *ret_val) {
        string                  id;
@@ -194,15 +239,90 @@ void DeviceManagerServer::get_latest_data(BusMessage *msg_req_param,
        ostringstream           key;
        const DataReader        *reader;
 
-       id      = msg_req_param->get_string_parameter(REQ__GET_LATEST_DATA__ID, &err_flg);
+       id      = msg_req_param->get_string_parameter(REQ__DEVICE_ID, &err_flg);
        if (err_flg == PLP_OK) {
                dev     = (Device *)get_device_by_id(id);
                if (dev != NULL) {
                        sensor  = dynamic_cast<SensorDevice *>(dev);
                        if (sensor != NULL) {
-                               reader  = sensor->get_device_data();
-                               decode_data_to_busmessage(ret_val, reader);
+                               reader  = sensor->get_datareader();
+                               decode_latest_data_to_busmessage(ret_val, reader);
                        }
                }
        }
 }
+
+void DeviceManagerServer::get_data_range(BusMessage *msg_req_param,
+                                       const BusMessage *ret_val) {
+       string                  id;
+       int                     err_flg;
+       Device                  *dev;
+       SensorDevice            *sensor;
+       ostringstream           key;
+       const DataReader        *reader;
+       DataRange               *dr;
+
+       id      = msg_req_param->get_string_parameter(REQ__DEVICE_ID, &err_flg);
+       if (err_flg == PLP_OK) {
+               dev     = (Device *)get_device_by_id(id);
+               if (dev != NULL) {
+                       sensor  = dynamic_cast<SensorDevice *>(dev);
+                       if (sensor != NULL) {
+                               reader  = sensor->get_datareader();
+                               if (reader != NULL) {
+                                       dr      = ((DataReader *)reader)->get_data_range();
+                                       if (dr != NULL) {
+                                               decode_first_and_last_data_to_busmessage(ret_val, dr);
+                                               delete(dr);
+                                       }
+                               }
+                       }
+               }
+       }
+}
+
+void DeviceManagerServer::get_data_between_dates(BusMessage *msg_req_param,
+                                       const BusMessage *ret_val) {
+       string                  id;
+       int                     err_flg;
+       Device                  *dev;
+       SensorDevice            *sensor;
+       ostringstream           key;
+       const DataReader        *reader;
+       DataRange               *dr;
+       string                  startdate_str;
+       string                  enddate_str;
+       Date                    sdate;
+       Date                    edate;
+
+       log_debug("started\n");
+       id              = msg_req_param->get_string_parameter(REQ__DEVICE_ID, &err_flg);
+       if (err_flg == PLP_OK)
+               startdate_str   = msg_req_param->get_string_parameter(REQ__DATE1, &err_flg);
+       if (err_flg == PLP_OK)
+               enddate_str     = msg_req_param->get_string_parameter(REQ__DATE2, &err_flg);
+       log_debug("id: %s, sdate: %s, edate: %s\n", id.c_str(), startdate_str.c_str(), enddate_str.c_str());
+       if (err_flg == PLP_OK) {
+               sdate   = Date::parse_date_str(startdate_str);
+               edate   = Date::parse_date_str(enddate_str);
+               log_debug("id: %s, sdate: %s, edate: %s\n", id.c_str(), startdate_str.c_str(), enddate_str.c_str());
+               dev     = (Device *)get_device_by_id(id);
+               if (dev != NULL) {
+                       sensor  = dynamic_cast<SensorDevice *>(dev);
+                       if (sensor != NULL) {
+                               reader  = sensor->get_datareader();
+                               if (reader != NULL) {
+                                       dr      = ((DataReader *)reader)->get_data(&sdate, &edate);
+                                       log_debug("dr.size: %d\n", dr->get_count());
+                                       if (dr != NULL) {
+                                               decode_data_range_to_busmessage(ret_val, dr);
+                                               delete(dr);
+                                       }
+                               }
+                       }
+               }
+       }
+       else {
+               log_error("Invalid request parameters.\n");
+       }
+}