diff options
Diffstat (limited to 'src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands')
4 files changed, 94 insertions, 51 deletions
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc index 817223a369..ca96b1cf97 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc @@ -131,6 +131,7 @@ void RCOnRemoteControlSettingsNotification::Run() { hmi_apis::Common_RCAccessMode::eType access_mode = hmi_apis::Common_RCAccessMode::INVALID_ENUM; LOG4CXX_DEBUG(logger_, "Allowing RC Functionality"); + resource_allocation_manager_.set_rc_enabled(true); if ((*message_)[app_mngr::strings::msg_params].keyExists( message_params::kAccessMode)) { access_mode = static_cast<hmi_apis::Common_RCAccessMode::eType>( @@ -150,6 +151,7 @@ void RCOnRemoteControlSettingsNotification::Run() { LOG4CXX_DEBUG(logger_, "Disallowing RC Functionality"); DisallowRCFunctionality(); resource_allocation_manager_.ResetAllAllocations(); + resource_allocation_manager_.set_rc_enabled(false); } } diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc index 38f94637c2..06c44d2ff3 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc @@ -63,18 +63,20 @@ bool CheckIfModuleTypeExistInCapabilities( const smart_objects::SmartObject& rc_capabilities, const std::string& module_type) { LOG4CXX_AUTO_TRACE(logger_); - if (enums_value::kRadio == module_type && - !rc_capabilities.keyExists(strings::kradioControlCapabilities)) { - LOG4CXX_DEBUG(logger_, " Radio control capabilities not present"); - return false; - } - if (enums_value::kClimate == module_type && - !rc_capabilities.keyExists(strings::kclimateControlCapabilities)) { - LOG4CXX_DEBUG(logger_, " Climate control capabilities not present"); - return false; + const std::map<std::string, std::string> params = { + {enums_value::kRadio, strings::kradioControlCapabilities}, + {enums_value::kClimate, strings::kclimateControlCapabilities}, + {enums_value::kSeat, strings::kseatControlCapabilities}}; + bool is_module_type_valid = false; + for (const auto& param : params) { + if (param.first == module_type) { + if (rc_capabilities.keyExists(param.second)) { + is_module_type_valid = true; + break; + } + } } - - return true; + return is_module_type_valid; } void GetInteriorVehicleDataRequest::Execute() { diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc index 160915f347..83bb526076 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc @@ -32,6 +32,7 @@ #include "rc_rpc_plugin/commands/mobile/set_interior_vehicle_data_request.h" #include "rc_rpc_plugin/rc_module_constants.h" +#include "rc_rpc_plugin/rc_rpc_plugin.h" #include "smart_objects/enum_schema_item.h" #include "utils/macro.h" #include "json/json.h" @@ -60,6 +61,14 @@ std::vector<std::string> GetModuleReadOnlyParams( return module_ro_params; } +const std::map<std::string, std::string> GetModuleTypeToDataMapping() { + std::map<std::string, std::string> mapping = { + {enums_value::kRadio, message_params::kRadioControlData}, + {enums_value::kClimate, message_params::kClimateControlData}, + {enums_value::kSeat, message_params::kSeatControlData}}; + return mapping; +} + const std::map<std::string, std::string> GetModuleDataToCapabilitiesMapping() { std::map<std::string, std::string> mapping; // climate @@ -86,6 +95,25 @@ const std::map<std::string, std::string> GetModuleDataToCapabilitiesMapping() { mapping["radioEnable"] = "radioEnableAvailable"; mapping["state"] = "stateAvailable"; + // seat + mapping["heatingEnabled"] = "heatingEnabledAvailable"; + mapping["coolingEnabled"] = "coolingEnabledAvailable"; + mapping["heatingLevel"] = "heatingLevelAvailable"; + mapping["coolingLevel"] = "coolingLevelAvailable"; + mapping["horizontalPosition"] = "horizontalPositionAvailable"; + mapping["verticalPosition"] = "verticalPositionAvailable"; + mapping["frontVerticalPosition"] = "frontVerticalPositionAvailable"; + mapping["backVerticalPosition"] = "backVerticalPositionAvailable"; + mapping["backTiltAngle"] = "backTiltAngleAvailable"; + mapping["headSupportHorizontalPosition"] = + "headSupportHorizontalPositionAvailable"; + mapping["headSupportVerticalPosition"] = + "headSupportVerticalPositionAvailable"; + mapping["massageEnabled"] = "massageEnabledAvailable"; + mapping["massageMode"] = "massageModeAvailable"; + mapping["massageCushionFirmness"] = "massageCushionFirmnessAvailable"; + mapping["memory"] = "memoryAvailable"; + return mapping; } } // namespace @@ -113,12 +141,14 @@ bool CheckControlDataByCapabilities( const smart_objects::SmartObject& control_data) { std::map<std::string, std::string> mapping = GetModuleDataToCapabilitiesMapping(); - + const smart_objects::SmartObject& capabilities_status = module_caps[0]; auto it = control_data.map_begin(); for (; it != control_data.map_end(); ++it) { const std::string& request_parameter = it->first; + if (message_params::kId == request_parameter) { + continue; + } const std::string& caps_key = mapping[request_parameter]; - const smart_objects::SmartObject& capabilities_status = module_caps[0]; LOG4CXX_DEBUG(logger_, "Checking request parameter " << request_parameter @@ -145,30 +175,39 @@ bool CheckIfModuleDataExistInCapabilities( const smart_objects::SmartObject& rc_capabilities, const smart_objects::SmartObject& module_data) { LOG4CXX_AUTO_TRACE(logger_); - bool is_radio_data_valid = true; - bool is_climate_data_valid = true; - if (module_data.keyExists(message_params::kRadioControlData)) { - if (!rc_capabilities.keyExists(strings::kradioControlCapabilities)) { - LOG4CXX_DEBUG(logger_, " Radio control capabilities not present"); - return false; + const std::map<std::string, std::string> params = { + {message_params::kRadioControlData, strings::kradioControlCapabilities}, + {message_params::kClimateControlData, + strings::kclimateControlCapabilities}, + {message_params::kSeatControlData, strings::kseatControlCapabilities}}; + bool is_module_data_valid = false; + for (const auto& param : params) { + if (module_data.keyExists(param.first)) { + if (!rc_capabilities.keyExists(param.second)) { + LOG4CXX_DEBUG(logger_, param.first << " capabilities not present"); + return false; + } + const smart_objects::SmartObject& caps = rc_capabilities[param.second]; + is_module_data_valid = + CheckControlDataByCapabilities(caps, module_data[param.first]); } - const smart_objects::SmartObject& radio_caps = - rc_capabilities[strings::kradioControlCapabilities]; - is_radio_data_valid = CheckControlDataByCapabilities( - radio_caps, module_data[strings::kRadioControlData]); } - if (module_data.keyExists(message_params::kClimateControlData)) { - if (!rc_capabilities.keyExists(strings::kclimateControlCapabilities)) { - LOG4CXX_DEBUG(logger_, " Climate control capabilities not present"); - return false; + return is_module_data_valid; +} + +bool isModuleTypeAndDataMatch(const std::string& module_type, + const smart_objects::SmartObject& module_data) { + LOG4CXX_AUTO_TRACE(logger_); + std::map<std::string, std::string> data_mapping = + GetModuleTypeToDataMapping(); + bool module_type_and_data_match = false; + for (const auto& data : data_mapping) { + if (data.first == module_type) { + module_type_and_data_match = module_data.keyExists(data.second); + break; } - const smart_objects::SmartObject& climate_caps = - rc_capabilities[strings::kclimateControlCapabilities]; - is_climate_data_valid = CheckControlDataByCapabilities( - climate_caps, module_data[strings::kClimateControlData]); } - - return is_radio_data_valid && is_climate_data_valid; + return module_type_and_data_match; } void SetInteriorVehicleDataRequest::Execute() { @@ -177,19 +216,8 @@ void SetInteriorVehicleDataRequest::Execute() { smart_objects::SmartObject& module_data = (*message_)[app_mngr::strings::msg_params][message_params::kModuleData]; const std::string module_type = ModuleType(); - bool module_type_and_data_match = true; - - if (enums_value::kRadio == module_type) { - module_type_and_data_match = - !(module_data.keyExists(message_params::kClimateControlData)); - } - if (enums_value::kClimate == module_type) { - module_type_and_data_match = - !(module_data.keyExists(message_params::kRadioControlData)); - } - - if (module_type_and_data_match) { + if (isModuleTypeAndDataMatch(module_type, module_data)) { const smart_objects::SmartObject* rc_capabilities = hmi_capabilities_.rc_capability(); if (rc_capabilities && @@ -265,13 +293,16 @@ void SetInteriorVehicleDataRequest::on_event( const smart_objects::SmartObject& SetInteriorVehicleDataRequest::ControlData( const smart_objects::SmartObject& module_data) { - const std::string module = ModuleType(); - - if (enums_value::kRadio == module) { - return module_data[message_params::kRadioControlData]; - } else { - return module_data[message_params::kClimateControlData]; + const std::string module_type = ModuleType(); + std::map<std::string, std::string> data_mapping = + GetModuleTypeToDataMapping(); + for (const auto& data : data_mapping) { + if (data.first == module_type) { + return module_data[data.second]; + } } + NOTREACHED(); + return module_data[0]; } bool SetInteriorVehicleDataRequest::AreAllParamsReadOnly( diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc index 4f968dd2d8..524e4db7fa 100644 --- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc +++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc @@ -140,6 +140,14 @@ void RCCommandRequest::Run() { SendResponse(false, mobile_apis::Result::DISALLOWED, ""); return; } + if (!resource_allocation_manager_.is_rc_enabled()) { + LOG4CXX_WARN(logger_, "Remote control is disabled by user"); + SetResourceState(ModuleType(), ResourceState::FREE); + SendResponse(false, + mobile_apis::Result::USER_DISALLOWED, + "Remote control is disabled by user"); + return; + } if (CheckDriverConsent()) { if (AcquireResources()) { |