From 7ff91ccf0256a77a1354bf43454a37a792322e85 Mon Sep 17 00:00:00 2001 From: HomeSpan Date: Mon, 24 Oct 2022 19:03:15 -0400 Subject: [PATCH] Changed hsEventCallback to statusCallback --- src/HomeSpan.cpp | 89 ++++++++++++++++++++++-------------------------- src/HomeSpan.h | 7 ++-- src/src.ino | 6 ++-- 3 files changed, 48 insertions(+), 54 deletions(-) diff --git a/src/HomeSpan.cpp b/src/HomeSpan.cpp index 42f3ddd..aad5797 100644 --- a/src/HomeSpan.cpp +++ b/src/HomeSpan.cpp @@ -195,13 +195,13 @@ void Span::pollTask() { } else { Serial.print("YOU MAY CONFIGURE BY TYPING 'W '.\n\n"); statusLED->start(LED_WIFI_NEEDED); - if(hsEventCallback) - hsEventCallback(HS_WIFI_NEEDED); + if(statusCallback) + statusCallback(HS_WIFI_NEEDED); } } else { statusLED->start(LED_WIFI_CONNECTING); - if(hsEventCallback) - hsEventCallback(HS_WIFI_CONNECTING); + if(statusCallback) + statusCallback(HS_WIFI_CONNECTING); } if(controlButton) @@ -332,7 +332,7 @@ int Span::getFreeSlot(){ void Span::commandMode(){ - if(!statusDevice && !hsEventCallback){ + if(!statusDevice && !statusCallback){ Serial.print("*** ERROR: CAN'T ENTER COMMAND MODE WITHOUT A DEFINED STATUS LED OR EVENT HANDLER CALLBACK***\n\n"); return; } @@ -341,8 +341,8 @@ void Span::commandMode(){ int mode=1; boolean done=false; statusLED->start(500,0.3,mode,1000); - if(hsEventCallback) - hsEventCallback(HS_CONFIG_MODE_EXIT); + if(statusCallback) + statusCallback(HS_CONFIG_MODE_EXIT); unsigned long alarmTime=millis()+comModeLife; while(!done){ @@ -361,8 +361,8 @@ void Span::commandMode(){ if(mode==6) mode=1; statusLED->start(500,0.3,mode,1000); - if(hsEventCallback) - hsEventCallback((HS_EVENT)(HS_CONFIG_MODE_EXIT+mode-1)); + if(statusCallback) + statusCallback((HS_STATUS)(HS_CONFIG_MODE_EXIT+mode-1)); } else { done=true; } @@ -376,28 +376,7 @@ void Span::commandMode(){ case 1: Serial.print("*** NO ACTION\n\n"); - if(strlen(network.wifiData.ssid)==0){ - statusLED->start(LED_WIFI_NEEDED); - if(hsEventCallback) - hsEventCallback(HS_WIFI_NEEDED); - } - else - if(WiFi.status()!=WL_CONNECTED){ - statusLED->start(LED_WIFI_CONNECTING); - if(hsEventCallback) - hsEventCallback(HS_WIFI_CONNECTING); - } - else - if(!HAPClient::nAdminControllers()){ - statusLED->start(LED_PAIRING_NEEDED); - if(hsEventCallback) - hsEventCallback(HS_PAIRING_NEEDED); - } - else{ - statusLED->on(); - if(hsEventCallback) - hsEventCallback(HS_PAIRED); - } + resetStatus(); break; case 2: @@ -434,8 +413,8 @@ void Span::checkConnect(){ waitTime=60000; alarmConnect=0; statusLED->start(LED_WIFI_CONNECTING); - if(hsEventCallback) - hsEventCallback(HS_WIFI_CONNECTING); + if(statusCallback) + statusCallback(HS_WIFI_CONNECTING); } if(WiFi.status()!=WL_CONNECTED){ @@ -462,17 +441,7 @@ void Span::checkConnect(){ return; } - if(!HAPClient::nAdminControllers()){ - statusLED->start(LED_PAIRING_NEEDED); - if(hsEventCallback) - hsEventCallback(HS_PAIRING_NEEDED); - } - else{ - statusLED->on(); - if(hsEventCallback) - hsEventCallback(HS_PAIRED); - } - + resetStatus(); connected++; addWebLog(true,"WiFi Connected! IP Address = %s",WiFi.localIP().toString().c_str()); @@ -796,10 +765,7 @@ void Span::processSerialCommand(const char *c){ Serial.print("\nDEVICE NOT YET PAIRED -- PLEASE PAIR WITH HOMEKIT APP\n\n"); mdns_service_txt_item_set("_hap","_tcp","sf","1"); // set Status Flag = 1 (Table 6-8) - if(strlen(network.wifiData.ssid)==0) - statusLED->start(LED_WIFI_NEEDED); - else - statusLED->start(LED_PAIRING_NEEDED); + resetStatus(); } break; @@ -1150,6 +1116,33 @@ void Span::processSerialCommand(const char *c){ /////////////////////////////// +void Span::resetStatus(){ + if(strlen(network.wifiData.ssid)==0){ + statusLED->start(LED_WIFI_NEEDED); + if(statusCallback) + statusCallback(HS_WIFI_NEEDED); + } + else + if(WiFi.status()!=WL_CONNECTED){ + statusLED->start(LED_WIFI_CONNECTING); + if(statusCallback) + statusCallback(HS_WIFI_CONNECTING); + } + else + if(!HAPClient::nAdminControllers()){ + statusLED->start(LED_PAIRING_NEEDED); + if(statusCallback) + statusCallback(HS_PAIRING_NEEDED); + } + else{ + statusLED->on(); + if(statusCallback) + statusCallback(HS_PAIRED); + } +} + +/////////////////////////////// + void Span::setWifiCredentials(const char *ssid, const char *pwd){ sprintf(network.wifiData.ssid,"%.*s",MAX_SSID,ssid); sprintf(network.wifiData.pwd,"%.*s",MAX_PWD,pwd); diff --git a/src/HomeSpan.h b/src/HomeSpan.h index 156695d..dad6391 100644 --- a/src/HomeSpan.h +++ b/src/HomeSpan.h @@ -67,7 +67,7 @@ enum { /////////////////////////////// -enum HS_EVENT { +enum HS_STATUS { HS_WIFI_NEEDED, HS_WIFI_CONNECTING, HS_PAIRING_NEEDED, @@ -217,7 +217,7 @@ class Span{ void (*pairCallback)(boolean isPaired)=NULL; // optional callback function to invoke when pairing is established (true) or lost (false) boolean autoStartAPEnabled=false; // enables auto start-up of Access Point when WiFi Credentials not found void (*apFunction)()=NULL; // optional function to invoke when starting Access Point - void (*hsEventCallback)(HS_EVENT hsEvent)=NULL; // optional callback for various HomeSpan events + void (*statusCallback)(HS_STATUS status)=NULL; // optional callback when HomeSpan status changes WiFiServer *hapServer; // pointer to the HAP Server connection Blinker *statusLED; // indicates HomeSpan status @@ -241,6 +241,7 @@ class Span{ int getFreeSlot(); // returns free HAPClient slot number. HAPClients slot keep track of each active HAPClient connection void checkConnect(); // check WiFi connection; connect if needed void commandMode(); // allows user to control and reset HomeSpan settings with the control button + void resetStatus(); // resets statusLED and calls statusCallback based on current HomeSpan status int sprintfAttributes(char *cBuf, int flags=GET_VALUE|GET_META|GET_PERMS|GET_TYPE|GET_DESC); // prints Attributes JSON database into buf, unless buf=NULL; return number of characters printed, excluding null terminator @@ -299,7 +300,7 @@ class Span{ void setApFunction(void (*f)()){apFunction=f;} // sets an optional user-defined function to call when activating the WiFi Access Point void enableAutoStartAP(){autoStartAPEnabled=true;} // enables auto start-up of Access Point when WiFi Credentials not found void setWifiCredentials(const char *ssid, const char *pwd); // sets WiFi Credentials - void setEventCallback(void (*f)(HS_EVENT hsEvent)){hsEventCallback=f;} // sets an optional user-defined function to call for various HomeSpan Events + void setStatusCallback(void (*f)(HS_STATUS status)){statusCallback=f;} // sets an optional user-defined function to call when HomeSpan status changes void setPairingCode(const char *s){sprintf(pairingCodeCommand,"S %9s",s);} // sets the Pairing Code - use is NOT recommended. Use 'S' from CLI instead void deleteStoredValues(){processSerialCommand("V");} // deletes stored Characteristic values from NVS diff --git a/src/src.ino b/src/src.ino index cac8e34..5a00e4a 100644 --- a/src/src.ino +++ b/src/src.ino @@ -44,7 +44,7 @@ void setup() { homeSpan.setSketchVersion("OTA Test 8"); homeSpan.setWifiCallback(wifiEstablished); - homeSpan.setEventCallback(hsEvents); + homeSpan.setStatusCallback(statusUpdate); new SpanUserCommand('d',"- My Description",userCom1); new SpanUserCommand('e',"- My second Description",userCom2); @@ -167,6 +167,6 @@ void userCom2(const char *v){ ////////////////////////////////////// -void hsEvents(HS_EVENT event){ - Serial.printf("\n*** HOMESPAN EVENT: %d\n",event); +void statusUpdate(HS_STATUS status){ + Serial.printf("\n*** HOMESPAN STATUS CHANGE: %d\n",status); }