From b611de7c3acf61a94e69b57ca2be1630e0d3bdf3 Mon Sep 17 00:00:00 2001 From: Gary Jian Date: Tue, 15 Mar 2022 18:06:30 +0800 Subject: [PATCH] Fix type conversion from aidl::AccessNetworks to hidl::RadioAccessNetworks aidl::AccessNetworks and hidl::RadioAccessNetworks has a different enum Bug: 223770908 Test: manual Change-Id: Idd20d77c0090567a4e88334061ecd44415500000 --- .../libradiocompat/network/RadioNetwork.cpp | 2 +- .../compat/libradiocompat/network/structs.cpp | 43 ++++++++++++++++++- .../compat/libradiocompat/network/structs.h | 2 + 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/radio/aidl/compat/libradiocompat/network/RadioNetwork.cpp b/radio/aidl/compat/libradiocompat/network/RadioNetwork.cpp index 22b9edeafb..d5e2a8df99 100644 --- a/radio/aidl/compat/libradiocompat/network/RadioNetwork.cpp +++ b/radio/aidl/compat/libradiocompat/network/RadioNetwork.cpp @@ -228,7 +228,7 @@ ScopedAStatus RadioNetwork::setNetworkSelectionModeAutomatic(int32_t serial) { ScopedAStatus RadioNetwork::setNetworkSelectionModeManual( // int32_t serial, const std::string& opNumeric, AccessNetwork ran) { LOG_CALL << serial; - mHal1_5->setNetworkSelectionModeManual_1_5(serial, opNumeric, V1_5::RadioAccessNetworks(ran)); + mHal1_5->setNetworkSelectionModeManual_1_5(serial, opNumeric, toRadioAccessNetworks(ran)); return ok(); } diff --git a/radio/aidl/compat/libradiocompat/network/structs.cpp b/radio/aidl/compat/libradiocompat/network/structs.cpp index c1d9b35dd6..d0b3b907ce 100644 --- a/radio/aidl/compat/libradiocompat/network/structs.cpp +++ b/radio/aidl/compat/libradiocompat/network/structs.cpp @@ -98,17 +98,56 @@ static V1_5::RadioAccessSpecifier::Bands toHidl(const aidl::RadioAccessSpecifier return hidl; } +AccessNetwork fromRadioAccessNetwork(V1_5::RadioAccessNetworks ran) { + switch (ran) { + case V1_5::RadioAccessNetworks::UNKNOWN: + return AccessNetwork::UNKNOWN; + case V1_5::RadioAccessNetworks::GERAN: + return AccessNetwork::GERAN; + case V1_5::RadioAccessNetworks::UTRAN: + return AccessNetwork::UTRAN; + case V1_5::RadioAccessNetworks::EUTRAN: + return AccessNetwork::EUTRAN; + case V1_5::RadioAccessNetworks::CDMA2000: + return AccessNetwork::CDMA2000; + case V1_5::RadioAccessNetworks::NGRAN: + return AccessNetwork::NGRAN; + default: + return AccessNetwork::UNKNOWN; + } +} + aidl::RadioAccessSpecifier toAidl(const V1_5::RadioAccessSpecifier& spec) { return { - .accessNetwork = AccessNetwork(spec.radioAccessNetwork), + .accessNetwork = fromRadioAccessNetwork(spec.radioAccessNetwork), .bands = toAidl(spec.bands), .channels = spec.channels, }; } +V1_5::RadioAccessNetworks toRadioAccessNetworks(AccessNetwork val) { + switch (val) { + case AccessNetwork::UNKNOWN: + return V1_5::RadioAccessNetworks::UNKNOWN; + case AccessNetwork::GERAN: + return V1_5::RadioAccessNetworks::GERAN; + case AccessNetwork::UTRAN: + return V1_5::RadioAccessNetworks::UTRAN; + case AccessNetwork::EUTRAN: + return V1_5::RadioAccessNetworks::EUTRAN; + case AccessNetwork::CDMA2000: + return V1_5::RadioAccessNetworks::CDMA2000; + case AccessNetwork::NGRAN: + return V1_5::RadioAccessNetworks::NGRAN; + case AccessNetwork::IWLAN: + default: + return V1_5::RadioAccessNetworks::UNKNOWN; + } +} + V1_5::RadioAccessSpecifier toHidl(const aidl::RadioAccessSpecifier& spec) { return { - .radioAccessNetwork = V1_5::RadioAccessNetworks{spec.accessNetwork}, + .radioAccessNetwork = toRadioAccessNetworks(spec.accessNetwork), .bands = toHidl(spec.bands), .channels = spec.channels, }; diff --git a/radio/aidl/compat/libradiocompat/network/structs.h b/radio/aidl/compat/libradiocompat/network/structs.h index aaa49a07e6..6a9a2199c4 100644 --- a/radio/aidl/compat/libradiocompat/network/structs.h +++ b/radio/aidl/compat/libradiocompat/network/structs.h @@ -49,6 +49,8 @@ toHidl(const ::aidl::android::hardware::radio::network::SignalThresholdInfo& inf ::aidl::android::hardware::radio::network::RadioAccessSpecifier // toAidl(const V1_5::RadioAccessSpecifier& spec); +V1_5::RadioAccessNetworks // +toRadioAccessNetworks(::aidl::android::hardware::radio::AccessNetwork val); V1_5::RadioAccessSpecifier // toHidl(const ::aidl::android::hardware::radio::network::RadioAccessSpecifier& spec);