summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndriy Byzhynar <AByzhynar@luxoft.com>2017-07-26 16:29:21 +0300
committerAndriy Byzhynar <AByzhynar@luxoft.com>2017-07-26 17:21:16 +0300
commit6877663729a70e3af2ddfd6c0be4f24575b8ec8c (patch)
tree926072be50a7f27c07ee7fa2833b0f0bde617dc7
parentcb7310c2670c9d073514ee1958bff311bc3c594f (diff)
downloadsdl_core-6877663729a70e3af2ddfd6c0be4f24575b8ec8c.tar.gz
Implement READ_ONLY parameters handling in SetInteriorVehicleData mobile
request Added response to mobile generation when all request module type params are READ ONLY Added cutting-off of READ ONLY params when in request present both READ ONLY and settable parameters
-rw-r--r--src/components/remote_control/include/remote_control/commands/set_interior_vehicle_data_request.h20
-rw-r--r--src/components/remote_control/include/remote_control/rc_module_constants.h7
-rw-r--r--src/components/remote_control/src/commands/set_interior_vehicle_data_request.cc87
3 files changed, 110 insertions, 4 deletions
diff --git a/src/components/remote_control/include/remote_control/commands/set_interior_vehicle_data_request.h b/src/components/remote_control/include/remote_control/commands/set_interior_vehicle_data_request.h
index b02e9fe2c3..9454909cca 100644
--- a/src/components/remote_control/include/remote_control/commands/set_interior_vehicle_data_request.h
+++ b/src/components/remote_control/include/remote_control/commands/set_interior_vehicle_data_request.h
@@ -69,6 +69,26 @@ class SetInteriorVehicleDataRequest : public BaseCommandRequest {
std::string>& event);
/**
+ * @brief Method that check if READ_ONLY parameters present
+ * @param request_params params from received message
+ * @return true if present , false - otherwise
+ */
+ bool AreReadOnlyParamsPresent(const Json::Value& request_params);
+
+ /**
+ * @brief Method that check if all request parameters are READ_ONLY
+ * @param request_params params from received message
+ * @return true if all are read only , false - otherwise
+ */
+ bool AreAllParamsReadOnly(const Json::Value& request_params);
+
+ /**
+ * @brief Method that cuts-off READ_ONLY parameters
+ * @param request_params params to handle
+ */
+ void CutOffReadOnlyParams(Json::Value& request_params);
+
+ /**
* @brief SetInteriorVehicleDataRequest class destructor
*/
virtual ~SetInteriorVehicleDataRequest();
diff --git a/src/components/remote_control/include/remote_control/rc_module_constants.h b/src/components/remote_control/include/remote_control/rc_module_constants.h
index 8c59062e61..457241de8e 100644
--- a/src/components/remote_control/include/remote_control/rc_module_constants.h
+++ b/src/components/remote_control/include/remote_control/rc_module_constants.h
@@ -209,14 +209,16 @@ const char kState[] = "state";
// ClimateControlData struct
const char kFanSpeed[] = "fanSpeed";
-const char kCurrentTemp[] = "currentTemp";
-const char kDesiredTemp[] = "desiredTemp";
+const char kCurrentTemperature[] = "currentTemperature";
+const char kDesiredTemperature[] = "desiredTemperature";
const char kTemperatureUnit[] = "temperatureUnit";
const char kACEnable[] = "acEnable";
const char kCirculateAirEnable[] = "circulateAirEnable";
const char kAutoModeEnable[] = "autoModeEnable";
const char kDefrostZone[] = "defrostZone";
const char kDualModeEnable[] = "dualModeEnable";
+const char kACMaxEnable[] = "acMaxEnable";
+const char kVentilationMode[] = "ventilationMode";
// ClimateControlData struct
// ModuleData struct
@@ -261,7 +263,6 @@ const char kAll[] = "ALL";
// DefrostZone enum
// TemperatureUnit enum
-const char kKelvin[] = "KELVIN";
const char kFahrenheit[] = "FAHRENHEIT";
const char kCelsius[] = "CELSIUS";
// TemperatureUnit enum
diff --git a/src/components/remote_control/src/commands/set_interior_vehicle_data_request.cc b/src/components/remote_control/src/commands/set_interior_vehicle_data_request.cc
index d821f60760..1a91eefba0 100644
--- a/src/components/remote_control/src/commands/set_interior_vehicle_data_request.cc
+++ b/src/components/remote_control/src/commands/set_interior_vehicle_data_request.cc
@@ -36,6 +36,7 @@
#include "remote_control/message_helper.h"
#include "functional_module/function_ids.h"
#include "json/json.h"
+#include "utils/helpers.h"
namespace remote_control {
@@ -44,6 +45,25 @@ namespace commands {
using namespace json_keys;
using namespace message_params;
+namespace {
+std::vector<std::string> GetModuleReadOnlyParams(
+ const std::string& module_type) {
+ std::vector<std::string> module_ro_params;
+ if (enums_value::kClimate == module_type) {
+ module_ro_params.push_back(kCurrentTemperature);
+ } else if (enums_value::kRadio == module_type) {
+ module_ro_params.push_back(kRdsData);
+ module_ro_params.push_back(kAvailableHDs);
+ module_ro_params.push_back(kSignalStrength);
+ module_ro_params.push_back(kSignalChangeThreshold);
+ module_ro_params.push_back(kState);
+ module_ro_params.push_back(kRadioEnable);
+ }
+ return module_ro_params;
+}
+
+} // namespace
+
CREATE_LOGGERPTR_GLOBAL(logger_, "SetInteriorVehicleDataRequest")
SetInteriorVehicleDataRequest::SetInteriorVehicleDataRequest(
@@ -56,7 +76,7 @@ SetInteriorVehicleDataRequest::~SetInteriorVehicleDataRequest() {}
void SetInteriorVehicleDataRequest::Execute() {
LOG4CXX_AUTO_TRACE(logger_);
- const Json::Value request_params =
+ Json::Value request_params =
MessageHelper::StringToValue(message_->json_message());
const Json::Value module_data = request_params[kModuleData];
const std::string module_type = module_data[kModuleType].asString();
@@ -71,6 +91,18 @@ void SetInteriorVehicleDataRequest::Execute() {
}
if (module_type_and_data_match) {
+ if (AreAllParamsReadOnly(request_params)) {
+ LOG4CXX_WARN(logger_, "All request params in module type are READ ONLY!");
+ SendResponse(false,
+ result_codes::kReadOnly,
+ "All request params in module type are READ ONLY!");
+ return;
+ }
+ if (AreReadOnlyParamsPresent(request_params)) {
+ LOG4CXX_DEBUG(logger_, "Request module type has READ ONLY parameters");
+ LOG4CXX_DEBUG(logger_, "Cutting-off READ ONLY parameters... ");
+ CutOffReadOnlyParams(request_params);
+ }
application_manager::MessagePtr hmi_request = CreateHmiRequest(
functional_modules::hmi_api::set_interior_vehicle_data, request_params);
service()->RemoveHMIFakeParameters(hmi_request);
@@ -83,6 +115,58 @@ void SetInteriorVehicleDataRequest::Execute() {
}
}
+bool SetInteriorVehicleDataRequest::AreReadOnlyParamsPresent(
+ const Json::Value& request_params) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ std::vector<std::string> module_type_params = ControlData(request_params);
+ std::vector<std::string>::iterator it = module_type_params.begin();
+ std::vector<std::string> ro_params =
+ GetModuleReadOnlyParams(ModuleType(request_params));
+ for (; it != module_type_params.end(); ++it) {
+ if (helpers::in_range(ro_params, *it)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+void SetInteriorVehicleDataRequest::CutOffReadOnlyParams(
+ Json::Value& request_params) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ std::vector<std::string> module_type_params = ControlData(request_params);
+ std::vector<std::string>::iterator it = module_type_params.begin();
+ const std::string module_type = ModuleType(request_params);
+ std::vector<std::string> ro_params = GetModuleReadOnlyParams(module_type);
+ for (; it != module_type_params.end(); ++it) {
+ if (helpers::in_range(ro_params, *it)) {
+ if (enums_value::kClimate == module_type) {
+ request_params[message_params::kModuleData]
+ [message_params::kClimateControlData].removeMember(*it);
+ LOG4CXX_DEBUG(logger_, "Cutting-off READ ONLY parameter: " << *it);
+ } else if (enums_value::kRadio == module_type) {
+ request_params[message_params::kModuleData]
+ [message_params::kRadioControlData].removeMember(*it);
+ LOG4CXX_DEBUG(logger_, "Cutting-off READ ONLY parameter: " << *it);
+ }
+ }
+ }
+}
+
+bool SetInteriorVehicleDataRequest::AreAllParamsReadOnly(
+ const Json::Value& request_params) {
+ LOG4CXX_AUTO_TRACE(logger_);
+ std::vector<std::string> module_type_params = ControlData(request_params);
+ std::vector<std::string>::iterator it = module_type_params.begin();
+ std::vector<std::string> ro_params =
+ GetModuleReadOnlyParams(ModuleType(request_params));
+ for (; it != module_type_params.end(); ++it) {
+ if (!helpers::in_range(ro_params, *it)) {
+ return false;
+ }
+ }
+ return true;
+}
+
void SetInteriorVehicleDataRequest::OnEvent(
const rc_event_engine::Event<application_manager::MessagePtr, std::string>&
event) {
@@ -116,6 +200,7 @@ std::string SetInteriorVehicleDataRequest::ModuleType(
message.get(message_params::kModuleData, Json::Value(Json::objectValue));
return module_data.get(message_params::kModuleType, "").asString();
}
+
std::vector<std::string> SetInteriorVehicleDataRequest::ControlData(
const Json::Value& message) {
Json::Value data =