Loading broadcastradio/aidl/default/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -26,11 +26,11 @@ package { cc_defaults { name: "BroadcastRadioHalDefaults", static_libs: [ "android.hardware.broadcastradio-V2-ndk", "android.hardware.broadcastradio@common-utils-aidl-lib-V2", "android.hardware.broadcastradio@common-utils-lib", ], shared_libs: [ "android.hardware.broadcastradio-V2-ndk", "libbase", "libbinder_ndk", "liblog", Loading broadcastradio/aidl/default/test/Android.bp 0 → 100644 +43 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package { default_applicable_licenses: ["Android-Apache-2.0"], } cc_test { name: "DefaultBroadcastRadioHalTestCase", vendor: true, srcs: ["*.cpp"], static_libs: [ "DefaultBroadcastRadioHal", "libgtest", "libgmock", ], shared_libs: [ "libbase", "libbinder_ndk", "liblog", "libutils", ], header_libs: [ "IVehicleHardware", ], defaults: [ "BroadcastRadioHalDefaults", ], test_suites: ["device-tests"], } broadcastradio/aidl/default/test/DefaultBroadcastRadioHalTest.cpp 0 → 100644 +139 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include <BroadcastRadio.h> #include <VirtualRadio.h> #include <broadcastradio-utils-aidl/Utils.h> #include <gtest/gtest.h> namespace aidl::android::hardware::broadcastradio { namespace { using ::std::vector; constexpr uint32_t kAmFreq1 = 560u; constexpr uint32_t kAmFreq2 = 680u; constexpr uint32_t kAmHdFreq = 1170u; constexpr uint64_t kAmHdSid = 0xB0000001u; constexpr uint32_t kFmFreq1 = 94900u; constexpr uint64_t kFmHdSid1 = 0xA0000001u; constexpr uint64_t kFmHdSid2 = 0xA0000002u; constexpr uint32_t kFmHdFreq1 = 98500u; constexpr uint32_t kFmHdSubChannel0 = 0u; constexpr uint32_t kFmHdSubChannel1 = 1u; constexpr uint32_t kFmFreq2 = 99100u; constexpr uint32_t kFmHdFreq2 = 101100u; const ProgramSelector kAmSel1 = utils::makeSelectorAmfm(kAmFreq1); const ProgramSelector kAmSel2 = utils::makeSelectorAmfm(kAmFreq2); const ProgramSelector kAmHdSel = utils::makeSelectorHd(kAmHdSid, kFmHdSubChannel0, kAmHdFreq); const ProgramSelector kFmSel1 = utils::makeSelectorAmfm(kFmFreq1); const ProgramSelector kFmSel2 = utils::makeSelectorAmfm(kFmFreq2); const ProgramSelector kFmHdFreq1Sel1 = utils::makeSelectorHd(kFmHdSid1, kFmHdSubChannel0, kFmHdFreq1); const ProgramSelector kFmHdFreq1Sel2 = utils::makeSelectorHd(kFmHdSid1, kFmHdSubChannel1, kFmHdFreq1); const ProgramSelector kFmHdFreq2Sel1 = utils::makeSelectorHd(kFmHdSid2, kFmHdSubChannel0, kFmHdFreq2); const ProgramSelector kFmHdFreq2Sel2 = utils::makeSelectorHd(kFmHdSid2, kFmHdSubChannel1, kFmHdFreq2); const VirtualRadio& getAmFmMockTestRadio() { static VirtualRadio amFmRadioMockTestRadio( "AM/FM radio mock for test", { {kAmSel1, "ProgramAm1", "ArtistAm1", "TitleAm1"}, {kAmSel2, "ProgramAm2", "ArtistAm2", "TitleAm2"}, {kFmSel1, "ProgramFm1", "ArtistFm1", "TitleFm1"}, {kFmSel2, "ProgramFm2", "ArtistFm2", "TitleFm2"}, {kAmHdSel, "ProgramAmHd1", "ArtistAmHd1", "TitleAmHd1"}, {kFmHdFreq1Sel1, "ProgramFmHd1", "ArtistFmHd1", "TitleFmHd1"}, {kFmHdFreq1Sel2, "ProgramFmHd2", "ArtistFmHd2", "TitleFmHd2"}, {kFmHdFreq2Sel1, "ProgramFmHd3", "ArtistFmHd3", "TitleFmHd3"}, {kFmHdFreq2Sel2, "ProgramFmHd4", "ArtistFmHd4", "TitleFmHd4"}, }); return amFmRadioMockTestRadio; } } // namespace class DefaultBroadcastRadioHalTest : public testing::Test { public: void SetUp() override { const VirtualRadio& amFmRadioMockTest = getAmFmMockTestRadio(); mBroadcastRadioHal = ::ndk::SharedRefBase::make<BroadcastRadio>(amFmRadioMockTest); } std::shared_ptr<BroadcastRadio> mBroadcastRadioHal; }; TEST_F(DefaultBroadcastRadioHalTest, GetAmFmRegionConfig) { AmFmRegionConfig config; auto halResult = mBroadcastRadioHal->getAmFmRegionConfig(/* full= */ false, &config); ASSERT_TRUE(halResult.isOk()); EXPECT_EQ(config.fmDeemphasis, AmFmRegionConfig::DEEMPHASIS_D50); EXPECT_EQ(config.fmRds, AmFmRegionConfig::RDS); } TEST_F(DefaultBroadcastRadioHalTest, GetAmFmRegionConfigWithFullBand) { AmFmRegionConfig config; auto halResult = mBroadcastRadioHal->getAmFmRegionConfig(/* full= */ true, &config); ASSERT_TRUE(halResult.isOk()); EXPECT_EQ(config.fmDeemphasis, AmFmRegionConfig::DEEMPHASIS_D50 | AmFmRegionConfig::DEEMPHASIS_D75); EXPECT_EQ(config.fmRds, AmFmRegionConfig::RDS | AmFmRegionConfig::RBDS); } TEST_F(DefaultBroadcastRadioHalTest, GetDabRegionConfig) { vector<DabTableEntry> config; auto halResult = mBroadcastRadioHal->getDabRegionConfig(&config); ASSERT_TRUE(halResult.isOk()); ASSERT_FALSE(config.empty()); } TEST_F(DefaultBroadcastRadioHalTest, GetImage) { vector<uint8_t> img; auto halResult = mBroadcastRadioHal->getImage(BroadcastRadio::INVALID_IMAGE, &img); ASSERT_TRUE(halResult.isOk()); ASSERT_TRUE(img.empty()); } TEST_F(DefaultBroadcastRadioHalTest, GetProperties) { vector<VirtualProgram> mockPrograms = getAmFmMockTestRadio().getProgramList(); Properties prop; auto halResult = mBroadcastRadioHal->getProperties(&prop); ASSERT_TRUE(halResult.isOk()); ASSERT_FALSE(prop.supportedIdentifierTypes.empty()); std::unordered_set<IdentifierType> supportedTypeSet; for (const auto& supportedType : prop.supportedIdentifierTypes) { supportedTypeSet.insert(supportedType); } for (const auto& program : mockPrograms) { EXPECT_NE(supportedTypeSet.find(program.selector.primaryId.type), supportedTypeSet.end()); } } } // namespace aidl::android::hardware::broadcastradio Loading
broadcastradio/aidl/default/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -26,11 +26,11 @@ package { cc_defaults { name: "BroadcastRadioHalDefaults", static_libs: [ "android.hardware.broadcastradio-V2-ndk", "android.hardware.broadcastradio@common-utils-aidl-lib-V2", "android.hardware.broadcastradio@common-utils-lib", ], shared_libs: [ "android.hardware.broadcastradio-V2-ndk", "libbase", "libbinder_ndk", "liblog", Loading
broadcastradio/aidl/default/test/Android.bp 0 → 100644 +43 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package { default_applicable_licenses: ["Android-Apache-2.0"], } cc_test { name: "DefaultBroadcastRadioHalTestCase", vendor: true, srcs: ["*.cpp"], static_libs: [ "DefaultBroadcastRadioHal", "libgtest", "libgmock", ], shared_libs: [ "libbase", "libbinder_ndk", "liblog", "libutils", ], header_libs: [ "IVehicleHardware", ], defaults: [ "BroadcastRadioHalDefaults", ], test_suites: ["device-tests"], }
broadcastradio/aidl/default/test/DefaultBroadcastRadioHalTest.cpp 0 → 100644 +139 −0 Original line number Diff line number Diff line /* * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include <BroadcastRadio.h> #include <VirtualRadio.h> #include <broadcastradio-utils-aidl/Utils.h> #include <gtest/gtest.h> namespace aidl::android::hardware::broadcastradio { namespace { using ::std::vector; constexpr uint32_t kAmFreq1 = 560u; constexpr uint32_t kAmFreq2 = 680u; constexpr uint32_t kAmHdFreq = 1170u; constexpr uint64_t kAmHdSid = 0xB0000001u; constexpr uint32_t kFmFreq1 = 94900u; constexpr uint64_t kFmHdSid1 = 0xA0000001u; constexpr uint64_t kFmHdSid2 = 0xA0000002u; constexpr uint32_t kFmHdFreq1 = 98500u; constexpr uint32_t kFmHdSubChannel0 = 0u; constexpr uint32_t kFmHdSubChannel1 = 1u; constexpr uint32_t kFmFreq2 = 99100u; constexpr uint32_t kFmHdFreq2 = 101100u; const ProgramSelector kAmSel1 = utils::makeSelectorAmfm(kAmFreq1); const ProgramSelector kAmSel2 = utils::makeSelectorAmfm(kAmFreq2); const ProgramSelector kAmHdSel = utils::makeSelectorHd(kAmHdSid, kFmHdSubChannel0, kAmHdFreq); const ProgramSelector kFmSel1 = utils::makeSelectorAmfm(kFmFreq1); const ProgramSelector kFmSel2 = utils::makeSelectorAmfm(kFmFreq2); const ProgramSelector kFmHdFreq1Sel1 = utils::makeSelectorHd(kFmHdSid1, kFmHdSubChannel0, kFmHdFreq1); const ProgramSelector kFmHdFreq1Sel2 = utils::makeSelectorHd(kFmHdSid1, kFmHdSubChannel1, kFmHdFreq1); const ProgramSelector kFmHdFreq2Sel1 = utils::makeSelectorHd(kFmHdSid2, kFmHdSubChannel0, kFmHdFreq2); const ProgramSelector kFmHdFreq2Sel2 = utils::makeSelectorHd(kFmHdSid2, kFmHdSubChannel1, kFmHdFreq2); const VirtualRadio& getAmFmMockTestRadio() { static VirtualRadio amFmRadioMockTestRadio( "AM/FM radio mock for test", { {kAmSel1, "ProgramAm1", "ArtistAm1", "TitleAm1"}, {kAmSel2, "ProgramAm2", "ArtistAm2", "TitleAm2"}, {kFmSel1, "ProgramFm1", "ArtistFm1", "TitleFm1"}, {kFmSel2, "ProgramFm2", "ArtistFm2", "TitleFm2"}, {kAmHdSel, "ProgramAmHd1", "ArtistAmHd1", "TitleAmHd1"}, {kFmHdFreq1Sel1, "ProgramFmHd1", "ArtistFmHd1", "TitleFmHd1"}, {kFmHdFreq1Sel2, "ProgramFmHd2", "ArtistFmHd2", "TitleFmHd2"}, {kFmHdFreq2Sel1, "ProgramFmHd3", "ArtistFmHd3", "TitleFmHd3"}, {kFmHdFreq2Sel2, "ProgramFmHd4", "ArtistFmHd4", "TitleFmHd4"}, }); return amFmRadioMockTestRadio; } } // namespace class DefaultBroadcastRadioHalTest : public testing::Test { public: void SetUp() override { const VirtualRadio& amFmRadioMockTest = getAmFmMockTestRadio(); mBroadcastRadioHal = ::ndk::SharedRefBase::make<BroadcastRadio>(amFmRadioMockTest); } std::shared_ptr<BroadcastRadio> mBroadcastRadioHal; }; TEST_F(DefaultBroadcastRadioHalTest, GetAmFmRegionConfig) { AmFmRegionConfig config; auto halResult = mBroadcastRadioHal->getAmFmRegionConfig(/* full= */ false, &config); ASSERT_TRUE(halResult.isOk()); EXPECT_EQ(config.fmDeemphasis, AmFmRegionConfig::DEEMPHASIS_D50); EXPECT_EQ(config.fmRds, AmFmRegionConfig::RDS); } TEST_F(DefaultBroadcastRadioHalTest, GetAmFmRegionConfigWithFullBand) { AmFmRegionConfig config; auto halResult = mBroadcastRadioHal->getAmFmRegionConfig(/* full= */ true, &config); ASSERT_TRUE(halResult.isOk()); EXPECT_EQ(config.fmDeemphasis, AmFmRegionConfig::DEEMPHASIS_D50 | AmFmRegionConfig::DEEMPHASIS_D75); EXPECT_EQ(config.fmRds, AmFmRegionConfig::RDS | AmFmRegionConfig::RBDS); } TEST_F(DefaultBroadcastRadioHalTest, GetDabRegionConfig) { vector<DabTableEntry> config; auto halResult = mBroadcastRadioHal->getDabRegionConfig(&config); ASSERT_TRUE(halResult.isOk()); ASSERT_FALSE(config.empty()); } TEST_F(DefaultBroadcastRadioHalTest, GetImage) { vector<uint8_t> img; auto halResult = mBroadcastRadioHal->getImage(BroadcastRadio::INVALID_IMAGE, &img); ASSERT_TRUE(halResult.isOk()); ASSERT_TRUE(img.empty()); } TEST_F(DefaultBroadcastRadioHalTest, GetProperties) { vector<VirtualProgram> mockPrograms = getAmFmMockTestRadio().getProgramList(); Properties prop; auto halResult = mBroadcastRadioHal->getProperties(&prop); ASSERT_TRUE(halResult.isOk()); ASSERT_FALSE(prop.supportedIdentifierTypes.empty()); std::unordered_set<IdentifierType> supportedTypeSet; for (const auto& supportedType : prop.supportedIdentifierTypes) { supportedTypeSet.insert(supportedType); } for (const auto& program : mockPrograms) { EXPECT_NE(supportedTypeSet.find(program.selector.primaryId.type), supportedTypeSet.end()); } } } // namespace aidl::android::hardware::broadcastradio