AliOS-Things--ESP8266 (8)WiFi
阿新 • • 發佈:2018-10-31
鍵-值對事件註冊
1、註冊事件
/**
* Register system event filter callback.
*
* @param[in] type event type interested.
* @param[in] cb system event callback.
* @param[in] priv private data past to cb.
*
* @return the operation status, 0 is OK, others is error.
*/
int aos_register_event_filter (uint16_t type, aos_event_cb cb, void *priv);
int aos_register_event_filter(uint16_t type, aos_event_cb cb, void *priv)
{
return SYS_CALL3(SYS_REGISTER_EVENT_FILTER, int, uint16_t, type,
aos_event_cb, cb, void *, priv);
}
aos_register_event_filter(EV_WIFI, wifi_service_event, NULL);
比如,在上面註冊了一個型別為"EV_WIFI"的事件過濾器。而該型別下又有五個型別的具體的事件。
/* WiFi event */
#define EV_WIFI 0x0002
#define CODE_WIFI_CMD_RECONNECT 1
#define CODE_WIFI_ON_CONNECTED 2
#define CODE_WIFI_ON_DISCONNECT 3
#define CODE_WIFI_ON_PRE_GOT_IP 4
#define CODE_WIFI_ON_GOT_IP 5
獲得WiFi的一些資訊
路徑:middleware\linkkit\hal\HAL_AWSS_rhino.c
如果想知道一個模組有沒有配過網要怎麼樣才能知道呢?可以通過HAL_Wifi_Get_Ap_Info()
函式獲取得到,如果沒有配過網,strlen(ssid)
是為零的。
char ssid[33];
char passwd[65];
uint8_t bssid[6];
// 獲得wifi資訊
HAL_Wifi_Get_Ap_Info(ssid, passwd, bssid);
printf(">>>>>%d\r\n", sizeof(ssid));
printf(">>>>>%d\r\n", strlen(ssid));
printf("ssid >>>>>>>%s\r\n", ssid);
printf("passwd >>>>>>>%s\r\n", passwd);
printf("bssid >>>>>>>%d\r\n", bssid);
但是,如果配過網想重新配網,HAL_Wifi_Get_Ap_Info()
函式
1、重新配網:
先awss復位
do_awss_reset();
再進入配網模式
do_awss_active(); // 配網模式
再次獲取wifi資訊,WiFi資訊已經被清空
char ssid[33];
char passwd[65];
uint8_t bssid[6];
// 獲得wifi資訊
HAL_Wifi_Get_Ap_Info(ssid, passwd, bssid);
// strlen(ssid) 為 0
AWSS復位的實現其實是清空WiFi資訊,然後再硬體復位:
static void linkkit_reset(void *p)
{
netmgr_clear_ap_config(); // 清空WiFi的資訊
HAL_Sys_reboot(); //系統硬體復位
}
static void do_awss_reset()
{
aos_post_delayed_action(2000, linkkit_reset, NULL);
}