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); // 简化调用

bool WifiControlCheckNeedReconnectWificonst char ssid const char pwd LOGDWifiControlCheckNeedReconnectWifi; char wifiMode16; FileUtilsReadStrFromFiledatacfgwifi_modewifiModesizeofwifiMode;

原文地址: https://www.cveoy.top/t/topic/dxoL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录