Browse Source

Update ahoywifi.cpp

pull/652/head
beegee3 2 years ago
committed by GitHub
parent
commit
bbee9abd28
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 64
      src/wifi/ahoywifi.cpp

64
src/wifi/ahoywifi.cpp

@ -25,8 +25,6 @@ void ahoywifi::setup(settings_t *config, uint32_t *utcTimestamp, appWifiCb cb) {
mStaConn = DISCONNECTED; mStaConn = DISCONNECTED;
mCnt = 0; mCnt = 0;
mScanActive = false; mScanActive = false;
mLastApClients = 0;
mScanCnt = 0;
#if defined(ESP8266) #if defined(ESP8266)
wifiConnectHandler = WiFi.onStationModeConnected(std::bind(&ahoywifi::onConnect, this, std::placeholders::_1)); wifiConnectHandler = WiFi.onStationModeConnected(std::bind(&ahoywifi::onConnect, this, std::placeholders::_1));
@ -66,44 +64,31 @@ void ahoywifi::tickWifiLoop() {
#if !defined(AP_ONLY) #if !defined(AP_ONLY)
if(mStaConn != GOT_IP) { if(mStaConn != GOT_IP) {
if (WiFi.softAPgetStationNum() > 0) { // do not reconnect if any AP connection exists if (WiFi.softAPgetStationNum() > 0) { // do not reconnect if any AP connection exists
if(WIFI_AP_STA == WiFi.getMode()) { if(mStaConn != IN_AP_MODE) {
// first time switch to AP Mode mStaConn = IN_AP_MODE;
if(mScanActive && (mLastApClients != WiFi.softAPgetStationNum())) // first time switch to AP Mode
mScanActive = false; if (mScanActive) {
// scan is finished
if(!mScanActive) {
WiFi.mode(WIFI_AP);
mDns.start(53, "*", mApIp);
}
// only once a client connects to AP
if(mLastApClients != WiFi.softAPgetStationNum()) {
mLastApClients = WiFi.softAPgetStationNum();
WiFi.scanDelete(); WiFi.scanDelete();
mAppWifiCb(false); mScanActive = false;
DBGPRINTLN(F("AP client connected"));
welcome(mApIp.toString());
} }
DBGPRINTLN(F("AP client connected"));
welcome(mApIp.toString());
WiFi.mode(WIFI_AP);
mDns.start(53, "*", mApIp);
mAppWifiCb(true);
} }
mDns.processNextRequest(); mDns.processNextRequest();
return; return;
} }
else if(WIFI_AP == WiFi.getMode()) { else if(mStaConn == IN_AP_MODE) {
mLastApClients = 0;
mCnt = 0; mCnt = 0;
DPRINTLN(DBG_INFO, "DNS stop");
mDns.stop(); mDns.stop();
WiFi.mode(WIFI_AP_STA); WiFi.mode(WIFI_AP_STA);
mStaConn = DISCONNECTED;
} }
mCnt++; mCnt++;
uint8_t timeout = 10; // seconds if(!mScanActive && mBSSIDList.empty()) { // start scanning APs with the given SSID
if (mStaConn == CONNECTED) // connected but no ip
timeout = 20;
if(!mScanActive && mBSSIDList.empty() && ((mCnt % timeout) == 0)) { // start scanning APs with the given SSID
DBGPRINT(F("scanning APs with SSID ")); DBGPRINT(F("scanning APs with SSID "));
DBGPRINTLN(String(mConfig->sys.stationSsid)); DBGPRINTLN(String(mConfig->sys.stationSsid));
mScanCnt = 0; mScanCnt = 0;
@ -115,14 +100,20 @@ void ahoywifi::tickWifiLoop() {
#endif #endif
return; return;
} }
uint8_t timeout = 10; // seconds
if (mStaConn == CONNECTED) // connected but no ip
timeout = 20;
DBGPRINT(F("reconnect in ")); DBGPRINT(F("reconnect in "));
DBGPRINT(String(timeout-mCnt)); DBGPRINT(String(timeout-mCnt));
DBGPRINTLN(F(" seconds")); DBGPRINTLN(F(" seconds"));
if(mScanActive) { if(mScanActive) {
getBSSIDs(); getBSSIDs();
//if(!mScanActive) // scan completed if(!mScanActive) // scan completed
// if ((mCnt % timeout) < 8) if ((mCnt % timeout) < timeout - 2)
// mCnt = timeout - 2; mCnt = timeout - 2;
} }
if((mCnt % timeout) == 0) { // try to reconnect after x sec without connection if((mCnt % timeout) == 0) { // try to reconnect after x sec without connection
if(mStaConn != CONNECTED) if(mStaConn != CONNECTED)
@ -166,8 +157,6 @@ void ahoywifi::setupAp(void) {
WiFi.mode(WIFI_AP_STA); WiFi.mode(WIFI_AP_STA);
WiFi.softAPConfig(mApIp, mApIp, IPAddress(255, 255, 255, 0)); WiFi.softAPConfig(mApIp, mApIp, IPAddress(255, 255, 255, 0));
WiFi.softAP(WIFI_AP_SSID, WIFI_AP_PWD); WiFi.softAP(WIFI_AP_SSID, WIFI_AP_PWD);
mDns.start(53, "*", mApIp);
} }
@ -266,10 +255,10 @@ void ahoywifi::sortRSSI(int *sort, int n) {
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void ahoywifi::scanAvailNetworks(void) { void ahoywifi::scanAvailNetworks(void) {
if(-2 == WiFi.scanComplete()) { if(!mScanActive) {
mScanActive = true; mScanActive = true;
if(WIFI_AP == WiFi.getMode()) if(WIFI_AP == WiFi.getMode())
WiFi.mode(WIFI_AP_STA); WiFi.mode(WIFI_AP_STA);
WiFi.scanNetworks(true); WiFi.scanNetworks(true);
} }
} }
@ -291,12 +280,14 @@ void ahoywifi::getAvailNetworks(JsonObject obj) {
} }
mScanActive = false; mScanActive = false;
WiFi.scanDelete(); WiFi.scanDelete();
if(mStaConn == IN_AP_MODE)
WiFi.mode(WIFI_AP);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void ahoywifi::getBSSIDs() { void ahoywifi::getBSSIDs() {
int n = WiFi.scanComplete(); int n = WiFi.scanComplete();
if (n < 0){ if (n < 0) {
mScanCnt++; mScanCnt++;
if (mScanCnt < 20) if (mScanCnt < 20)
return; return;
@ -336,7 +327,6 @@ void ahoywifi::connectionEvent(WiFiStatus_t status) {
mScanActive = false; mScanActive = false;
} }
welcome(WiFi.localIP().toString() + F(" (Station)")); welcome(WiFi.localIP().toString() + F(" (Station)"));
mDns.stop();
WiFi.mode(WIFI_STA); WiFi.mode(WIFI_STA);
DBGPRINTLN(F("[WiFi] AP disabled")); DBGPRINTLN(F("[WiFi] AP disabled"));
mAppWifiCb(true); mAppWifiCb(true);

Loading…
Cancel
Save