bool WifiControlCheckNeedReconnectWificonst char ssid const char pwd LOGDWifiControlCheckNeedReconnectWifi; char wifiMode16; FileUtilsReadStrFromFiledatacfgwifi_modewifiModesizeofwifiMode;
bool WifiControl::CheckNeedReconnectWifi(const char* ssid, const char* pwd) { LOGD("WifiControl::CheckNeedReconnectWifi"); char wifiMode[16]; FileUtils::ReadStrFromFile("/data/cfg/wifi_mode",wifiMode,sizeof(wifiMode));
//TODO: 需要判断是否有IP
if(memcmp(wifiMode,"sta",3)==0){
LOGD("is already in sta mode!");
char staName[65];
char staPwd[129];
FileUtils::ReadStrFromFile(std::string(STA_NAME),staName,sizeof(staName));
FileUtils::ReadStrFromFile(std::string(STA_PWD),staPwd,sizeof(staPwd));
if(strcmp(staName,ssid)==0 && strcmp(staPwd,pwd)==0){
LOGD("same..");
return false;
}else{
LOGD("new:%s-%s,old:%s-%s",ssid,pwd,staName,staPwd);
}
}
return true;
}
void WifiControl::ConnectOrCreateWiFiWaitWifiInfo(const WifiInfo& info) { char cmd[512] = { 0 }; std::string nameFile, pwdFile;
if(info.mode == "sta"){
char ssid_enc[256];
char pwd_enc[256];
EncValue(info.ssid.c_str(), info.ssid.length(), ssid_enc);
EncValue(info.pwd.c_str(), info.pwd.length(), pwd_enc);
snprintf(cmd, sizeof(cmd) - 1, "sh /data/bin/cleanpack_mode -m sta -s \"%s\" -p \"%s\" --segment=\"%s\" --hide=\"%d\"", ssid_enc, pwd_enc, info.segment.c_str(), info.mIsHide);
nameFile = STA_NAME;
pwdFile = STA_PWD;
}else if(info.mode == "ap"){
snprintf(cmd, sizeof(cmd) - 1, "sh /data/bin/cleanpack_mode -m ap -s \"%s\" -p \"%s\" --segment=\"%s\" --hide=\"%d\"", info.ssid.c_str(), info.pwd.c_str(), info.segment.c_str(), info.mIsHide);
nameFile = AP_NAME;
pwdFile = AP_PWD;
}
FileUtils::WriteStrToFile(nameFile, info.ssid.c_str(), info.ssid.length());
FileUtils::WriteStrToFile(pwdFile, info.pwd.c_str(), info.pwd.length());
FileUtils::RemoveFile("/tmp/wpa.log"); //删除wpa_supplicant生成的log
LD_SYSTEM(cmd);
LOGD("wifi cmd %s", cmd);
}
// 简化代码,避免重复调用CheckNeedReconnectWifi void WifiControl::ConnectOrCreateWiFi(const std::string& ssid, const std::string& pwd, const std::string& mode, const std::string& segment, bool isHide) { if (!CheckNeedReconnectWifi(ssid.c_str(), pwd.c_str())) { return; } WifiInfo info(mode, ssid, pwd, segment, isHide); ConnectOrCreateWiFiWaitWifiInfo(info); }
if (WifiControl::GetInstance()->CheckNeedReconnectWifi(ssid, passwd)) { WifiControl::GetInstance()->ConnectOrCreateWiFi(ssid, passwd, "sta", "", false); // 简化调用
原文地址: https://www.cveoy.top/t/topic/dxoL 著作权归作者所有。请勿转载和采集!