AliOS-Things--ESP8266 (8)WiFi

键-值对事件注册

一、注册事件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

得到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()函数
一、从新配网:
先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);
}