wifi框架层流程之--AddDeviceConfig流程
AddDeviceConfig的接口整体调用流程:

关键数据结构和流程:
所在文件:foundation\communication\wifi\wifi\interfaces\inner_api\wifi_msg.h
/* Network configuration information */
struct WifiDeviceConfig {
int instanceId;
int networkId;
/* int status; @deprecated : CURRENT, using 1: DISABLED 2: ENABLED */
/* network selection status*/
NetworkSelectionStatus networkSelectionStatus;
/* mac address */
std::string bssid;
/* bssid type. */
int bssidType;
/* network name */
std::string ssid;
int band;
int channel;
int frequency;
/* Signal strength */
int rssi;
/**
* signal level,
* rssi<=-100 level : 0
* (-100, -88] level : 1
* (-88, -77] level : 2
* (-66, -55] level : 3
* rssi>=-55 level : 4
*/
int level;
/* Is Passpoint network */
bool isPasspoint;
/* is ephemeral network */
bool isEphemeral;
/* WPA-PSK mode pre shared key */
std::string preSharedKey;
std::string encryptedData;
std::string IV;
/* Encryption Mode */
std::string keyMgmt;
/* Available Encryption Mode */
uint32_t keyMgmtBitset;
/* WEP mode key, max size: 4 */
std::string wepKeys[WEPKEYS_SIZE];
/* use WEP key index */
int wepTxKeyIndex;
std::string encryWepKeys[WEPKEYS_SIZE];
std::string IVWep;
/* network priority */
int priority;
/* is hidden network */
bool hiddenSSID;
/* Random mac address */
std::string macAddress;
int uid;
time_t lastConnectTime;
int numRebootsSinceLastUse;
int numAssociation;
int connFailedCount;
unsigned int networkStatusHistory;
bool isPortal;
time_t portalAuthTime;
time_t lastHasInternetTime;
bool noInternetAccess;
/* save select mac address */
std::string userSelectBssid;
WifiIpConfig wifiIpConfig;
WifiEapConfig wifiEapConfig;
WifiProxyConfig wifiProxyconfig;
WifiPrivacyConfig wifiPrivacySetting;
std::string callProcessName;
std::string ancoCallProcessName;
std::string internetSelfCureHistory;
int isReassocSelfCureWithFactoryMacAddress;
int version;
bool randomizedMacSuccessEver;
bool everConnected;
bool acceptUnvalidated;
WifiWapiConfig wifiWapiConfig;
IpInfo lastDhcpResult;
bool isShared;
int64_t lastTrySwitchWifiTimestamp { -1 };
bool isAllowAutoConnect { true };
WifiDeviceConfig()
{
instanceId = 0;
networkId = INVALID_NETWORK_ID;
bssidType = REAL_DEVICE_ADDRESS;
band = 0;
channel = 0;
frequency = 0;
level = 0;
isPasspoint = false;
isEphemeral = false;
keyMgmtBitset = 0u;
wepTxKeyIndex = 0;
priority = 0;
hiddenSSID = false;
wifiPrivacySetting = WifiPrivacyConfig::RANDOMMAC;
rssi = -100;
uid = WIFI_INVALID_UID;
lastConnectTime = -1;
numRebootsSinceLastUse = 0;
numAssociation = 0;
connFailedCount = 0;
networkStatusHistory = 0;
isPortal = false;
portalAuthTime = -1;
lastHasInternetTime = -1;
noInternetAccess = false;
callProcessName = "";
ancoCallProcessName = "";
internetSelfCureHistory = "";
isReassocSelfCureWithFactoryMacAddress = 0;
version = -1;
randomizedMacSuccessEver = false;
isShared = true;
everConnected = false;
acceptUnvalidated = false;
}
};
所在文件:foundation\communication\wifi\wifi\frameworks\js\napi\src\wifi_napi_device.cpp
NO_SANITIZE("cfi") napi_value AddDeviceConfig(napi_env env, napi_callback_info info) {
WifiDeviceConfig *config = new WifiDeviceConfig();
JsObjToDeviceConfig(env, argv[0], *config);
wifiDevicePtr->AddDeviceConfig(*context->config, context->networkId, context->isCandidate);
}
所在文件:foundation\communication\wifi\wifi\frameworks\native\src\wifi_device_impl.cpp
ErrCode WifiDeviceImpl::AddDeviceConfig(const WifiDeviceConfig &config, int &result, bool isCandidate) {
return client_->AddDeviceConfig(config, result, isCandidate);
}
所在文件:foundation\communication\wifi\wifi\frameworks\native\src\wifi_device_proxy.cpp
ErrCode WifiDeviceProxy::AddDeviceConfig(const WifiDeviceConfig &config, int &result, bool isCandidate) {
int error = Remote()->SendRequest(static_cast<uint32_t>(DevInterfaceCode::WIFI_SVR_CMD_ADD_DEVICE_CONFIG),
data, reply, option);
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_sta_sa\wifi_device_stub.cpp
void WifiDeviceStub::InitHandleMap() {
......
handleFuncMap_[static_cast<uint32_t>(DevInterfaceCode::WIFI_SVR_CMD_ADD_DEVICE_CONFIG)] =
&WifiDeviceStub::OnAddDeviceConfig;
......
}
int WifiDeviceStub::OnRemoteRequest(uint32_t code, IpcIo *req, IpcIo *reply) {
HandleFuncMap::iterator iter = handleFuncMap_.find(code);
(this->*(iter->second))(code, req, reply);
}
void WifiDeviceStub::OnAddDeviceConfig(uint32_t code, MessageParcel &data, MessageParcel &reply) {
bool isCandidate = data.ReadBool();
WifiDeviceConfig config;
ReadWifiDeviceConfig(data, config);
if (isCandidate) {
int uid = 0;
return pService->AddCandidateConfig(uid, updateConfig, result);
}
int result = INVALID_NETWORK_ID;
ErrCode ret = AddDeviceConfig(config, result, isCandidate);
return;
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_sta_sa\wifi_device_service_impl.cpp
ErrCode WifiDeviceServiceImpl::AddDeviceConfig(const WifiDeviceConfig &config, int &result, bool isCandidate) {
ErrCode errCode = CheckCanAddDeviceConfig(isCandidate);// 检查是否可以添加
if (errCode != WIFI_OPT_SUCCESS) {
return errCode;
}
if (isCandidate) {
return pService->AddCandidateConfig(uid, updateConfig, result);
}
int retNetworkId = pService->AddDeviceConfig(updateConfig);
if (retNetworkId < 0) {
return WIFI_OPT_FAILED;
}
result = retNetworkId;
return WIFI_OPT_SUCCESS;
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_sta\sta_interface.cpp
ErrCode StaInterface::AddCandidateConfig(const int uid, const WifiDeviceConfig &config, int& netWorkId) {
return pStaService->AddCandidateConfig(uid, config, netWorkId);
}
int StaInterface::AddDeviceConfig(const WifiDeviceConfig &config) {
return pStaService->AddDeviceConfig(config);
}
所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_manage\wifi_sta\sta_service.cpp
int StaService::AddDeviceConfig(const WifiDeviceConfig &config) const {
int netWorkId = INVALID_NETWORK_ID;
std::string bssid;
std::string userSelectbssid = config.bssid;
WifiDeviceConfig tempDeviceConfig;
tempDeviceConfig.instanceId = config.instanceId;
// 先查找配置是否已经存在 如果已经存在,则更新
if (FindDeviceConfig(config, tempDeviceConfig) == 0) {
netWorkId = tempDeviceConfig.networkId;
if (m_instId == INSTID_WLAN0) {
bssid = config.bssid.empty() ? tempDeviceConfig.bssid : config.bssid;
pStaAutoConnectService->EnableOrDisableBssid(bssid, true, 0);
}
} else {
// 首次添加就申请一个NetWorkid
netWorkId = WifiSettings::GetInstance().GetNextNetworkId();
}
tempDeviceConfig = config;
tempDeviceConfig.instanceId = m_instId;
tempDeviceConfig.networkId = netWorkId;
tempDeviceConfig.userSelectBssid = userSelectbssid;
if (!bssid.empty()) {
tempDeviceConfig.bssid = bssid;
}
WifiSettings::GetInstance().AddDeviceConfig(tempDeviceConfig);
WifiSettings::GetInstance().SyncDeviceConfig();
return netWorkId;
}
// 所在文件:foundation\communication\wifi\wifi\services\wifi_standard\wifi_framework\wifi_toolkit\config\wifi_settings.cpp
int WifiSettings::AddDeviceConfig(const WifiDeviceConfig &config) {
auto iter = mWifiDeviceConfig.find(config.networkId);
if (iter != mWifiDeviceConfig.end()) {
iter->second = config;
} else {
if (mWifiDeviceConfig.size() > WIFI_DEVICE_CONFIG_MAX_MUN) {
LOGE("AddDeviceConfig Exceeding the maximum value!");
return -1;
}
mWifiDeviceConfig.emplace(std::make_pair(config.networkId, config));
}
return config.networkId;
}
WifiSetting还有其它的查询和删除接口:
int RemoveDevice(int networkId);
void ClearDeviceConfig(void);
int GetDeviceConfig(std::vector<WifiDeviceConfig> &results, int instId = 0);
int GetDeviceConfig(const int &networkId, WifiDeviceConfig &config, int instId = 0);
int GetDeviceConfig(const std::string &index, const int &indexType, WifiDeviceConfig &config, int instId = 0);
int GetDeviceConfig(const std::string &ssid, const std::string &keymgmt, WifiDeviceConfig &config, int instId = 0);
更多推荐
所有评论(0)