4 * Created on: Mar 3, 2011
11 #include <plp/retval.h>
13 #include <plp/Data.hh>
14 #include <plp/Device.hh>
15 #include <plp/SensorDevice.hh>
16 #include <plp/DeviceConfig.hh>
18 #include "DeviceManagerServer.hh"
19 #include "../src/plp/devicebus/DeviceBusMessageId.hh"
21 using namespace plpdevicebus;
23 static void *device_data_reader_thread(void *thread_args_pointer) {
24 list<Device *> *_dev_lst;
25 list<Device *>::iterator list_iter;
29 _dev_lst = (list<Device *> *)thread_args_pointer;
31 for (list_iter = _dev_lst->begin(); list_iter != _dev_lst->end(); list_iter++) {
32 device = (Device *)*list_iter;
33 sensor = dynamic_cast<SensorDevice *>(device);
43 DeviceManagerServer::DeviceManagerServer(list<Device *> dev_lst_param) {
44 //DeviceConfig::set_base_dir_name(storage_dir_param);
45 //_dev_lst = Factory::get_device_list();
46 _dev_lst = dev_lst_param;
47 log_info("device count: %lu\n", _dev_lst.size());
49 pthread_create(&_lstnr_thrd,
51 device_data_reader_thread,
55 DeviceManagerServer::~DeviceManagerServer() {
58 void DeviceManagerServer::get_device_list(const BusMessage *ret_val) {
60 list<Device *>::iterator list_iter;
67 ((BusMessage *)ret_val)->add_int_parameter(RSP__DEVICE_LIST__DEVICE_COUNT, _dev_lst.size());
68 for (list_iter = _dev_lst.begin(); list_iter != _dev_lst.end(); list_iter++) {
69 device = (Device *)*list_iter;
72 key << RSP__DEVICE_LIST__ID << indx;
73 ((BusMessage *)ret_val)->add_string_parameter(key.str(), device->get_id());
76 key << RSP__DEVICE_LIST__NAME << indx;
77 ((BusMessage *)ret_val)->add_string_parameter(key.str(), device->get_name());
80 key << RSP__DEVICE_LIST__TYPE << indx;
81 ((BusMessage *)ret_val)->add_string_parameter(key.str(), device->get_type());
84 key << RSP__DEVICE_LIST__LF_STATE << indx;
85 ((BusMessage *)ret_val)->add_int_parameter(key.str(), device->get_lifecycle_state());
86 sensor = dynamic_cast<SensorDevice *>(device);
89 key << RSP__DEVICE_LIST__DATA << indx;
90 data = sensor->get_data();
92 log_debug("returning data: %s\n", data->to_string().c_str());
93 ((BusMessage *)ret_val)->add_string_parameter(key.str(), data->to_string());
101 const Device *DeviceManagerServer::get_device_by_id(string id_param) {
104 list<Device *>::iterator list_iter;
107 for(list_iter = _dev_lst.begin(); list_iter != _dev_lst.end(); list_iter++) {
108 device = (Device *)*list_iter;
109 if (device != NULL) {
110 if (device->get_id().compare(id_param) == 0) {
119 static void add_data_values_to_bus_message(const BusMessage *msg_rsp_param, Data *data, string key_name_base_param) {
125 cnt = data->get_value_count();
126 for (ii = 0; ii < cnt; ii++) {
128 key << key_name_base_param.c_str() << ii;
130 ((BusMessage *)msg_rsp_param)->add_double_parameter(key.str(), val);
134 void DeviceManagerServer::get_latest_data(BusMessage *msg_req_param, const BusMessage *ret_val) {
138 SensorDevice *sensor;
142 const DataReader *reader;
145 id = msg_req_param->get_string_parameter(REQ__GET_LATEST_DATA__ID, &err_flg);
146 if (err_flg == PLP_OK) {
147 dev = (Device *)get_device_by_id(id);
149 sensor = dynamic_cast<SensorDevice *>(dev);
150 if (sensor != NULL) {
151 reader = sensor->get_device_data();
152 data = ((DataReader *)reader)->get_latest_data();
154 cnt = data->get_value_count();
155 ((BusMessage *)ret_val)->add_int_parameter(RSP__GET_LATEST_DATA__VALUE_COUNT, cnt);
156 ((BusMessage *)ret_val)->add_string_parameter(RSP__GET_LATEST_DATA__DATE, data->get_date().to_string());
157 add_data_values_to_bus_message(ret_val, data, RSP__GET_LATEST_DATA__VALUE);
158 ((BusMessage *)ret_val)->printout();
159 dr = ((DataReader *)reader)->get_daily_summary(MIN);
161 if (dr->get_count() > 0) {
162 data = dr->get_first()->clone();;
163 add_data_values_to_bus_message(ret_val, data, RSP__GET_LATEST_DATA__MIN_VALUE);
167 dr = ((DataReader *)reader)->get_daily_summary(MAX);
169 if (dr->get_count() > 0) {
170 data = dr->get_first()->clone();
171 add_data_values_to_bus_message(ret_val, data, RSP__GET_LATEST_DATA__MAX_VALUE);