Commit 56cba56f authored by lyong's avatar lyong

fix:优化wifi连接同ssid最好信号

parent e1e59099
......@@ -3,140 +3,60 @@ var _userdata = require("userdata.js");
var userData = _userdata.userData;
const fs = require("@system.fs")
var factoryDivPageJump = require("factoryDivPageJump.js");
var systemCtrl = require("systemCtrl.js");
// var systemCtrl = require("systemCtrl.js");
var resultsWifiList = undefined;
var that;
var writeWpaConf = require("factory_writeWpaConf.js")
var wlan_enalbed = userData.enableWLANSwitchFlag
// const generalSettingPage = proxy.indexObj.getPage("installationGeneralSetting");
var resultsWifiList = undefined;
var that;
var wifi_div = undefined;
var wifi_list_div = undefined;
// this.proxy = proxy;
// this.pageObj = proxy.indexObj;
// var that = this;
// var resultsWifiList = null;
var cnt = 0;
var connectWifiSSID = null;
var connectWifiPassword = null;
var signalLevel = 0;
var _encryptedMode = "";
var _connectWifiTimerId = undefined
var _connectWifiCnt = 0;
var connectingWifiTimer = false;
var connectingState = 0; //模拟用来表示连接wifi的状态,0表示未连接,1表示已连接
var connectTimeout = 0;
var flushTimeTimer = null;
var oneFlag = 1;
var writeWpaConf = require("writeWpaConf.js")
// var wlan_enalbed = userData.enableWLANSwitchFlag
// const generalSettingPage = proxy.indexObj.getPage("generalSetting");
// var wifi_div = undefined;
// var wifi_list_div = undefined;
function testWifiInitPage(obj) {
that = obj;
}
// function parseWifiScanResults(output) {
// const lines = output.split('\n');
// const results = [];
// // 从第三行开始解析(跳过前两行标题)
// for (let i = 2; i < lines.length; i++) {
// const line = lines[i].trim();
// if (!line) continue; // 跳过空行
// // 按多个空格分割行
// const parts = line.split(/\s+/).filter(part => part !== '');
// if (parts.length >= 4) {
// const signalLevel = parseInt(parts[2]); // 信号强度在第3列
// let ssid = parts.slice(4).join(' '); // SSID 在第5列及之后(可能包含空格)
// const flags = parts[3]; // 加密标志在第4列
// const isEncrypted = !flags.includes("[ESS]") ||
// flags.includes("WPA") ||
// flags.includes("WEP") ||
// flags.includes("PSK");
// results.push({
// ssid: ssid || '', // 如果 SSID 为空,则设为空字符串
// signalLevel: signalLevel,
// isEncrypted: isEncrypted
// });
// }
// }
// return results;
// }
function parseWifiScanResults(output) {
const lines = output.split('\n');
const results = [];
// 从第三行开始解析(跳过前两行标题)
for (let i = 2; i < lines.length; i++) {
for (let i = 2; i < lines.length; i++) { // 跳过表头
const line = lines[i].trim();
if (!line) continue; // 跳过空行
// 按多个空格分割行
const parts = line.split(/\s+/).filter(part => part !== '');
if (parts.length >= 4) {
const signalLevel = parseInt(parts[2]); // 信号强度在第3列
let ssid = parts.slice(4).join(' '); // SSID 在第5列及之后(可能包含空格)
const flags = parts[3]; // 加密标志在第4列
const isEncrypted = !flags.includes("[ESS]") ||
flags.includes("WPA") ||
flags.includes("WEP") ||
flags.includes("PSK");
let encryptedMode = 'Open'; // 默认开放网络
if (flags.includes('WPA3')) {
encryptedMode = 'WPA';
} else if (flags.includes('WPA2')) {
encryptedMode = 'WPA';
} else if (flags.includes('WPA')) {
encryptedMode = 'WPA';
} else if (flags.includes('WEP')) {
encryptedMode = 'WEP';
} else if (!flags.includes('[ESS]')) {
encryptedMode = 'Unknown'; // 非开放网络但未识别类型
}
// console.debug("ssid:" + ssid + " signalLevel:" + signalLevel + " isEncrypted:" + isEncrypted + " encryptedMode:" + encryptedMode);
if (!line) continue;
const parts = line.split(/\s+/);
if (parts.length < 4) continue;
const bssid = parts[0];
const frequency = parseInt(parts[1], 10); // MHz
const signalLevel = parseInt(parts[2], 10); // dBm
const flags = parts[3];
const ssid = parts.slice(4).join(' ') || ''; // 可能含空格
let encryptedMode = 'Open';
if (flags.includes('WPA3')) encryptedMode = 'WPA';
else if (flags.includes('WPA2')) encryptedMode = 'WPA';
else if (flags.includes('WPA')) encryptedMode = 'WPA';
else if (flags.includes('WEP')) encryptedMode = 'WEP';
else if (!flags.includes('[ESS]')) encryptedMode = 'Unknown';
results.push({
ssid: ssid || '', // 如果 SSID 为空,则设为空字符串
ssid: ssid,
bssid: bssid,
frequency: frequency, // ← 新增
signalLevel: signalLevel,
isEncrypted: isEncrypted,
isEncrypted: encryptedMode !== 'Open',
encryptedMode: encryptedMode
});
}
}
return results;
}
// var wlan_enalbed = userData.enableWLANSwitchFlag
// // const generalSettingPage = proxy.indexObj.getPage("generalSetting");
// var wifi_div = undefined;
// var wifi_list_div = undefined;
// this.proxy = proxy;
// this.pageObj = proxy.indexObj.getPage("generalSetting");
// var that = this;
// proxy.on("onEnableWLANSwitch", function () {
function onGotoWlanEnterPasswordPageEvent(value, signal, encrypted) {
console.log("receive onGotoWlanEnterPasswordPage singal!");
// var activePage = that.activePage;
......@@ -155,68 +75,27 @@ function onGotoWlanEnterPasswordPageEvent(value, signal, encrypted) {
}
// function connect_wifi(ssid, psk) {
function connect_wifi(ssid, psk, mode) {
console.log("===============connect_wifi: " + ssid + "===psk: " + psk + "===mode: " + mode);
writeWpaConf.set(ssid, psk, mode)
systemCtrl.executeSystemCommand("/tmp/wlanInit.sh &") //重启wifi连接
return
// if (psk == "Open") {
systemCtrl.executeSystemCommand("killall -9 udhcpc")
systemCtrl.executeSystemCommand("wpa_cli -p /tmp/wpa_supplicant/sockets -i wlan0 set_network 0 ssid \'\"" + ssid + "\"\'")
systemCtrl.executeSystemCommand("usleep 10000") //10ms 用于缓冲
systemCtrl.executeSystemCommand("wpa_cli -p /tmp/wpa_supplicant/sockets -i wlan0 set_network 0 psk \'\"" + psk + "\"\'")
systemCtrl.executeSystemCommand("usleep 10000") //10ms 用于缓冲
systemCtrl.executeSystemCommand("wpa_cli -p /tmp/wpa_supplicant/sockets -i wlan0 save_config")
systemCtrl.executeSystemCommand("usleep 10000") //10ms 用于缓冲
systemCtrl.executeSystemCommand("wpa_cli -p /tmp/wpa_supplicant/sockets -i wlan0 reconfigure")
//启动wpa_supplicant进程
systemCtrl.executeSystemCommand("usleep 200000") //200ms 用于缓冲设置和执行
systemCtrl.executeSystemCommand("wpa_cli -p /tmp/wpa_supplicant/sockets -i wlan0 disable_network 0")
systemCtrl.executeSystemCommand("usleep 10000") //10ms 用于缓冲
systemCtrl.executeSystemCommand("wpa_cli -p /tmp/wpa_supplicant/sockets -i wlan0 enable_network 0")
systemCtrl.executeSystemCommand("usleep 500000") //500ms 用于缓冲联网状态
//启动udhcpc
systemCtrl.executeSystemCommand("udhcpc -b -i wlan0 -t 1 -A 1 -R -H test")
// }
// else if(!(psk == null || psk == "" || psk == "null")) {
// }
// else {
console.log("ssid: " + ssid + "psk " + psk + "mode " + mode);
// writeWpaConf.set(ssid, psk, mode)
// systemCtrl.executeSystemCommand("/tmp/wlanInit.sh &") //重启wifi连接
// // return
// }
}
function diConnectWifi() {
systemCtrl.executeSystemCommand("wpa_cli -p /tmp/wpa_supplicant/sockets -i wlan0 disable_network 0")
systemCtrl.executeSystemCommand("usleep 10000") // 10ms 用于缓冲
systemCtrl.executeSystemCommand("wpa_cli -p /tmp/wpa_supplicant/sockets -i wlan0 remove_network 0")
systemCtrl.executeSystemCommand("usleep 10000") // 10ms 用于缓冲
systemCtrl.executeSystemCommand("wpa_cli -p /tmp/wpa_supplicant/sockets -i wlan0 save_config")
systemCtrl.executeSystemCommand("usleep 10000") // 10ms 用于缓冲
systemCtrl.executeSystemCommand("wpa_cli -p /tmp/wpa_supplicant/sockets -i wlan0 reconfigure")
systemCtrl.executeSystemCommand("usleep 200000") // 200ms 用于缓冲设置和执行
systemCtrl.executeSystemCommand("killall -9 udhcpc") // 停止 udhcpc
}
function WifiNoActive() {
console.log("=====WifiNoActive=====");
userData.wlanSsid = null;
userData.wlanSignalLevel = 0;
userData.wlanPassword = null;
that.$setY("id_enableWLANListArea0", -800);
that.$setY("wifiListItem", 0);
that.$setY("id_wifiListItem_Text", -800);
that.$setY("id_wifiListItem_xLine", -800);
// function connect_wifi(ssid, psk, mode) {
// console.log("===============connect_wifi: " + ssid + "===psk: " + psk + "===mode: " + mode);
// writeWpaConf.set(ssid, psk, mode)
// systemCtrl.executeSystemCommand("/tmp/wlanInit.sh &") //重启wifi连接
// return
// }
function connect_wifi(wifi) {
// 写配置时增加 bssid 字段
if (wifi.bssid == undefined) {
var bssid = '';
} else {
var bssid = wifi.bssid;
systemCtrl.executeSystemCommand("ifconfig wlan0 down")
}
console.log("connectBestWifi: " + JSON.stringify(wifi));
writeWpaConf.set(wifi.ssid, wifi.pwd, wifi.mode, bssid); // 内部生成 network={ssid="xxx" psk="xxx" bssid=XX:XX:XX:XX:XX:XX}
systemCtrl.executeSystemCommand("/tmp/wlanInit.sh &");
}
function scanRefreshWifiList(wifi_list) {
var enableWLANListItemSearchDiv = document.getElementById('id_enableWLANListItemSearchDiv')
......@@ -245,9 +124,7 @@ function scanRefreshWifiList(wifi_list) {
console.log("=====refreshWifiListlog=====2");
var top = 0;
for (var i = 0; i < wifi_list.length; i++) {
// if (wifi_list[i].ssid == userData.wlanSsid) {
// continue;
// }
var ssid = wifi_list[i].ssid
var signalLevel = wifi_list[i].signalLevel
var isEncrypted = wifi_list[i].isEncrypted
......@@ -322,16 +199,6 @@ function scanRefreshWifiList(wifi_list) {
"background-color": "#999999",
}, chooseAreaDiv)
// if (isEncrypted) {
// document.createElement('img', {
// top: 20,
// left: 363,
// width: 21,
// height: 26,
// src: "./images/settings/connecteWlanLockedPng.png",
// }, chooseAreaDiv)
// }
document.createElement('img', {
top: 14,
left: 8,
......@@ -353,9 +220,7 @@ function scanRefreshWifiList(wifi_list) {
function enableWLANSwitch() {
console.log("Is @@@@@@@@@@@@@@@@@@@@@@@@@@#3333333")
// if (!userData.enableWLANSwitchFlag) {
// return;
// }
var process = require("@system.process")
if (process.platform == "win32") {
console.log("its win32.")
......@@ -389,7 +254,7 @@ function enableWLANSwitch() {
function getWifiInfo(ssid) {
function getWifiInfo(ssid, bssid) {
console.log("getWifiInfo called with SSID: " + ssid);
if (!resultsWifiList) {
console.log("resultsWifiList is not available.");
......@@ -398,8 +263,12 @@ function getWifiInfo(ssid) {
// console.log("!!GET resultsWifiList: " + resultsWifiList);
// 遍历 resultsWifiList 查找指定 SSID
let foundWifi = null;
var bssidFlag = false;
if (bssid != undefined) {
bssidFlag = true;
}
for (let i = 0; i < resultsWifiList.length; i++) {
if (resultsWifiList[i].ssid === ssid) {
if (resultsWifiList[i].ssid === ssid && (bssidFlag && bssid === resultsWifiList[i].bssid)) {
console.log("Found SSID: " + ssid);
foundWifi = resultsWifiList[i];
break;
......@@ -450,105 +319,13 @@ function getWifiInfo(ssid) {
}
function onInstallationGeneralSettingConnectWifi(value) {
console.log("receive onInstallationGeneralSettingConnectWifi singal!");
console.log("Send cmd to connect wifi,connecting...");
if (value != undefined) {
connectWifiPassword = value;
}
var cmdStr = "02|0A|0A|";
var ssidCode = connectWifiPassword;
// var ssidCode = "HUAWEIK50S";
var ssidBytes = Array.from(ssidCode, char => char.charCodeAt(0));
var ssidHexString = ssidBytes.map(byte => byte.toString(16).padStart(2, '0')).join('|');
cmdStr += ssidHexString + "|";
var passWordCode = connectWifiSSID;
// var passWordCode = "Ww88888888";
var passWordBytes = Array.from(passWordCode, char => char.charCodeAt(0));
var passWordHexString = passWordBytes.map(byte => byte.toString(16).padStart(2, '0')).join('|');
cmdStr += passWordHexString + "|";
console.log("aaaaaaaaaaaaaaaaaaaaaaaa==================")
var msdk6ACmdArr = cloudComSerial.serialMsdkCmdArrayPack(0x6A, cmdStr);
cloudComSerial.sendCmd(msdk6ACmdArr);
if (connectingWifiTimer) {
clearInterval(connectingWifiTimer);
}
connectTimeout = 0;
connectingWifiTimer = setInterval(function () {
var dotContext = ["", ".", "..", "..."];
// console.debug("================test=============")
if (connectingState == 0) {
connectTimeout++;
} else {
connectTimeout = 0;
console.log("wifi connect success!");
setAreaButtonDivOn();
userData.wlanSsid = connectWifiSSID;
userData.wlanPassword = passWordCode;
WifiActive();
var activePage = that.pageObj.activePage;
handleJumpPage.moveShowHidePage(that.pageObj, activePage, "SuccessConnectWifi");
clearInterval(connectingWifiTimer);
}
if (connectTimeout > 60) {
console.log("wifi connect timeout!");
setAreaButtonDivOn();
WifiNoActive();
// handleJumpPage.moveShowHidePage(that.pageObj, activePage, "failConnectWifi");
clearInterval(connectingWifiTimer);
}
}, 1000);
//使用wpa模式去连wifi
connectWifiByWpa(connectWifiSSID, connectWifiPassword, function (result) {
if (result == 0) {
console.log("Connect wifi success");
setTimeout(() => {
// console.debug("Will send 0xF3 request to msdk");
//向msdk发送0xF3请求联网命令
var msdk17CmdArr = cloudComSerial.serialMsdkCmdArrayPack(0xF3, "01")
cloudComSerial.sendCmd(msdk17CmdArr);
}, 3000);
//跳转成功页面
connectingState = 1
// gotoConnectSuccessPage()
} else {
console.log("Connect wifi failed");
//跳转失败页面
connectTimeout = 70
// gotoConnectFailedPage()
}
});
//跳转正在连接页面
// gotoConnectingPage()
}
// proxy.on("onInstallationGeneralSettingConnectWifi", onInstallationGeneralSettingConnectWifi);
function ConnectWifi(value) {
var ssid = connectWifiSSID;
var pwd = value;
var encrypte = _encryptedMode;
// console.log("ConnectWifi: " + ssid + "pwd: " + pwd + "encrypte: " + encrypte);
// var factory_wifi = require("factory_wifi.js");
// factory_wifi.testWifiConnect(ssid, pwd);
// connect_wifi(ssid,pwd);
that.initWifissid = ssid;
that.initWifipwd = pwd;
that.initencryptedMode = encrypte;
......@@ -559,9 +336,7 @@ function ConnectWifi(value) {
function enableWLANScanValue() {
console.log("Is @@@@@@@@@@@@@@@@@@@@@@@@@@#3333333")
// if (!userData.enableWLANSwitchFlag) {
// return;
// }
var process = require("@system.process")
if (process.platform == "win32") {
console.log("its win32.")
......@@ -586,13 +361,33 @@ function enableWLANScanValue() {
resultsWifiList = listScanValue;
console.log(JSON.stringify(resultsWifiList))
}
// resultsWifiList = parseWifiScanResults(content)
// console.log(JSON.stringify(resultsWifiList))
// refreshWifiList(resultsWifiList)
}
}, 5000)
}
function pickStrongestBySsid(list, targetSsid) {
console.log("pickStrongestBySsid");
let best = null;
list.forEach(item => {
if (item.ssid === targetSsid) {
console.log("candidate item:" + JSON.stringify(item));
if (!best || item.signalLevel > best.signalLevel) {
best = item;
}
}
});
console.log("best:" + JSON.stringify(best));
return best;
}
function getScanAllWifi() {
console.log("getScanAllWifi");
if (!resultsWifiList || resultsWifiList.length === 0) {
// enableWLANScanValue();
return [];
}
return resultsWifiList || [];
}
//touchedStartScanWifiDetailsButton 点击开始扫描
//touchedscanWifiList 进入wifi列表页面
......@@ -603,6 +398,7 @@ module.exports = {
testWifiInitPage: testWifiInitPage,
ConnectWifi: ConnectWifi,
enableWLANScanValue: enableWLANScanValue,
pickStrongestBySsid: pickStrongestBySsid,
getScanAllWifi: getScanAllWifi,
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment