Can now set/clear CFG mode with OLED. Can also clear credentials.

This commit is contained in:
rljonesau 2019-01-15 08:41:54 +11:00
parent fa4c595efa
commit af0980a72b
6 changed files with 83 additions and 29 deletions

View file

@ -37,9 +37,11 @@
//
///////////////////////////////////////////////////////////////////////////
#define STA_HOLD_TIME 10
CScreen4::CScreen4(C128x64_OLED& display, CScreenManager& mgr) : CScreenHeader(display, mgr)
{
_rowSel = 0;
}
@ -50,22 +52,29 @@ CScreen4::show()
int yPos = 16;
if(isWifiConnected() || isWifiAP()) {
if(isWifiAP()) {
_printInverted(0, yPos, " WiFi: AP only ", true);
}
else {
_printInverted(0, yPos, " WiFi: STA+AP ", true);
}
// only show STA IP address if available!
if(isWifiSTA()) {
yPos += _display.textHeight() + 2;
_printMenuText(0, yPos, "STA:");
_printMenuText(25, yPos, getWifiSTAAddrStr());
}
const char* pTitle = NULL;
if(isWifiAP())
pTitle = isWifiConfigPortal() ? " WiFi: CFG AP only " : " WiFi: AP only ";
else
pTitle = isWifiConfigPortal() ? " WiFi: CFG STA+AP " : " WiFi: STA+AP ";
if(_rowSel == 1)
_printMenuText(3, yPos, pTitle, true); // selection box
else
_printInverted(3, yPos, pTitle, true); // inverted title bar
yPos += 3;
// show AP IP address
yPos += _display.textHeight() + 2;
_printMenuText(0, yPos, " AP:");
_printMenuText(25, yPos, getWifiAPAddrStr());
// only show STA IP address if available!
if(isWifiSTA() && _repeatCount <= STA_HOLD_TIME) {
yPos += _display.textHeight() + 2;
_printMenuText(0, yPos, "STA:");
_printMenuText(25, yPos, getWifiSTAAddrStr());
}
}
else {
_printInverted(0, yPos, " WiFi Inactive ", true);
@ -82,6 +91,7 @@ void
CScreen4::keyHandler(uint8_t event)
{
if(event & keyPressed) {
_repeatCount = 0;
// press CENTRE
if(event & key_Centre) {
return;
@ -94,6 +104,38 @@ CScreen4::keyHandler(uint8_t event)
if(event & key_Right) {
_ScreenManager.nextScreen();
}
// press UP
if(event & key_Up) {
_rowSel = 1;
// _rowSel++;
// UPPERLIMIT(_rowSel, (isWifiConfigPortal() ? 2 : 1));
}
// press DOWN
if(event & key_Down) {
_rowSel = 0;
// _rowSel--;
// UPPERLIMIT(_rowSel, 0);
}
}
if(event & keyRepeat) { // track key hold time
_repeatCount++;
}
if(event & keyReleased) {
if(event & key_Centre) {
if(_rowSel) {
if(isWifiConfigPortal())
wifiEnterConfigPortal(false); // stop config portal, reboot
else {
if(_rowSel==1)
wifiEnterConfigPortal(true, _repeatCount > STA_HOLD_TIME); // press - reboot into portal, long press - erase credentials
else
wifiEnterConfigPortal(false); // stop config portal, reboot
}
}
}
_repeatCount = 0;
}
}

View file

@ -30,4 +30,7 @@ public:
CScreen4(C128x64_OLED& display, CScreenManager& mgr);
void show();
void keyHandler(uint8_t event);
private:
int _rowSel;
int _repeatCount;
};

View file

@ -128,7 +128,7 @@ CScreenHeader::showWifiIcon()
{
if(isWifiConnected() || isWifiAP()) {
_display.drawBitmap(X_WIFI_ICON, Y_WIFI_ICON, wifiIcon, W_WIFI_ICON, H_WIFI_ICON, WHITE);
if(isConfigPortal()) {
if(isWifiConfigPortal()) {
_display.fillRect(X_WIFI_ICON + 8, Y_WIFI_ICON + 5, 15, 7, BLACK);
CTransientFont AF(_display, &MINIFONT); // temporarily use a mini font
_display.setCursor(X_WIFI_ICON+9, Y_WIFI_ICON+6);

View file

@ -166,31 +166,39 @@ void doWiFiManager()
DebugPort.print("Wifi config button tDelta = "); DebugPort.println(tDelta);
// > 5 second press?
if(tDelta > 5000) {
prepBootIntoConfigPortal(true); // very long press - clear credentials, boot into portal
wm.resetSettings();
DebugPort.println("*** Clearing credentials and rebooting into portal ***");
delay(1000);
ESP.restart();
wifiEnterConfigPortal(true, true); // very long press - clear credentials, reboot into portal
}
// > 1 second press?
else if(tDelta > 1000) {
prepBootIntoConfigPortal(false); // long press - boot into SoftAP
DebugPort.println("*** Rebooting into web server ***");
delay(1000);
ESP.restart();
wifiEnterConfigPortal(false); // long press - reboot into web server
}
// > 50ms press?
else if(tDelta > 50) {
prepBootIntoConfigPortal(true); // short press - boot into Portal
DebugPort.println("*** Rebooting into config portal ***");
delay(1000);
ESP.restart();
wifiEnterConfigPortal(true); // quick press - reboot into portal
}
// consider as contact bounce if < 50ms!
}
}
}
void wifiEnterConfigPortal(bool state, bool erase)
{
prepBootIntoConfigPortal(state);
if(erase) {
wm.resetSettings();
DebugPort.println("*** Erased wifi credentials ***");
}
if(state)
DebugPort.println("*** Rebooting into config portal ***");
else
DebugPort.println("*** Rebooting into web server ***");
delay(1000);
ESP.restart();
}
// callback is invoked by WiFiManager after new credentials are saved and verified
void saveParamsCallback()
{
@ -238,7 +246,7 @@ bool isWifiSTA()
return isSTA; // true: STAtion mode link is active
}
bool isConfigPortal()
bool isWifiConfigPortal()
{
return isPortalAP; // true: config portal is running
}

View file

@ -33,9 +33,10 @@
bool isWifiConnected();
bool isWifiAP();
bool isWifiSTA();
bool isConfigPortal();
bool isWifiConfigPortal();
bool isWebClientConnected();
bool hasWebClientSpoken(bool reset = false);
bool hasWebServerSpoken(bool reset = false);
void wifiEnterConfigPortal(bool state, bool erase = false);
#endif __BTCWIFI_H__

View file

@ -46,5 +46,5 @@ const uint8_t keyLeft_pin = 39; // input only, no chip pullup
const uint8_t ListenOnlyPin = 33;
//const uint8_t WiFi_TriggerPin = 25;
const uint8_t WiFi_TriggerPin = 0;
const uint8_t WiFi_TriggerPin = 0; // BOOT switch!