From 5b38c6a04a2ee7b49978d434ac6d9ad6a82513fd Mon Sep 17 00:00:00 2001 From: HomeSpan Date: Sun, 23 Oct 2022 21:26:41 -0400 Subject: [PATCH] Started homeSpan.setEventCallback() --- src/HomeSpan.cpp | 8 ++++++-- src/HomeSpan.h | 9 +++++++++ src/src.ino | 8 ++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/HomeSpan.cpp b/src/HomeSpan.cpp index 62ee37c..d987953 100644 --- a/src/HomeSpan.cpp +++ b/src/HomeSpan.cpp @@ -195,9 +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); } } else { statusLED->start(LED_WIFI_CONNECTING); + if(hsEventCallback) + hsEventCallback(HS_WIFI_CONNECTING); } if(controlButton) @@ -328,8 +332,8 @@ int Span::getFreeSlot(){ void Span::commandMode(){ - if(!statusDevice){ - Serial.print("*** ERROR: CAN'T ENTER COMMAND MODE WITHOUT A DEFINED STATUS LED***\n\n"); + if(!statusDevice && !hsEventCallback){ + Serial.print("*** ERROR: CAN'T ENTER COMMAND MODE WITHOUT A DEFINED STATUS LED OR EVENT HANDLER CALLBACK***\n\n"); return; } diff --git a/src/HomeSpan.h b/src/HomeSpan.h index 627bf96..0e5a75c 100644 --- a/src/HomeSpan.h +++ b/src/HomeSpan.h @@ -67,6 +67,13 @@ enum { /////////////////////////////// +enum HS_EVENT { + HS_WIFI_NEEDED, + HS_WIFI_CONNECTING +}; + +/////////////////////////////// + // Forward-Declarations struct Span; @@ -203,6 +210,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 WiFiServer *hapServer; // pointer to the HAP Server connection Blinker *statusLED; // indicates HomeSpan status @@ -284,6 +292,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 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 b66e78d..cac8e34 100644 --- a/src/src.ino +++ b/src/src.ino @@ -44,6 +44,8 @@ void setup() { homeSpan.setSketchVersion("OTA Test 8"); homeSpan.setWifiCallback(wifiEstablished); + homeSpan.setEventCallback(hsEvents); + new SpanUserCommand('d',"- My Description",userCom1); new SpanUserCommand('e',"- My second Description",userCom2); @@ -162,3 +164,9 @@ void userCom1(const char *v){ void userCom2(const char *v){ Serial.printf("In User Command 2: '%s'\n\n",v); } + +////////////////////////////////////// + +void hsEvents(HS_EVENT event){ + Serial.printf("\n*** HOMESPAN EVENT: %d\n",event); +}