diff options
author | Sho Amano <samano@xevo.com> | 2018-02-27 18:56:52 +0900 |
---|---|---|
committer | Sho Amano <samano@xevo.com> | 2019-07-25 20:10:10 +0900 |
commit | 2b873846bf87d792882bcd395dbcf462f015f4e2 (patch) | |
tree | ecfa160ee6f8ed8cc56f5ea53ff5c27ac0226371 | |
parent | e9d7ae033dc710ac899f994b2b01f8535f35741d (diff) | |
download | sdl_core-2b873846bf87d792882bcd395dbcf462f015f4e2.tar.gz |
Update audioPassThruCapabilities in hmi_capabilities.json to array
Also, hmi_capabilities_impl.cc is updated to support
both old and new formats of the json file.
9 files changed, 129 insertions, 28 deletions
diff --git a/src/appMain/hmi_capabilities.json b/src/appMain/hmi_capabilities.json index 481c6d0c6b..de7e407d24 100755 --- a/src/appMain/hmi_capabilities.json +++ b/src/appMain/hmi_capabilities.json @@ -274,11 +274,11 @@ "STATIC" ] }, - "audioPassThruCapabilities": { + "audioPassThruCapabilities": [{ "samplingRate": "44KHZ", "bitsPerSample": "RATE_8_BIT", "audioType": "PCM" - }, + }], "pcmStreamCapabilities": { "samplingRate": "16KHZ", "bitsPerSample": "RATE_16_BIT", 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 index 94fc293c3e..c4698ae084 100644 --- a/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h +++ b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h @@ -542,6 +542,18 @@ class HMICapabilitiesImpl : public HMICapabilities { const Json::Value& json_languages, smart_objects::SmartObject& languages) const OVERRIDE; + /* + * @brief function that converts a single entry of audio pass thru capability + * to smart object + * + * @param capability json object that represents a single entry of audio pass + * thru capability + * @param output_so the converted object + */ + void convert_audio_capability_to_obj( + const Json::Value& capability, + smart_objects::SmartObject& output_so) const OVERRIDE; + private: bool is_vr_cooperating_; bool is_tts_cooperating_; diff --git a/src/components/application_manager/src/hmi_capabilities_impl.cc b/src/components/application_manager/src/hmi_capabilities_impl.cc index 7f4b14835f..6d0834dd42 100644 --- a/src/components/application_manager/src/hmi_capabilities_impl.cc +++ b/src/components/application_manager/src/hmi_capabilities_impl.cc @@ -1066,27 +1066,20 @@ bool HMICapabilitiesImpl::load_capabilities_from_file() { if (check_existing_json_member(ui, "audioPassThruCapabilities")) { Json::Value audio_capabilities = ui.get("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 (check_existing_json_member(audio_capabilities, "samplingRate")) { - audio_capabilities_so["samplingRate"] = - sampling_rate_enum - .find(audio_capabilities.get("samplingRate", "").asString()) - ->second; - } - if (check_existing_json_member(audio_capabilities, "bitsPerSample")) { - audio_capabilities_so["bitsPerSample"] = - bit_per_sample_enum - .find(audio_capabilities.get("bitsPerSample", "").asString()) - ->second; - } - if (check_existing_json_member(audio_capabilities, "audioType")) { - audio_capabilities_so["audioType"] = - audio_type_enum - .find(audio_capabilities.get("audioType", "").asString()) - ->second; + smart_objects::SmartObject audio_capabilities_so; + if (audio_capabilities.type() == Json::arrayValue) { + audio_capabilities_so = + smart_objects::SmartObject(smart_objects::SmartType_Array); + for (uint32_t i = 0; i < audio_capabilities.size(); i++) { + convert_audio_capability_to_obj(audio_capabilities[i], + audio_capabilities_so[i]); + } + } else if (audio_capabilities.type() == Json::objectValue) { + // old format which supports only one capability set + audio_capabilities_so = + smart_objects::SmartObject(smart_objects::SmartType_Map); + convert_audio_capability_to_obj(audio_capabilities, + audio_capabilities_so); } set_audio_pass_thru_capabilities(audio_capabilities_so); } @@ -1371,6 +1364,27 @@ void HMICapabilitiesImpl::convert_json_languages_to_obj( } } +void HMICapabilitiesImpl::convert_audio_capability_to_obj( + const Json::Value& capability, + smart_objects::SmartObject& output_so) const { + if (check_existing_json_member(capability, "samplingRate")) { + output_so[strings::sampling_rate] = + sampling_rate_enum.find(capability.get("samplingRate", "").asString()) + ->second; + } + if (check_existing_json_member(capability, "bitsPerSample")) { + output_so[strings::bits_per_sample] = + bit_per_sample_enum + .find(capability.get("bitsPerSample", "").asString()) + ->second; + } + if (check_existing_json_member(capability, "audioType")) { + output_so[strings::audio_type] = + audio_type_enum.find(capability.get("audioType", "").asString()) + ->second; + } +} + HMILanguageHandler& HMICapabilitiesImpl::get_hmi_language_handler() { return hmi_language_handler_; } diff --git a/src/components/application_manager/test/CMakeLists.txt b/src/components/application_manager/test/CMakeLists.txt index ccec05a795..30c478e790 100755 --- a/src/components/application_manager/test/CMakeLists.txt +++ b/src/components/application_manager/test/CMakeLists.txt @@ -154,6 +154,7 @@ set(ResumptionData_SOURCES file(COPY hmi_capabilities.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) file(COPY hmi_capabilities_sc1.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) file(COPY hmi_capabilities_sc2.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +file(COPY hmi_capabilities_old_apt.json DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) file(COPY smartDeviceLink_test.ini DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/resumption) diff --git a/src/components/application_manager/test/hmi_capabilities.json b/src/components/application_manager/test/hmi_capabilities.json index ca67d81d8c..afa5fa6056 100644 --- a/src/components/application_manager/test/hmi_capabilities.json +++ b/src/components/application_manager/test/hmi_capabilities.json @@ -355,11 +355,11 @@ "STATIC" ] }, - "audioPassThruCapabilities": { + "audioPassThruCapabilities": [{ "samplingRate": "44KHZ", "bitsPerSample": "RATE_8_BIT", "audioType": "PCM" - }, + }], "pcmStreamCapabilities": { "samplingRate": "16KHZ", "bitsPerSample": "RATE_16_BIT", diff --git a/src/components/application_manager/test/hmi_capabilities_old_apt.json b/src/components/application_manager/test/hmi_capabilities_old_apt.json new file mode 100644 index 0000000000..5a5af37e2f --- /dev/null +++ b/src/components/application_manager/test/hmi_capabilities_old_apt.json @@ -0,0 +1,9 @@ +{ + "UI": { + "audioPassThruCapabilities": { + "samplingRate": "22KHZ", + "bitsPerSample": "RATE_16_BIT", + "audioType": "PCM" + } + } +} diff --git a/src/components/application_manager/test/hmi_capabilities_test.cc b/src/components/application_manager/test/hmi_capabilities_test.cc index e883e7bddb..4bc270ac6c 100644 --- a/src/components/application_manager/test/hmi_capabilities_test.cc +++ b/src/components/application_manager/test/hmi_capabilities_test.cc @@ -336,15 +336,18 @@ TEST_F(HMICapabilitiesTest, LoadCapabilitiesFromFile) { // Check audio pass thru const smart_objects::SmartObject audio_pass_thru_capabilities_so = *(hmi_capabilities_test->audio_pass_thru_capabilities()); + EXPECT_EQ(smart_objects::SmartType_Array, + audio_pass_thru_capabilities_so.getType()); + EXPECT_EQ(1u, audio_pass_thru_capabilities_so.length()); EXPECT_EQ(hmi_apis::Common_SamplingRate::RATE_44KHZ, static_cast<hmi_apis::Common_SamplingRate::eType>( - audio_pass_thru_capabilities_so["samplingRate"].asInt())); + audio_pass_thru_capabilities_so[0]["samplingRate"].asInt())); EXPECT_EQ(hmi_apis::Common_BitsPerSample::RATE_8_BIT, static_cast<hmi_apis::Common_BitsPerSample::eType>( - audio_pass_thru_capabilities_so["bitsPerSample"].asInt())); + audio_pass_thru_capabilities_so[0]["bitsPerSample"].asInt())); EXPECT_EQ(hmi_apis::Common_AudioType::PCM, static_cast<hmi_apis::Common_AudioType::eType>( - audio_pass_thru_capabilities_so["audioType"].asInt())); + audio_pass_thru_capabilities_so[0]["audioType"].asInt())); // Check hmi zone capabilities const smart_objects::SmartObject hmi_zone_capabilities_so = @@ -569,6 +572,53 @@ TEST_F(HMICapabilitiesTest, EXPECT_FALSE(navigation_capability_so["getWayPointsEnabled"].asBool()); } +TEST_F(HMICapabilitiesTest, + LoadCapabilitiesFromFileAndVerifyOldAudioPassThruCapabilities) { + MockApplicationManager mock_app_mngr; + event_engine_test::MockEventDispatcher mock_dispatcher; + MockApplicationManagerSettings mock_application_manager_settings; + + const std::string hmi_capabilities_file = "hmi_capabilities_old_apt.json"; + + EXPECT_CALL(mock_app_mngr, event_dispatcher()) + .WillOnce(ReturnRef(mock_dispatcher)); + EXPECT_CALL(mock_app_mngr, get_settings()) + .WillRepeatedly(ReturnRef(mock_application_manager_settings)); + EXPECT_CALL(mock_application_manager_settings, hmi_capabilities_file_name()) + .WillOnce(ReturnRef(hmi_capabilities_file)); + EXPECT_CALL(mock_dispatcher, add_observer(_, _, _)).Times(1); + EXPECT_CALL(mock_dispatcher, remove_observer(_)).Times(1); + EXPECT_CALL(mock_application_manager_settings, launch_hmi()) + .WillOnce(Return(false)); + EXPECT_CALL(*(MockMessageHelper::message_helper_mock()), + CommonLanguageFromString(_)) + .WillRepeatedly(Invoke(TestCommonLanguageFromString)); + + if (file_system::FileExists("./app_info_data")) { + EXPECT_TRUE(::file_system::DeleteFile("./app_info_data")); + } + + utils::SharedPtr<HMICapabilitiesForTesting> hmi_capabilities = + utils::MakeShared<HMICapabilitiesForTesting>(mock_app_mngr); + hmi_capabilities->Init(&last_state_); + + // with old audio pass thru format, the object is a map + smart_objects::SmartObject audio_pass_thru_capabilities_so = + *(hmi_capabilities->audio_pass_thru_capabilities()); + EXPECT_TRUE(audio_pass_thru_capabilities_so.keyExists("samplingRate")); + EXPECT_EQ(hmi_apis::Common_SamplingRate::RATE_22KHZ, + static_cast<hmi_apis::Common_SamplingRate::eType>( + audio_pass_thru_capabilities_so["samplingRate"].asInt())); + EXPECT_TRUE(audio_pass_thru_capabilities_so.keyExists("bitsPerSample")); + EXPECT_EQ(hmi_apis::Common_BitsPerSample::RATE_16_BIT, + static_cast<hmi_apis::Common_BitsPerSample::eType>( + audio_pass_thru_capabilities_so["bitsPerSample"].asInt())); + EXPECT_TRUE(audio_pass_thru_capabilities_so.keyExists("audioType")); + EXPECT_EQ(hmi_apis::Common_AudioType::PCM, + static_cast<hmi_apis::Common_AudioType::eType>( + audio_pass_thru_capabilities_so["audioType"].asInt())); +} + TEST_F(HMICapabilitiesTest, VerifyImageType) { const int32_t image_type = 1; smart_objects::SmartObject sm_obj; 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 index 468bdbe5eb..14a48da8b6 100644 --- 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 @@ -198,6 +198,9 @@ class MockHMICapabilities : public ::application_manager::HMICapabilities { MOCK_CONST_METHOD2(convert_json_languages_to_obj, void(const Json::Value& json_languages, smart_objects::SmartObject& languages)); + MOCK_CONST_METHOD2(convert_audio_capability_to_obj, + void(const Json::Value& capability, + smart_objects::SmartObject& output_so)); }; } // namespace application_manager_test diff --git a/src/components/include/application_manager/hmi_capabilities.h b/src/components/include/application_manager/hmi_capabilities.h index 215a549579..3871280532 100644 --- a/src/components/include/application_manager/hmi_capabilities.h +++ b/src/components/include/application_manager/hmi_capabilities.h @@ -525,6 +525,18 @@ class HMICapabilities { virtual void convert_json_languages_to_obj( const Json::Value& json_languages, smart_objects::SmartObject& languages) const = 0; + + /* + * @brief function that converts a single entry of audio pass thru capability + * to smart object + * + * @param capability json object that represents a single entry of audio pass + * thru capability + * @param output_so the converted object + */ + virtual void convert_audio_capability_to_obj( + const Json::Value& capability, + smart_objects::SmartObject& output_so) const = 0; }; } // namespace application_manager |