From 423bbb501c3c617881b04c6638fbeaa6c382234b Mon Sep 17 00:00:00 2001 From: Levchenko Date: Tue, 7 Jun 2016 12:46:23 +0300 Subject: Divide `HMICapabilities` into interface and implementation Been done: - `HMICapabilities` class divided into interface and implementation; - New amendments to the dependent files, in accordance with the change of `HMICapabilities` class; - Created `MockHMICapabilities` class; - Changed `HMICapabilities` class to `HMICapabilities` interface in `ApplicationManagerImpl` class; - Removed unnecessary `virtual inline` modifiers from `HMICapabilitiesImpl` class; - Corrected coding style to all changed files; Resolves: APPLINK-24911 --- .../application_manager/application_manager_impl.h | 3 +- .../include/application_manager/hmi_capabilities.h | 587 ---------- .../application_manager/hmi_capabilities_impl.h | 504 ++++++++ .../src/application_manager_impl.cc | 9 +- .../application_manager/src/hmi_capabilities.cc | 1086 ------------------ .../src/hmi_capabilities_impl.cc | 1207 ++++++++++++++++++++ .../hmi_capabilities_for_testing.h | 8 +- .../application_manager/mock_hmi_capabilities.h | 174 +++ .../include/application_manager/hmi_capabilities.h | 442 +++++++ 9 files changed, 2338 insertions(+), 1682 deletions(-) delete mode 100644 src/components/application_manager/include/application_manager/hmi_capabilities.h create mode 100644 src/components/application_manager/include/application_manager/hmi_capabilities_impl.h delete mode 100644 src/components/application_manager/src/hmi_capabilities.cc create mode 100644 src/components/application_manager/src/hmi_capabilities_impl.cc create mode 100644 src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h create mode 100644 src/components/include/application_manager/hmi_capabilities.h diff --git a/src/components/application_manager/include/application_manager/application_manager_impl.h b/src/components/application_manager/include/application_manager/application_manager_impl.h index 49674dcb96..881011f01c 100644 --- a/src/components/application_manager/include/application_manager/application_manager_impl.h +++ b/src/components/application_manager/include/application_manager/application_manager_impl.h @@ -39,6 +39,7 @@ #include #include #include +#include #include "application_manager/hmi_command_factory.h" #include "application_manager/application_manager.h" @@ -1418,7 +1419,7 @@ class ApplicationManagerImpl // Thread that pumps messages audio pass thru to mobile. impl::AudioPassThruQueue audio_pass_thru_messages_; - HMICapabilities hmi_capabilities_; + std::auto_ptr hmi_capabilities_; // The reason of HU shutdown mobile_api::AppInterfaceUnregisteredReason::eType unregister_reason_; diff --git a/src/components/application_manager/include/application_manager/hmi_capabilities.h b/src/components/application_manager/include/application_manager/hmi_capabilities.h deleted file mode 100644 index 92a16410c1..0000000000 --- a/src/components/application_manager/include/application_manager/hmi_capabilities.h +++ /dev/null @@ -1,587 +0,0 @@ -/* - * Copyright (c) 2016, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. -*/ - -#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_H_ -#define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_H_ - -#include "interfaces/HMI_API.h" -#include "interfaces/MOBILE_API.h" -#include "json/json.h" -#include "utils/macro.h" -#include "utils/json_utils.h" -#include "application_manager/hmi_language_handler.h" - -namespace NsSmartDeviceLink { -namespace NsSmartObjects { -class SmartObject; -} -} -namespace resumption { -class LastState; -} - -namespace smart_objects = NsSmartDeviceLink::NsSmartObjects; - -namespace application_manager { -class ApplicationManager; - -class HMICapabilities { - public: - /* - * @ Class constructor - * - * @param app_mngr Application manager pointer - */ - explicit HMICapabilities(ApplicationManager& app_mngr); - - /* - * @brief Class destructor - * - */ - virtual ~HMICapabilities(); - - /** - * @brief Checks if all HMI capabilities received - * - * @return TRUE if all information received, otherwise FALSE - */ - bool is_hmi_capabilities_initialized() const; - - /* - * @brief Checks is image type(Static/Dynamic) requested by - * Mobile Device is supported on current HMI. - * @param image_type recieved type of image from Enum. - * @return Bool true if supported - */ - bool VerifyImageType(int32_t image_type) const; - - /** - * @brief Checks if all HMI capabilities received - * - * @return TRUE if all information received, otherwise FALSE - */ - inline bool is_vr_cooperating() const; - void set_is_vr_cooperating(bool value); - - inline bool is_tts_cooperating() const; - void set_is_tts_cooperating(bool value); - - inline bool is_ui_cooperating() const; - void set_is_ui_cooperating(bool value); - - inline bool is_navi_cooperating() const; - void set_is_navi_cooperating(bool value); - - inline bool is_ivi_cooperating() const; - void set_is_ivi_cooperating(bool value); - - /* - * @brief Retrieves if mixing audio is supported by HMI - * (ie recording TTS command and playing audio) - * - * @return Current state of the mixing audio flag - */ - inline bool attenuated_supported() const; - - /* - * @brief Sets state for mixing audio - * - * @param state New state to be set - */ - void set_attenuated_supported(bool state); - - /* - * @brief Retrieves currently active UI language - * - * @return Currently active UI language - */ - const hmi_apis::Common_Language::eType active_ui_language() const; - - /* - * @brief Sets currently active UI language - * - * @param language Currently active UI language - */ - void set_active_ui_language(const hmi_apis::Common_Language::eType& language); - - /* - * @brief Retrieves UI supported languages - * - * @return Currently supported UI languages - */ - inline const smart_objects::SmartObject* ui_supported_languages() const; - - /* - * @brief Sets supported UI languages - * - * @param supported_languages Supported UI languages - */ - void set_ui_supported_languages( - const smart_objects::SmartObject& supported_languages); - - /* - * @brief Retrieves currently active VR language - * - * @return Currently active VR language - */ - const hmi_apis::Common_Language::eType active_vr_language() const; - - /* - * @brief Sets currently active VR language - * - * @param language Currently active VR language - */ - void set_active_vr_language(const hmi_apis::Common_Language::eType& language); - - /* - * @brief Retrieves VR supported languages - * - * @return Currently supported VR languages - */ - inline const smart_objects::SmartObject* vr_supported_languages() const; - - /* - * @brief Sets supported VR languages - * - * @param supported_languages Supported VR languages - */ - void set_vr_supported_languages( - const smart_objects::SmartObject& supported_languages); - - /* - * @brief Retrieves currently active TTS language - * - * @return Currently active TTS language - */ - const hmi_apis::Common_Language::eType active_tts_language() const; - - /* - * @brief Sets currently active TTS language - * - * @param language Currently active TTS language - */ - void set_active_tts_language( - const hmi_apis::Common_Language::eType& language); - - /* - * @brief Retrieves TTS supported languages - * - * @return Currently supported TTS languages - */ - inline const smart_objects::SmartObject* tts_supported_languages() const; - - /* - * @brief Sets supported TTS languages - * - * @param supported_languages Supported TTS languages - */ - void set_tts_supported_languages( - const smart_objects::SmartObject& supported_languages); - - /* - * @brief Retrieves information about the display capabilities - * - * @return Currently supported display capabilities - */ - inline const smart_objects::SmartObject* display_capabilities() const; - - /* - * @brief Sets supported display capabilities - * - * @param display_capabilities supported display capabilities - */ - void set_display_capabilities( - const smart_objects::SmartObject& display_capabilities); - - /* - * @brief Retrieves information about the HMI zone capabilities - * - * @return Currently supported HMI zone capabilities - */ - inline const smart_objects::SmartObject* hmi_zone_capabilities() const; - - /* - * @brief Sets supported HMI zone capabilities - * - * @param hmi_zone_capabilities supported HMI zone capabilities - */ - void set_hmi_zone_capabilities( - const smart_objects::SmartObject& hmi_zone_capabilities); - - /* - * @brief Retrieves information about the SoftButton's capabilities - * - * @return Currently supported SoftButton's capabilities - */ - inline const smart_objects::SmartObject* soft_button_capabilities() const; - - /* - * @brief Sets supported SoftButton's capabilities - * - * @param soft_button_capabilities supported SoftButton's capabilities - */ - void set_soft_button_capabilities( - const smart_objects::SmartObject& soft_button_capabilities); - - /* - * @brief Retrieves information about the Button's capabilities - * - * @return Currently supported Button's capabilities - */ - inline const smart_objects::SmartObject* button_capabilities() const; - - /* - * @brief Sets supported Button's capabilities - * - * @param soft_button_capabilities supported Button's capabilities - */ - void set_button_capabilities( - const smart_objects::SmartObject& button_capabilities); - - /* - * @brief Sets supported speech capabilities - * - * @param speech_capabilities supported speech capabilities - */ - void set_speech_capabilities( - const smart_objects::SmartObject& speech_capabilities); - - /* - * @brief Retrieves information about the speech capabilities - * - * @return Currently supported speech capabilities - */ - inline const smart_objects::SmartObject* speech_capabilities() const; - - /* - * @brief Sets supported VR capabilities - * - * @param vr_capabilities supported VR capabilities - */ - void set_vr_capabilities(const smart_objects::SmartObject& vr_capabilities); - - /* - * @brief Retrieves information about the VR capabilities - * - * @return Currently supported VR capabilities - */ - inline const smart_objects::SmartObject* vr_capabilities() const; - - /* - * @brief Sets supported audio_pass_thru capabilities - * - * @param vr_capabilities supported audio_pass_thru capabilities - */ - void set_audio_pass_thru_capabilities( - const smart_objects::SmartObject& audio_pass_thru_capabilities); - - /* - * @brief Sets supported pcm_stream capabilities - * - * @param supported pcm stream capabilities - */ - void set_pcm_stream_capabilities( - const smart_objects::SmartObject& pcm_stream_capabilities); - - /* - * @brief Retrieves information about the audio_pass_thru capabilities - * - * @return Currently supported audio_pass_thru capabilities - */ - inline const smart_objects::SmartObject* audio_pass_thru_capabilities() const; - - /* - * @brief Retrieves information about the pcm_stream capabilities - * - * @return Currently supported pcm_streaming capabilities - */ - inline const smart_objects::SmartObject* pcm_stream_capabilities() const; - - /* - * @brief Retrieves information about the preset bank capabilities - * - * @return Currently supported preset bank capabilities - */ - inline const smart_objects::SmartObject* preset_bank_capabilities() const; - - /* - * @brief Sets supported preset bank capabilities - * - * @param soft_button_capabilities supported preset bank capabilities - */ - void set_preset_bank_capabilities( - const smart_objects::SmartObject& preset_bank_capabilities); - - /* - * @brief Sets vehicle information(make, model, modelYear) - * - * @param vehicle_type Cuurent vehicle information - */ - void set_vehicle_type(const smart_objects::SmartObject& vehicle_type); - - /* - * @brief Retrieves vehicle information(make, model, modelYear) - * - * @param vehicle_type Cuurent vehicle information - */ - inline const smart_objects::SmartObject* vehicle_type() const; - - /* - * @brief Retrieves information about the prerecorded speech - * - * @return Currently supported prerecorded speech - */ - inline const smart_objects::SmartObject* prerecorded_speech() const; - - /* - * @brief Sets supported prerecorded speech - * - * @param prerecorded_speech supported prerecorded speech - */ - void set_prerecorded_speech( - const smart_objects::SmartObject& prerecorded_speech); - - /* - * @brief Interface used to store information if navigation - * supported by the system - * - * @param supported Indicates if navigation supported by the system - */ - void set_navigation_supported(bool supported); - - /* - * @brief Retrieves information if navi supported by the system - * - * @return TRUE if it supported, otherwise FALSE - */ - inline bool navigation_supported() const; - - /* - * @brief Interface used to store information if phone call - * supported by the system - * - * @param supported Indicates if navigation supported by the sustem - */ - void set_phone_call_supported(bool supported); - - /* - * @brief Retrieves information if phone call supported by the system - * - * @return TRUE if it supported, otherwise FALSE - */ - inline bool phone_call_supported() const; - - /* - * @brief Interface used to store information about software version of the - *target - * - * @param ccpu_version Received system/hmi software version - */ - void set_ccpu_version(const std::string& ccpu_version); - - /* - * @brief Returns software version of the target - * - * @return TRUE if it supported, otherwise FALSE - */ - inline const std::string& ccpu_version() const; - - void Init(resumption::LastState* last_state); - - protected: - /* - * @brief Loads capabilities from local file in case SDL was launched - * without HMI - * - * @return TRUE if capabilities loaded successfully, otherwise FALSE. - */ - bool load_capabilities_from_file(); - - /* - * @brief function checks if json member exists - * - * @param json_member from file hmi_capabilities.json - * @param name_of_member name which we should check - * hmi_capabilities.json - * - * @returns TRUE if member exists and returns FALSE if - * member does not exist. - */ - bool check_existing_json_member(const Json::Value& json_member, - const char* name_of_member); - - private: - bool is_vr_cooperating_; - bool is_tts_cooperating_; - bool is_ui_cooperating_; - bool is_navi_cooperating_; - bool is_ivi_cooperating_; - - // to check if IsReady response for corresponding interface received - bool is_vr_ready_response_recieved_; - bool is_tts_ready_response_recieved_; - bool is_ui_ready_response_recieved_; - bool is_navi_ready_response_recieved_; - bool is_ivi_ready_response_recieved_; - - bool attenuated_supported_; - hmi_apis::Common_Language::eType ui_language_; - hmi_apis::Common_Language::eType vr_language_; - hmi_apis::Common_Language::eType tts_language_; - smart_objects::SmartObject* vehicle_type_; - smart_objects::SmartObject* ui_supported_languages_; - smart_objects::SmartObject* tts_supported_languages_; - smart_objects::SmartObject* vr_supported_languages_; - smart_objects::SmartObject* display_capabilities_; - smart_objects::SmartObject* hmi_zone_capabilities_; - smart_objects::SmartObject* soft_buttons_capabilities_; - smart_objects::SmartObject* button_capabilities_; - smart_objects::SmartObject* preset_bank_capabilities_; - smart_objects::SmartObject* vr_capabilities_; - smart_objects::SmartObject* speech_capabilities_; - smart_objects::SmartObject* audio_pass_thru_capabilities_; - smart_objects::SmartObject* pcm_stream_capabilities_; - smart_objects::SmartObject* prerecorded_speech_; - std::string ccpu_version_; - bool is_navigation_supported_; - bool is_phone_call_supported_; - - ApplicationManager& app_mngr_; - HMILanguageHandler hmi_language_handler_; - - DISALLOW_COPY_AND_ASSIGN(HMICapabilities); -}; - -bool HMICapabilities::is_ui_cooperating() const { - return is_ui_cooperating_; -} - -bool HMICapabilities::is_vr_cooperating() const { - return is_vr_cooperating_; -} - -bool HMICapabilities::is_tts_cooperating() const { - return is_tts_cooperating_; -} - -bool HMICapabilities::is_navi_cooperating() const { - return is_navi_cooperating_; -} - -bool HMICapabilities::is_ivi_cooperating() const { - return is_ivi_cooperating_; -} - -const smart_objects::SmartObject* HMICapabilities::ui_supported_languages() - const { - return ui_supported_languages_; -} - -const smart_objects::SmartObject* HMICapabilities::vr_supported_languages() - const { - return vr_supported_languages_; -} - -const smart_objects::SmartObject* HMICapabilities::tts_supported_languages() - const { - return tts_supported_languages_; -} - -const smart_objects::SmartObject* HMICapabilities::display_capabilities() - const { - return display_capabilities_; -} - -const smart_objects::SmartObject* HMICapabilities::hmi_zone_capabilities() - const { - return hmi_zone_capabilities_; -} - -const smart_objects::SmartObject* HMICapabilities::soft_button_capabilities() - const { - return soft_buttons_capabilities_; -} - -const smart_objects::SmartObject* HMICapabilities::button_capabilities() const { - return button_capabilities_; -} - -const smart_objects::SmartObject* HMICapabilities::speech_capabilities() const { - return speech_capabilities_; -} - -const smart_objects::SmartObject* HMICapabilities::vr_capabilities() const { - return vr_capabilities_; -} - -const smart_objects::SmartObject* -HMICapabilities::audio_pass_thru_capabilities() const { - return audio_pass_thru_capabilities_; -} - -const smart_objects::SmartObject* HMICapabilities::pcm_stream_capabilities() - const { - return pcm_stream_capabilities_; -} - -const smart_objects::SmartObject* HMICapabilities::preset_bank_capabilities() - const { - return preset_bank_capabilities_; -} - -bool HMICapabilities::attenuated_supported() const { - return attenuated_supported_; -} - -const smart_objects::SmartObject* HMICapabilities::vehicle_type() const { - return vehicle_type_; -} - -const smart_objects::SmartObject* HMICapabilities::prerecorded_speech() const { - return prerecorded_speech_; -} - -const std::string& HMICapabilities::ccpu_version() const { - return ccpu_version_; -} - -bool HMICapabilities::navigation_supported() const { - return is_navigation_supported_; -} - -bool HMICapabilities::phone_call_supported() const { - return is_phone_call_supported_; -} - -} // namespace application_manager - -#endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_H_ diff --git a/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h new file mode 100644 index 0000000000..c2eacec59c --- /dev/null +++ b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h @@ -0,0 +1,504 @@ +/* + * Copyright (c) 2016, Ford Motor Company + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * Neither the name of the Ford Motor Company nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_IMPL_H_ +#define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_IMPL_H_ + +#include "application_manager/hmi_capabilities.h" +#include "interfaces/HMI_API.h" +#include "interfaces/MOBILE_API.h" +#include "json/json.h" +#include "utils/macro.h" +#include "utils/json_utils.h" +#include "application_manager/hmi_language_handler.h" + +namespace NsSmartDeviceLink { +namespace NsSmartObjects { +class SmartObject; +} // namespace NsSmartObjects +} // namespace NsSmartDeviceLink + +namespace resumption { +class LastState; +} // namespace resumption + +namespace smart_objects = NsSmartDeviceLink::NsSmartObjects; + +namespace application_manager { +class ApplicationManager; + +class HMICapabilitiesImpl : public HMICapabilities { + public: + /* + * @ Class constructor + * + * @param app_mngr Application manager pointer + */ + explicit HMICapabilitiesImpl(ApplicationManager& app_mngr); + + /* + * @brief Class destructor + * + */ + virtual ~HMICapabilitiesImpl(); + + /** + * @brief Checks if all HMI capabilities received + * + * @return TRUE if all information received, otherwise FALSE + */ + bool is_hmi_capabilities_initialized() const OVERRIDE; + + /* + * @brief Checks is image type(Static/Dynamic) requested by + * Mobile Device is supported on current HMI. + * @param image_type recieved type of image from Enum. + * @return Bool true if supported + */ + bool VerifyImageType(const int32_t image_type) const OVERRIDE; + + /** + * @brief Checks if all HMI capabilities received + * + * @return TRUE if all information received, otherwise FALSE + */ + bool is_vr_cooperating() const OVERRIDE; + void set_is_vr_cooperating(const bool value) OVERRIDE; + + bool is_tts_cooperating() const OVERRIDE; + void set_is_tts_cooperating(const bool value) OVERRIDE; + + bool is_ui_cooperating() const OVERRIDE; + void set_is_ui_cooperating(const bool value) OVERRIDE; + + bool is_navi_cooperating() const OVERRIDE; + void set_is_navi_cooperating(const bool value) OVERRIDE; + + bool is_ivi_cooperating() const OVERRIDE; + void set_is_ivi_cooperating(const bool value) OVERRIDE; + + /* + * @brief Interface used to store information about software version of the + *target + * + * @param ccpu_version Received system/hmi software version + */ + void set_ccpu_version(const std::string& ccpu_version) OVERRIDE; + + /* + * @brief Returns software version of the target + * + * @return TRUE if it supported, otherwise FALSE + */ + const std::string& ccpu_version() const OVERRIDE; + + /* + * @brief Retrieves if mixing audio is supported by HMI + * (ie recording TTS command and playing audio) + * + * @return Current state of the mixing audio flag + */ + bool attenuated_supported() const OVERRIDE; + + /* + * @brief Sets state for mixing audio + * + * @param state New state to be set + */ + void set_attenuated_supported(const bool state) OVERRIDE; + + /* + * @brief Retrieves currently active UI language + * + * @return Currently active UI language + */ + const hmi_apis::Common_Language::eType active_ui_language() const OVERRIDE; + + /* + * @brief Sets currently active UI language + * + * @param language Currently active UI language + */ + void set_active_ui_language( + const hmi_apis::Common_Language::eType language) OVERRIDE; + + /* + * @brief Retrieves UI supported languages + * + * @return Currently supported UI languages + */ + const smart_objects::SmartObject* ui_supported_languages() const OVERRIDE; + + /* + * @brief Sets supported UI languages + * + * @param supported_languages Supported UI languages + */ + void set_ui_supported_languages( + const smart_objects::SmartObject& supported_languages) OVERRIDE; + + /* + * @brief Retrieves currently active VR language + * + * @return Currently active VR language + */ + const hmi_apis::Common_Language::eType active_vr_language() const OVERRIDE; + + /* + * @brief Sets currently active VR language + * + * @param language Currently active VR language + */ + void set_active_vr_language( + const hmi_apis::Common_Language::eType language) OVERRIDE; + + /* + * @brief Retrieves VR supported languages + * + * @return Currently supported VR languages + */ + const smart_objects::SmartObject* vr_supported_languages() const OVERRIDE; + + /* + * @brief Sets supported VR languages + * + * @param supported_languages Supported VR languages + */ + void set_vr_supported_languages( + const smart_objects::SmartObject& supported_languages) OVERRIDE; + + /* + * @brief Retrieves currently active TTS language + * + * @return Currently active TTS language + */ + const hmi_apis::Common_Language::eType active_tts_language() const OVERRIDE; + + /* + * @brief Sets currently active TTS language + * + * @param language Currently active TTS language + */ + void set_active_tts_language( + const hmi_apis::Common_Language::eType language) OVERRIDE; + + /* + * @brief Retrieves TTS supported languages + * + * @return Currently supported TTS languages + */ + const smart_objects::SmartObject* tts_supported_languages() const OVERRIDE; + + /* + * @brief Sets supported TTS languages + * + * @param supported_languages Supported TTS languages + */ + void set_tts_supported_languages( + const smart_objects::SmartObject& supported_languages) OVERRIDE; + + /* + * @brief Retrieves information about the display capabilities + * + * @return Currently supported display capabilities + */ + const smart_objects::SmartObject* display_capabilities() const OVERRIDE; + + /* + * @brief Sets supported display capabilities + * + * @param display_capabilities supported display capabilities + */ + void set_display_capabilities( + const smart_objects::SmartObject& display_capabilities) OVERRIDE; + + /* + * @brief Retrieves information about the HMI zone capabilities + * + * @return Currently supported HMI zone capabilities + */ + const smart_objects::SmartObject* hmi_zone_capabilities() const OVERRIDE; + + /* + * @brief Sets supported HMI zone capabilities + * + * @param hmi_zone_capabilities supported HMI zone capabilities + */ + void set_hmi_zone_capabilities( + const smart_objects::SmartObject& hmi_zone_capabilities) OVERRIDE; + + /* + * @brief Retrieves information about the SoftButton's capabilities + * + * @return Currently supported SoftButton's capabilities + */ + const smart_objects::SmartObject* soft_button_capabilities() const OVERRIDE; + + /* + * @brief Sets supported SoftButton's capabilities + * + * @param soft_button_capabilities supported SoftButton's capabilities + */ + void set_soft_button_capabilities( + const smart_objects::SmartObject& soft_button_capabilities) OVERRIDE; + + /* + * @brief Retrieves information about the Button's capabilities + * + * @return Currently supported Button's capabilities + */ + const smart_objects::SmartObject* button_capabilities() const OVERRIDE; + + /* + * @brief Sets supported Button's capabilities + * + * @param soft_button_capabilities supported Button's capabilities + */ + void set_button_capabilities( + const smart_objects::SmartObject& button_capabilities) OVERRIDE; + + /* + * @brief Sets supported speech capabilities + * + * @param speech_capabilities supported speech capabilities + */ + void set_speech_capabilities( + const smart_objects::SmartObject& speech_capabilities) OVERRIDE; + + /* + * @brief Retrieves information about the speech capabilities + * + * @return Currently supported speech capabilities + */ + const smart_objects::SmartObject* speech_capabilities() const OVERRIDE; + + /* + * @brief Sets supported VR capabilities + * + * @param vr_capabilities supported VR capabilities + */ + void set_vr_capabilities( + const smart_objects::SmartObject& vr_capabilities) OVERRIDE; + + /* + * @brief Retrieves information about the VR capabilities + * + * @return Currently supported VR capabilities + */ + const smart_objects::SmartObject* vr_capabilities() const OVERRIDE; + + /* + * @brief Sets supported audio_pass_thru capabilities + * + * @param vr_capabilities supported audio_pass_thru capabilities + */ + void set_audio_pass_thru_capabilities( + const smart_objects::SmartObject& audio_pass_thru_capabilities) OVERRIDE; + + /* + * @brief Retrieves information about the audio_pass_thru capabilities + * + * @return Currently supported audio_pass_thru capabilities + */ + const smart_objects::SmartObject* audio_pass_thru_capabilities() + const OVERRIDE; + + /* + * @brief Sets supported pcm_stream capabilities + * + * @param supported pcm_stream capabilities + */ + void set_pcm_stream_capabilities( + const smart_objects::SmartObject& pcm_stream_capabilities) OVERRIDE; + + /* + * @brief Retrieves information about the pcm_stream capabilities + * + * @return Currently supported pcm_streaming capabilities + */ + const smart_objects::SmartObject* pcm_stream_capabilities() const OVERRIDE; + + /* + * @brief Retrieves information about the preset bank capabilities + * + * @return Currently supported preset bank capabilities + */ + const smart_objects::SmartObject* preset_bank_capabilities() const OVERRIDE; + + /* + * @brief Sets supported preset bank capabilities + * + * @param soft_button_capabilities supported preset bank capabilities + */ + void set_preset_bank_capabilities( + const smart_objects::SmartObject& preset_bank_capabilities) OVERRIDE; + + /* + * @brief Sets vehicle information(make, model, modelYear) + * + * @param vehicle_type Cuurent vehicle information + */ + void set_vehicle_type( + const smart_objects::SmartObject& vehicle_type) OVERRIDE; + + /* + * @brief Retrieves vehicle information(make, model, modelYear) + * + * @param vehicle_type Cuurent vehicle information + */ + const smart_objects::SmartObject* vehicle_type() const OVERRIDE; + + /* + * @brief Retrieves information about the prerecorded speech + * + * @return Currently supported prerecorded speech + */ + const smart_objects::SmartObject* prerecorded_speech() const OVERRIDE; + + /* + * @brief Sets supported prerecorded speech + * + * @param prerecorded_speech supported prerecorded speech + */ + void set_prerecorded_speech( + const smart_objects::SmartObject& prerecorded_speech) OVERRIDE; + + /* + * @brief Interface used to store information if navigation + * supported by the system + * + * @param supported Indicates if navigation supported by the system + */ + void set_navigation_supported(const bool supported) OVERRIDE; + + /* + * @brief Retrieves information if navi supported by the system + * + * @return TRUE if it supported, otherwise FALSE + */ + bool navigation_supported() const OVERRIDE; + + /* + * @brief Interface used to store information if phone call + * supported by the system + * + * @param supported Indicates if navigation supported by the sustem + */ + void set_phone_call_supported(const bool supported) OVERRIDE; + + /* + * @brief Retrieves information if phone call supported by the system + * + * @return TRUE if it supported, otherwise FALSE + */ + bool phone_call_supported() const OVERRIDE; + + void Init(resumption::LastState* last_state); + + protected: + /* + * @brief Loads capabilities from local file in case SDL was launched + * without HMI + * + * @return TRUE if capabilities loaded successfully, otherwise FALSE. + */ + bool load_capabilities_from_file(); + + /* + * @brief function checks if json member exists + * + * @param json_member from file hmi_capabilities.json + * @param name_of_member name which we should check + * hmi_capabilities.json + * + * @returns TRUE if member exists and returns FALSE if + * member does not exist. + */ + bool check_existing_json_member(const Json::Value& json_member, + const char* name_of_member) const OVERRIDE; + + /* + * @brief function converts json object "languages" to smart object + * + * @param json_languages from file hmi_capabilities.json + * @param languages - the converted object + * + */ + void convert_json_languages_to_obj( + const Json::Value& json_languages, + smart_objects::SmartObject& languages) const OVERRIDE; + + private: + bool is_vr_cooperating_; + bool is_tts_cooperating_; + bool is_ui_cooperating_; + bool is_navi_cooperating_; + bool is_ivi_cooperating_; + + // to check if IsReady response for corresponding interface received + bool is_vr_ready_response_recieved_; + bool is_tts_ready_response_recieved_; + bool is_ui_ready_response_recieved_; + bool is_navi_ready_response_recieved_; + bool is_ivi_ready_response_recieved_; + + bool attenuated_supported_; + hmi_apis::Common_Language::eType ui_language_; + hmi_apis::Common_Language::eType vr_language_; + hmi_apis::Common_Language::eType tts_language_; + smart_objects::SmartObject* vehicle_type_; + smart_objects::SmartObject* ui_supported_languages_; + smart_objects::SmartObject* tts_supported_languages_; + smart_objects::SmartObject* vr_supported_languages_; + smart_objects::SmartObject* display_capabilities_; + smart_objects::SmartObject* hmi_zone_capabilities_; + smart_objects::SmartObject* soft_buttons_capabilities_; + smart_objects::SmartObject* button_capabilities_; + smart_objects::SmartObject* preset_bank_capabilities_; + smart_objects::SmartObject* vr_capabilities_; + smart_objects::SmartObject* speech_capabilities_; + smart_objects::SmartObject* audio_pass_thru_capabilities_; + smart_objects::SmartObject* pcm_stream_capabilities_; + smart_objects::SmartObject* prerecorded_speech_; + bool is_navigation_supported_; + bool is_phone_call_supported_; + std::string ccpu_version_; + + ApplicationManager& app_mngr_; + HMILanguageHandler hmi_language_handler_; + + DISALLOW_COPY_AND_ASSIGN(HMICapabilitiesImpl); +}; + +} // namespace application_manager + +#endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_IMPL_H_ diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index caff073e30..45a956e104 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -42,6 +42,7 @@ #include "application_manager/commands/command_impl.h" #include "application_manager/commands/command_notification_impl.h" #include "application_manager/message_helper.h" +#include "application_manager/hmi_capabilities_impl.h" #include "application_manager/mobile_message_handler.h" #include "application_manager/policies/policy_handler.h" #include "protocol_handler/protocol_handler.h" @@ -135,7 +136,7 @@ ApplicationManagerImpl::ApplicationManagerImpl( , messages_from_hmi_("AM FromHMI", this) , messages_to_hmi_("AM ToHMI", this) , audio_pass_thru_messages_("AudioPassThru", this) - , hmi_capabilities_(*this) + , hmi_capabilities_(new HMICapabilitiesImpl(*this)) , unregister_reason_( mobile_api::AppInterfaceUnregisteredReason::INVALID_ENUM) , resume_ctrl_(*this) @@ -1699,7 +1700,7 @@ bool ApplicationManagerImpl::Init(resumption::LastState& last_state, LOGGER_ERROR(logger_, "Problem with initialization of resume controller"); return false; } - hmi_capabilities_.Init(&last_state); + hmi_capabilities_->Init(&last_state); if (!(file_system::IsWritingAllowed(app_storage_folder) && file_system::IsReadingAllowed(app_storage_folder))) { @@ -2121,11 +2122,11 @@ mobile_apis::MOBILE_API& ApplicationManagerImpl::mobile_so_factory() { } HMICapabilities& ApplicationManagerImpl::hmi_capabilities() { - return hmi_capabilities_; + return *hmi_capabilities_; } const HMICapabilities& ApplicationManagerImpl::hmi_capabilities() const { - return hmi_capabilities_; + return *hmi_capabilities_; } void ApplicationManagerImpl::PullLanguagesInfo(const SmartObject& app_data, diff --git a/src/components/application_manager/src/hmi_capabilities.cc b/src/components/application_manager/src/hmi_capabilities.cc deleted file mode 100644 index 7af381d2bc..0000000000 --- a/src/components/application_manager/src/hmi_capabilities.cc +++ /dev/null @@ -1,1086 +0,0 @@ -/* - * Copyright (c) 2016, Ford Motor Company - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following - * disclaimer in the documentation and/or other materials provided with the - * distribution. - * - * Neither the name of the Ford Motor Company nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -#include "application_manager/hmi_capabilities.h" - -#include - -#include "application_manager/application_manager_impl.h" -#include "application_manager/message_helper.h" -#include "application_manager/message_helper.h" -#include "application_manager/smart_object_keys.h" -#include "application_manager/smart_object_keys.h" -#include "config_profile/profile.h" -#include "formatters/CFormatterJsonBase.h" -#include "interfaces/HMI_API.h" -#include "smart_objects/smart_object.h" -#include "utils/file_system.h" -#include "utils/json_utils.h" - -namespace application_manager { -namespace Formatters = NsSmartDeviceLink::NsJSONHandler::Formatters; - -CREATE_LOGGERPTR_GLOBAL(logger_, "HMICapabilities") - -namespace { - -std::map - vr_enum_capabilities; -std::map button_enum_name; -std::map - text_fields_enum_name; -std::map - media_clock_enum_name; -std::map image_type_enum; -std::map sampling_rate_enum; -std::map - bit_per_sample_enum; -std::map audio_type_enum; -std::map - hmi_zone_enum; -std::map - image_field_name_enum; -std::map file_type_enum; -std::map display_type_enum; -std::map character_set_enum; - -void InitCapabilities() { - vr_enum_capabilities.insert(std::make_pair( - std::string("TEXT"), hmi_apis::Common_VrCapabilities::VR_TEXT)); - - button_enum_name.insert( - std::make_pair(std::string("OK"), hmi_apis::Common_ButtonName::OK)); - button_enum_name.insert(std::make_pair( - std::string("SEEKLEFT"), hmi_apis::Common_ButtonName::SEEKLEFT)); - button_enum_name.insert(std::make_pair( - std::string("SEEKRIGHT"), hmi_apis::Common_ButtonName::SEEKRIGHT)); - button_enum_name.insert(std::make_pair(std::string("TUNEUP"), - hmi_apis::Common_ButtonName::TUNEUP)); - button_enum_name.insert(std::make_pair( - std::string("TUNEDOWN"), hmi_apis::Common_ButtonName::TUNEDOWN)); - button_enum_name.insert(std::make_pair( - std::string("PRESET_0"), hmi_apis::Common_ButtonName::PRESET_0)); - button_enum_name.insert(std::make_pair( - std::string("PRESET_1"), hmi_apis::Common_ButtonName::PRESET_1)); - button_enum_name.insert(std::make_pair( - std::string("PRESET_2"), hmi_apis::Common_ButtonName::PRESET_2)); - button_enum_name.insert(std::make_pair( - std::string("PRESET_3"), hmi_apis::Common_ButtonName::PRESET_3)); - button_enum_name.insert(std::make_pair( - std::string("PRESET_4"), hmi_apis::Common_ButtonName::PRESET_4)); - button_enum_name.insert(std::make_pair( - std::string("PRESET_5"), hmi_apis::Common_ButtonName::PRESET_5)); - button_enum_name.insert(std::make_pair( - std::string("PRESET_6"), hmi_apis::Common_ButtonName::PRESET_6)); - button_enum_name.insert(std::make_pair( - std::string("PRESET_7"), hmi_apis::Common_ButtonName::PRESET_7)); - button_enum_name.insert(std::make_pair( - std::string("PRESET_8"), hmi_apis::Common_ButtonName::PRESET_8)); - button_enum_name.insert(std::make_pair( - std::string("PRESET_9"), hmi_apis::Common_ButtonName::PRESET_9)); - button_enum_name.insert( - std::make_pair(std::string("CUSTOM_BUTTON"), - hmi_apis::Common_ButtonName::CUSTOM_BUTTON)); - button_enum_name.insert(std::make_pair(std::string("SEARCH"), - hmi_apis::Common_ButtonName::SEARCH)); - - text_fields_enum_name.insert(std::make_pair( - std::string("mainField1"), hmi_apis::Common_TextFieldName::mainField1)); - text_fields_enum_name.insert(std::make_pair( - std::string("mainField2"), hmi_apis::Common_TextFieldName::mainField2)); - text_fields_enum_name.insert(std::make_pair( - std::string("mainField3"), hmi_apis::Common_TextFieldName::mainField3)); - text_fields_enum_name.insert(std::make_pair( - std::string("mainField4"), hmi_apis::Common_TextFieldName::mainField4)); - text_fields_enum_name.insert(std::make_pair( - std::string("statusBar"), hmi_apis::Common_TextFieldName::statusBar)); - text_fields_enum_name.insert(std::make_pair( - std::string("mediaClock"), hmi_apis::Common_TextFieldName::mediaClock)); - text_fields_enum_name.insert(std::make_pair( - std::string("mediaTrack"), hmi_apis::Common_TextFieldName::mediaTrack)); - text_fields_enum_name.insert(std::make_pair( - std::string("alertText1"), hmi_apis::Common_TextFieldName::alertText1)); - text_fields_enum_name.insert(std::make_pair( - std::string("alertText2"), hmi_apis::Common_TextFieldName::alertText2)); - text_fields_enum_name.insert(std::make_pair( - std::string("alertText3"), hmi_apis::Common_TextFieldName::alertText3)); - text_fields_enum_name.insert( - std::make_pair(std::string("scrollableMessageBody"), - hmi_apis::Common_TextFieldName::scrollableMessageBody)); - text_fields_enum_name.insert( - std::make_pair(std::string("initialInteractionText"), - hmi_apis::Common_TextFieldName::initialInteractionText)); - text_fields_enum_name.insert( - std::make_pair(std::string("navigationText1"), - hmi_apis::Common_TextFieldName::navigationText1)); - text_fields_enum_name.insert( - std::make_pair(std::string("navigationText2"), - hmi_apis::Common_TextFieldName::navigationText2)); - text_fields_enum_name.insert( - std::make_pair(std::string("ETA"), hmi_apis::Common_TextFieldName::ETA)); - text_fields_enum_name.insert( - std::make_pair(std::string("totalDistance"), - hmi_apis::Common_TextFieldName::totalDistance)); - text_fields_enum_name.insert(std::make_pair( - std::string("audioPassThruDisplayText1"), - hmi_apis::Common_TextFieldName::audioPassThruDisplayText1)); - text_fields_enum_name.insert(std::make_pair( - std::string("audioPassThruDisplayText2"), - hmi_apis::Common_TextFieldName::audioPassThruDisplayText2)); - text_fields_enum_name.insert( - std::make_pair(std::string("sliderHeader"), - hmi_apis::Common_TextFieldName::sliderHeader)); - text_fields_enum_name.insert( - std::make_pair(std::string("sliderFooter"), - hmi_apis::Common_TextFieldName::sliderFooter)); - text_fields_enum_name.insert( - std::make_pair(std::string("navigationText"), - hmi_apis::Common_TextFieldName::navigationText)); - text_fields_enum_name.insert( - std::make_pair(std::string("notificationText"), - hmi_apis::Common_TextFieldName::notificationText)); - text_fields_enum_name.insert(std::make_pair( - std::string("menuName"), hmi_apis::Common_TextFieldName::menuName)); - text_fields_enum_name.insert( - std::make_pair(std::string("secondaryText"), - hmi_apis::Common_TextFieldName::secondaryText)); - text_fields_enum_name.insert( - std::make_pair(std::string("tertiaryText"), - hmi_apis::Common_TextFieldName::tertiaryText)); - text_fields_enum_name.insert( - std::make_pair(std::string("timeToDestination"), - hmi_apis::Common_TextFieldName::timeToDestination)); - text_fields_enum_name.insert( - std::make_pair(std::string("locationName"), - hmi_apis::Common_TextFieldName::locationName)); - text_fields_enum_name.insert( - std::make_pair(std::string("locationDescription"), - hmi_apis::Common_TextFieldName::locationDescription)); - text_fields_enum_name.insert(std::make_pair( - std::string("turnText"), hmi_apis::Common_TextFieldName::turnText)); - text_fields_enum_name.insert( - std::make_pair(std::string("addressLines"), - hmi_apis::Common_TextFieldName::addressLines)); - text_fields_enum_name.insert(std::make_pair( - std::string("phoneNumber"), hmi_apis::Common_TextFieldName::phoneNumber)); - text_fields_enum_name.insert(std::make_pair( - std::string("turnText"), hmi_apis::Common_TextFieldName::turnText)); - text_fields_enum_name.insert(std::make_pair( - std::string("menuTitle"), hmi_apis::Common_TextFieldName::menuTitle)); - - media_clock_enum_name.insert(std::make_pair( - std::string("CLOCK1"), hmi_apis::Common_MediaClockFormat::CLOCK1)); - media_clock_enum_name.insert(std::make_pair( - std::string("CLOCK2"), hmi_apis::Common_MediaClockFormat::CLOCK2)); - media_clock_enum_name.insert(std::make_pair( - std::string("CLOCK3"), hmi_apis::Common_MediaClockFormat::CLOCK3)); - media_clock_enum_name.insert( - std::make_pair(std::string("CLOCKTEXT1"), - hmi_apis::Common_MediaClockFormat::CLOCKTEXT1)); - media_clock_enum_name.insert( - std::make_pair(std::string("CLOCKTEXT2"), - hmi_apis::Common_MediaClockFormat::CLOCKTEXT2)); - media_clock_enum_name.insert( - std::make_pair(std::string("CLOCKTEXT3"), - hmi_apis::Common_MediaClockFormat::CLOCKTEXT3)); - media_clock_enum_name.insert( - std::make_pair(std::string("CLOCKTEXT4"), - hmi_apis::Common_MediaClockFormat::CLOCKTEXT4)); - - image_type_enum.insert(std::make_pair(std::string("STATIC"), - hmi_apis::Common_ImageType::STATIC)); - image_type_enum.insert(std::make_pair(std::string("DYNAMIC"), - hmi_apis::Common_ImageType::DYNAMIC)); - - sampling_rate_enum.insert(std::make_pair( - std::string("8KHZ"), hmi_apis::Common_SamplingRate::RATE_8KHZ)); - sampling_rate_enum.insert(std::make_pair( - std::string("16KHZ"), hmi_apis::Common_SamplingRate::RATE_16KHZ)); - sampling_rate_enum.insert(std::make_pair( - std::string("22KHZ"), hmi_apis::Common_SamplingRate::RATE_22KHZ)); - sampling_rate_enum.insert(std::make_pair( - std::string("44KHZ"), hmi_apis::Common_SamplingRate::RATE_44KHZ)); - - bit_per_sample_enum.insert(std::make_pair( - std::string("RATE_8_BIT"), hmi_apis::Common_BitsPerSample::RATE_8_BIT)); - bit_per_sample_enum.insert(std::make_pair( - std::string("RATE_16_BIT"), hmi_apis::Common_BitsPerSample::RATE_16_BIT)); - - audio_type_enum.insert( - std::make_pair(std::string("PCM"), hmi_apis::Common_AudioType::PCM)); - - hmi_zone_enum.insert(std::make_pair( - std::string("FRONT"), hmi_apis::Common_HmiZoneCapabilities::FRONT)); - hmi_zone_enum.insert(std::make_pair( - std::string("BACK"), hmi_apis::Common_HmiZoneCapabilities::BACK)); - - image_field_name_enum.insert( - std::make_pair(std::string("softButtonImage"), - hmi_apis::Common_ImageFieldName::softButtonImage)); - image_field_name_enum.insert( - std::make_pair(std::string("choiceImage"), - hmi_apis::Common_ImageFieldName::choiceImage)); - image_field_name_enum.insert( - std::make_pair(std::string("choiceSecondaryImage"), - hmi_apis::Common_ImageFieldName::choiceSecondaryImage)); - image_field_name_enum.insert(std::make_pair( - std::string("vrHelpItem"), hmi_apis::Common_ImageFieldName::vrHelpItem)); - image_field_name_enum.insert(std::make_pair( - std::string("turnIcon"), hmi_apis::Common_ImageFieldName::turnIcon)); - image_field_name_enum.insert(std::make_pair( - std::string("menuIcon"), hmi_apis::Common_ImageFieldName::menuIcon)); - image_field_name_enum.insert(std::make_pair( - std::string("cmdIcon"), hmi_apis::Common_ImageFieldName::cmdIcon)); - image_field_name_enum.insert(std::make_pair( - std::string("appIcon"), hmi_apis::Common_ImageFieldName::appIcon)); - image_field_name_enum.insert(std::make_pair( - std::string("graphic"), hmi_apis::Common_ImageFieldName::graphic)); - image_field_name_enum.insert( - std::make_pair(std::string("showConstantTBTIcon"), - hmi_apis::Common_ImageFieldName::showConstantTBTIcon)); - image_field_name_enum.insert(std::make_pair( - std::string("showConstantTBTNextTurnIcon"), - hmi_apis::Common_ImageFieldName::showConstantTBTNextTurnIcon)); - image_field_name_enum.insert( - std::make_pair(std::string("locationImage"), - hmi_apis::Common_ImageFieldName::locationImage)); - - file_type_enum.insert(std::make_pair(std::string("GRAPHIC_BMP"), - hmi_apis::Common_FileType::GRAPHIC_BMP)); - file_type_enum.insert(std::make_pair( - std::string("GRAPHIC_JPEG"), hmi_apis::Common_FileType::GRAPHIC_JPEG)); - file_type_enum.insert(std::make_pair(std::string("GRAPHIC_PNG"), - hmi_apis::Common_FileType::GRAPHIC_PNG)); - file_type_enum.insert(std::make_pair(std::string("AUDIO_WAVE"), - hmi_apis::Common_FileType::AUDIO_WAVE)); - file_type_enum.insert(std::make_pair(std::string("AUDIO_MP3"), - hmi_apis::Common_FileType::AUDIO_MP3)); - file_type_enum.insert(std::make_pair(std::string("AUDIO_AAC"), - hmi_apis::Common_FileType::AUDIO_AAC)); - file_type_enum.insert( - std::make_pair(std::string("BINARY"), hmi_apis::Common_FileType::BINARY)); - file_type_enum.insert( - std::make_pair(std::string("JSON"), hmi_apis::Common_FileType::JSON)); - - display_type_enum.insert( - std::make_pair(std::string("CID"), hmi_apis::Common_DisplayType::CID)); - display_type_enum.insert(std::make_pair(std::string("TYPE2"), - hmi_apis::Common_DisplayType::TYPE2)); - display_type_enum.insert(std::make_pair(std::string("TYPE5"), - hmi_apis::Common_DisplayType::TYPE5)); - display_type_enum.insert( - std::make_pair(std::string("NGN"), hmi_apis::Common_DisplayType::NGN)); - display_type_enum.insert(std::make_pair( - std::string("GEN2_8_DMA"), hmi_apis::Common_DisplayType::GEN2_8_DMA)); - display_type_enum.insert(std::make_pair( - std::string("GEN2_6_DMA"), hmi_apis::Common_DisplayType::GEN2_6_DMA)); - display_type_enum.insert( - std::make_pair(std::string("MFD3"), hmi_apis::Common_DisplayType::MFD3)); - display_type_enum.insert( - std::make_pair(std::string("MFD4"), hmi_apis::Common_DisplayType::MFD4)); - display_type_enum.insert( - std::make_pair(std::string("MFD5"), hmi_apis::Common_DisplayType::MFD5)); - display_type_enum.insert(std::make_pair( - std::string("GEN3_8_INCH"), hmi_apis::Common_DisplayType::GEN3_8_INCH)); - - character_set_enum.insert(std::make_pair( - std::string("TYPE2SET"), hmi_apis::Common_CharacterSet::TYPE2SET)); - character_set_enum.insert(std::make_pair( - std::string("TYPE5SET"), hmi_apis::Common_CharacterSet::TYPE5SET)); - character_set_enum.insert(std::make_pair( - std::string("CID1SET"), hmi_apis::Common_CharacterSet::CID1SET)); - character_set_enum.insert(std::make_pair( - std::string("CID2SET"), hmi_apis::Common_CharacterSet::CID2SET)); -} - -} // namespace - -HMICapabilities::HMICapabilities(ApplicationManager& app_mngr) - : is_vr_cooperating_(false) - , is_tts_cooperating_(false) - , is_ui_cooperating_(false) - , is_navi_cooperating_(false) - , is_ivi_cooperating_(false) - , is_vr_ready_response_recieved_(false) - , is_tts_ready_response_recieved_(false) - , is_ui_ready_response_recieved_(false) - , is_navi_ready_response_recieved_(false) - , is_ivi_ready_response_recieved_(false) - , attenuated_supported_(false) - , ui_language_(hmi_apis::Common_Language::INVALID_ENUM) - , vr_language_(hmi_apis::Common_Language::INVALID_ENUM) - , tts_language_(hmi_apis::Common_Language::INVALID_ENUM) - , vehicle_type_(NULL) - , ui_supported_languages_(NULL) - , tts_supported_languages_(NULL) - , vr_supported_languages_(NULL) - , display_capabilities_(NULL) - , hmi_zone_capabilities_(NULL) - , soft_buttons_capabilities_(NULL) - , button_capabilities_(NULL) - , preset_bank_capabilities_(NULL) - , vr_capabilities_(NULL) - , speech_capabilities_(NULL) - , audio_pass_thru_capabilities_(NULL) - , pcm_stream_capabilities_(NULL) - , prerecorded_speech_(NULL) - , is_navigation_supported_(false) - , is_phone_call_supported_(false) - , app_mngr_(app_mngr) - , hmi_language_handler_(app_mngr) { - InitCapabilities(); - if (false == app_mngr_.get_settings().launch_hmi()) { - is_vr_ready_response_recieved_ = true; - is_tts_ready_response_recieved_ = true; - is_ui_ready_response_recieved_ = true; - is_navi_ready_response_recieved_ = true; - is_ivi_ready_response_recieved_ = true; - - is_vr_cooperating_ = true; - is_tts_cooperating_ = true; - is_ui_cooperating_ = true; - is_navi_cooperating_ = true; - is_ivi_cooperating_ = true; - } -} - -HMICapabilities::~HMICapabilities() { - delete vehicle_type_; - delete ui_supported_languages_; - delete tts_supported_languages_; - delete vr_supported_languages_; - delete display_capabilities_; - delete hmi_zone_capabilities_; - delete soft_buttons_capabilities_; - delete button_capabilities_; - delete preset_bank_capabilities_; - delete vr_capabilities_; - delete speech_capabilities_; - delete audio_pass_thru_capabilities_; - delete pcm_stream_capabilities_; - delete prerecorded_speech_; -} - -bool HMICapabilities::is_hmi_capabilities_initialized() const { - bool result = true; - - if (is_vr_ready_response_recieved_ && is_tts_ready_response_recieved_ && - is_ui_ready_response_recieved_ && is_navi_ready_response_recieved_ && - is_ivi_ready_response_recieved_) { - if (is_vr_cooperating_) { - if ((!vr_supported_languages_) || - (hmi_apis::Common_Language::INVALID_ENUM == vr_language_)) { - result = false; - } - } - - if (is_tts_cooperating_) { - if ((!tts_supported_languages_) || - (hmi_apis::Common_Language::INVALID_ENUM == tts_language_)) { - result = false; - } - } - - if (is_ui_cooperating_) { - if ((!ui_supported_languages_) || - (hmi_apis::Common_Language::INVALID_ENUM == ui_language_)) { - result = false; - } - } - - if (is_ivi_cooperating_) { - if (!vehicle_type_) { - result = false; - } - } - } else { - result = false; - } - - return result; -} - -bool HMICapabilities::VerifyImageType(int32_t image_type) const { - if (!display_capabilities_) { - return false; - } - - if (display_capabilities_->keyExists(hmi_response::image_capabilities)) { - const smart_objects::SmartObject& image_caps = - display_capabilities_->getElement(hmi_response::image_capabilities); - for (uint32_t i = 0; i < image_caps.length(); ++i) { - if (image_caps.getElement(i).asInt() == image_type) { - return true; - } - } - } - - return false; -} - -void HMICapabilities::set_is_vr_cooperating(bool value) { - is_vr_ready_response_recieved_ = true; - is_vr_cooperating_ = value; - if (is_vr_cooperating_) { - utils::SharedPtr get_language( - MessageHelper::CreateModuleInfoSO(hmi_apis::FunctionID::VR_GetLanguage, - app_mngr_)); - hmi_language_handler_.set_handle_response_for(*get_language); - app_mngr_.ManageHMICommand(get_language); - utils::SharedPtr get_all_languages( - MessageHelper::CreateModuleInfoSO( - hmi_apis::FunctionID::VR_GetSupportedLanguages, app_mngr_)); - app_mngr_.ManageHMICommand(get_all_languages); - utils::SharedPtr get_capabilities( - MessageHelper::CreateModuleInfoSO( - hmi_apis::FunctionID::VR_GetCapabilities, app_mngr_)); - app_mngr_.ManageHMICommand(get_capabilities); - } -} - -void HMICapabilities::set_is_tts_cooperating(bool value) { - is_tts_ready_response_recieved_ = true; - is_tts_cooperating_ = value; - if (is_tts_cooperating_) { - utils::SharedPtr get_language( - MessageHelper::CreateModuleInfoSO(hmi_apis::FunctionID::TTS_GetLanguage, - app_mngr_)); - hmi_language_handler_.set_handle_response_for(*get_language); - app_mngr_.ManageHMICommand(get_language); - utils::SharedPtr get_all_languages( - MessageHelper::CreateModuleInfoSO( - hmi_apis::FunctionID::TTS_GetSupportedLanguages, app_mngr_)); - app_mngr_.ManageHMICommand(get_all_languages); - utils::SharedPtr get_capabilities( - MessageHelper::CreateModuleInfoSO( - hmi_apis::FunctionID::TTS_GetCapabilities, app_mngr_)); - app_mngr_.ManageHMICommand(get_capabilities); - } -} - -void HMICapabilities::set_is_ui_cooperating(bool value) { - is_ui_ready_response_recieved_ = true; - is_ui_cooperating_ = value; - if (is_ui_cooperating_) { - utils::SharedPtr get_language( - MessageHelper::CreateModuleInfoSO(hmi_apis::FunctionID::UI_GetLanguage, - app_mngr_)); - hmi_language_handler_.set_handle_response_for(*get_language); - app_mngr_.ManageHMICommand(get_language); - utils::SharedPtr get_all_languages( - MessageHelper::CreateModuleInfoSO( - hmi_apis::FunctionID::UI_GetSupportedLanguages, app_mngr_)); - app_mngr_.ManageHMICommand(get_all_languages); - utils::SharedPtr get_capabilities( - MessageHelper::CreateModuleInfoSO( - hmi_apis::FunctionID::UI_GetCapabilities, app_mngr_)); - app_mngr_.ManageHMICommand(get_capabilities); - } -} - -void HMICapabilities::set_is_navi_cooperating(bool value) { - is_navi_ready_response_recieved_ = true; - is_navi_cooperating_ = value; -} - -void HMICapabilities::set_is_ivi_cooperating(bool value) { - is_ivi_ready_response_recieved_ = true; - is_ivi_cooperating_ = value; - if (is_ivi_cooperating_) { - utils::SharedPtr get_type( - MessageHelper::CreateModuleInfoSO( - hmi_apis::FunctionID::VehicleInfo_GetVehicleType, app_mngr_)); - app_mngr_.ManageHMICommand(get_type); - } -} - -void HMICapabilities::set_attenuated_supported(bool state) { - attenuated_supported_ = state; -} - -void HMICapabilities::set_active_ui_language( - const hmi_apis::Common_Language::eType& language) { - ui_language_ = language; - hmi_language_handler_.set_language_for(HMILanguageHandler::INTERFACE_UI, - language); -} - -void HMICapabilities::set_active_vr_language( - const hmi_apis::Common_Language::eType& language) { - vr_language_ = language; - hmi_language_handler_.set_language_for(HMILanguageHandler::INTERFACE_VR, - language); -} - -void HMICapabilities::set_active_tts_language( - const hmi_apis::Common_Language::eType& language) { - tts_language_ = language; - hmi_language_handler_.set_language_for(HMILanguageHandler::INTERFACE_TTS, - language); -} - -const hmi_apis::Common_Language::eType HMICapabilities::active_ui_language() - const { - using namespace hmi_apis; - const Common_Language::eType language = - hmi_language_handler_.get_language_for(HMILanguageHandler::INTERFACE_UI); - return Common_Language::INVALID_ENUM != language ? language : ui_language_; -} - -const hmi_apis::Common_Language::eType HMICapabilities::active_vr_language() - const { - using namespace hmi_apis; - const Common_Language::eType language = - hmi_language_handler_.get_language_for(HMILanguageHandler::INTERFACE_VR); - return Common_Language::INVALID_ENUM != language ? language : vr_language_; -} - -const hmi_apis::Common_Language::eType HMICapabilities::active_tts_language() - const { - using namespace hmi_apis; - const Common_Language::eType language = - hmi_language_handler_.get_language_for(HMILanguageHandler::INTERFACE_TTS); - return Common_Language::INVALID_ENUM != language ? language : tts_language_; -} - -void HMICapabilities::set_ui_supported_languages( - const smart_objects::SmartObject& supported_languages) { - if (ui_supported_languages_) { - delete ui_supported_languages_; - } - ui_supported_languages_ = new smart_objects::SmartObject(supported_languages); -} - -void HMICapabilities::set_tts_supported_languages( - const smart_objects::SmartObject& supported_languages) { - if (tts_supported_languages_) { - delete tts_supported_languages_; - } - tts_supported_languages_ = - new smart_objects::SmartObject(supported_languages); -} - -void HMICapabilities::set_vr_supported_languages( - const smart_objects::SmartObject& supported_languages) { - if (vr_supported_languages_) { - delete vr_supported_languages_; - } - vr_supported_languages_ = new smart_objects::SmartObject(supported_languages); -} - -void HMICapabilities::set_display_capabilities( - const smart_objects::SmartObject& display_capabilities) { - if (display_capabilities_) { - delete display_capabilities_; - } - display_capabilities_ = new smart_objects::SmartObject(display_capabilities); -} - -void HMICapabilities::set_hmi_zone_capabilities( - const smart_objects::SmartObject& hmi_zone_capabilities) { - if (hmi_zone_capabilities_) { - delete hmi_zone_capabilities_; - } - hmi_zone_capabilities_ = - new smart_objects::SmartObject(hmi_zone_capabilities); -} - -void HMICapabilities::set_soft_button_capabilities( - const smart_objects::SmartObject& soft_button_capabilities) { - if (soft_buttons_capabilities_) { - delete soft_buttons_capabilities_; - } - soft_buttons_capabilities_ = - new smart_objects::SmartObject(soft_button_capabilities); -} - -void HMICapabilities::set_button_capabilities( - const smart_objects::SmartObject& button_capabilities) { - if (button_capabilities_) { - delete button_capabilities_; - } - button_capabilities_ = new smart_objects::SmartObject(button_capabilities); -} - -void HMICapabilities::set_vr_capabilities( - const smart_objects::SmartObject& vr_capabilities) { - if (vr_capabilities_) { - delete vr_capabilities_; - } - vr_capabilities_ = new smart_objects::SmartObject(vr_capabilities); -} - -void HMICapabilities::set_speech_capabilities( - const smart_objects::SmartObject& speech_capabilities) { - if (speech_capabilities_) { - delete speech_capabilities_; - } - speech_capabilities_ = new smart_objects::SmartObject(speech_capabilities); -} - -void HMICapabilities::set_audio_pass_thru_capabilities( - const smart_objects::SmartObject& audio_pass_thru_capabilities) { - if (audio_pass_thru_capabilities_) { - delete audio_pass_thru_capabilities_; - } - audio_pass_thru_capabilities_ = - new smart_objects::SmartObject(audio_pass_thru_capabilities); -} - -void HMICapabilities::set_pcm_stream_capabilities( - const smart_objects::SmartObject& pcm_stream_capabilities) { - if (pcm_stream_capabilities_) { - delete pcm_stream_capabilities_; - } - pcm_stream_capabilities_ = - new smart_objects::SmartObject(pcm_stream_capabilities); -} - -void HMICapabilities::set_preset_bank_capabilities( - const smart_objects::SmartObject& preset_bank_capabilities) { - if (preset_bank_capabilities_) { - delete preset_bank_capabilities_; - } - preset_bank_capabilities_ = - new smart_objects::SmartObject(preset_bank_capabilities); -} - -void HMICapabilities::set_vehicle_type( - const smart_objects::SmartObject& vehicle_type) { - if (vehicle_type_) { - delete vehicle_type_; - } - vehicle_type_ = new smart_objects::SmartObject(vehicle_type); -} - -void HMICapabilities::set_prerecorded_speech( - const smart_objects::SmartObject& prerecorded_speech) { - if (prerecorded_speech_) { - delete prerecorded_speech_; - prerecorded_speech_ = NULL; - } - prerecorded_speech_ = new smart_objects::SmartObject(prerecorded_speech); -} - -void HMICapabilities::set_ccpu_version(const std::string& ccpu_version) { - ccpu_version_ = ccpu_version; -} - -void HMICapabilities::set_navigation_supported(const bool supported) { - is_navigation_supported_ = supported; -} - -void HMICapabilities::set_phone_call_supported(const bool supported) { - is_phone_call_supported_ = supported; -} -namespace { - -/* -* @brief function converts json object "languages" to smart object -* -* @param json_languages from file hmi_capabilities.json -* @param languages - the converted object -*/ -void convert_json_languages_to_obj( - const utils::json::JsonValueRef json_languages, - smart_objects::SmartObject& languages) { - using namespace utils::json; - uint32_t j = 0; - for (JsonValue::const_iterator itr = json_languages.begin(), - end = json_languages.end(); - itr != end; - ++itr) { - languages[j++] = MessageHelper::CommonLanguageFromString((*itr).AsString()); - } -} - -} // namespace - -void HMICapabilities::Init(resumption::LastState* last_state) { - hmi_language_handler_.Init(last_state); - if (false == load_capabilities_from_file()) { - LOGGER_ERROR(logger_, "file hmi_capabilities.json was not loaded"); - } else { - LOGGER_INFO(logger_, "file hmi_capabilities.json was loaded"); - } - hmi_language_handler_.set_default_capabilities_languages( - ui_language_, vr_language_, tts_language_); -} - -bool HMICapabilities::load_capabilities_from_file() { - using namespace utils::json; - std::string json_string; - std::string file_name = app_mngr_.get_settings().hmi_capabilities_file_name(); - - if (!file_system::FileExists(file_name)) { - return false; - } - - if (!file_system::ReadFile(file_name, json_string)) { - return false; - } - - try { - JsonValue::ParseResult parse_result = JsonValue::Parse(json_string); - if (!parse_result.second) { - return false; - } - const JsonValue& root_json = parse_result.first; - // UI - if (root_json.HasMember("UI")) { - const JsonValueRef ui = root_json["UI"]; - - if (ui.HasMember("language")) { - const std::string lang = ui["language"].AsString(); - set_active_ui_language(MessageHelper::CommonLanguageFromString(lang)); - } else { - set_active_ui_language( - MessageHelper::CommonLanguageFromString("EN-US")); - } - - if (ui.HasMember("languages")) { - smart_objects::SmartObject ui_languages_so( - smart_objects::SmartType_Array); - const JsonValueRef languages_ui = ui["languages"]; - convert_json_languages_to_obj(languages_ui, ui_languages_so); - set_ui_supported_languages(ui_languages_so); - } - - if (ui.HasMember("displayCapabilities")) { - smart_objects::SmartObject display_capabilities_so; - const JsonValueRef display_capabilities = ui["displayCapabilities"]; - Formatters::CFormatterJsonBase::jsonValueToObj(display_capabilities, - display_capabilities_so); - - if (display_capabilities_so.keyExists(hmi_response::display_type)) { - std::map::const_iterator it = - display_type_enum.find( - (display_capabilities_so[hmi_response::display_type]) - .asString()); - display_capabilities_so.erase(hmi_response::display_type); - if (display_type_enum.end() != it) { - display_capabilities_so[hmi_response::display_type] = it->second; - } - } - - if (display_capabilities_so.keyExists(hmi_response::text_fields)) { - uint32_t len = - display_capabilities_so[hmi_response::text_fields].length(); - - for (uint32_t i = 0; i < len; ++i) { - if ((display_capabilities_so[hmi_response::text_fields][i]) - .keyExists(strings::name)) { - std::map::const_iterator - it_text_field_name = text_fields_enum_name.find( - display_capabilities_so[hmi_response::text_fields][i] - [strings::name].asString()); - display_capabilities_so[hmi_response::text_fields][i].erase( - strings::name); - if (text_fields_enum_name.end() != it_text_field_name) { - display_capabilities_so[hmi_response::text_fields][i] - [strings::name] = - it_text_field_name->second; - } - } - if ((display_capabilities_so[hmi_response::text_fields][i]) - .keyExists(strings::character_set)) { - std::map::const_iterator - it_characte_set = character_set_enum.find( - display_capabilities_so[hmi_response::text_fields][i] - [strings::character_set] - .asString()); - display_capabilities_so[hmi_response::text_fields][i].erase( - strings::character_set); - if (character_set_enum.end() != it_characte_set) { - display_capabilities_so[hmi_response::text_fields][i] - [strings::character_set] = - it_characte_set->second; - } - } - } - } - - if (display_capabilities_so.keyExists(hmi_response::image_fields)) { - smart_objects::SmartObject& array_image_fields = - display_capabilities_so[hmi_response::image_fields]; - for (uint32_t i = 0; i < array_image_fields.length(); ++i) { - if (array_image_fields[i].keyExists(strings::name)) { - std::map::const_iterator - it = image_field_name_enum.find( - (array_image_fields[i][strings::name]).asString()); - array_image_fields[i].erase(strings::name); - if (image_field_name_enum.end() != it) { - array_image_fields[i][strings::name] = it->second; - } - } - if (array_image_fields[i].keyExists( - strings::image_type_supported)) { - smart_objects::SmartObject& image_type_supported_array = - array_image_fields[i][strings::image_type_supported]; - smart_objects::SmartObject image_type_supported_enum( - smart_objects::SmartType_Array); - for (uint32_t k = 0, j = 0; - k < image_type_supported_array.length(); - ++k) { - std::map::const_iterator it = - file_type_enum.find( - (image_type_supported_array[k]).asString()); - if (file_type_enum.end() != it) { - image_type_supported_enum[j++] = it->second; - } - } - array_image_fields[i].erase(strings::image_type_supported); - array_image_fields[i][strings::image_type_supported] = - image_type_supported_enum; - } - } - } - if (display_capabilities_so.keyExists( - hmi_response::media_clock_formats)) { - smart_objects::SmartObject& media_clock_formats_array = - display_capabilities_so[hmi_response::media_clock_formats]; - smart_objects::SmartObject media_clock_formats_enum( - smart_objects::SmartType_Array); - for (uint32_t i = 0, j = 0; i < media_clock_formats_array.length(); - ++i) { - std::map::const_iterator - it = media_clock_enum_name.find( - (media_clock_formats_array[i]).asString()); - if (media_clock_enum_name.end() != it) { - media_clock_formats_enum[j++] = it->second; - } - } - display_capabilities_so.erase(hmi_response::media_clock_formats); - display_capabilities_so[hmi_response::media_clock_formats] = - media_clock_formats_enum; - } - - if (display_capabilities_so.keyExists( - hmi_response::image_capabilities)) { - smart_objects::SmartObject& image_capabilities_array = - display_capabilities_so[hmi_response::image_capabilities]; - smart_objects::SmartObject image_capabilities_enum( - smart_objects::SmartType_Array); - for (uint32_t i = 0, j = 0; i < image_capabilities_array.length(); - ++i) { - std::map::const_iterator it = - image_type_enum.find((image_capabilities_array[i]).asString()); - if (image_type_enum.end() != it) { - image_capabilities_enum[j++] = it->second; - } - } - display_capabilities_so.erase(hmi_response::image_capabilities); - display_capabilities_so[hmi_response::image_capabilities] = - image_capabilities_enum; - } - set_display_capabilities(display_capabilities_so); - } - - if (ui.HasMember("audioPassThruCapabilities")) { - const JsonValueRef audio_capabilities = ui["audioPassThruCapabilities"]; - smart_objects::SmartObject audio_capabilities_so = - smart_objects::SmartObject(smart_objects::SmartType_Array); - audio_capabilities_so = - smart_objects::SmartObject(smart_objects::SmartType_Map); - if (audio_capabilities.HasMember("samplingRate")) { - audio_capabilities_so["samplingRate"] = - sampling_rate_enum.find(audio_capabilities["samplingRate"] - .AsString())->second; - } - if (audio_capabilities.HasMember("bitsPerSample")) { - audio_capabilities_so["bitsPerSample"] = - bit_per_sample_enum.find(audio_capabilities["bitsPerSample"] - .AsString())->second; - } - if (audio_capabilities.HasMember("audioType")) { - audio_capabilities_so["audioType"] = - audio_type_enum.find(audio_capabilities["audioType"].AsString()) - ->second; - } - set_audio_pass_thru_capabilities(audio_capabilities_so); - } - - if (ui.HasMember("pcmStreamCapabilities")) { - const JsonValueRef pcm_capabilities = ui["pcmStreamCapabilities"]; - smart_objects::SmartObject pcm_capabilities_so = - smart_objects::SmartObject(smart_objects::SmartType_Map); - - if (pcm_capabilities.HasMember("samplingRate")) { - pcm_capabilities_so["samplingRate"] = - sampling_rate_enum.find(pcm_capabilities["samplingRate"] - .AsString())->second; - } - if (pcm_capabilities.HasMember("bitsPerSample")) { - pcm_capabilities_so["bitsPerSample"] = - bit_per_sample_enum.find(pcm_capabilities["bitsPerSample"] - .AsString())->second; - } - if (pcm_capabilities.HasMember("audioType")) { - pcm_capabilities_so["audioType"] = - audio_type_enum.find(pcm_capabilities["audioType"].AsString()) - ->second; - } - - set_pcm_stream_capabilities(pcm_capabilities_so); - } - - if (ui.HasMember("hmiZoneCapabilities")) { - smart_objects::SmartObject hmi_zone_capabilities_so = - smart_objects::SmartObject(smart_objects::SmartType_Array); - hmi_zone_capabilities_so = - hmi_zone_enum.find(ui["hmiZoneCapabilities"].AsString())->second; - set_hmi_zone_capabilities(hmi_zone_capabilities_so); - } - - if (ui.HasMember("softButtonCapabilities")) { - const JsonValueRef soft_button_capabilities = - ui["softButtonCapabilities"]; - smart_objects::SmartObject soft_button_capabilities_so; - Formatters::CFormatterJsonBase::jsonValueToObj( - soft_button_capabilities, soft_button_capabilities_so); - set_soft_button_capabilities(soft_button_capabilities_so); - } - } // UI end - - // VR - if (root_json.HasMember("VR")) { - const JsonValueRef vr = root_json["VR"]; - if (vr.HasMember("language")) { - const std::string lang = vr["language"].AsString(); - set_active_vr_language(MessageHelper::CommonLanguageFromString(lang)); - } else { - set_active_vr_language( - MessageHelper::CommonLanguageFromString("EN-US")); - } - - if (vr.HasMember("languages")) { - const JsonValueRef languages_vr = vr["languages"]; - smart_objects::SmartObject vr_languages_so = - smart_objects::SmartObject(smart_objects::SmartType_Array); - convert_json_languages_to_obj(languages_vr, vr_languages_so); - set_vr_supported_languages(vr_languages_so); - } - - if (vr.HasMember("capabilities")) { - const JsonValueRef capabilities = vr["capabilities"]; - smart_objects::SmartObject vr_capabilities_so = - smart_objects::SmartObject(smart_objects::SmartType_Array); - for (JsonValue::ArrayIndex i = 0, size = capabilities.Size(); i < size; - ++i) { - vr_capabilities_so[i] = - vr_enum_capabilities.find(capabilities[i].AsString())->second; - } - set_vr_capabilities(vr_capabilities_so); - } - } // VR end - - // TTS - if (root_json.HasMember("TTS")) { - const JsonValueRef tts = root_json["TTS"]; - - if (tts.HasMember("language")) { - const std::string lang = tts["language"].AsString(); - set_active_tts_language(MessageHelper::CommonLanguageFromString(lang)); - } else { - set_active_tts_language( - MessageHelper::CommonLanguageFromString("EN-US")); - } - - if (tts.HasMember("languages")) { - const JsonValueRef languages_tts = tts["languages"]; - smart_objects::SmartObject tts_languages_so = - smart_objects::SmartObject(smart_objects::SmartType_Array); - convert_json_languages_to_obj(languages_tts, tts_languages_so); - set_tts_supported_languages(tts_languages_so); - } - - if (tts.HasMember("capabilities")) { - set_speech_capabilities( - smart_objects::SmartObject(tts["capabilities"].AsString())); - } - } // TTS end - - // Buttons - if (root_json.HasMember("Buttons")) { - const JsonValueRef buttons = root_json["Buttons"]; - if (buttons.HasMember("capabilities")) { - const JsonValueRef bt_capabilities = buttons["capabilities"]; - smart_objects::SmartObject buttons_capabilities_so; - Formatters::CFormatterJsonBase::jsonValueToObj(bt_capabilities, - buttons_capabilities_so); - - for (uint32_t i = 0; i < buttons_capabilities_so.length(); ++i) { - if ((buttons_capabilities_so[i]).keyExists(strings::name)) { - std::map::const_iterator it = - button_enum_name.find( - (buttons_capabilities_so[i][strings::name]).asString()); - buttons_capabilities_so[i].erase(strings::name); - if (button_enum_name.end() != it) { - buttons_capabilities_so[i][strings::name] = it->second; - } - } - } - set_button_capabilities(buttons_capabilities_so); - } - if (buttons.HasMember("presetBankCapabilities")) { - const JsonValueRef presetBank = buttons["presetBankCapabilities"]; - smart_objects::SmartObject preset_bank_so; - Formatters::CFormatterJsonBase::jsonValueToObj(presetBank, - preset_bank_so); - set_preset_bank_capabilities(preset_bank_so); - } - } // Buttons end - - // VehicleType - if (root_json.HasMember("VehicleInfo")) { - const JsonValueRef vehicle_info = root_json["VehicleInfo"]; - smart_objects::SmartObject vehicle_type_so; - Formatters::CFormatterJsonBase::jsonValueToObj(vehicle_info, - vehicle_type_so); - set_vehicle_type(vehicle_type_so); - } // VehicleType end - - } catch (...) { - return false; - } - return true; -} - -} // namespace application_manager diff --git a/src/components/application_manager/src/hmi_capabilities_impl.cc b/src/components/application_manager/src/hmi_capabilities_impl.cc new file mode 100644 index 0000000000..343fe84c90 --- /dev/null +++ b/src/components/application_manager/src/hmi_capabilities_impl.cc @@ -0,0 +1,1207 @@ +/* + * Copyright (c) 2016, Ford Motor Company + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * Neither the name of the Ford Motor Company nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#include "application_manager/hmi_capabilities_impl.h" +#include "application_manager/application_manager_impl.h" +#include "smart_objects/smart_object.h" +#include "application_manager/message_helper.h" +#include "application_manager/smart_object_keys.h" +#include "config_profile/profile.h" +#include "formatters/CFormatterJsonBase.h" +#include "interfaces/HMI_API.h" +#include "utils/file_system.h" +#include "utils/json_utils.h" + +namespace application_manager { +namespace Formatters = NsSmartDeviceLink::NsJSONHandler::Formatters; + +CREATE_LOGGERPTR_GLOBAL(logger_, "HMICapabilities") + +namespace { + +std::map + vr_enum_capabilities; +std::map button_enum_name; +std::map + text_fields_enum_name; +std::map + media_clock_enum_name; +std::map image_type_enum; +std::map sampling_rate_enum; +std::map + bit_per_sample_enum; +std::map audio_type_enum; +std::map + hmi_zone_enum; +std::map + image_field_name_enum; +std::map file_type_enum; +std::map display_type_enum; +std::map character_set_enum; + +void InitCapabilities() { + vr_enum_capabilities.insert(std::make_pair( + std::string("TEXT"), hmi_apis::Common_VrCapabilities::VR_TEXT)); + + button_enum_name.insert( + std::make_pair(std::string("OK"), hmi_apis::Common_ButtonName::OK)); + button_enum_name.insert(std::make_pair( + std::string("SEEKLEFT"), hmi_apis::Common_ButtonName::SEEKLEFT)); + button_enum_name.insert(std::make_pair( + std::string("SEEKRIGHT"), hmi_apis::Common_ButtonName::SEEKRIGHT)); + button_enum_name.insert(std::make_pair(std::string("TUNEUP"), + hmi_apis::Common_ButtonName::TUNEUP)); + button_enum_name.insert(std::make_pair( + std::string("TUNEDOWN"), hmi_apis::Common_ButtonName::TUNEDOWN)); + button_enum_name.insert(std::make_pair( + std::string("PRESET_0"), hmi_apis::Common_ButtonName::PRESET_0)); + button_enum_name.insert(std::make_pair( + std::string("PRESET_1"), hmi_apis::Common_ButtonName::PRESET_1)); + button_enum_name.insert(std::make_pair( + std::string("PRESET_2"), hmi_apis::Common_ButtonName::PRESET_2)); + button_enum_name.insert(std::make_pair( + std::string("PRESET_3"), hmi_apis::Common_ButtonName::PRESET_3)); + button_enum_name.insert(std::make_pair( + std::string("PRESET_4"), hmi_apis::Common_ButtonName::PRESET_4)); + button_enum_name.insert(std::make_pair( + std::string("PRESET_5"), hmi_apis::Common_ButtonName::PRESET_5)); + button_enum_name.insert(std::make_pair( + std::string("PRESET_6"), hmi_apis::Common_ButtonName::PRESET_6)); + button_enum_name.insert(std::make_pair( + std::string("PRESET_7"), hmi_apis::Common_ButtonName::PRESET_7)); + button_enum_name.insert(std::make_pair( + std::string("PRESET_8"), hmi_apis::Common_ButtonName::PRESET_8)); + button_enum_name.insert(std::make_pair( + std::string("PRESET_9"), hmi_apis::Common_ButtonName::PRESET_9)); + button_enum_name.insert( + std::make_pair(std::string("CUSTOM_BUTTON"), + hmi_apis::Common_ButtonName::CUSTOM_BUTTON)); + button_enum_name.insert(std::make_pair(std::string("SEARCH"), + hmi_apis::Common_ButtonName::SEARCH)); + + text_fields_enum_name.insert(std::make_pair( + std::string("mainField1"), hmi_apis::Common_TextFieldName::mainField1)); + text_fields_enum_name.insert(std::make_pair( + std::string("mainField2"), hmi_apis::Common_TextFieldName::mainField2)); + text_fields_enum_name.insert(std::make_pair( + std::string("mainField3"), hmi_apis::Common_TextFieldName::mainField3)); + text_fields_enum_name.insert(std::make_pair( + std::string("mainField4"), hmi_apis::Common_TextFieldName::mainField4)); + text_fields_enum_name.insert(std::make_pair( + std::string("statusBar"), hmi_apis::Common_TextFieldName::statusBar)); + text_fields_enum_name.insert(std::make_pair( + std::string("mediaClock"), hmi_apis::Common_TextFieldName::mediaClock)); + text_fields_enum_name.insert(std::make_pair( + std::string("mediaTrack"), hmi_apis::Common_TextFieldName::mediaTrack)); + text_fields_enum_name.insert(std::make_pair( + std::string("alertText1"), hmi_apis::Common_TextFieldName::alertText1)); + text_fields_enum_name.insert(std::make_pair( + std::string("alertText2"), hmi_apis::Common_TextFieldName::alertText2)); + text_fields_enum_name.insert(std::make_pair( + std::string("alertText3"), hmi_apis::Common_TextFieldName::alertText3)); + text_fields_enum_name.insert( + std::make_pair(std::string("scrollableMessageBody"), + hmi_apis::Common_TextFieldName::scrollableMessageBody)); + text_fields_enum_name.insert( + std::make_pair(std::string("initialInteractionText"), + hmi_apis::Common_TextFieldName::initialInteractionText)); + text_fields_enum_name.insert( + std::make_pair(std::string("navigationText1"), + hmi_apis::Common_TextFieldName::navigationText1)); + text_fields_enum_name.insert( + std::make_pair(std::string("navigationText2"), + hmi_apis::Common_TextFieldName::navigationText2)); + text_fields_enum_name.insert( + std::make_pair(std::string("ETA"), hmi_apis::Common_TextFieldName::ETA)); + text_fields_enum_name.insert( + std::make_pair(std::string("totalDistance"), + hmi_apis::Common_TextFieldName::totalDistance)); + text_fields_enum_name.insert(std::make_pair( + std::string("audioPassThruDisplayText1"), + hmi_apis::Common_TextFieldName::audioPassThruDisplayText1)); + text_fields_enum_name.insert(std::make_pair( + std::string("audioPassThruDisplayText2"), + hmi_apis::Common_TextFieldName::audioPassThruDisplayText2)); + text_fields_enum_name.insert( + std::make_pair(std::string("sliderHeader"), + hmi_apis::Common_TextFieldName::sliderHeader)); + text_fields_enum_name.insert( + std::make_pair(std::string("sliderFooter"), + hmi_apis::Common_TextFieldName::sliderFooter)); + text_fields_enum_name.insert( + std::make_pair(std::string("navigationText"), + hmi_apis::Common_TextFieldName::navigationText)); + text_fields_enum_name.insert( + std::make_pair(std::string("notificationText"), + hmi_apis::Common_TextFieldName::notificationText)); + text_fields_enum_name.insert(std::make_pair( + std::string("menuName"), hmi_apis::Common_TextFieldName::menuName)); + text_fields_enum_name.insert( + std::make_pair(std::string("secondaryText"), + hmi_apis::Common_TextFieldName::secondaryText)); + text_fields_enum_name.insert( + std::make_pair(std::string("tertiaryText"), + hmi_apis::Common_TextFieldName::tertiaryText)); + text_fields_enum_name.insert( + std::make_pair(std::string("timeToDestination"), + hmi_apis::Common_TextFieldName::timeToDestination)); + text_fields_enum_name.insert( + std::make_pair(std::string("locationName"), + hmi_apis::Common_TextFieldName::locationName)); + text_fields_enum_name.insert( + std::make_pair(std::string("locationDescription"), + hmi_apis::Common_TextFieldName::locationDescription)); + text_fields_enum_name.insert(std::make_pair( + std::string("turnText"), hmi_apis::Common_TextFieldName::turnText)); + text_fields_enum_name.insert( + std::make_pair(std::string("addressLines"), + hmi_apis::Common_TextFieldName::addressLines)); + text_fields_enum_name.insert(std::make_pair( + std::string("phoneNumber"), hmi_apis::Common_TextFieldName::phoneNumber)); + text_fields_enum_name.insert(std::make_pair( + std::string("turnText"), hmi_apis::Common_TextFieldName::turnText)); + text_fields_enum_name.insert(std::make_pair( + std::string("menuTitle"), hmi_apis::Common_TextFieldName::menuTitle)); + + media_clock_enum_name.insert(std::make_pair( + std::string("CLOCK1"), hmi_apis::Common_MediaClockFormat::CLOCK1)); + media_clock_enum_name.insert(std::make_pair( + std::string("CLOCK2"), hmi_apis::Common_MediaClockFormat::CLOCK2)); + media_clock_enum_name.insert(std::make_pair( + std::string("CLOCK3"), hmi_apis::Common_MediaClockFormat::CLOCK3)); + media_clock_enum_name.insert( + std::make_pair(std::string("CLOCKTEXT1"), + hmi_apis::Common_MediaClockFormat::CLOCKTEXT1)); + media_clock_enum_name.insert( + std::make_pair(std::string("CLOCKTEXT2"), + hmi_apis::Common_MediaClockFormat::CLOCKTEXT2)); + media_clock_enum_name.insert( + std::make_pair(std::string("CLOCKTEXT3"), + hmi_apis::Common_MediaClockFormat::CLOCKTEXT3)); + media_clock_enum_name.insert( + std::make_pair(std::string("CLOCKTEXT4"), + hmi_apis::Common_MediaClockFormat::CLOCKTEXT4)); + + image_type_enum.insert(std::make_pair(std::string("STATIC"), + hmi_apis::Common_ImageType::STATIC)); + image_type_enum.insert(std::make_pair(std::string("DYNAMIC"), + hmi_apis::Common_ImageType::DYNAMIC)); + + sampling_rate_enum.insert(std::make_pair( + std::string("8KHZ"), hmi_apis::Common_SamplingRate::RATE_8KHZ)); + sampling_rate_enum.insert(std::make_pair( + std::string("16KHZ"), hmi_apis::Common_SamplingRate::RATE_16KHZ)); + sampling_rate_enum.insert(std::make_pair( + std::string("22KHZ"), hmi_apis::Common_SamplingRate::RATE_22KHZ)); + sampling_rate_enum.insert(std::make_pair( + std::string("44KHZ"), hmi_apis::Common_SamplingRate::RATE_44KHZ)); + + bit_per_sample_enum.insert(std::make_pair( + std::string("RATE_8_BIT"), hmi_apis::Common_BitsPerSample::RATE_8_BIT)); + bit_per_sample_enum.insert(std::make_pair( + std::string("RATE_16_BIT"), hmi_apis::Common_BitsPerSample::RATE_16_BIT)); + + audio_type_enum.insert( + std::make_pair(std::string("PCM"), hmi_apis::Common_AudioType::PCM)); + + hmi_zone_enum.insert(std::make_pair( + std::string("FRONT"), hmi_apis::Common_HmiZoneCapabilities::FRONT)); + hmi_zone_enum.insert(std::make_pair( + std::string("BACK"), hmi_apis::Common_HmiZoneCapabilities::BACK)); + + image_field_name_enum.insert( + std::make_pair(std::string("softButtonImage"), + hmi_apis::Common_ImageFieldName::softButtonImage)); + image_field_name_enum.insert( + std::make_pair(std::string("choiceImage"), + hmi_apis::Common_ImageFieldName::choiceImage)); + image_field_name_enum.insert( + std::make_pair(std::string("choiceSecondaryImage"), + hmi_apis::Common_ImageFieldName::choiceSecondaryImage)); + image_field_name_enum.insert(std::make_pair( + std::string("vrHelpItem"), hmi_apis::Common_ImageFieldName::vrHelpItem)); + image_field_name_enum.insert(std::make_pair( + std::string("turnIcon"), hmi_apis::Common_ImageFieldName::turnIcon)); + image_field_name_enum.insert(std::make_pair( + std::string("menuIcon"), hmi_apis::Common_ImageFieldName::menuIcon)); + image_field_name_enum.insert(std::make_pair( + std::string("cmdIcon"), hmi_apis::Common_ImageFieldName::cmdIcon)); + image_field_name_enum.insert(std::make_pair( + std::string("appIcon"), hmi_apis::Common_ImageFieldName::appIcon)); + image_field_name_enum.insert(std::make_pair( + std::string("graphic"), hmi_apis::Common_ImageFieldName::graphic)); + image_field_name_enum.insert( + std::make_pair(std::string("showConstantTBTIcon"), + hmi_apis::Common_ImageFieldName::showConstantTBTIcon)); + image_field_name_enum.insert(std::make_pair( + std::string("showConstantTBTNextTurnIcon"), + hmi_apis::Common_ImageFieldName::showConstantTBTNextTurnIcon)); + image_field_name_enum.insert( + std::make_pair(std::string("locationImage"), + hmi_apis::Common_ImageFieldName::locationImage)); + + file_type_enum.insert(std::make_pair(std::string("GRAPHIC_BMP"), + hmi_apis::Common_FileType::GRAPHIC_BMP)); + file_type_enum.insert(std::make_pair( + std::string("GRAPHIC_JPEG"), hmi_apis::Common_FileType::GRAPHIC_JPEG)); + file_type_enum.insert(std::make_pair(std::string("GRAPHIC_PNG"), + hmi_apis::Common_FileType::GRAPHIC_PNG)); + file_type_enum.insert(std::make_pair(std::string("AUDIO_WAVE"), + hmi_apis::Common_FileType::AUDIO_WAVE)); + file_type_enum.insert(std::make_pair(std::string("AUDIO_MP3"), + hmi_apis::Common_FileType::AUDIO_MP3)); + file_type_enum.insert(std::make_pair(std::string("AUDIO_AAC"), + hmi_apis::Common_FileType::AUDIO_AAC)); + file_type_enum.insert( + std::make_pair(std::string("BINARY"), hmi_apis::Common_FileType::BINARY)); + file_type_enum.insert( + std::make_pair(std::string("JSON"), hmi_apis::Common_FileType::JSON)); + + display_type_enum.insert( + std::make_pair(std::string("CID"), hmi_apis::Common_DisplayType::CID)); + display_type_enum.insert(std::make_pair(std::string("TYPE2"), + hmi_apis::Common_DisplayType::TYPE2)); + display_type_enum.insert(std::make_pair(std::string("TYPE5"), + hmi_apis::Common_DisplayType::TYPE5)); + display_type_enum.insert( + std::make_pair(std::string("NGN"), hmi_apis::Common_DisplayType::NGN)); + display_type_enum.insert(std::make_pair( + std::string("GEN2_8_DMA"), hmi_apis::Common_DisplayType::GEN2_8_DMA)); + display_type_enum.insert(std::make_pair( + std::string("GEN2_6_DMA"), hmi_apis::Common_DisplayType::GEN2_6_DMA)); + display_type_enum.insert( + std::make_pair(std::string("MFD3"), hmi_apis::Common_DisplayType::MFD3)); + display_type_enum.insert( + std::make_pair(std::string("MFD4"), hmi_apis::Common_DisplayType::MFD4)); + display_type_enum.insert( + std::make_pair(std::string("MFD5"), hmi_apis::Common_DisplayType::MFD5)); + display_type_enum.insert(std::make_pair( + std::string("GEN3_8_INCH"), hmi_apis::Common_DisplayType::GEN3_8_INCH)); + + character_set_enum.insert(std::make_pair( + std::string("TYPE2SET"), hmi_apis::Common_CharacterSet::TYPE2SET)); + character_set_enum.insert(std::make_pair( + std::string("TYPE5SET"), hmi_apis::Common_CharacterSet::TYPE5SET)); + character_set_enum.insert(std::make_pair( + std::string("CID1SET"), hmi_apis::Common_CharacterSet::CID1SET)); + character_set_enum.insert(std::make_pair( + std::string("CID2SET"), hmi_apis::Common_CharacterSet::CID2SET)); +} + +} // namespace + +HMICapabilitiesImpl::HMICapabilitiesImpl(ApplicationManager& app_mngr) + : is_vr_cooperating_(false) + , is_tts_cooperating_(false) + , is_ui_cooperating_(false) + , is_navi_cooperating_(false) + , is_ivi_cooperating_(false) + , is_vr_ready_response_recieved_(false) + , is_tts_ready_response_recieved_(false) + , is_ui_ready_response_recieved_(false) + , is_navi_ready_response_recieved_(false) + , is_ivi_ready_response_recieved_(false) + , attenuated_supported_(false) + , ui_language_(hmi_apis::Common_Language::INVALID_ENUM) + , vr_language_(hmi_apis::Common_Language::INVALID_ENUM) + , tts_language_(hmi_apis::Common_Language::INVALID_ENUM) + , vehicle_type_(NULL) + , ui_supported_languages_(NULL) + , tts_supported_languages_(NULL) + , vr_supported_languages_(NULL) + , display_capabilities_(NULL) + , hmi_zone_capabilities_(NULL) + , soft_buttons_capabilities_(NULL) + , button_capabilities_(NULL) + , preset_bank_capabilities_(NULL) + , vr_capabilities_(NULL) + , speech_capabilities_(NULL) + , audio_pass_thru_capabilities_(NULL) + , pcm_stream_capabilities_(NULL) + , prerecorded_speech_(NULL) + , is_navigation_supported_(false) + , is_phone_call_supported_(false) + , app_mngr_(app_mngr) + , hmi_language_handler_(app_mngr) { + InitCapabilities(); + if (false == app_mngr_.get_settings().launch_hmi()) { + is_vr_ready_response_recieved_ = true; + is_tts_ready_response_recieved_ = true; + is_ui_ready_response_recieved_ = true; + is_navi_ready_response_recieved_ = true; + is_ivi_ready_response_recieved_ = true; + + is_vr_cooperating_ = true; + is_tts_cooperating_ = true; + is_ui_cooperating_ = true; + is_navi_cooperating_ = true; + is_ivi_cooperating_ = true; + } +} + +HMICapabilitiesImpl::~HMICapabilitiesImpl() { + delete vehicle_type_; + delete ui_supported_languages_; + delete tts_supported_languages_; + delete vr_supported_languages_; + delete display_capabilities_; + delete hmi_zone_capabilities_; + delete soft_buttons_capabilities_; + delete button_capabilities_; + delete preset_bank_capabilities_; + delete vr_capabilities_; + delete speech_capabilities_; + delete audio_pass_thru_capabilities_; + delete pcm_stream_capabilities_; + delete prerecorded_speech_; +} + +bool HMICapabilitiesImpl::is_hmi_capabilities_initialized() const { + bool result = true; + + if (is_vr_ready_response_recieved_ && is_tts_ready_response_recieved_ && + is_ui_ready_response_recieved_ && is_navi_ready_response_recieved_ && + is_ivi_ready_response_recieved_) { + if (is_vr_cooperating_) { + if ((!vr_supported_languages_) || + (hmi_apis::Common_Language::INVALID_ENUM == vr_language_)) { + result = false; + } + } + + if (is_tts_cooperating_) { + if ((!tts_supported_languages_) || + (hmi_apis::Common_Language::INVALID_ENUM == tts_language_)) { + result = false; + } + } + + if (is_ui_cooperating_) { + if ((!ui_supported_languages_) || + (hmi_apis::Common_Language::INVALID_ENUM == ui_language_)) { + result = false; + } + } + + if (is_ivi_cooperating_) { + if (!vehicle_type_) { + result = false; + } + } + } else { + result = false; + } + + return result; +} + +bool HMICapabilitiesImpl::VerifyImageType(const int32_t image_type) const { + if (!display_capabilities_) { + return false; + } + + if (display_capabilities_->keyExists(hmi_response::image_capabilities)) { + const smart_objects::SmartObject& image_caps = + display_capabilities_->getElement(hmi_response::image_capabilities); + for (uint32_t i = 0; i < image_caps.length(); ++i) { + if (image_caps.getElement(i).asInt() == image_type) { + return true; + } + } + } + + return false; +} + +void HMICapabilitiesImpl::set_is_vr_cooperating(const bool value) { + is_vr_ready_response_recieved_ = true; + is_vr_cooperating_ = value; + if (is_vr_cooperating_) { + utils::SharedPtr get_language( + MessageHelper::CreateModuleInfoSO(hmi_apis::FunctionID::VR_GetLanguage, + app_mngr_)); + hmi_language_handler_.set_handle_response_for(*get_language); + app_mngr_.ManageHMICommand(get_language); + utils::SharedPtr get_all_languages( + MessageHelper::CreateModuleInfoSO( + hmi_apis::FunctionID::VR_GetSupportedLanguages, app_mngr_)); + app_mngr_.ManageHMICommand(get_all_languages); + utils::SharedPtr get_capabilities( + MessageHelper::CreateModuleInfoSO( + hmi_apis::FunctionID::VR_GetCapabilities, app_mngr_)); + app_mngr_.ManageHMICommand(get_capabilities); + } +} + +void HMICapabilitiesImpl::set_is_tts_cooperating(const bool value) { + is_tts_ready_response_recieved_ = true; + is_tts_cooperating_ = value; + if (is_tts_cooperating_) { + utils::SharedPtr get_language( + MessageHelper::CreateModuleInfoSO(hmi_apis::FunctionID::TTS_GetLanguage, + app_mngr_)); + hmi_language_handler_.set_handle_response_for(*get_language); + app_mngr_.ManageHMICommand(get_language); + utils::SharedPtr get_all_languages( + MessageHelper::CreateModuleInfoSO( + hmi_apis::FunctionID::TTS_GetSupportedLanguages, app_mngr_)); + app_mngr_.ManageHMICommand(get_all_languages); + utils::SharedPtr get_capabilities( + MessageHelper::CreateModuleInfoSO( + hmi_apis::FunctionID::TTS_GetCapabilities, app_mngr_)); + app_mngr_.ManageHMICommand(get_capabilities); + } +} + +void HMICapabilitiesImpl::set_is_ui_cooperating(const bool value) { + is_ui_ready_response_recieved_ = true; + is_ui_cooperating_ = value; + if (is_ui_cooperating_) { + utils::SharedPtr get_language( + MessageHelper::CreateModuleInfoSO(hmi_apis::FunctionID::UI_GetLanguage, + app_mngr_)); + hmi_language_handler_.set_handle_response_for(*get_language); + app_mngr_.ManageHMICommand(get_language); + utils::SharedPtr get_all_languages( + MessageHelper::CreateModuleInfoSO( + hmi_apis::FunctionID::UI_GetSupportedLanguages, app_mngr_)); + app_mngr_.ManageHMICommand(get_all_languages); + utils::SharedPtr get_capabilities( + MessageHelper::CreateModuleInfoSO( + hmi_apis::FunctionID::UI_GetCapabilities, app_mngr_)); + app_mngr_.ManageHMICommand(get_capabilities); + } +} + +void HMICapabilitiesImpl::set_is_navi_cooperating(const bool value) { + is_navi_ready_response_recieved_ = true; + is_navi_cooperating_ = value; +} + +void HMICapabilitiesImpl::set_is_ivi_cooperating(const bool value) { + is_ivi_ready_response_recieved_ = true; + is_ivi_cooperating_ = value; + if (is_ivi_cooperating_) { + utils::SharedPtr get_type( + MessageHelper::CreateModuleInfoSO( + hmi_apis::FunctionID::VehicleInfo_GetVehicleType, app_mngr_)); + app_mngr_.ManageHMICommand(get_type); + } +} + +void HMICapabilitiesImpl::set_attenuated_supported(const bool state) { + attenuated_supported_ = state; +} + +void HMICapabilitiesImpl::set_active_ui_language( + const hmi_apis::Common_Language::eType language) { + ui_language_ = language; + hmi_language_handler_.set_language_for(HMILanguageHandler::INTERFACE_UI, + language); +} + +void HMICapabilitiesImpl::set_active_vr_language( + const hmi_apis::Common_Language::eType language) { + vr_language_ = language; + hmi_language_handler_.set_language_for(HMILanguageHandler::INTERFACE_VR, + language); +} + +void HMICapabilitiesImpl::set_active_tts_language( + const hmi_apis::Common_Language::eType language) { + tts_language_ = language; + hmi_language_handler_.set_language_for(HMILanguageHandler::INTERFACE_TTS, + language); +} + +const hmi_apis::Common_Language::eType HMICapabilitiesImpl::active_ui_language() + const { + using namespace hmi_apis; + const Common_Language::eType language = + hmi_language_handler_.get_language_for(HMILanguageHandler::INTERFACE_UI); + return Common_Language::INVALID_ENUM != language ? language : ui_language_; +} + +const hmi_apis::Common_Language::eType HMICapabilitiesImpl::active_vr_language() + const { + using namespace hmi_apis; + const Common_Language::eType language = + hmi_language_handler_.get_language_for(HMILanguageHandler::INTERFACE_VR); + return Common_Language::INVALID_ENUM != language ? language : vr_language_; +} + +const hmi_apis::Common_Language::eType +HMICapabilitiesImpl::active_tts_language() const { + using namespace hmi_apis; + const Common_Language::eType language = + hmi_language_handler_.get_language_for(HMILanguageHandler::INTERFACE_TTS); + return Common_Language::INVALID_ENUM != language ? language : tts_language_; +} + +void HMICapabilitiesImpl::set_ui_supported_languages( + const smart_objects::SmartObject& supported_languages) { + if (ui_supported_languages_) { + delete ui_supported_languages_; + } + ui_supported_languages_ = new smart_objects::SmartObject(supported_languages); +} + +void HMICapabilitiesImpl::set_tts_supported_languages( + const smart_objects::SmartObject& supported_languages) { + if (tts_supported_languages_) { + delete tts_supported_languages_; + } + tts_supported_languages_ = + new smart_objects::SmartObject(supported_languages); +} + +void HMICapabilitiesImpl::set_vr_supported_languages( + const smart_objects::SmartObject& supported_languages) { + if (vr_supported_languages_) { + delete vr_supported_languages_; + } + vr_supported_languages_ = new smart_objects::SmartObject(supported_languages); +} + +void HMICapabilitiesImpl::set_display_capabilities( + const smart_objects::SmartObject& display_capabilities) { + if (display_capabilities_) { + delete display_capabilities_; + } + display_capabilities_ = new smart_objects::SmartObject(display_capabilities); +} + +void HMICapabilitiesImpl::set_hmi_zone_capabilities( + const smart_objects::SmartObject& hmi_zone_capabilities) { + if (hmi_zone_capabilities_) { + delete hmi_zone_capabilities_; + } + hmi_zone_capabilities_ = + new smart_objects::SmartObject(hmi_zone_capabilities); +} + +void HMICapabilitiesImpl::set_soft_button_capabilities( + const smart_objects::SmartObject& soft_button_capabilities) { + if (soft_buttons_capabilities_) { + delete soft_buttons_capabilities_; + } + soft_buttons_capabilities_ = + new smart_objects::SmartObject(soft_button_capabilities); +} + +void HMICapabilitiesImpl::set_button_capabilities( + const smart_objects::SmartObject& button_capabilities) { + if (button_capabilities_) { + delete button_capabilities_; + } + button_capabilities_ = new smart_objects::SmartObject(button_capabilities); +} + +void HMICapabilitiesImpl::set_vr_capabilities( + const smart_objects::SmartObject& vr_capabilities) { + if (vr_capabilities_) { + delete vr_capabilities_; + } + vr_capabilities_ = new smart_objects::SmartObject(vr_capabilities); +} + +void HMICapabilitiesImpl::set_speech_capabilities( + const smart_objects::SmartObject& speech_capabilities) { + if (speech_capabilities_) { + delete speech_capabilities_; + } + speech_capabilities_ = new smart_objects::SmartObject(speech_capabilities); +} + +void HMICapabilitiesImpl::set_audio_pass_thru_capabilities( + const smart_objects::SmartObject& audio_pass_thru_capabilities) { + if (audio_pass_thru_capabilities_) { + delete audio_pass_thru_capabilities_; + } + audio_pass_thru_capabilities_ = + new smart_objects::SmartObject(audio_pass_thru_capabilities); +} + +void HMICapabilitiesImpl::set_pcm_stream_capabilities( + const smart_objects::SmartObject& pcm_stream_capabilities) { + if (pcm_stream_capabilities_) { + delete pcm_stream_capabilities_; + } + pcm_stream_capabilities_ = + new smart_objects::SmartObject(pcm_stream_capabilities); +} + +void HMICapabilitiesImpl::set_preset_bank_capabilities( + const smart_objects::SmartObject& preset_bank_capabilities) { + if (preset_bank_capabilities_) { + delete preset_bank_capabilities_; + } + preset_bank_capabilities_ = + new smart_objects::SmartObject(preset_bank_capabilities); +} + +void HMICapabilitiesImpl::set_vehicle_type( + const smart_objects::SmartObject& vehicle_type) { + if (vehicle_type_) { + delete vehicle_type_; + } + vehicle_type_ = new smart_objects::SmartObject(vehicle_type); +} + +void HMICapabilitiesImpl::set_prerecorded_speech( + const smart_objects::SmartObject& prerecorded_speech) { + if (prerecorded_speech_) { + delete prerecorded_speech_; + prerecorded_speech_ = NULL; + } + prerecorded_speech_ = new smart_objects::SmartObject(prerecorded_speech); +} + +void HMICapabilitiesImpl::set_navigation_supported(const bool supported) { + is_navigation_supported_ = supported; +} +void HMICapabilitiesImpl::set_phone_call_supported(const bool supported) { + is_phone_call_supported_ = supported; +} +namespace { + +/* +* @brief function converts json object "languages" to smart object +* +* @param json_languages from file hmi_capabilities.json +* @param languages - the converted object +*/ +void convert_json_languages_to_sm_obj( + const utils::json::JsonValueRef& json_languages, + smart_objects::SmartObject& languages) { + using namespace utils::json; + uint32_t j = 0; + for (JsonValue::const_iterator itr = json_languages.begin(), + end = json_languages.end(); + itr != end; + ++itr) { + languages[j++] = MessageHelper::CommonLanguageFromString((*itr).AsString()); + } +} + +} // namespace + +void HMICapabilitiesImpl::Init(resumption::LastState* last_state) { + hmi_language_handler_.Init(last_state); + if (false == load_capabilities_from_file()) { + LOGGER_ERROR(logger_, "file hmi_capabilities.json was not loaded"); + } else { + LOGGER_INFO(logger_, "file hmi_capabilities.json was loaded"); + } + hmi_language_handler_.set_default_capabilities_languages( + ui_language_, vr_language_, tts_language_); +} + +bool HMICapabilitiesImpl::is_ui_cooperating() const { + return is_ui_cooperating_; +} + +bool HMICapabilitiesImpl::is_vr_cooperating() const { + return is_vr_cooperating_; +} + +bool HMICapabilitiesImpl::is_tts_cooperating() const { + return is_tts_cooperating_; +} + +bool HMICapabilitiesImpl::is_navi_cooperating() const { + return is_navi_cooperating_; +} + +bool HMICapabilitiesImpl::is_ivi_cooperating() const { + return is_ivi_cooperating_; +} + +const smart_objects::SmartObject* HMICapabilitiesImpl::ui_supported_languages() + const { + return ui_supported_languages_; +} + +const smart_objects::SmartObject* HMICapabilitiesImpl::vr_supported_languages() + const { + return vr_supported_languages_; +} + +const smart_objects::SmartObject* HMICapabilitiesImpl::tts_supported_languages() + const { + return tts_supported_languages_; +} + +const smart_objects::SmartObject* HMICapabilitiesImpl::display_capabilities() + const { + return display_capabilities_; +} + +const smart_objects::SmartObject* HMICapabilitiesImpl::hmi_zone_capabilities() + const { + return hmi_zone_capabilities_; +} + +const smart_objects::SmartObject* +HMICapabilitiesImpl::soft_button_capabilities() const { + return soft_buttons_capabilities_; +} + +const smart_objects::SmartObject* HMICapabilitiesImpl::button_capabilities() + const { + return button_capabilities_; +} + +const smart_objects::SmartObject* HMICapabilitiesImpl::speech_capabilities() + const { + return speech_capabilities_; +} + +const smart_objects::SmartObject* HMICapabilitiesImpl::vr_capabilities() const { + return vr_capabilities_; +} + +const smart_objects::SmartObject* +HMICapabilitiesImpl::audio_pass_thru_capabilities() const { + return audio_pass_thru_capabilities_; +} + +const smart_objects::SmartObject* HMICapabilitiesImpl::pcm_stream_capabilities() + const { + return pcm_stream_capabilities_; +} + +const smart_objects::SmartObject* +HMICapabilitiesImpl::preset_bank_capabilities() const { + return preset_bank_capabilities_; +} + +bool HMICapabilitiesImpl::attenuated_supported() const { + return attenuated_supported_; +} + +const smart_objects::SmartObject* HMICapabilitiesImpl::vehicle_type() const { + return vehicle_type_; +} + +const smart_objects::SmartObject* HMICapabilitiesImpl::prerecorded_speech() + const { + return prerecorded_speech_; +} + +bool HMICapabilitiesImpl::navigation_supported() const { + return is_navigation_supported_; +} + +bool HMICapabilitiesImpl::phone_call_supported() const { + return is_phone_call_supported_; +} + +bool HMICapabilitiesImpl::load_capabilities_from_file() { + std::string json_string; + std::string file_name = app_mngr_.get_settings().hmi_capabilities_file_name(); + + if (!file_system::FileExists(file_name)) { + return false; + } + + if (!file_system::ReadFile(file_name, json_string)) { + return false; + } + + try { + utils::json::JsonValue::ParseResult parse_result = + utils::json::JsonValue::Parse(json_string); + if (!parse_result.second) { + return false; + } + const utils::json::JsonValue& root_json = parse_result.first; + // UI + if (root_json.HasMember("UI")) { + const utils::json::JsonValueRef ui = root_json["UI"]; + + if (ui.HasMember("language")) { + const std::string lang = ui["language"].AsString(); + set_active_ui_language(MessageHelper::CommonLanguageFromString(lang)); + } else { + set_active_ui_language( + MessageHelper::CommonLanguageFromString("EN-US")); + } + + if (ui.HasMember("languages")) { + smart_objects::SmartObject ui_languages_so( + smart_objects::SmartType_Array); + const utils::json::JsonValueRef languages_ui = ui["languages"]; + convert_json_languages_to_sm_obj(languages_ui, ui_languages_so); + set_ui_supported_languages(ui_languages_so); + } + + if (ui.HasMember("displayCapabilities")) { + smart_objects::SmartObject display_capabilities_so; + const utils::json::JsonValueRef display_capabilities = + ui["displayCapabilities"]; + Formatters::CFormatterJsonBase::jsonValueToObj(display_capabilities, + display_capabilities_so); + + if (display_capabilities_so.keyExists(hmi_response::display_type)) { + std::map::const_iterator it = + display_type_enum.find( + (display_capabilities_so[hmi_response::display_type]) + .asString()); + display_capabilities_so.erase(hmi_response::display_type); + if (display_type_enum.end() != it) { + display_capabilities_so[hmi_response::display_type] = it->second; + } + } + + if (display_capabilities_so.keyExists(hmi_response::text_fields)) { + const uint32_t kLen = + display_capabilities_so[hmi_response::text_fields].length(); + + for (uint32_t i = 0; i < kLen; ++i) { + if ((display_capabilities_so[hmi_response::text_fields][i]) + .keyExists(strings::name)) { + std::map::const_iterator + it_text_field_name = text_fields_enum_name.find( + display_capabilities_so[hmi_response::text_fields][i] + [strings::name].asString()); + display_capabilities_so[hmi_response::text_fields][i].erase( + strings::name); + if (text_fields_enum_name.end() != it_text_field_name) { + display_capabilities_so[hmi_response::text_fields][i] + [strings::name] = + it_text_field_name->second; + } + } + if ((display_capabilities_so[hmi_response::text_fields][i]) + .keyExists(strings::character_set)) { + std::map::const_iterator + it_characte_set = character_set_enum.find( + display_capabilities_so[hmi_response::text_fields][i] + [strings::character_set] + .asString()); + display_capabilities_so[hmi_response::text_fields][i].erase( + strings::character_set); + if (character_set_enum.end() != it_characte_set) { + display_capabilities_so[hmi_response::text_fields][i] + [strings::character_set] = + it_characte_set->second; + } + } + } + } + + if (display_capabilities_so.keyExists(hmi_response::image_fields)) { + smart_objects::SmartObject& array_image_fields = + display_capabilities_so[hmi_response::image_fields]; + for (uint32_t i = 0; i < array_image_fields.length(); ++i) { + if (array_image_fields[i].keyExists(strings::name)) { + std::map::const_iterator + it = image_field_name_enum.find( + (array_image_fields[i][strings::name]).asString()); + array_image_fields[i].erase(strings::name); + if (image_field_name_enum.end() != it) { + array_image_fields[i][strings::name] = it->second; + } + } + if (array_image_fields[i].keyExists( + strings::image_type_supported)) { + smart_objects::SmartObject& image_type_supported_array = + array_image_fields[i][strings::image_type_supported]; + smart_objects::SmartObject image_type_supported_enum( + smart_objects::SmartType_Array); + for (uint32_t k = 0, j = 0; + k < image_type_supported_array.length(); + ++k) { + std::map::const_iterator it = + file_type_enum.find( + (image_type_supported_array[k]).asString()); + if (file_type_enum.end() != it) { + image_type_supported_enum[j++] = it->second; + } + } + array_image_fields[i].erase(strings::image_type_supported); + array_image_fields[i][strings::image_type_supported] = + image_type_supported_enum; + } + } + } + if (display_capabilities_so.keyExists( + hmi_response::media_clock_formats)) { + smart_objects::SmartObject& media_clock_formats_array = + display_capabilities_so[hmi_response::media_clock_formats]; + smart_objects::SmartObject media_clock_formats_enum( + smart_objects::SmartType_Array); + for (uint32_t i = 0, j = 0; i < media_clock_formats_array.length(); + ++i) { + std::map::const_iterator + it = media_clock_enum_name.find( + (media_clock_formats_array[i]).asString()); + if (media_clock_enum_name.end() != it) { + media_clock_formats_enum[j++] = it->second; + } + } + display_capabilities_so.erase(hmi_response::media_clock_formats); + display_capabilities_so[hmi_response::media_clock_formats] = + media_clock_formats_enum; + } + + if (display_capabilities_so.keyExists( + hmi_response::image_capabilities)) { + smart_objects::SmartObject& image_capabilities_array = + display_capabilities_so[hmi_response::image_capabilities]; + smart_objects::SmartObject image_capabilities_enum( + smart_objects::SmartType_Array); + for (uint32_t i = 0, j = 0; i < image_capabilities_array.length(); + ++i) { + std::map::const_iterator it = + image_type_enum.find((image_capabilities_array[i]).asString()); + if (image_type_enum.end() != it) { + image_capabilities_enum[j++] = it->second; + } + } + display_capabilities_so.erase(hmi_response::image_capabilities); + display_capabilities_so[hmi_response::image_capabilities] = + image_capabilities_enum; + } + set_display_capabilities(display_capabilities_so); + } + + if (ui.HasMember("audioPassThruCapabilities")) { + const utils::json::JsonValueRef audio_capabilities = + ui["audioPassThruCapabilities"]; + smart_objects::SmartObject audio_capabilities_so = + smart_objects::SmartObject(smart_objects::SmartType_Array); + audio_capabilities_so = + smart_objects::SmartObject(smart_objects::SmartType_Map); + if (audio_capabilities.HasMember("samplingRate")) { + audio_capabilities_so["samplingRate"] = + sampling_rate_enum.find(audio_capabilities["samplingRate"] + .AsString())->second; + } + if (audio_capabilities.HasMember("bitsPerSample")) { + audio_capabilities_so["bitsPerSample"] = + bit_per_sample_enum.find(audio_capabilities["bitsPerSample"] + .AsString())->second; + } + if (audio_capabilities.HasMember("audioType")) { + audio_capabilities_so["audioType"] = + audio_type_enum.find(audio_capabilities["audioType"].AsString()) + ->second; + } + set_audio_pass_thru_capabilities(audio_capabilities_so); + } + + if (ui.HasMember("pcmStreamCapabilities")) { + const utils::json::JsonValueRef pcm_capabilities = + ui["pcmStreamCapabilities"]; + smart_objects::SmartObject pcm_capabilities_so = + smart_objects::SmartObject(smart_objects::SmartType_Map); + + if (pcm_capabilities.HasMember("samplingRate")) { + pcm_capabilities_so["samplingRate"] = + sampling_rate_enum.find(pcm_capabilities["samplingRate"] + .AsString())->second; + } + if (pcm_capabilities.HasMember("bitsPerSample")) { + pcm_capabilities_so["bitsPerSample"] = + bit_per_sample_enum.find(pcm_capabilities["bitsPerSample"] + .AsString())->second; + } + if (pcm_capabilities.HasMember("audioType")) { + pcm_capabilities_so["audioType"] = + audio_type_enum.find(pcm_capabilities["audioType"].AsString()) + ->second; + } + + set_pcm_stream_capabilities(pcm_capabilities_so); + } + + if (ui.HasMember("hmiZoneCapabilities")) { + smart_objects::SmartObject hmi_zone_capabilities_so = + smart_objects::SmartObject(smart_objects::SmartType_Array); + hmi_zone_capabilities_so = + hmi_zone_enum.find(ui["hmiZoneCapabilities"].AsString())->second; + set_hmi_zone_capabilities(hmi_zone_capabilities_so); + } + + if (ui.HasMember("softButtonCapabilities")) { + const utils::json::JsonValueRef soft_button_capabilities = + ui["softButtonCapabilities"]; + smart_objects::SmartObject soft_button_capabilities_so; + Formatters::CFormatterJsonBase::jsonValueToObj( + soft_button_capabilities, soft_button_capabilities_so); + set_soft_button_capabilities(soft_button_capabilities_so); + } + } // UI end + + // VR + if (root_json.HasMember("VR")) { + const utils::json::JsonValueRef vr = root_json["VR"]; + if (vr.HasMember("language")) { + const std::string lang = vr["language"].AsString(); + set_active_vr_language(MessageHelper::CommonLanguageFromString(lang)); + } else { + set_active_vr_language( + MessageHelper::CommonLanguageFromString("EN-US")); + } + + if (vr.HasMember("languages")) { + const utils::json::JsonValueRef languages_vr = vr["languages"]; + smart_objects::SmartObject vr_languages_so = + smart_objects::SmartObject(smart_objects::SmartType_Array); + convert_json_languages_to_sm_obj(languages_vr, vr_languages_so); + set_vr_supported_languages(vr_languages_so); + } + + if (vr.HasMember("capabilities")) { + const utils::json::JsonValueRef capabilities = vr["capabilities"]; + smart_objects::SmartObject vr_capabilities_so = + smart_objects::SmartObject(smart_objects::SmartType_Array); + for (utils::json::JsonValue::ArrayIndex i = 0, + size = capabilities.Size(); + i < size; + ++i) { + vr_capabilities_so[i] = + vr_enum_capabilities.find(capabilities[i].AsString())->second; + } + set_vr_capabilities(vr_capabilities_so); + } + } // VR end + + // TTS + if (root_json.HasMember("TTS")) { + const utils::json::JsonValueRef tts = root_json["TTS"]; + + if (tts.HasMember("language")) { + const std::string lang = tts["language"].AsString(); + set_active_tts_language(MessageHelper::CommonLanguageFromString(lang)); + } else { + set_active_tts_language( + MessageHelper::CommonLanguageFromString("EN-US")); + } + + if (tts.HasMember("languages")) { + const utils::json::JsonValueRef languages_tts = tts["languages"]; + smart_objects::SmartObject tts_languages_so = + smart_objects::SmartObject(smart_objects::SmartType_Array); + convert_json_languages_to_sm_obj(languages_tts, tts_languages_so); + set_tts_supported_languages(tts_languages_so); + } + + if (tts.HasMember("capabilities")) { + set_speech_capabilities( + smart_objects::SmartObject(tts["capabilities"].AsString())); + } + } // TTS end + + // Buttons + if (root_json.HasMember("Buttons")) { + const utils::json::JsonValueRef buttons = root_json["Buttons"]; + if (buttons.HasMember("capabilities")) { + const utils::json::JsonValueRef bt_capabilities = + buttons["capabilities"]; + smart_objects::SmartObject buttons_capabilities_so; + Formatters::CFormatterJsonBase::jsonValueToObj(bt_capabilities, + buttons_capabilities_so); + + for (uint32_t i = 0; i < buttons_capabilities_so.length(); ++i) { + if ((buttons_capabilities_so[i]).keyExists(strings::name)) { + std::map::const_iterator it = + button_enum_name.find( + (buttons_capabilities_so[i][strings::name]).asString()); + buttons_capabilities_so[i].erase(strings::name); + if (button_enum_name.end() != it) { + buttons_capabilities_so[i][strings::name] = it->second; + } + } + } + set_button_capabilities(buttons_capabilities_so); + } + if (buttons.HasMember("presetBankCapabilities")) { + const utils::json::JsonValueRef presetBank = + buttons["presetBankCapabilities"]; + smart_objects::SmartObject preset_bank_so; + Formatters::CFormatterJsonBase::jsonValueToObj(presetBank, + preset_bank_so); + set_preset_bank_capabilities(preset_bank_so); + } + } // Buttons end + + // VehicleType + if (root_json.HasMember("VehicleInfo")) { + const utils::json::JsonValueRef vehicle_info = root_json["VehicleInfo"]; + smart_objects::SmartObject vehicle_type_so; + Formatters::CFormatterJsonBase::jsonValueToObj(vehicle_info, + vehicle_type_so); + set_vehicle_type(vehicle_type_so); + } // VehicleType end + + } catch (...) { + return false; + } + return true; +} + +void HMICapabilitiesImpl::set_ccpu_version(const std::string& ccpu_version) { + ccpu_version_ = ccpu_version; +} + +const std::string& HMICapabilitiesImpl::ccpu_version() const { + return ccpu_version_; +} + +bool HMICapabilitiesImpl::check_existing_json_member( + const Json::Value& json_member, const char* name_of_member) const { + return json_member.isMember(name_of_member); +} + +void HMICapabilitiesImpl::convert_json_languages_to_obj( + const Json::Value& json_languages, + smart_objects::SmartObject& languages) const { + for (uint32_t i = 0, j = 0; i < json_languages.size(); ++i) { + languages[j++] = + MessageHelper::CommonLanguageFromString(json_languages[i].asString()); + } +} + +} // namespace application_manager diff --git a/src/components/application_manager/test/include/application_manager/hmi_capabilities_for_testing.h b/src/components/application_manager/test/include/application_manager/hmi_capabilities_for_testing.h index be511b3316..9764a9997f 100644 --- a/src/components/application_manager/test/include/application_manager/hmi_capabilities_for_testing.h +++ b/src/components/application_manager/test/include/application_manager/hmi_capabilities_for_testing.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2015, Ford Motor Company + * Copyright (c) 2016, Ford Motor Company * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -33,17 +33,17 @@ #ifndef SRC_COMPONENTS_APPLICATION_MANAGER_TEST_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_FOR_TESTING_H_ #define SRC_COMPONENTS_APPLICATION_MANAGER_TEST_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_FOR_TESTING_H_ -#include "application_manager/hmi_capabilities.h" +#include "application_manager/hmi_capabilities_impl.h" namespace test { namespace components { namespace application_manager_test { class HMICapabilitiesForTesting - : public ::application_manager::HMICapabilities { + : public ::application_manager::HMICapabilitiesImpl { public: HMICapabilitiesForTesting(::application_manager::ApplicationManager& app_mngr) - : HMICapabilities(app_mngr) {} + : HMICapabilitiesImpl(app_mngr) {} bool LoadCapabilitiesFromFile() { return load_capabilities_from_file(); } diff --git a/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h b/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h new file mode 100644 index 0000000000..9c82b90725 --- /dev/null +++ b/src/components/application_manager/test/include/application_manager/mock_hmi_capabilities.h @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2016, Ford Motor Company + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * Neither the name of the Ford Motor Company nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_TEST_INCLUDE_APPLICATION_MANAGER_MOCK_HMI_CAPABILITIES_H_ +#define SRC_COMPONENTS_APPLICATION_MANAGER_TEST_INCLUDE_APPLICATION_MANAGER_MOCK_HMI_CAPABILITIES_H_ + +#include + +#include "application_manager/hmi_capabilities.h" +#include "gmock/gmock.h" + +namespace test { +namespace components { +namespace application_manager_test { + +class MockHMICapabilities : public ::application_manager::HMICapabilities { + public: + MOCK_CONST_METHOD0(is_hmi_capabilities_initialized, bool()); + MOCK_CONST_METHOD1(VerifyImageType, bool(const int32_t image_type)); + + MOCK_CONST_METHOD0(is_vr_cooperating, bool()); + MOCK_METHOD1(set_is_vr_cooperating, void(const bool value)); + + MOCK_CONST_METHOD0(is_tts_cooperating, bool()); + MOCK_METHOD1(set_is_tts_cooperating, void(const bool value)); + + MOCK_CONST_METHOD0(is_ui_cooperating, bool()); + MOCK_METHOD1(set_is_ui_cooperating, void(const bool value)); + + MOCK_CONST_METHOD0(is_navi_cooperating, bool()); + MOCK_METHOD1(set_is_navi_cooperating, void(const bool value)); + + MOCK_CONST_METHOD0(is_ivi_cooperating, bool()); + MOCK_METHOD1(set_is_ivi_cooperating, void(const bool value)); + + MOCK_CONST_METHOD0(attenuated_supported, bool()); + + MOCK_METHOD1(set_attenuated_supported, void(const bool state)); + + MOCK_CONST_METHOD0(active_ui_language, + const hmi_apis::Common_Language::eType()); + + MOCK_METHOD1(set_active_ui_language, + void(const hmi_apis::Common_Language::eType language)); + + MOCK_CONST_METHOD0(ui_supported_languages, + const smart_objects::SmartObject*()); + MOCK_METHOD1(set_ui_supported_languages, + void(const smart_objects::SmartObject& supported_languages)); + + MOCK_CONST_METHOD0(active_vr_language, + const hmi_apis::Common_Language::eType()); + MOCK_METHOD1(set_active_vr_language, + void(const hmi_apis::Common_Language::eType language)); + + MOCK_CONST_METHOD0(vr_supported_languages, + const smart_objects::SmartObject*()); + MOCK_METHOD1(set_vr_supported_languages, + void(const smart_objects::SmartObject& supported_languages)); + + MOCK_CONST_METHOD0(active_tts_language, + const hmi_apis::Common_Language::eType()); + MOCK_METHOD1(set_active_tts_language, + void(const hmi_apis::Common_Language::eType language)); + + MOCK_CONST_METHOD0(tts_supported_languages, + const smart_objects::SmartObject*()); + MOCK_METHOD1(set_tts_supported_languages, + void(const smart_objects::SmartObject& supported_languages)); + + MOCK_CONST_METHOD0(display_capabilities, const smart_objects::SmartObject*()); + MOCK_METHOD1(set_display_capabilities, + void(const smart_objects::SmartObject& display_capabilities)); + + MOCK_CONST_METHOD0(hmi_zone_capabilities, + const smart_objects::SmartObject*()); + MOCK_METHOD1(set_hmi_zone_capabilities, + void(const smart_objects::SmartObject& hmi_zone_capabilities)); + + MOCK_CONST_METHOD0(soft_button_capabilities, + const smart_objects::SmartObject*()); + MOCK_METHOD1( + set_soft_button_capabilities, + void(const smart_objects::SmartObject& soft_button_capabilities)); + + MOCK_CONST_METHOD0(button_capabilities, const smart_objects::SmartObject*()); + MOCK_METHOD1(set_button_capabilities, + void(const smart_objects::SmartObject& button_capabilities)); + + MOCK_CONST_METHOD0(speech_capabilities, const smart_objects::SmartObject*()); + MOCK_METHOD1(set_speech_capabilities, + void(const smart_objects::SmartObject& speech_capabilities)); + + MOCK_CONST_METHOD0(vr_capabilities, const smart_objects::SmartObject*()); + MOCK_METHOD1(set_vr_capabilities, + void(const smart_objects::SmartObject& vr_capabilities)); + + MOCK_CONST_METHOD0(audio_pass_thru_capabilities, + const smart_objects::SmartObject*()); + MOCK_METHOD1( + set_audio_pass_thru_capabilities, + void(const smart_objects::SmartObject& audio_pass_thru_capabilities)); + + MOCK_CONST_METHOD0(pcm_stream_capabilities, + const smart_objects::SmartObject*()); + MOCK_METHOD1(set_pcm_stream_capabilities, + void(const smart_objects::SmartObject& pcm_stream_capabilities)); + + MOCK_CONST_METHOD0(preset_bank_capabilities, + const smart_objects::SmartObject*()); + MOCK_METHOD1( + set_preset_bank_capabilities, + void(const smart_objects::SmartObject& preset_bank_capabilities)); + + MOCK_CONST_METHOD0(vehicle_type, const smart_objects::SmartObject*()); + MOCK_METHOD1(set_vehicle_type, + void(const smart_objects::SmartObject& vehicle_type)); + + MOCK_CONST_METHOD0(prerecorded_speech, const smart_objects::SmartObject*()); + MOCK_METHOD1(set_prerecorded_speech, + void(const smart_objects::SmartObject& prerecorded_speech)); + + MOCK_CONST_METHOD0(navigation_supported, bool()); + MOCK_METHOD1(set_navigation_supported, void(const bool supported)); + + MOCK_CONST_METHOD0(phone_call_supported, bool()); + MOCK_METHOD1(set_phone_call_supported, void(const bool supported)); + + MOCK_METHOD1(Init, void(resumption::LastState* last_state)); + + protected: + MOCK_CONST_METHOD2(check_existing_json_member, + bool(const Json::Value& json_member, + const char* name_of_member)); + + MOCK_CONST_METHOD2(convert_json_languages_to_obj, + void(const Json::Value& json_languages, + smart_objects::SmartObject& languages)); +}; + +} // namespace application_manager_test +} // namespace components +} // namespace test + +#endif // SRC_COMPONENTS_APPLICATION_MANAGER_TEST_INCLUDE_APPLICATION_MANAGER_MOCK_HMI_CAPABILITIES_H_ diff --git a/src/components/include/application_manager/hmi_capabilities.h b/src/components/include/application_manager/hmi_capabilities.h new file mode 100644 index 0000000000..ca7f501fa9 --- /dev/null +++ b/src/components/include/application_manager/hmi_capabilities.h @@ -0,0 +1,442 @@ +/* + * Copyright (c) 2016, Ford Motor Company + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following + * disclaimer in the documentation and/or other materials provided with the + * distribution. + * + * Neither the name of the Ford Motor Company nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef SRC_COMPONENTS_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_H_ +#define SRC_COMPONENTS_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_H_ + +#include "interfaces/HMI_API.h" +#include "interfaces/MOBILE_API.h" +#include "json/json.h" +#include "utils/macro.h" +#include "utils/json_utils.h" +#include "application_manager/hmi_language_handler.h" + +namespace NsSmartDeviceLink { +namespace NsSmartObjects { +class SmartObject; +} +} +namespace resumption { +class LastState; +} + +namespace smart_objects = NsSmartDeviceLink::NsSmartObjects; + +namespace application_manager { +class ApplicationManager; + +class HMICapabilities { + public: + /* + * @brief Class destructor + * + */ + virtual ~HMICapabilities() {} + + /** + * @brief Checks if all HMI capabilities received + * + * @return TRUE if all information received, otherwise FALSE + */ + virtual bool is_hmi_capabilities_initialized() const = 0; + + /* + * @brief Checks is image type(Static/Dynamic) requested by + * Mobile Device is supported on current HMI. + * @param image_type recieved type of image from Enum. + * @return Bool true if supported + */ + virtual bool VerifyImageType(const int32_t image_type) const = 0; + + /** + * @brief Checks if all HMI capabilities received + * + * @return TRUE if all information received, otherwise FALSE + */ + virtual bool is_vr_cooperating() const = 0; + virtual void set_is_vr_cooperating(const bool value) = 0; + + virtual bool is_tts_cooperating() const = 0; + virtual void set_is_tts_cooperating(const bool value) = 0; + + virtual bool is_ui_cooperating() const = 0; + virtual void set_is_ui_cooperating(const bool value) = 0; + + virtual bool is_navi_cooperating() const = 0; + virtual void set_is_navi_cooperating(const bool value) = 0; + + virtual bool is_ivi_cooperating() const = 0; + virtual void set_is_ivi_cooperating(const bool value) = 0; + + /* + * @brief Interface used to store information about software version of the + *target + * + * @param ccpu_version Received system/hmi software version + */ + virtual void set_ccpu_version(const std::string& ccpu_version) = 0; + + /* + * @brief Returns software version of the target + * + * @return TRUE if it supported, otherwise FALSE + */ + virtual const std::string& ccpu_version() const = 0; + + /* + * @brief Retrieves if mixing audio is supported by HMI + * (ie recording TTS command and playing audio) + * + * @return Current state of the mixing audio flag + */ + virtual bool attenuated_supported() const = 0; + + /* + * @brief Sets state for mixing audio + * + * @param state New state to be set + */ + virtual void set_attenuated_supported(const bool state) = 0; + + /* + * @brief Retrieves currently active UI language + * + * @return Currently active UI language + */ + virtual const hmi_apis::Common_Language::eType active_ui_language() const = 0; + + /* + * @brief Sets currently active UI language + * + * @param language Currently active UI language + */ + virtual void set_active_ui_language( + const hmi_apis::Common_Language::eType language) = 0; + + /* + * @brief Retrieves UI supported languages + * + * @return Currently supported UI languages + */ + virtual const smart_objects::SmartObject* ui_supported_languages() const = 0; + + /* + * @brief Sets supported UI languages + * + * @param supported_languages Supported UI languages + */ + virtual void set_ui_supported_languages( + const smart_objects::SmartObject& supported_languages) = 0; + + /* + * @brief Retrieves currently active VR language + * + * @return Currently active VR language + */ + virtual const hmi_apis::Common_Language::eType active_vr_language() const = 0; + + /* + * @brief Sets currently active VR language + * + * @param language Currently active VR language + */ + virtual void set_active_vr_language( + const hmi_apis::Common_Language::eType language) = 0; + + /* + * @brief Retrieves VR supported languages + * + * @return Currently supported VR languages + */ + virtual const smart_objects::SmartObject* vr_supported_languages() const = 0; + + /* + * @brief Sets supported VR languages + * + * @param supported_languages Supported VR languages + */ + virtual void set_vr_supported_languages( + const smart_objects::SmartObject& supported_languages) = 0; + + /* + * @brief Retrieves currently active TTS language + * + * @return Currently active TTS language + */ + virtual const hmi_apis::Common_Language::eType active_tts_language() + const = 0; + + /* + * @brief Sets currently active TTS language + * + * @param language Currently active TTS language + */ + virtual void set_active_tts_language( + const hmi_apis::Common_Language::eType language) = 0; + + /* + * @brief Retrieves TTS supported languages + * + * @return Currently supported TTS languages + */ + virtual const smart_objects::SmartObject* tts_supported_languages() const = 0; + + /* + * @brief Sets supported TTS languages + * + * @param supported_languages Supported TTS languages + */ + virtual void set_tts_supported_languages( + const smart_objects::SmartObject& supported_languages) = 0; + + /* + * @brief Retrieves information about the display capabilities + * + * @return Currently supported display capabilities + */ + virtual const smart_objects::SmartObject* display_capabilities() const = 0; + + /* + * @brief Sets supported display capabilities + * + * @param display_capabilities supported display capabilities + */ + virtual void set_display_capabilities( + const smart_objects::SmartObject& display_capabilities) = 0; + + /* + * @brief Retrieves information about the HMI zone capabilities + * + * @return Currently supported HMI zone capabilities + */ + virtual const smart_objects::SmartObject* hmi_zone_capabilities() const = 0; + + /* + * @brief Sets supported HMI zone capabilities + * + * @param hmi_zone_capabilities supported HMI zone capabilities + */ + virtual void set_hmi_zone_capabilities( + const smart_objects::SmartObject& hmi_zone_capabilities) = 0; + + /* + * @brief Retrieves information about the SoftButton's capabilities + * + * @return Currently supported SoftButton's capabilities + */ + virtual const smart_objects::SmartObject* soft_button_capabilities() + const = 0; + + /* + * @brief Sets supported SoftButton's capabilities + * + * @param soft_button_capabilities supported SoftButton's capabilities + */ + virtual void set_soft_button_capabilities( + const smart_objects::SmartObject& soft_button_capabilities) = 0; + + /* + * @brief Retrieves information about the Button's capabilities + * + * @return Currently supported Button's capabilities + */ + virtual const smart_objects::SmartObject* button_capabilities() const = 0; + + /* + * @brief Sets supported Button's capabilities + * + * @param soft_button_capabilities supported Button's capabilities + */ + virtual void set_button_capabilities( + const smart_objects::SmartObject& button_capabilities) = 0; + + /* + * @brief Sets supported speech capabilities + * + * @param speech_capabilities supported speech capabilities + */ + virtual void set_speech_capabilities( + const smart_objects::SmartObject& speech_capabilities) = 0; + + /* + * @brief Retrieves information about the speech capabilities + * + * @return Currently supported speech capabilities + */ + virtual const smart_objects::SmartObject* speech_capabilities() const = 0; + + /* + * @brief Sets supported VR capabilities + * + * @param vr_capabilities supported VR capabilities + */ + virtual void set_vr_capabilities( + const smart_objects::SmartObject& vr_capabilities) = 0; + + /* + * @brief Retrieves information about the VR capabilities + * + * @return Currently supported VR capabilities + */ + virtual const smart_objects::SmartObject* vr_capabilities() const = 0; + + /* + * @brief Sets supported audio_pass_thru capabilities + * + * @param vr_capabilities supported audio_pass_thru capabilities + */ + virtual void set_audio_pass_thru_capabilities( + const smart_objects::SmartObject& audio_pass_thru_capabilities) = 0; + + /* + * @brief Retrieves information about the audio_pass_thru capabilities + * + * @return Currently supported audio_pass_thru capabilities + */ + virtual const smart_objects::SmartObject* audio_pass_thru_capabilities() + const = 0; + + /* + * @brief Sets supported pcm_stream capabilities + * + * @param supported pcm_stream capabilities + */ + virtual void set_pcm_stream_capabilities( + const smart_objects::SmartObject& pcm_stream_capabilities) = 0; + + /* + * @brief Retrieves information about the pcm_stream capabilities + * + * @return Currently supported pcm_streaming capabilities + */ + virtual const smart_objects::SmartObject* pcm_stream_capabilities() const = 0; + + /* + * @brief Retrieves information about the preset bank capabilities + * + * @return Currently supported preset bank capabilities + */ + virtual const smart_objects::SmartObject* preset_bank_capabilities() + const = 0; + + /* + * @brief Sets supported preset bank capabilities + * + * @param soft_button_capabilities supported preset bank capabilities + */ + virtual void set_preset_bank_capabilities( + const smart_objects::SmartObject& preset_bank_capabilities) = 0; + + /* + * @brief Sets vehicle information(make, model, modelYear) + * + * @param vehicle_type Cuurent vehicle information + */ + virtual void set_vehicle_type( + const smart_objects::SmartObject& vehicle_type) = 0; + + /* + * @brief Retrieves vehicle information(make, model, modelYear) + * + * @param vehicle_type Cuurent vehicle information + */ + virtual const smart_objects::SmartObject* vehicle_type() const = 0; + + /* + * @brief Retrieves information about the prerecorded speech + * + * @return Currently supported prerecorded speech + */ + virtual const smart_objects::SmartObject* prerecorded_speech() const = 0; + + /* + * @brief Sets supported prerecorded speech + * + * @param prerecorded_speech supported prerecorded speech + */ + virtual void set_prerecorded_speech( + const smart_objects::SmartObject& prerecorded_speech) = 0; + + /* + * @brief Interface used to store information if navigation + * supported by the system + * + * @param supported Indicates if navigation supported by the system + */ + virtual void set_navigation_supported(const bool supported) = 0; + + /* + * @brief Retrieves information if navi supported by the system + * + * @return TRUE if it supported, otherwise FALSE + */ + virtual bool navigation_supported() const = 0; + + /* + * @brief Interface used to store information if phone call + * supported by the system + * + * @param supported Indicates if navigation supported by the sustem + */ + virtual void set_phone_call_supported(const bool supported) = 0; + + /* + * @brief Retrieves information if phone call supported by the system + * + * @return TRUE if it supported, otherwise FALSE + */ + virtual bool phone_call_supported() const = 0; + + virtual void Init(resumption::LastState* last_state) = 0; + + protected: + /* + * @brief function checks if json member exists + * + * @param json_member from file hmi_capabilities.json + * @param name_of_member name which we should check + * hmi_capabilities.json + * + * @returns TRUE if member exists and returns FALSE if + * member does not exist. + */ + virtual bool check_existing_json_member(const Json::Value& json_member, + const char* name_of_member) const = 0; + + virtual void convert_json_languages_to_obj( + const Json::Value& json_languages, + smart_objects::SmartObject& languages) const = 0; +}; + +} // namespace application_manager + +#endif // SRC_COMPONENTS_INCLUDE_APPLICATION_MANAGER_HMI_CAPABILITIES_H_ -- cgit v1.2.1