2 * DeviceManagerClient.cc
4 * Created on: Mar 4, 2011
11 #include <plp/retval.h>
13 #include <plp/Data.hh>
14 #include <plp/DeviceData.hh>
16 #include "DeviceManagerClient.hh"
17 #include "../src/plp/devicebus/DeviceBusMessageId.hh"
21 using namespace plpbus;
22 using namespace plpdevicebus;
24 DeviceManagerClient::DeviceManagerClient() {
28 static void clean_device_list(list<Device *> *dev_lst) {
31 if (dev_lst != NULL) {
32 while (dev_lst->empty() == false) {
33 dev = dev_lst->back();
42 DeviceManagerClient::~DeviceManagerClient() {
43 clean_device_list(_device_list);
46 list<Device *> *DeviceManagerClient::parse_device_list_msg(BusMessage *msg_param,
55 EnumDeviceLifeCycleStatus state;
59 list<Device *> *ret_val;
61 ret_val = new list<Device *>;
62 count = msg_param->get_long_parameter(RSP__DEVICE_LIST__DEVICE_COUNT, err_flg);
63 log_debug("device count: %ld\n", count);
64 if (*err_flg == PLP_OK) {
65 for (ii = 0; ii < count; ii++) {
69 key << RSP__DEVICE_LIST__ID << ii;
70 id = msg_param->get_string_parameter(key.str(), err_flg);
71 if (*err_flg != PLP_OK) {
72 log_error("Failed to parse device id.\n");
77 key << RSP__DEVICE_LIST__NAME << ii;
78 name = msg_param->get_string_parameter(key.str(), err_flg);
79 if (*err_flg != PLP_OK) {
80 log_error("Failed to parse name for the device: %s\n", id.c_str());
85 key << RSP__DEVICE_LIST__TYPE << ii;
86 type = msg_param->get_string_parameter(key.str(), err_flg);
87 if (*err_flg != PLP_OK) {
88 log_error("Failed to parse type for the device: %s\n", id.c_str());
93 key << RSP__DEVICE_LIST__LF_STATE << ii;
94 state_i = msg_param->get_int_parameter(key.str(), err_flg);
95 if (*err_flg != PLP_OK) {
96 log_error("Failed to parse life cycle state for the device: %s\n", id.c_str());
99 state = (EnumDeviceLifeCycleStatus)state_i;
102 key << RSP__DEVICE_LIST__DATA << ii;
103 datastr = msg_param->get_string_parameter(key.str(), err_flg);
104 if (*err_flg == PLP_OK) {
105 data = Data::parse_string(datastr);
107 log_error("No data available for the device: %s\n", id.c_str());
111 log_error("No data available for the device: %s\n", id.c_str());
113 dev = new DeviceData(id, type, name, state, data);
114 ret_val->push_back(dev);
120 const std::list<plp::Device *> *DeviceManagerClient::get_device_list(BusClient *client_param,
126 msg_req = new BusMessage(MSG_TYPE_ID__GET_DEVICE_LIST);
127 client_param->send_message_and_wait_response(msg_req, &msg_rsp);
128 clean_device_list(_device_list);
129 _device_list = parse_device_list_msg(msg_rsp, err_flg);
136 void DeviceManagerClient::parse_device_data_msg(BusMessage *msg_param,
140 string description) {
146 if ((msg_param != NULL) &&
148 data_str = msg_param->get_string_parameter(key_str, err_flg);
149 if (data_str.empty() == false) {
150 data = Data::parse_string(data_str);
154 //log_debug("%s\n", description.c_str());
161 DataRange *DeviceManagerClient::parse_device_data_msg(BusMessage *msg_param,
167 if (msg_param != NULL) {
168 ret_val = new DataRange();
169 parse_device_data_msg(msg_param, ret_val, RSP__LATEST_DATA_VALUE, err_flg, "latest data");
170 parse_device_data_msg(msg_param, ret_val, RSP__MIN_DATA_VALUE, err_flg, "latest min data value");
171 parse_device_data_msg(msg_param, ret_val, RSP__MAX_DATA_VALUE, err_flg, "latest max data value");
178 Data *DeviceManagerClient::get_latest_data(BusClient *client_param,
179 string device_id_param,
188 msg_req = new BusMessage(MSG_TYPE_ID__GET_LATEST_DATA);
189 msg_req->add_string_parameter(REQ__DEVICE_ID, device_id_param.c_str());
190 client_param->send_message_and_wait_response(msg_req, &msg_rsp);
191 dr = parse_device_data_msg(msg_rsp, err_flg);
192 ret_val = dr->get_first();
200 DataRange *DeviceManagerClient::parse_first_and_last_data_msg(BusMessage *msg_param,
206 if (msg_param != NULL) {
207 ret_val = new DataRange();
208 parse_device_data_msg(msg_param, ret_val, RSP__FIRST_DATA_VALUE, err_flg, "first data");
209 parse_device_data_msg(msg_param, ret_val, RSP__LATEST_DATA_VALUE, err_flg, "latest data");
215 DataRange *DeviceManagerClient::parse_data_range_msg(BusMessage *msg_param,
228 if (msg_param != NULL) {
229 ret_val = new DataRange();
230 count = msg_param->get_int_parameter(RSP__COUNT, err_flg);
231 //unit = msg_param->get_string_parameter(RSP__DATA_UNIT, err_flg);
232 for (ii = 0; ii < count; ii++) {
234 key << RSP__DATA_VALUE << ii;
236 desc << "value_" << ii;
237 parse_device_data_msg(msg_param,
248 DataRange *DeviceManagerClient::get_data_range(BusClient *client_param,
249 string device_id_param,
257 msg_req = new BusMessage(MSG_TYPE_ID__GET_DATA_RANGE);
258 msg_req->add_string_parameter(REQ__DEVICE_ID, device_id_param);
259 client_param->send_message_and_wait_response(msg_req, &msg_rsp);
260 ret_val = parse_first_and_last_data_msg(msg_rsp, err_flg);
267 DataRange *DeviceManagerClient::get_data(BusClient *client_param,
268 string device_id_param,
278 msg_req = new BusMessage(MSG_TYPE_ID__GET_DATA_BETWEEN_DATES);
279 msg_req->add_string_parameter(REQ__DEVICE_ID, device_id_param);
280 msg_req->add_string_parameter(REQ__DATE1, start_date->to_string());
281 msg_req->add_string_parameter(REQ__DATE2, end_date->to_string());
282 client_param->send_message_and_wait_response(msg_req, &msg_rsp);
283 ret_val = parse_data_range_msg(msg_rsp, err_flg);