diff --git a/wifi/bundle.json b/wifi/bundle.json index 54f80e7eb155225b74d4b92e9110fc6d9c715ee8..435d889c6b57664ee4cb63d17033f4e4c486105b 100644 --- a/wifi/bundle.json +++ b/wifi/bundle.json @@ -130,7 +130,8 @@ "icu", "window_manager", "security_guard", - "state_registry" + "state_registry", + "drivers_interface_factory" ], "third_party": [ "googletest", diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/BUILD.gn b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/BUILD.gn index 739b78f7cc59aaece764ac99360a46241128c368..049b40a731ae7345e67880c2e260646c5b77ce49 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/BUILD.gn +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/BUILD.gn @@ -219,6 +219,7 @@ if (defined(ohos_lite)) { if (wifi_feature_with_wifi_oeminfo_mac) { sources += [ "$WIFI_ROOT_DIR/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_oem_mac/wifi_oeminfo_mac.cpp" ] defines += [ "READ_MAC_FROM_OEM" ] + external_deps += ["drivers_interface_factory:libfactory_proxy_1.1",] } cflags = memory_optimization_cflags cflags_cc = memory_optimization_cflags_cc diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_oem_mac/wifi_oeminfo_mac.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_oem_mac/wifi_oeminfo_mac.cpp index ca501445b67d3c4128894e67c703e3bf8bb651b3..0015e2499a8424d910efdc7fac86b907e6ef5364 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_oem_mac/wifi_oeminfo_mac.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_oem_mac/wifi_oeminfo_mac.cpp @@ -14,7 +14,9 @@ */ #include "wifi_oeminfo_mac.h" -#include +#include +#include +#include "v1_1/ifactory_interface.h" #include "wifi_logger.h" namespace OHOS { @@ -22,9 +24,8 @@ namespace Wifi { DEFINE_WIFILOG_LABEL("WifiOeminfoMac"); static constexpr int PC_NV_PHYNUM_MAC_WIFI_NUMBER = 193; -static constexpr const char* DLOPEN_LIBFACSIGNEDAPI_PATH = "libfacsignedapi_shared.so"; -static constexpr const char* OEM_INFO_FUNC_NAME = "ReadSignedValueNvmeOeminfo"; -static constexpr const char* CLEAR_SSL_FUNC_NAME = "OPENSSL_thread_stop"; +constexpr static const char *NV_WLAN_NAME = "MACWLAN"; +constexpr int OEMINFO_MACADDR_LENGTH = 12; WifiOeminfoMac::WifiOeminfoMac() { @@ -39,69 +40,29 @@ WifiOeminfoMac::~WifiOeminfoMac() int WifiOeminfoMac::GetOeminfoMac(std::string &wifiOemMac) { wifiOemMac = ""; - void* handle = nullptr; - auto libraryUtilsPtr = std::make_unique(DLOPEN_LIBFACSIGNEDAPI_PATH, handle, true); - if (!libraryUtilsPtr) { - return GET_MAC_ERROR_LOAD_SO_FAIL; + auto factoryInterfaceImpl = OHOS::HDI::Factory::V1_1::IFactoryInterface::Get("factory_interface_service", true); + if (factoryInterfaceImpl == nullptr) { + WIFI_LOGE("Get factory_interface_service failed"); + return GET_FACTORY_INTERFACE_ERROR; } std::string macFromOem; - int ret = WifiOeminfoMacFromNv(macFromOem, libraryUtilsPtr); - if (ret != GET_MAC_SUCCESS) { - WIFI_LOGE("mac read from nv fail"); - ClearOpenSsl(libraryUtilsPtr); - return ret; + int ret = -1; + const int retryTimes = 3; + for (int i = 0; i < retryTimes; i++) { + ret = factoryInterfaceImpl->NvRead(PC_NV_PHYNUM_MAC_WIFI_NUMBER, NV_WLAN_NAME, OEMINFO_MACADDR_LENGTH, + macFromOem); + if (ret == 0) { + WIFI_LOGI("nv read success."); + break; + } + std::this_thread::sleep_for(std::chrono::seconds(1)); } - ClearOpenSsl(libraryUtilsPtr); - MacDataTolower(macFromOem); if (!FormatStrToMac(macFromOem, ":")) { WIFI_LOGE("FormatStrToMac fail"); return GET_MAC_ERROR_MAC_INVALID; } wifiOemMac = macFromOem; - WIFI_LOGI("get nv mac success"); - return GET_MAC_SUCCESS; -} - -void WifiOeminfoMac::ClearOpenSsl(std::unique_ptr &libraryUtilsPtr) -{ - if (libraryUtilsPtr == nullptr) { - WIFI_LOGE("handler is NULL, no need clear"); - return; - } - - CLEAR_OPEN_SSL_FUN dlClearOpenSsl = - reinterpret_cast(libraryUtilsPtr->GetFunction(CLEAR_SSL_FUNC_NAME)); - if (dlClearOpenSsl == nullptr) { - WIFI_LOGE("failed to dlsym FacStopOpenSSLThread"); - return; - } - - dlClearOpenSsl(); -} - -int WifiOeminfoMac::WifiOeminfoMacFromNv(std::string &macFromOem, std::unique_ptr &libraryUtilsPtr) -{ - if (libraryUtilsPtr == nullptr) { - return GET_MAC_ERROR_LOAD_SO_FAIL; - } - - READ_OEMINFO_FUN dlReadOemInfo = - reinterpret_cast(libraryUtilsPtr->GetFunction(OEM_INFO_FUNC_NAME)); - if (dlReadOemInfo == nullptr) { - WIFI_LOGE("failed to dlsym ReadSignedValueNvmeOeminfo"); - return GET_MAC_ERROR_DLSYM_FAIL; - } - - char oemMac[OEMINFO_MACADDR_LENGTH] = {0}; - int ret = dlReadOemInfo(PC_NV_PHYNUM_MAC_WIFI_NUMBER, oemMac, OEMINFO_MACADDR_LENGTH - 1); - if (ret != 0) { - WIFI_LOGE("read nv mac fail"); - return GET_MAC_ERROR_READ_NV_FAIL; - } - - macFromOem = oemMac; - WIFI_LOGI("read nv mac success"); return GET_MAC_SUCCESS; } @@ -112,12 +73,14 @@ bool WifiOeminfoMac::CheckCharOfMac(char c) bool WifiOeminfoMac::FormatStrToMac(std::string &macFromOem, const std::string &delimiter) { - if (macFromOem.size() != OEMINFO_MACADDR_LENGTH - 1) { + if (macFromOem.size() != OEMINFO_MACADDR_LENGTH) { WIFI_LOGE("mac str length is illegal"); return false; } - for (int i = 0; i < OEMINFO_MACADDR_LENGTH - 1; i++) { + MacDataTolower(macFromOem); + + for (int i = 0; i < OEMINFO_MACADDR_LENGTH; i++) { if (!CheckCharOfMac(macFromOem[i])) { WIFI_LOGE("mac char %{public}c is illegal", macFromOem[i]); return false; @@ -134,7 +97,7 @@ bool WifiOeminfoMac::FormatStrToMac(std::string &macFromOem, const std::string & void WifiOeminfoMac::MacDataTolower(std::string &macFromOem) { - for (int i = 0; i < OEMINFO_MACADDR_LENGTH - 1; i++) { + for (int i = 0; i < OEMINFO_MACADDR_LENGTH; i++) { if (macFromOem[i] >= 'A' && macFromOem[i] <= 'F') { macFromOem[i] = std::tolower(macFromOem[i]); } diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_oem_mac/wifi_oeminfo_mac.h b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_oem_mac/wifi_oeminfo_mac.h index f6d01698e7cba08df060782cb526985a95a27262..38cd648e72ee7dd53a6d1d15150afde18d043b9d 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_oem_mac/wifi_oeminfo_mac.h +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_native/wifi_hal_interface/wifi_oem_mac/wifi_oeminfo_mac.h @@ -17,22 +17,18 @@ #define WIFI_OEMINFO_MAC_H #include -#include #include #include "securec.h" -#include "wifi_library_utils.h" namespace OHOS { namespace Wifi { -constexpr int OEMINFO_MACADDR_LENGTH = 13; constexpr int UNSIGNED_CHAR_MACADDR_LENGTH = 6; class WifiOeminfoMac { public: enum ErrType { GET_MAC_SUCCESS, - GET_MAC_ERROR_LOAD_SO_FAIL, - GET_MAC_ERROR_DLSYM_FAIL, GET_MAC_ERROR_READ_NV_FAIL, + GET_FACTORY_INTERFACE_ERROR, GET_MAC_ERROR_MAC_INVALID, GET_MAC_ERROR_C_TO_STR_FAIL, }; @@ -41,15 +37,9 @@ public: int GetOeminfoMac(std::string &wifiOemMac); private: - void ClearOpenSsl(std::unique_ptr &libraryUtilsPtr); - int WifiOeminfoMacFromNv(std::string &macFromOem, std::unique_ptr &libraryUtilsPtr); void MacDataTolower(std::string &macFromOem); bool FormatStrToMac(std::string &macFromOem, const std::string &delimiter); bool CheckCharOfMac(char c); - -private: - using READ_OEMINFO_FUN = int (*) (int, char*, int); - using CLEAR_OPEN_SSL_FUN = void (*) (void); }; }