]> pilppa.org Git - libplpdevicebus.git/blobdiff - src_client/DeviceManagerClient.cc
device list read fixes
[libplpdevicebus.git] / src_client / DeviceManagerClient.cc
index 801e4d0cba6c31cda08006530c184118623e0c93..b318d88176d95789c287d28dcaf85490842c6783 100644 (file)
@@ -61,19 +61,62 @@ const std::list<plp::Device *> *DeviceManagerClient::get_device_list(BusClient *
        return _device_list;
 }
 
-BusMessage *DeviceManagerClient::get_latest_data(BusClient *client_param, string device_id_param) {
+DataRange *DeviceManagerClient::parse_device_data_msg(BusMessage *msg_param,
+                                               int *err_flg) {
+       Data            *data;
+       string          data_str;
+       DataRange       *ret_val;
+
+       *err_flg        = PLP_ERR;
+       ret_val         = NULL;
+       if (msg_param != NULL) {
+               data_str        = msg_param->get_string_parameter(RSP__GET_LATEST_DATA__VALUE, err_flg);
+               data            = Data::parse_string(data_str);
+               ret_val         = new DataRange(data);
+               log_debug("latest data\n");
+               data->printout();
+
+               data_str        = msg_param->get_string_parameter(RSP__GET_LATEST_DATA__MIN_VALUE, err_flg);
+               data            = Data::parse_string(data_str);
+               ret_val->add(data);
+               log_debug("min data\n");
+               data->printout();
+
+               data_str        = msg_param->get_string_parameter(RSP__GET_LATEST_DATA__MAX_VALUE, err_flg);
+               data            = Data::parse_string(data_str);
+               ret_val->add(data);
+               log_debug("max data\n");
+               data->printout();
+
+               *err_flg        = PLP_OK;
+       }
+       return ret_val;
+}
+
+Data *DeviceManagerClient::get_latest_data(BusClient *client_param,
+                                       string device_id_param,
+                                       int *err_flg) {
        BusMessage      *msg_req;
        BusMessage      *msg_rsp;
+       Data            *ret_val;
+       DataRange       *dr;
 
        msg_rsp = NULL;
+       ret_val = NULL;
        msg_req = new BusMessage(MSG_TYPE_ID__GET_LATEST_DATA);
        msg_req->add_string_parameter(REQ__GET_LATEST_DATA__ID, device_id_param.c_str());
        client_param->send_message_and_wait_response(msg_req, &msg_rsp);
+       dr      = parse_device_data_msg(msg_rsp, err_flg);
+       ret_val = dr->get_first()->clone();
+       delete(dr);
        delete(msg_req);
-       return msg_rsp;
+       delete(msg_rsp);
+
+       return ret_val;
 }
 
-list<Device *> *DeviceManagerClient::parse_device_list_msg(BusMessage *msg_param, int *err_flg) {
+list<Device *> *DeviceManagerClient::parse_device_list_msg(BusMessage *msg_param,
+                                                       int *err_flg) {
        int                             ii;
        long                            count;
        ostringstream                   key;
@@ -95,40 +138,51 @@ list<Device *> *DeviceManagerClient::parse_device_list_msg(BusMessage *msg_param
                        key.str("");
                        key << RSP__DEVICE_LIST__ID << ii;
                        id      = msg_param->get_string_parameter(key.str(), err_flg);
-                       if (*err_flg != PLP_OK)
+                       if (*err_flg != PLP_OK) {
+                               log_error("Failed to parse device id.\n");
                                break;
+                       }
 
                        key.str("");
                        key << RSP__DEVICE_LIST__NAME << ii;
                        name    = msg_param->get_string_parameter(key.str(), err_flg);
-                       if (*err_flg != PLP_OK)
+                       if (*err_flg != PLP_OK) {
+                               log_error("Failed to parse name for the device: %s\n", id.c_str());
                                break;
+                       }
 
                        key.str("");
                        key << RSP__DEVICE_LIST__TYPE << ii;
                        type    = msg_param->get_string_parameter(key.str(), err_flg);
-                       if (*err_flg != PLP_OK)
+                       if (*err_flg != PLP_OK) {
+                               log_error("Failed to parse type for the device: %s\n", id.c_str());
                                break;
+                       }
 
                        key.str("");
                        key << RSP__DEVICE_LIST__LF_STATE << ii;
                        state_i = msg_param->get_int_parameter(key.str(), err_flg);
-                       if (*err_flg != PLP_OK)
+                       if (*err_flg != PLP_OK) {
+                               log_error("Failed to parse life cycle state for the device: %s\n", id.c_str());
                                break;
+                       }
                        state   = (EnumDeviceLifeCycleStatus)state_i;
 
                        key.str("");
                        key << RSP__DEVICE_LIST__DATA << ii;
                        datastr = msg_param->get_string_parameter(key.str(), err_flg);
-                       if (*err_flg != PLP_OK)
-                               break;
-
-                       data    = Data::parse_string(datastr);
-                       if (data == NULL) {
-                               *err_flg = PLP_ERR;
-                               break;
+                       if (*err_flg == PLP_OK) {
+                               data    = Data::parse_string(datastr);
+                               if (data == NULL) {
+                                       log_error("Failed to parse data items for the device: %s\n", id.c_str());
+                                       *err_flg = PLP_ERR;
+                                       break;
+                               }
+                       }
+                       else {
+                               log_error("No data available for the device: %s\n", id.c_str());
+                               data    = new Data(0);
                        }
-
                        dev     = new DeviceData(id, type, name, state, data);
                        ret_val->push_back(dev);
                }