/** * \brief Callback to get the Wi-Fi status update. * * \param[in] u8MsgType type of Wi-Fi notification. Possible types are: * - [M2M_WIFI_RESP_CURRENT_RSSI](@ref M2M_WIFI_RESP_CURRENT_RSSI) * - [M2M_WIFI_RESP_CON_STATE_CHANGED](@ref M2M_WIFI_RESP_CON_STATE_CHANGED) * - [M2M_WIFI_REQ_DHCP_CONF](@ref M2M_WIFI_REQ_DHCP_CONF) * \param[in] pvMsg A pointer to a buffer containing the notification parameters * (if any). It should be casted to the correct data type corresponding to the * notification type. */ static void wifi_cb(uint8_t u8MsgType, void *pvMsg) { switch (u8MsgType) { case M2M_WIFI_RESP_CON_STATE_CHANGED: { tstrM2mWifiStateChanged *pstrWifiState = (tstrM2mWifiStateChanged *)pvMsg; if (pstrWifiState->u8CurrState == M2M_WIFI_CONNECTED) { m2m_wifi_request_dhcp_client(); } else if (pstrWifiState->u8CurrState == M2M_WIFI_DISCONNECTED) { printf("Wi-Fi disconnected\r\n"); /* Connect to defined AP. */ m2m_wifi_connect((char *)MAIN_WLAN_SSID, sizeof(MAIN_WLAN_SSID), MAIN_WLAN_AUTH, (void *)MAIN_WLAN_PSK, M2M_WIFI_CH_ALL); } break; } case M2M_WIFI_REQ_DHCP_CONF: { uint8_t *pu8IPAddress = (uint8_t *)pvMsg; printf("Wi-Fi connected\r\n"); printf("Wi-Fi IP is %u.%u.%u.%u\r\n", pu8IPAddress[0], pu8IPAddress[1], pu8IPAddress[2], pu8IPAddress[3]); /* Request RSSI for the connected AP. */ m2m_wifi_req_curr_rssi(); break; } case M2M_WIFI_RESP_CURRENT_RSSI: { /* This message type is triggered by "m2m_wifi_req_curr_rssi()" function. */ int8_t *rssi = (int8_t *)pvMsg; printf("RSSI for the current connected AP (%d)\r\n", (int8_t)(*rssi)); break; } default: { break; } } }
int32_t WiFiClass::RSSI() { // Clear pending events: m2m_wifi_handle_events(NULL); // Send RSSI request: _resolve = 0; if (m2m_wifi_req_curr_rssi() < 0) { return 0; } // Wait for connection or timeout: unsigned long start = millis(); while (_resolve == 0 && millis() - start < 1000) { m2m_wifi_handle_events(NULL); } return _resolve; }