Skip to content

Commit

Permalink
0.8.98
Browse files Browse the repository at this point in the history
* fix Ethernet
* modified wizard
* fix github compile?
  • Loading branch information
lumapu committed Mar 25, 2024
1 parent 1040330 commit 9223167
Show file tree
Hide file tree
Showing 15 changed files with 371 additions and 139 deletions.
6 changes: 5 additions & 1 deletion src/app.h
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,11 @@ class app : public IApp, public ah::Scheduler {
}*/

bool getWasInCh12to14(void) const override {
return false; // @todo mWifi.getWasInCh12to14();
#if defined(ESP8266)
return mNetwork->getWasInCh12to14();
#else
return false;
#endif
}
#endif /* !defined(ETHERNET) */

Expand Down
2 changes: 1 addition & 1 deletion src/config/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@
#define DEF_ETH_CS_PIN 15
#endif
#ifndef DEF_ETH_RST_PIN
#define DEF_ETH_RST_PIN 2
#define DEF_ETH_RST_PIN DEF_PIN_OFF
#endif
#else /* defined(ETHERNET) */
// time in seconds how long the station info (ssid + pwd) will be tried
Expand Down
12 changes: 10 additions & 2 deletions src/config/settings.h
Original file line number Diff line number Diff line change
Expand Up @@ -405,13 +405,17 @@ class settings {
else {
snprintf(mCfg.sys.stationSsid, SSID_LEN, FB_WIFI_SSID);
snprintf(mCfg.sys.stationPwd, PWD_LEN, FB_WIFI_PWD);
snprintf(mCfg.sys.apPwd, PWD_LEN, WIFI_AP_PWD);
mCfg.sys.isHidden = false;
}
#endif
snprintf(mCfg.sys.apPwd, PWD_LEN, WIFI_AP_PWD);

#if defined(ETHERNET)
mCfg.sys.eth.enabled = false;
#if defined(DEF_ETH_ENABLED)
mCfg.sys.eth.enabled = true;
#else
mCfg.sys.eth.enabled = false;
#endif
mCfg.sys.eth.pinCs = DEF_ETH_CS_PIN;
mCfg.sys.eth.pinSclk = DEF_ETH_SCK_PIN;
mCfg.sys.eth.pinMiso = DEF_ETH_MISO_PIN;
Expand All @@ -431,7 +435,11 @@ class settings {
mCfg.nrf.pinMosi = DEF_NRF_MOSI_PIN;
mCfg.nrf.pinSclk = DEF_NRF_SCLK_PIN;

#if defined(ETHERNET)
mCfg.nrf.enabled = false;
#else
mCfg.nrf.enabled = true;
#endif

#if defined(ESP32)
mCfg.cmt.pinSclk = DEF_CMT_SCLK;
Expand Down
17 changes: 9 additions & 8 deletions src/network/AhoyEthernet.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,16 @@ class AhoyEthernet : public AhoyNetwork {
void begin() override {
mAp.enable();

if(!mConfig->sys.eth.enabled)
return;

mEthSpi.begin(mConfig->sys.eth.pinMiso, mConfig->sys.eth.pinMosi, mConfig->sys.eth.pinSclk, mConfig->sys.eth.pinCs, mConfig->sys.eth.pinIrq, mConfig->sys.eth.pinRst);
ETH.setHostname(mConfig->sys.deviceName);

// static IP
setupIp([this](IPAddress ip, IPAddress gateway, IPAddress mask, IPAddress dns1, IPAddress dns2) -> bool {
return ETH.config(ip, gateway, mask, dns1, dns2);
});

ETH.setHostname(mConfig->sys.deviceName);
}

void tickNetworkLoop() override {
Expand All @@ -43,9 +47,8 @@ class AhoyEthernet : public AhoyNetwork {
break;

case NetworkState::GOT_IP:
mAp.disable();

if(!mConnected) {
mAp.disable();
mConnected = true;
ah::welcome(ETH.localIP().toString(), F("Station"));
MDNS.begin(mConfig->sys.deviceName);
Expand All @@ -59,10 +62,8 @@ class AhoyEthernet : public AhoyNetwork {
return ETH.localIP().toString();
}

void scanAvailNetworks(void) override {};
bool getAvailNetworks(JsonObject obj) override {
return false;
}
private:
AhoyEthernetSpi mEthSpi;
};

#endif /*ETHERNET*/
Expand Down
17 changes: 11 additions & 6 deletions src/network/AhoyEthernetSpi.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,11 @@ class AhoyEthernetSpi {
eth_netif(nullptr) {}

void begin(int8_t pin_miso, int8_t pin_mosi, int8_t pin_sclk, int8_t pin_cs, int8_t pin_int, int8_t pin_rst) {
gpio_reset_pin(static_cast<gpio_num_t>(pin_rst));
gpio_set_direction(static_cast<gpio_num_t>(pin_rst), GPIO_MODE_OUTPUT);
gpio_set_level(static_cast<gpio_num_t>(pin_rst), 0);
if(-1 != pin_rst) {
gpio_reset_pin(static_cast<gpio_num_t>(pin_rst));
gpio_set_direction(static_cast<gpio_num_t>(pin_rst), GPIO_MODE_OUTPUT);
gpio_set_level(static_cast<gpio_num_t>(pin_rst), 0);
}

gpio_reset_pin(static_cast<gpio_num_t>(pin_sclk));
gpio_reset_pin(static_cast<gpio_num_t>(pin_mosi));
Expand All @@ -42,6 +44,7 @@ class AhoyEthernetSpi {
gpio_reset_pin(static_cast<gpio_num_t>(pin_int));
gpio_set_pull_mode(static_cast<gpio_num_t>(pin_int), GPIO_PULLUP_ONLY);


spi_bus_config_t buscfg = {
.mosi_io_num = pin_mosi,
.miso_io_num = pin_miso,
Expand Down Expand Up @@ -80,9 +83,11 @@ class AhoyEthernetSpi {
ESP_ERROR_CHECK(spi_bus_add_device(SPI3_HOST, &devcfg, &spi));

// Reset sequence
delayMicroseconds(500);
gpio_set_level(static_cast<gpio_num_t>(pin_rst), 1);
delayMicroseconds(1000);
if(-1 != pin_rst) {
delayMicroseconds(500);
gpio_set_level(static_cast<gpio_num_t>(pin_rst), 1);
delayMicroseconds(1000);
}

// Arduino function to start networking stack if not already started
tcpipInit();
Expand Down
47 changes: 45 additions & 2 deletions src/network/AhoyNetwork.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,8 +80,39 @@ class AhoyNetwork {
virtual void begin() = 0;
virtual void tickNetworkLoop() = 0;
virtual String getIp(void) = 0;
virtual void scanAvailNetworks(void) = 0;
virtual bool getAvailNetworks(JsonObject obj) = 0;

virtual bool getWasInCh12to14() {
return false;
}

#if !defined(ETHERNET)
void scanAvailNetworks(void) {
if(!mScanActive) {
mScanActive = true;
WiFi.scanNetworks(true);
}
}

bool getAvailNetworks(JsonObject obj) {
JsonArray nets = obj.createNestedArray(F("networks"));

int n = WiFi.scanComplete();
if (n < 0)
return false;
if(n > 0) {
int sort[n];
sortRSSI(&sort[0], n);
for (int i = 0; i < n; ++i) {
nets[i][F("ssid")] = WiFi.SSID(sort[i]);
nets[i][F("rssi")] = WiFi.RSSI(sort[i]);
}
}
mScanActive = false;
WiFi.scanDelete();

return true;
}
#endif

protected:
void setupIp(std::function<bool(IPAddress ip, IPAddress gateway, IPAddress mask, IPAddress dns1, IPAddress dns2)> cb) {
Expand Down Expand Up @@ -169,6 +200,17 @@ class AhoyNetwork {
mUdp.close();
}

#if !defined(ETHERNET)
void sortRSSI(int *sort, int n) {
for (int i = 0; i < n; i++)
sort[i] = i;
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (WiFi.RSSI(sort[j]) > WiFi.RSSI(sort[i]))
std::swap(sort[i], sort[j]);
}
#endif

protected:
enum class NetworkState : uint8_t {
DISCONNECTED,
Expand All @@ -182,6 +224,7 @@ class AhoyNetwork {
settings_t *mConfig = nullptr;
uint32_t *mUtcTimestamp = nullptr;
bool mConnected = false;
bool mScanActive = false;

OnNetworkCB mOnNetworkCB;
OnTimeCB mOnTimeCB;
Expand Down
2 changes: 1 addition & 1 deletion src/network/AhoyNetworkHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
#include "../utils/dbg.h"
#include <Arduino.h>
#if defined(ESP32)
#include <WiFi.h>
#include "ESPAsyncWebServer.h"
#include <WiFiType.h>
#include <ESPmDNS.h>
#else
Expand Down
32 changes: 1 addition & 31 deletions src/network/AhoyWifiEsp32.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
#if defined(ESP32) && !defined(ETHERNET)
#include <functional>
#include <AsyncUDP.h>
#include <Wifi.h>
#include "AhoyNetwork.h"
#include "ESPAsyncWebServer.h"

class AhoyWifi : public AhoyNetwork {
public:
Expand Down Expand Up @@ -69,33 +69,6 @@ class AhoyWifi : public AhoyNetwork {
return WiFi.localIP().toString();
}

void scanAvailNetworks(void) override {
if(!mScanActive) {
mScanActive = true;
WiFi.scanNetworks(true);
}
}

bool getAvailNetworks(JsonObject obj) override {
JsonArray nets = obj.createNestedArray(F("networks"));

int n = WiFi.scanComplete();
if (n < 0)
return false;
if(n > 0) {
int sort[n];
sortRSSI(&sort[0], n);
for (int i = 0; i < n; ++i) {
nets[i][F("ssid")] = WiFi.SSID(sort[i]);
nets[i][F("rssi")] = WiFi.RSSI(sort[i]);
}
}
mScanActive = false;
WiFi.scanDelete();

return true;
}

private:
void sortRSSI(int *sort, int n) {
for (int i = 0; i < n; i++)
Expand All @@ -105,9 +78,6 @@ class AhoyWifi : public AhoyNetwork {
if (WiFi.RSSI(sort[j]) > WiFi.RSSI(sort[i]))
std::swap(sort[i], sort[j]);
}

private:
bool mScanActive = false;
};

#endif /*ESP32 & !ETHERNET*/
Expand Down
43 changes: 6 additions & 37 deletions src/network/AhoyWifiEsp8266.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,6 @@ class AhoyWifi : public AhoyNetwork {
DBGPRINT(" " + String(bssid[j], HEX));
}
DBGPRINTLN("");
mGotDisconnect = false;
WiFi.begin(mConfig->sys.stationSsid, mConfig->sys.stationPwd, 0, &bssid[0]);
break;

Expand All @@ -96,6 +95,9 @@ class AhoyWifi : public AhoyNetwork {
MDNS.begin(mConfig->sys.deviceName);
mOnNetworkCB(true);
}

if(WiFi.channel() > 11)
mWasInCh12to14 = true;
break;
}
}
Expand All @@ -104,43 +106,11 @@ class AhoyWifi : public AhoyNetwork {
return WiFi.localIP().toString();
}

void scanAvailNetworks(void) override {
if(!mScanActive) {
mScanActive = true;
WiFi.scanNetworks(true);
}
}

bool getAvailNetworks(JsonObject obj) override {
JsonArray nets = obj.createNestedArray(F("networks"));

int n = WiFi.scanComplete();
if (n < 0)
return false;
if(n > 0) {
int sort[n];
sortRSSI(&sort[0], n);
for (int i = 0; i < n; ++i) {
nets[i][F("ssid")] = WiFi.SSID(sort[i]);
nets[i][F("rssi")] = WiFi.RSSI(sort[i]);
}
}
mScanActive = false;
WiFi.scanDelete();

return true;
bool getWasInCh12to14() override {
return mWasInCh12to14;
}

private:
void sortRSSI(int *sort, int n) {
for (int i = 0; i < n; i++)
sort[i] = i;
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (WiFi.RSSI(sort[j]) > WiFi.RSSI(sort[i]))
std::swap(sort[i], sort[j]);
}

bool getBSSIDs() {
bool result = false;
int n = WiFi.scanComplete();
Expand Down Expand Up @@ -175,9 +145,8 @@ class AhoyWifi : public AhoyNetwork {
private:
uint8_t mCnt = 0;
uint8_t mScanCnt = 0;
bool mScanActive = false;
bool mGotDisconnect = false;
std::list<uint8_t> mBSSIDList;
bool mWasInCh12to14 = false;
static constexpr uint8_t TIMEOUT = 20;
static constexpr uint8_t SCAN_TIMEOUT = 10;
};
Expand Down
Loading

0 comments on commit 9223167

Please sign in to comment.