1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-12 01:53:07 +03:00

allow hook WiFi events from sketch

This commit is contained in:
Markus Sattler
2015-12-29 14:33:10 +01:00
parent fd443d4e17
commit 373da3df6b
4 changed files with 37 additions and 12 deletions

View File

@ -51,13 +51,20 @@ extern "C" void esp_yield();
// ----------------------------------------------------------------------------------------------------------------------- // -----------------------------------------------------------------------------------------------------------------------
bool ESP8266WiFiGenericClass::_persistent = true; bool ESP8266WiFiGenericClass::_persistent = true;
WiFiEventCb ESP8266WiFiGenericClass::_cbEvent = NULL;
ESP8266WiFiGenericClass::ESP8266WiFiGenericClass() { ESP8266WiFiGenericClass::ESP8266WiFiGenericClass() {
wifi_set_event_handler_cb((wifi_event_handler_cb_t) &ESP8266WiFiGenericClass::_eventCallback); wifi_set_event_handler_cb((wifi_event_handler_cb_t) &ESP8266WiFiGenericClass::_eventCallback);
} }
/**
* set callback function
* @param cbEvent WiFiEventCb
*/
void ESP8266WiFiGenericClass::onEvent(WiFiEventCb cbEvent) {
_cbEvent = cbEvent;
}
/** /**
* callback for WiFi events * callback for WiFi events
* @param arg * @param arg
@ -70,11 +77,11 @@ void ESP8266WiFiGenericClass::_eventCallback(void* arg) {
WiFiClient::stopAll(); WiFiClient::stopAll();
} }
//TODO allow user to hook this event if(_cbEvent) {
_cbEvent((WiFiEvent_t) event->event);
}
} }
/** /**
* Return the current channel associated with the network * Return the current channel associated with the network
* @return channel (1-13) * @return channel (1-13)
@ -236,8 +243,9 @@ int ESP8266WiFiGenericClass::hostByName(const char* aHostname, IPAddress& aResul
* @param callback_arg * @param callback_arg
*/ */
void wifi_dns_found_callback(const char *name, ip_addr_t *ipaddr, void *callback_arg) { void wifi_dns_found_callback(const char *name, ip_addr_t *ipaddr, void *callback_arg) {
if(ipaddr) if(ipaddr) {
(*reinterpret_cast<IPAddress*>(callback_arg)) = ipaddr->addr; (*reinterpret_cast<IPAddress*>(callback_arg)) = ipaddr->addr;
}
esp_schedule(); // resume the hostByName function esp_schedule(); // resume the hostByName function
} }

View File

@ -25,14 +25,19 @@
#include "ESP8266WiFiType.h" #include "ESP8266WiFiType.h"
typedef void (*WiFiEventCb)(WiFiEvent_t event);
class ESP8266WiFiGenericClass { class ESP8266WiFiGenericClass {
// ---------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------
// -------------------------------------- Generic WiFi function --------------------------------- // -------------------------------------- Generic WiFi function ---------------------------------
// ---------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------
public: public:
ESP8266WiFiGenericClass(); ESP8266WiFiGenericClass();
void onEvent(WiFiEventCb cbEvent);
int32_t channel(void); int32_t channel(void);
bool setSleepMode(WiFiSleepType_t type); bool setSleepMode(WiFiSleepType_t type);
@ -50,9 +55,10 @@ class ESP8266WiFiGenericClass {
bool enableAP(bool enable); bool enableAP(bool enable);
protected: protected:
static bool _persistent; static bool _persistent;
static WiFiEventCb _cbEvent;
static void _eventCallback(void *event); static void _eventCallback(void *event);
// ---------------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------------
// ------------------------------------ Generic Network function -------------------------------- // ------------------------------------ Generic Network function --------------------------------
@ -69,5 +75,4 @@ class ESP8266WiFiGenericClass {
friend class ESP8266WiFiAPClass; friend class ESP8266WiFiAPClass;
}; };
#endif /* ESP8266WIFIGENERIC_H_ */ #endif /* ESP8266WIFIGENERIC_H_ */

View File

@ -60,9 +60,7 @@ class ESP8266WiFiScanClass {
static void* _scanResult; static void* _scanResult;
static void _scanDone(void* result, int status); static void _scanDone(void* result, int status);
void * _getScanInfoByIndex(int i); static void * _getScanInfoByIndex(int i);
friend class ESP8266WiFiClass;
}; };

View File

@ -44,6 +44,20 @@ typedef enum {
} WiFiSleepType_t; } WiFiSleepType_t;
typedef enum {
WIFI_EVENT_STAMODE_CONNECTED = 0,
WIFI_EVENT_STAMODE_DISCONNECTED,
WIFI_EVENT_STAMODE_AUTHMODE_CHANGE,
WIFI_EVENT_STAMODE_GOT_IP,
WIFI_EVENT_STAMODE_DHCP_TIMEOUT,
WIFI_EVENT_SOFTAPMODE_STACONNECTED,
WIFI_EVENT_SOFTAPMODE_STADISCONNECTED,
WIFI_EVENT_SOFTAPMODE_PROBEREQRECVED,
WIFI_EVENT_MAX
} WiFiEvent_t;
extern "C" { extern "C" {
typedef STAILQ_HEAD(, bss_info) typedef STAILQ_HEAD(, bss_info)
bss_info_head_t; bss_info_head_t;