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 const std::list<plp::Device *> *DeviceManagerClient::get_device_list(BusClient *client_param,
48 //send_request__get_device_list(client_param);
54 msg_req = new BusMessage(MSG_TYPE_ID__GET_DEVICE_LIST);
55 client_param->send_message_and_wait_response(msg_req, &msg_rsp);
56 clean_device_list(_device_list);
57 _device_list = parse_device_list_msg(msg_rsp, err_flg);
64 void DeviceManagerClient::parse_device_data_msg(BusMessage *msg_param,
74 if ((msg_param != NULL) &&
76 data_str = msg_param->get_string_parameter(RSP__GET_LATEST_DATA__VALUE, err_flg);
77 if (data_str.empty() == false) {
78 data = Data::parse_string(data_str);
84 log_debug("%s\n", description.c_str());
90 DataRange *DeviceManagerClient::parse_device_data_msg(BusMessage *msg_param,
96 if (msg_param != NULL) {
97 ret_val = new DataRange();
98 parse_device_data_msg(msg_param, ret_val, RSP__GET_LATEST_DATA__VALUE, err_flg, "latest data");
99 parse_device_data_msg(msg_param, ret_val, RSP__GET_LATEST_DATA__MIN_VALUE, err_flg, "min data value");
100 parse_device_data_msg(msg_param, ret_val, RSP__GET_LATEST_DATA__MAX_VALUE, err_flg, "max data value");
107 Data *DeviceManagerClient::get_latest_data(BusClient *client_param,
108 string device_id_param,
117 msg_req = new BusMessage(MSG_TYPE_ID__GET_LATEST_DATA);
118 msg_req->add_string_parameter(REQ__GET_LATEST_DATA__ID, device_id_param.c_str());
119 client_param->send_message_and_wait_response(msg_req, &msg_rsp);
120 dr = parse_device_data_msg(msg_rsp, err_flg);
121 ret_val = dr->get_first();
129 list<Device *> *DeviceManagerClient::parse_device_list_msg(BusMessage *msg_param,
138 EnumDeviceLifeCycleStatus state;
142 list<Device *> *ret_val;
144 count = msg_param->get_long_parameter(RSP__DEVICE_LIST__DEVICE_COUNT, err_flg);
145 log_debug("device count: %ld\n", count);
146 ret_val = new list<Device *>;
147 if (*err_flg == PLP_OK) {
148 for (ii = 0; ii < count; ii++) {
150 key << RSP__DEVICE_LIST__ID << ii;
151 id = msg_param->get_string_parameter(key.str(), err_flg);
152 if (*err_flg != PLP_OK) {
153 log_error("Failed to parse device id.\n");
158 key << RSP__DEVICE_LIST__NAME << ii;
159 name = msg_param->get_string_parameter(key.str(), err_flg);
160 if (*err_flg != PLP_OK) {
161 log_error("Failed to parse name for the device: %s\n", id.c_str());
166 key << RSP__DEVICE_LIST__TYPE << ii;
167 type = msg_param->get_string_parameter(key.str(), err_flg);
168 if (*err_flg != PLP_OK) {
169 log_error("Failed to parse type for the device: %s\n", id.c_str());
174 key << RSP__DEVICE_LIST__LF_STATE << ii;
175 state_i = msg_param->get_int_parameter(key.str(), err_flg);
176 if (*err_flg != PLP_OK) {
177 log_error("Failed to parse life cycle state for the device: %s\n", id.c_str());
180 state = (EnumDeviceLifeCycleStatus)state_i;
183 key << RSP__DEVICE_LIST__DATA << ii;
184 datastr = msg_param->get_string_parameter(key.str(), err_flg);
185 if (*err_flg == PLP_OK) {
186 data = Data::parse_string(datastr);
188 log_error("Failed to parse data items for the device: %s\n", id.c_str());
194 log_error("No data available for the device: %s\n", id.c_str());
197 dev = new DeviceData(id, type, name, state, data);
198 ret_val->push_back(dev);