一、注册事件web
/** * 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"的事件过滤器。而该类型下又有五个类型的具体的事件。svg
/* 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
路径: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()
函数
一、从新配网:
先awss复位post
do_awss_reset();
再进入配网模式ui
do_awss_active(); // 配网模式
再次获取wifi信息,WiFi信息已经被清空spa
char ssid[33]; char passwd[65]; uint8_t bssid[6]; // 得到wifi信息 HAL_Wifi_Get_Ap_Info(ssid, passwd, bssid); // strlen(ssid) 为 0
AWSS复位的实现实际上是清空WiFi信息,而后再硬件复位:rest
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); }