summaryrefslogtreecommitdiff
path: root/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/application_manager/src/resumption/resumption_data_processor_impl.cc')
-rw-r--r--src/components/application_manager/src/resumption/resumption_data_processor_impl.cc119
1 files changed, 114 insertions, 5 deletions
diff --git a/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc b/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc
index d1635eb557..c067167041 100644
--- a/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc
+++ b/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc
@@ -33,6 +33,7 @@
#include "application_manager/event_engine/event_observer.h"
#include "application_manager/message_helper.h"
#include "application_manager/resumption/resumption_data_processor_impl.h"
+#include "application_manager/rpc_plugins/rc_rpc_plugin/include/rc_rpc_plugin/rc_module_constants.h"
#include "application_manager/smart_object_keys.h"
namespace resumption {
@@ -45,8 +46,17 @@ using app_mngr::MessageHelper;
namespace strings = app_mngr::strings;
namespace event_engine = app_mngr::event_engine;
namespace commands = app_mngr::commands;
+namespace message_params = rc_rpc_plugin::message_params;
SDL_CREATE_LOG_VARIABLE("Resumption")
+std::map<hmi_apis::Common_ModuleType::eType, std::string>
+ module_types_str_mapping{
+ {hmi_apis::Common_ModuleType::eType::CLIMATE, {"CLIMATE"}},
+ {hmi_apis::Common_ModuleType::eType::RADIO, {"RADIO"}},
+ {hmi_apis::Common_ModuleType::eType::SEAT, {"SEAT"}},
+ {hmi_apis::Common_ModuleType::eType::AUDIO, {"AUDIO"}},
+ {hmi_apis::Common_ModuleType::eType::LIGHT, {"LIGHT"}},
+ {hmi_apis::Common_ModuleType::eType::HMI_SETTINGS, {"HMI_SETTINGS"}}};
bool ResumptionRequestID::operator<(const ResumptionRequestID& other) const {
return correlation_id < other.correlation_id ||
@@ -251,6 +261,11 @@ void ResumptionDataProcessorImpl::ProcessResumptionStatus(
found_request.request_id.function_id) {
CheckCreateWindowResponse(found_request.message, response);
}
+
+ if (hmi_apis::FunctionID::RC_GetInteriorVehicleData ==
+ found_request.request_id.function_id) {
+ CheckModuleDataSubscription(found_request.message, response, status);
+ }
}
bool ResumptionDataProcessorImpl::IsResumptionFinished(
@@ -297,7 +312,8 @@ bool ResumptionDataProcessorImpl::IsResumptionSuccessful(
const ApplicationResumptionStatus& status = it->second;
return status.error_requests.empty() &&
- status.unsuccessful_vehicle_data_subscriptions_.empty();
+ status.unsuccessful_vehicle_data_subscriptions_.empty() &&
+ status.unsuccessful_module_subscriptions_.empty();
}
void ResumptionDataProcessorImpl::EraseAppResumptionData(
@@ -988,15 +1004,44 @@ void ResumptionDataProcessorImpl::DeletePluginsSubscriptions(
}
const ApplicationResumptionStatus& status = it->second;
- smart_objects::SmartObject extension_subscriptions;
+ smart_objects::SmartObject extension_vd_subscriptions;
for (auto ivi : status.successful_vehicle_data_subscriptions_) {
SDL_LOG_DEBUG("ivi " << ivi << " should be deleted");
- extension_subscriptions[ivi] = true;
+ extension_vd_subscriptions[ivi] = true;
+ }
+
+ smart_objects::SmartObject extension_modules_subscriptions(
+ smart_objects::SmartType_Map);
+
+ if (!status.successful_module_subscriptions_.empty()) {
+ extension_modules_subscriptions[message_params::kModuleData] =
+ new smart_objects::SmartObject(smart_objects::SmartType_Array);
+
+ auto& module_data_so =
+ extension_modules_subscriptions[message_params::kModuleData];
+
+ uint32_t index = 0;
+ for (const auto& module : status.successful_module_subscriptions_) {
+ module_data_so[index] =
+ new smart_objects::SmartObject(smart_objects::SmartType_Map);
+ module_data_so[index][message_params::kModuleType] = module.first;
+ module_data_so[index][message_params::kModuleId] = module.second;
+ index++;
+ }
}
+
+ smart_objects::SmartObject resumption_data_to_revert(
+ smart_objects::SmartType_Map);
+ resumption_data_to_revert[application_manager::hmi_interface::vehicle_info] =
+ extension_vd_subscriptions;
+ resumption_data_to_revert[application_manager::hmi_interface::rc] =
+ extension_modules_subscriptions;
+
resumption_status_lock_.Release();
- for (auto& extension : application->Extensions()) {
- extension->RevertResumption(extension_subscriptions);
+ auto extensions = application->Extensions();
+ for (auto& extension : extensions) {
+ extension->RevertResumption(resumption_data_to_revert);
}
}
@@ -1039,6 +1084,70 @@ void ResumptionDataProcessorImpl::CheckVehicleDataResponse(
}
}
+void ResumptionDataProcessorImpl::CheckModuleDataSubscription(
+ const ns_smart_device_link::ns_smart_objects::SmartObject& request,
+ const ns_smart_device_link::ns_smart_objects::SmartObject& response,
+ ApplicationResumptionStatus& status) {
+ SDL_LOG_AUTO_TRACE();
+
+ const auto& msg_params_so = request[strings::msg_params];
+ const auto requested_module_type =
+ msg_params_so[message_params::kModuleType].asString();
+ const auto requested_module_id =
+ msg_params_so[message_params::kModuleId].asString();
+ const ModuleUid requested_module{requested_module_type, requested_module_id};
+
+ if (!IsResponseSuccessful(response)) {
+ SDL_LOG_TRACE("Module data subscription request NOT successful");
+ status.unsuccessful_module_subscriptions_.push_back(requested_module);
+ return;
+ }
+
+ const auto& response_module_data_so =
+ response[strings::msg_params][message_params::kModuleData];
+
+ if (0 == response_module_data_so.length()) {
+ SDL_LOG_TRACE("Module data subscription request not successful");
+ status.unsuccessful_module_subscriptions_.push_back(requested_module);
+ return;
+ }
+
+ const auto responsed_module_type_int =
+ static_cast<hmi_apis::Common_ModuleType::eType>(
+ response_module_data_so[message_params::kModuleType].asUInt());
+
+ const auto responsed_module_type_str =
+ module_types_str_mapping[responsed_module_type_int];
+
+ const auto response_module_id =
+ response_module_data_so[message_params::kModuleId].asString();
+ const ModuleUid responsed_module{responsed_module_type_str,
+ response_module_id};
+
+ bool is_subscribe_success = false;
+ if (response[application_manager::strings::msg_params].keyExists(
+ rc_rpc_plugin::message_params::kIsSubscribed)) {
+ is_subscribe_success =
+ response[application_manager::strings::msg_params]
+ [rc_rpc_plugin::message_params::kIsSubscribed]
+ .asBool();
+ }
+
+ const bool is_the_same_module = requested_module == responsed_module;
+
+ if (is_the_same_module && is_subscribe_success) {
+ SDL_LOG_TRACE("Module [" << requested_module.first << ":"
+ << requested_module.second
+ << "] was successfuly subscribed");
+ status.successful_module_subscriptions_.push_back(requested_module);
+ } else {
+ SDL_LOG_TRACE("Module [" << requested_module.first << ":"
+ << requested_module.second
+ << "] was NOT successfuly subscribed");
+ status.unsuccessful_module_subscriptions_.push_back(requested_module);
+ }
+}
+
void ResumptionDataProcessorImpl::CheckCreateWindowResponse(
const smart_objects::SmartObject& request,
const smart_objects::SmartObject& response) const {