#include "modulewifi.h" #include #include #include ModuleWifi::ModuleWifi(QObject *parent) : QObject(parent) { pWifi = new WifiDisConnected(); state = false; QTimer::singleShot(1000, this, SLOT(onTimerTimeOutCheck())); } ModuleWifi::~ModuleWifi() { qDebug("~ModuleWifi"); delete pWifi; } bool ModuleWifi::isConnected() { return pWifi->state(); } int ModuleWifi::getquality() { int wifiquality; wifiquality = pWifi->quality(); return wifiquality; } void ModuleWifi::onConnect(QString name, QString passwd) { if(this->name == name && this->passwd == passwd){ if(pWifi->state()){ return; } } this->name = name ; this->passwd = passwd; delete pWifi; pWifi = new WifiConnecting(); pWifi->connect(name, passwd); } void ModuleWifi::onDisconnect() { qDebug("onDisconnect"); if(!pWifi->state()){ return; } delete pWifi; pWifi = new WifiDisConnected(); pWifi->disconnect(); } void ModuleWifi::onTimerTimeOutCheck() { pWifi = pWifi->run(pWifi); if(pWifi->state() != state){ state = pWifi->state(); emit sigStateChanged(state); } QTimer::singleShot(1000, this, SLOT(onTimerTimeOutCheck())); } WifiBase* WifiDisConnected::run(WifiBase* p) { qDebug("WifiDisConnected::run"); return p; } WifiBase* WifiConnecting::run(WifiBase* p) { qDebug("WifiConnecting::run"); if(connectCheck()){ delete p; p = new WifiConnected(); } return p; } WifiBase* WifiConnected::run(WifiBase* p) { qDebug("WifiConnected::run"); if(!connectCheck()){ delete p; p = new WifiDisConnected(); } return p; } void WifiBase::connect(QString name, QString passwd) { //TODO: 连接WIFI qDebug() << QString("connect: %1, %2").arg(name).arg(passwd); /*wifi连接*/ std::system("timeout 12s nohup /usr/sbin/wpa_supplicant -Dnl80211 -imlan0 -c /etc/sta.conf -B"); std::system("udhcpc -i mlan0 &"); } void WifiBase::disconnect() { //TODO:断开WIFI qDebug("disconnect"); std::system("killall wpa_supplicant"); } bool WifiBase::connectCheck() { QString wifi_quality; bool rtn = false; std::system("iwconfig mlan0 | grep -i quality >/home/data/wlxx_wifi_quality"); QFile file_read("/home/data/wlxx_wifi_quality"); if(file_read.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&file_read);//创建一个对象让它去读文件 QString line_wifi_quality=in.readLine(); wifi_quality = line_wifi_quality.mid(23, 1);//获取质量 if((wifi_quality=="0")|(wifi_quality==""))//WIFI断网 { quality_val = 0; rtn = false; } else { quality_val = wifi_quality.toInt(); rtn = true; } } file_read.close(); return rtn; } int WifiBase::quality() { return quality_val; }