sdk-ameba-v4.0c_180328/component/common/example/wlan_scenario/example_wlan_scenario.c
2019-04-02 16:34:25 +08:00

1289 lines
No EOL
47 KiB
C
Executable file

#include <platform_opts.h>
#include "FreeRTOS.h"
#include "task.h"
#include <platform/platform_stdlib.h>
#include <lwip_netconf.h>
#include "wifi_constants.h"
#include "wifi_structures.h"
#include "lwip_netconf.h"
#if CONFIG_EXAMPLE_WLAN_SCENARIO
#if CONFIG_LWIP_LAYER
extern struct netif xnetif[NET_IF_NUM];
#endif
#define MAC_ARG(x) ((u8*)(x))[0],((u8*)(x))[1],((u8*)(x))[2],((u8*)(x))[3],((u8*)(x))[4],((u8*)(x))[5]
static rtw_result_t scan_result_handler(rtw_scan_handler_result_t* malloced_scan_result);
static rtw_result_t scan_result_RSSI_handler(rtw_scan_handler_result_t* malloced_scan_result);
char *ssid;
char *password;
extern int error_flag;
/**
* @brief Scan network
* @note Process Flow:
* - Enable Wi-Fi with STA mode
* - Scan network
*/
static void scan_network(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example for network scan...\n");
/*********************************************************************************
* 1. Enable Wi-Fi with STA mode
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi\n");
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/**********************************************************************************
* 2. Scan network
**********************************************************************************/
// Scan network and print them out.
// Can refer to fATWS() in atcmd_wifi.c and scan_result_handler() below.
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Scan network\n");
if(wifi_scan_networks(scan_result_handler, NULL) != RTW_SUCCESS){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_scan_networks() failed\n");
return;
}
// Wait for scan finished.
vTaskDelay(5000);
}
/**
* @brief Authentication
* @note Process Flow:
* - Enable Wi-Fi with STA mode
* - Connect to AP by different authentications
* - WPS-PBC
* - WPS-PIN static PIN
* - WPS-PIN dynamic PIN
* - open
* - WEP open (64 bit)
* - WEP open (128 bit)
* - WEP shared (64 bit)
* - WEP shared (128 bit)
* - WPA-PSK (TKIP)
* - WPA-PSK (AES)
* - WPA2-PSK (TKIP)
* - WPA2-PSK (AES)
* - Show Wi-Fi information
*/
static void authentication(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example for authentication...\n");
/*********************************************************************************
* 1. Enable Wi-Fi with STA mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi\n");
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/*********************************************************************************
* 2. Connect to AP by different authentications
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Connect to AP\n");
// By WPS-PBC.
///*
char *argv[2];
argv[1] = "pbc";
cmd_wps(2, &argv);
//*/
// By WPS-PIN static PIN. With specified PIN code 92402508 as example.
/*
char *argv[3];
argv[1] = "pin";
argv[2] = "92402508";
cmd_wps(3, &argv);
*/
// By WPS-PIN dynamic PIN.
/*
char *argv[2];
argv[1] = "pin";
cmd_wps(2, &argv);
*/
// By open.
/*
ssid = "Test_ap";
if(wifi_connect(ssid, RTW_SECURITY_OPEN, NULL, strlen(ssid), 0, -1, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
*/
// By WEP open (64 bit).
/*
ssid = "Test_ap";
password = "pass1"; // 5 ASCII
//password = "AAAAAAAAAA"; // 10 HEX
int key_id = 2; // value of key_id is 0, 1, 2, or 3.
if(wifi_connect(ssid, RTW_SECURITY_WEP_PSK, password, strlen(ssid), strlen(password), key_id, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
*/
// By WEP open (128 bit).
/*
ssid = "Test_ap";
password = "password12345"; // 13 ASCII
//password = "AAAAABBBBBCCCCCDDDDD123456"; // 26 HEX
int key_id = 2; // value of key_id is 0, 1, 2, or 3.
if(wifi_connect(ssid, RTW_SECURITY_WEP_PSK, password, strlen(ssid), strlen(password), key_id, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
*/
// By WEP shared (64 bit).
/*
ssid = "Test_ap";
password = "pass1"; // 5 ASCII
//password = "AAAAAAAAAA"; // 10 HEX
int key_id = 2; // value of key_id is 0, 1, 2, or 3.
if(wifi_connect(ssid, RTW_SECURITY_WEP_SHARED, password, strlen(ssid), strlen(password), key_id, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
*/
// By WEP shared (128 bit).
/*
ssid = "Test_ap";
password = "password12345"; // 13 ASCII
//password = "AAAAABBBBBCCCCCDDDDD123456"; // 26 HEX
int key_id = 2; // value of key_id is 0, 1, 2, or 3.
if(wifi_connect(ssid, RTW_SECURITY_WEP_SHARED, password, strlen(ssid), strlen(password), key_id, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
*/
// By WPA-PSK (TKIP)
/*
ssid = "Test_ap";
password = "12345678";
if(wifi_connect(ssid, RTW_SECURITY_WPA_TKIP_PSK, password, strlen(ssid), strlen(password), -1, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
*/
// By WPA-PSK (AES)
/*
ssid = "Test_ap";
password = "12345678";
if(wifi_connect(ssid, RTW_SECURITY_WPA_AES_PSK, password, strlen(ssid), strlen(password), -1, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
*/
// By WPA2-PSK (TKIP)
/*
ssid = "Test_ap";
password = "12345678";
if(wifi_connect(ssid, RTW_SECURITY_WPA2_TKIP_PSK, password, strlen(ssid), strlen(password), -1, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
*/
// By WPA2-PSK (AES)
/*
ssid = "Test_ap";
password = "12345678";
if(wifi_connect(ssid, RTW_SECURITY_WPA2_AES_PSK, password, strlen(ssid), strlen(password), -1, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
*/
/*********************************************************************************
* 3. Show Wi-Fi information
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Show Wi-Fi information\n");
rtw_wifi_setting_t setting;
wifi_get_setting(WLAN0_NAME,&setting);
wifi_show_setting(WLAN0_NAME,&setting);
}
/**
* @brief Wi-Fi example for mode switch case 1: Switch to infrastructure AP mode.
* @note Process Flow:
* - Disable Wi-Fi
* - Enable Wi-Fi with AP mode
* - Start AP
* - Check AP running
* - Start DHCP server
*/
static void mode_switch_1(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example mode switch case 1...\n");
/*********************************************************************************
* 1. Disable Wi-Fi
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disable Wi-Fi\n");
wifi_off();
vTaskDelay(20);
/*********************************************************************************
* 2. Enable Wi-Fi with AP mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi with AP mode\n");
if(wifi_on(RTW_MODE_AP) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/*********************************************************************************
* 3. Start AP
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Start AP\n");
ssid = "RTL_AP";
rtw_security_t security_type = RTW_SECURITY_WPA2_AES_PSK;
password = "12345678";
int channel = 6;
if(wifi_start_ap(ssid, security_type, password, strlen(ssid), strlen(password), channel) < 0) {
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_start_ap failed\n");
return;
}
/*********************************************************************************
* 4. Check AP running
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Check AP running\n");
int timeout = 20;
while(1) {
char essid[33];
if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) > 0) {
if(strcmp((const char *) essid, (const char *)ssid) == 0) {
printf("\n\r[WLAN_SCENARIO_EXAMPLE] %s started\n", ssid);
break;
}
}
if(timeout == 0) {
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: Start AP timeout\n");
return;
}
vTaskDelay(1 * configTICK_RATE_HZ);
timeout --;
}
/*********************************************************************************
* 5. Start DHCP server
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Start DHCP server\n");
// For more setting about DHCP, please reference fATWA in atcmd_wifi.c.
#if CONFIG_LWIP_LAYER
dhcps_init(&xnetif[0]);
#endif
}
/**
* @brief Wi-Fi example for mode switch case 2: Switch to infrastructure STA mode.
* @note Process Flow:
* - Disable Wi-Fi
* - Enable Wi-Fi with STA mode
* - Connect to AP using STA mode
* - Show Wi-Fi information
*/
static void mode_switch_2(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example mode switch case 2...\n");
/*********************************************************************************
* 1. Disable Wi-Fi
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disable Wi-Fi\n");
wifi_off();
vTaskDelay(20);
/*********************************************************************************
* 2. Enable Wi-Fi with STA mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi with STA mode\n");
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/*********************************************************************************
* 3. Connect to AP using STA mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Connect to AP using STA mode\n");
ssid = "Test_ap";
password = "12345678";
if(wifi_connect(ssid, RTW_SECURITY_WPA2_AES_PSK, password, strlen(ssid), strlen(password), -1, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
/*********************************************************************************
* 4. Show Wi-Fi information
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Show Wi-Fi information\n");
rtw_wifi_setting_t setting;
wifi_get_setting(WLAN0_NAME,&setting);
wifi_show_setting(WLAN0_NAME,&setting);
}
/**
* @brief Wi-Fi example for mode switch case 3: Switch to infrastructure P2P Autonomous GO mode.
* @note Process Flow:
* - Enable Wi-Fi Direct mode
* - Enable Wi-Fi Direct Automonous GO
* - Show Wi-Fi Direct Information
* - Disable Wi-Fi Direct mode
*/
static void mode_switch_3(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example mode switch case 3...\n");
/*********************************************************************************
* 1. Enable Wi-Fi Direct mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi Direct mode\n");
// Start Wi-Fi Direct mode.
// cmd_wifi_p2p_start() will re-enable the Wi-Fi with P2P mode and initialize P2P data.
cmd_wifi_p2p_start(NULL, NULL);
/*********************************************************************************
* 2. Enable Wi-Fi Direct Automonous GO
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi Direct Automonous GO\n");
// Start Wi-Fi Direct Automonous GO.
// The GO related parameters can be set in cmd_wifi_p2p_auto_go_start() function declaration.
if(cmd_wifi_p2p_auto_go_start(NULL, NULL) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: cmd_wifi_p2p_auto_go_start() failed\n");
return;
}
/*********************************************************************************
* 3. Show Wi-Fi Direct Information
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Show Wi-Fi Direct Information\n");
// Show the Wi-Fi Direct Info.
cmd_p2p_info();
vTaskDelay(60000);
/*********************************************************************************
* 4. Disable Wi-Fi Direct mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disable Wi-Fi Direct mode\n");
// Disable Wi-Fi Direct GO. Will disable Wi-Fi either.
// This command has to be invoked to release the P2P resource.
cmd_wifi_p2p_stop(NULL, NULL);
}
/**
* @brief Wi-Fi example for mode switch case 4: Mode switching time between AP and STA.
* @note Process Flow:
* - Enable Wi-Fi with STA mode
* - Disable STA mode and start AP (First measurement)
* - Stop AP and enable STA mode (Second measurement)
*/
static void mode_switch_4(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example mode switch case 4...\n");
// First measurement.
unsigned long tick_STA_to_AP_begin;
unsigned long tick_STA_to_AP_end;
// Second measurement.
unsigned long tick_AP_to_STA_begin;
unsigned long tick_AP_to_STA_end;
/*********************************************************************************
* 1. Enable Wi-Fi with STA mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi with STA mode\n");
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/*********************************************************************************
* 2. Disable STA mode and start AP (First measurement)
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disable STA mode and start AP (First measurement)\n");
// Begin time.
tick_STA_to_AP_begin = xTaskGetTickCount();
wifi_off();
if(wifi_on(RTW_MODE_AP) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
ssid = "RTL_AP";
rtw_security_t security_type = RTW_SECURITY_WPA2_AES_PSK;
password = "12345678";
int channel = 6;
if(wifi_start_ap(ssid, security_type, password, strlen(ssid), strlen(password), channel) < 0) {
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_start_ap failed\n");
return;
}
int timeout = 20;
while(1) {
char essid[33];
if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) > 0) {
if(strcmp((const char *) essid, (const char *)ssid) == 0) {
printf("\n\r[WLAN_SCENARIO_EXAMPLE] %s started\n", ssid);
break;
}
}
if(timeout == 0) {
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: Start AP timeout\n");
return;
}
vTaskDelay(1 * configTICK_RATE_HZ);
timeout --;
}
#if CONFIG_LWIP_LAYER
dhcps_init(&xnetif[0]);
#endif
// End time.
tick_STA_to_AP_end = xTaskGetTickCount();
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Time diff switch from STA mode to start AP: %d ms\n",
(tick_STA_to_AP_end - tick_STA_to_AP_begin));
vTaskDelay(60000);
/*********************************************************************************
* 3. Stop AP and enable STA mode (Second measurement)
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Stop AP and enable STA mode (Second measurement)\n");
// Begin time.
tick_AP_to_STA_begin = xTaskGetTickCount();
wifi_off();
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
// Connect to AP by WPA2-AES security
ssid = "Test_ap";
password = "12345678";
if(wifi_connect(ssid, RTW_SECURITY_WPA2_AES_PSK, password, strlen(ssid), strlen(password), -1, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
// End time.
tick_AP_to_STA_end = xTaskGetTickCount();
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Time diff switch from stop AP to enable STA mode: %d ms\n",
(tick_AP_to_STA_end - tick_AP_to_STA_begin));
}
/**
* @brief Wi-Fi example for mode switch case 5: Mode switching time between P2P(autonomousGO) and STA.
* @note Process Flow:
* - Enable Wi-Fi with STA mode
* - Disable STA mode and start P2P GO (First measurement)
* - Stop P2P GO and enable STA mode (Second measurement)
*/
static void mode_switch_5(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example mode switch case 5...\n");
// First measurement.
unsigned long tick_STA_to_P2PGO_begin;
unsigned long tick_STA_to_P2PGO_end;
// Second measurement.
unsigned long tick_P2PGO_to_STA_begin;
unsigned long tick_P2PGO_to_STA_end;
/*********************************************************************************
* 1. Enable Wi-Fi with STA mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi with STA mode\n");
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/*********************************************************************************
* 2. Disable STA mode and start P2P GO (First measurement)
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disable STA mode and start AP (First measurement)\n");
// Begin time.
tick_STA_to_P2PGO_begin = xTaskGetTickCount();
wifi_off();
cmd_wifi_p2p_start(NULL, NULL);
if(cmd_wifi_p2p_auto_go_start(NULL, NULL) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: cmd_wifi_p2p_auto_go_start() failed\n");
return;
}
// End time.
tick_STA_to_P2PGO_end = xTaskGetTickCount();
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Time diff switch from STA mode to start P2P GO: %d ms\n",
(tick_STA_to_P2PGO_end - tick_STA_to_P2PGO_begin));
vTaskDelay(60000);
/*********************************************************************************
* 3. Stop P2P GO and enable STA mode (Second measurement)
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Stop P2P GO and enable STA mode (Second measurement)\n");
// Begin time.
tick_P2PGO_to_STA_begin = xTaskGetTickCount();
cmd_wifi_p2p_stop(NULL, NULL);
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
// Connect to AP by WPA2-AES security
ssid = "Test_ap";
password = "12345678";
if(wifi_connect(ssid, RTW_SECURITY_WPA2_AES_PSK, password, strlen(ssid), strlen(password), -1, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
// End time.
tick_P2PGO_to_STA_end = xTaskGetTickCount();
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Time diff switch from stop P2P GO to enable STA mode: %d ms\n",
(tick_P2PGO_to_STA_end - tick_P2PGO_to_STA_begin));
}
/**
* @brief Wi-Fi example for mode switch case 6: Switch to infrastructure AP mode with hidden SSID.
* @note Process Flow:
* - Disable Wi-Fi
* - Enable Wi-Fi with AP mode
* - Start AP with hidden SSID
* - Check AP running
* - Start DHCP server
*/
static void mode_switch_6(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example mode switch case 6...\n");
/*********************************************************************************
* 1. Disable Wi-Fi
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disable Wi-Fi\n");
wifi_off();
vTaskDelay(20);
/*********************************************************************************
* 2. Enable Wi-Fi with AP mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi with AP mode\n");
if(wifi_on(RTW_MODE_AP) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/*********************************************************************************
* 3. Start AP with hidden SSID
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Start AP with hidden SSID\n");
ssid = "RTL_AP";
rtw_security_t security_type = RTW_SECURITY_WPA2_AES_PSK;
password = "12345678";
int channel = 6;
if(wifi_start_ap_with_hidden_ssid(ssid, security_type, password, strlen(ssid), strlen(password), channel) < 0) {
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_start_ap_with_hidden_ssid failed\n");
return;
}
/*********************************************************************************
* 4. Check AP running
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Check AP running\n");
int timeout = 20;
while(1) {
char essid[33];
if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) > 0) {
if(strcmp((const char *) essid, (const char *)ssid) == 0) {
printf("\n\r[WLAN_SCENARIO_EXAMPLE] %s started\n", ssid);
break;
}
}
if(timeout == 0) {
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: Start AP timeout\n");
return;
}
vTaskDelay(1 * configTICK_RATE_HZ);
timeout --;
}
/*********************************************************************************
* 5. Start DHCP server
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Start DHCP server\n");
// For more setting about DHCP, please reference fATWA in atcmd_wifi.c.
#if CONFIG_LWIP_LAYER
dhcps_init(&xnetif[0]);
#endif
}
/**
* @brief Wi-Fi example for mode switch case 7: Mode switching between concurrent mode and STA.
* @note Process Flow:
* - Enable Wi-Fi with concurrent (STA + AP) mode
* - Disable Wi-Fi
* - Start AP
* - Check AP running
* - Start DHCP server
* - Connect to AP using STA mode
* - Disable concurrent (STA + AP) mode and start STA mode
*/
static void mode_switch_7(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example mode switch case 7...\n");
/*********************************************************************************
* 1. Enable Wi-Fi with concurrent (STA + AP) mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi with concurrent (STA + AP) mode\n");
/*********************************************************************************
* 1-1. Disable Wi-Fi
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disable Wi-Fi\n");
wifi_off();
vTaskDelay(20);
/*********************************************************************************
* 1-2. Enable Wi-Fi with STA + AP mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi with STA + AP mode\n");
if(wifi_on(RTW_MODE_STA_AP) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/*********************************************************************************
* 1-3. Start AP
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Start AP\n");
ssid = "RTL_AP";
rtw_security_t security_type = RTW_SECURITY_WPA2_AES_PSK;
password = "12345678";
int channel = 6;
if(wifi_start_ap(ssid, security_type, password, strlen(ssid), strlen(password), channel) < 0) {
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_start_ap failed\n");
return;
}
/*********************************************************************************
* 1-4. Check AP running
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Check AP running\n");
int timeout = 20;
while(1) {
char essid[33];
if(wext_get_ssid(WLAN1_NAME, (unsigned char *) essid) > 0) {
if(strcmp((const char *) essid, (const char *)ssid) == 0) {
printf("\n\r[WLAN_SCENARIO_EXAMPLE] %s started\n", ssid);
break;
}
}
if(timeout == 0) {
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: Start AP timeout\n");
return;
}
vTaskDelay(1 * configTICK_RATE_HZ);
timeout --;
}
/*********************************************************************************
* 1-5. Start DHCP server
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Start DHCP server\n");
#if CONFIG_LWIP_LAYER
dhcps_init(&xnetif[1]);
vTaskDelay(1000);
#endif
/*********************************************************************************
* 1-6. Connect to AP using STA mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Connect to AP\n");
ssid = "Test_ap";
password = "12345678";
if(wifi_connect(ssid, RTW_SECURITY_WPA2_AES_PSK, password, strlen(ssid), strlen(password), -1, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
/*********************************************************************************
* 2. Disable concurrent (STA + AP) mode and start STA mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disable concurrent (STA + AP) mode and start STA mode\n");
wifi_off();
vTaskDelay(20);
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
ssid = "Test_ap";
password = "12345678";
if(wifi_connect(ssid, RTW_SECURITY_WPA2_AES_PSK, password, strlen(ssid), strlen(password), -1, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
}
/**
* @brief Wi-Fi example for scenario case 1.
* @note Process Flow:
* - Enable Wi-Fi with STA mode
* - Connect to AP by WPS enrollee static PIN mode (If failed, re-connect one time.)
* - Enable Wi-Fi Direct GO
* (It will re-enable WiFi, the original connection to AP would be broken.)
*/
static void scenario_1(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example scenario case 1...\n");
/*********************************************************************************
* 1. Enable Wi-Fi with STA mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi\n");
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/*********************************************************************************
* 2. Connect to AP by WPS enrollee PIN mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Connect to AP by WPS enrollee PIN mode with PIN code: 92402508\n");
// Start static WPS-PIN enrollee with PIN code: 92402508.
// As the process beginning, please enter the PIN code in AP side.
// It will take at most 2 min to do the procedure.
char *argv[3];
argv[1] = "pin";
argv[2] = "92402508";
cmd_wps(3, &argv);
// If not connected, retry one time.
if(wifi_is_connected_to_ap() != RTW_SUCCESS){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] WPS enrollee failed, reconnect one time\n");
cmd_wps(3, &argv);
}
/*********************************************************************************
* 3. Enable Wi-Fi Direct GO
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi Direct GO\n");
// Start Wi-Fi Direct mode.
// cmd_wifi_p2p_start() will re-enable the Wi-Fi with P2P mode and initialize P2P data.
cmd_wifi_p2p_start(NULL, NULL);
// Start Wi-Fi Direct Group Owner mode.
// The GO related parameters can be set in cmd_wifi_p2p_auto_go_start() function declaration.
if(cmd_wifi_p2p_auto_go_start(NULL, NULL) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: cmd_wifi_p2p_auto_go_start() failed\n");
return;
}
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Wi-Fi Direct Group Owner mode enabled\n");
// Show the Wi-Fi Direct Info.
cmd_p2p_info();
}
/**
* @brief Wi-Fi example for scenario case 2.
* @note Process Flow:
* - Enable Wi-Fi Direct GO
* - Disable Wi-Fi Direct GO, and enable Wi-Fi with STA mode
* (Disable Wi-Fi Direct GO must be done to release P2P resource.)
* - Connect to AP by WPS enrollee PBC mode (If failed, re-connect one time.)
*/
static void scenario_2(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example scenario case 2...\n");
/*********************************************************************************
* 1. Enable Wi-Fi Direct GO
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi Direct GO\n");
// Start Wi-Fi Direct mode.
// cmd_wifi_p2p_start() will re-enable the Wi-Fi with P2P mode and initialize P2P data.
cmd_wifi_p2p_start(NULL, NULL);
// Start Wi-Fi Direct Group Owner mode.
// The GO related parameters can be set in cmd_wifi_p2p_auto_go_start() function declaration.
if(cmd_wifi_p2p_auto_go_start(NULL, NULL) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: cmd_wifi_p2p_auto_go_start() failed\n");
return;
}
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Wi-Fi Direct Group Owner mode enabled\n");
// Show the Wi-Fi Direct Info.
cmd_p2p_info();
/*********************************************************************************
* 2. Disable Wi-Fi Direct GO, and enable Wi-Fi with STA mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disable Wi-Fi Direct GO, and enable Wi-Fi\n");
// Disable Wi-Fi Direct GO.
// This command has to be invoked to release the P2P resource.
cmd_wifi_p2p_stop(NULL, NULL);
// Enable Wi-Fi with STA mode.
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on() failed\n");
return;
}
/*********************************************************************************
* 3. Connect to AP by WPS enrollee PBC mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Connect to AP by WPS enrollee PBC mode\n");
// Start WPS-PBC enrollee.
// As the process beginning, please push the WPS button on AP.
// It will take at most 2 min to do the procedure.
char *argv[2];
argv[1] = "pbc";
cmd_wps(2, &argv);
// If not connected, retry one time.
if(wifi_is_connected_to_ap() != RTW_SUCCESS){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] WPS enrollee failed, reconnect one time\n");
cmd_wps(2, &argv);
}
}
/**
* @brief Wi-Fi example for scenario case 3.
* @note Process Flow:
* - Enable Wi-Fi with STA mode
* - Scan network
* - Connect to AP use STA mode (If failed, re-connect one time.)
* - Enable Wi-Fi Direct GO
* (It will re-enable WiFi, the original connection to AP would be broken.)
*/
static void scenario_3(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example scenario case 3...\n");
/*********************************************************************************
* 1. Enable Wi-Fi with STA mode
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi\n");
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/**********************************************************************************
* 2. Scan network
**********************************************************************************/
// Scan network and print them out.
// Can refer to fATWS() in atcmd_wifi.c.
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Scan network\n");
if(wifi_scan_networks(scan_result_handler, NULL) != RTW_SUCCESS){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_scan_networks() failed\n");
return;
}
// Wait for scan finished.
vTaskDelay(5000);
/**********************************************************************************
* 3. Connect to AP use STA mode (If failed, re-connect one time.)
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Connect to AP use STA mode\n");
// Set the auto-reconnect mode with retry 1 time(limit is 2) and timeout 5 seconds.
// This command need to be set before invoke wifi_connect() to make reconnection work.
wifi_config_autoreconnect(1, 2, 5);
// Connect to AP with PSK-WPA2-AES.
ssid = "Test_ap";
password = "12345678";
if(wifi_connect(ssid, RTW_SECURITY_WPA2_AES_PSK, password, strlen(ssid), strlen(password), -1, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
// Show Wi-Fi info.
rtw_wifi_setting_t setting;
wifi_get_setting(WLAN0_NAME,&setting);
wifi_show_setting(WLAN0_NAME,&setting);
/**********************************************************************************
* 4. Enable Wi-Fi Direct GO
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi Direct GO\n");
// Start Wi-Fi Direct mode.
// cmd_wifi_p2p_start() will re-enable the Wi-Fi with P2P mode and initialize P2P data.
cmd_wifi_p2p_start(NULL, NULL);
// Start Wi-Fi Direct Group Owner mode.
// The GO related parameters can be set in cmd_wifi_p2p_auto_go_start() function declaration.
if(cmd_wifi_p2p_auto_go_start(NULL, NULL) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: cmd_wifi_p2p_auto_go_start() failed\n");
return;
}
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Wi-Fi Direct Group Owner mode enabled\n");
// Show the Wi-Fi Direct Info.
cmd_p2p_info();
}
/**
* @brief Wi-Fi example for scenario case 4.
* @note Process Flow:
* - Enable Wi-Fi with STA mode
* - Connect to AP by WPS enrollee PBC mode (If failed, re-connect one time.)
* - Disconnect from AP
* - Enable Wi-Fi Direct GO
* - Disable Wi-Fi Direct GO, and enable Wi-Fi with STA mode
* (Disable Wi-Fi Direct GO must be done to release P2P resource.)
* - Connect to AP use STA mode (If failed, re-connect one time.)
* - Disconnect from AP
* - Disable Wi-Fi
*/
static void scenario_4(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example scenario case 4...\n");
/**********************************************************************************
* 1. Enable Wi-Fi with STA mode
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi\n");
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/**********************************************************************************
* 2. Connect to AP by WPS enrollee PBC mode
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Connect to AP by WPS enrollee PBC mode\n");
// Start WPS-PBC enrollee.
// As the process beginning, please push the WPS button on AP.
// It will take at most 2 min to do the procedure.
char *argv[2];
argv[1] = "pbc";
cmd_wps(2, &argv);
// If not connected, retry one time.
if(wifi_is_connected_to_ap() != RTW_SUCCESS){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] WPS enrollee failed, reconnect one time\n");
cmd_wps(2, &argv);
}
/**********************************************************************************
* 3. Disconnect from AP
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disconnect from AP\n");
if(wifi_disconnect() < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_disconnect() failed\n");
return;
}
// Show Wi-Fi info.
rtw_wifi_setting_t setting;
wifi_get_setting(WLAN0_NAME,&setting);
wifi_show_setting(WLAN0_NAME,&setting);
/**********************************************************************************
* 4. Enable Wi-Fi Direct GO
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi Direct GO\n");
// Start Wi-Fi Direct mode.
// cmd_wifi_p2p_start() will re-enable the Wi-Fi with P2P mode and initialize P2P data.
cmd_wifi_p2p_start(NULL, NULL);
// Start Wi-Fi Direct Group Owner mode.
// The GO related parameters can be set in cmd_wifi_p2p_auto_go_start() function declaration.
if(cmd_wifi_p2p_auto_go_start(NULL, NULL) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: cmd_wifi_p2p_auto_go_start() failed\n");
return;
}
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Wi-Fi Direct Group Owner mode enabled\n");
// Show the Wi-Fi Direct Info.
cmd_p2p_info();
/**********************************************************************************
* 5. Disable Wi-Fi Direct GO, and enable Wi-Fi with STA mode
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disable Wi-Fi Direct GO, and enable Wi-Fi\n");
// Disable Wi-Fi Direct GO.
// This command has to be invoked to release the P2P resource.
cmd_wifi_p2p_stop(NULL, NULL);
// Enable Wi-Fi on STA mode.
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on() failed\n");
return;
}
/**********************************************************************************
* 6. Connect to AP use STA mode
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Connect to AP use STA mode\n");
// Set the auto-reconnect mode with retry 1 time(limit is 2) and timeout 5 seconds.
// This command need to be set before invoke wifi_connect() to make reconnection work.
wifi_config_autoreconnect(1, 2, 5);
// Connect to AP with Open mode.
ssid = "Test_ap";
if(wifi_connect(ssid, RTW_SECURITY_OPEN, NULL, strlen(ssid), 0, -1, NULL) == RTW_SUCCESS)
LwIP_DHCP(0, DHCP_START);
// Show Wi-Fi info.
wifi_get_setting(WLAN0_NAME,&setting);
wifi_show_setting(WLAN0_NAME,&setting);
/**********************************************************************************
* 7. Disconnect from AP
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disconnect from AP\n");
if(wifi_disconnect() < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_disconnect() failed\n");
return;
}
// Show Wi-Fi info.
wifi_get_setting(WLAN0_NAME,&setting);
wifi_show_setting(WLAN0_NAME,&setting);
/**********************************************************************************
* 8. Disable Wi-Fi
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Disable Wi-Fi\n");
if(wifi_off() != RTW_SUCCESS){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_off() failed\n");
return;
}
}
/**
* @brief Wi-Fi example for scenario case 5.
* @note Process Flow:
* - Enable Wi-Fi with STA mode
* - Connect to AP using STA mode, check the connection result based on error_flag
* - Show Wi-Fi information
* - Get AP's RSSI
*/
static void scenario_5(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example scenario case 5...\n");
/*********************************************************************************
* 1. Enable Wi-Fi with STA mode
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi\n");
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/*********************************************************************************
* 2. Connect to AP using STA mode, check the connection result
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Connect to AP using STA mode\n");
ssid = "Test_ap";
password = "12345678";
if(wifi_connect(ssid, RTW_SECURITY_WPA2_AES_PSK, password, strlen(ssid), strlen(password), -1, NULL) == RTW_SUCCESS){
LwIP_DHCP(0, DHCP_START);
// DHCP success
if(error_flag == RTW_NO_ERROR)
printf("\n\r[WLAN_SCENARIO_EXAMPLE] DHCP success\n");
// DHCP fail, might caused by timeout or the AP did not enable DHCP server
else if(error_flag == RTW_DHCP_FAIL)
printf("\n\r[WLAN_SCENARIO_EXAMPLE] DHCP fail, might caused by timeout or the AP did not enable DHCP server\n");
}
else {
switch(error_flag)
{
// Cannot scan AP
case RTW_NONE_NETWORK:
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Cannot scan AP: %s\n", ssid);
break;
// Connection fail caused by auth/assoc failure
// E.g. if power off the AP during the connection would tigger this scenario
case RTW_CONNECT_FAIL:
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Connection fail caused by auth/assoc failure. Please check the AP and connect again\n");
break;
// Password length incorrect or not the same password as AP used
case RTW_WRONG_PASSWORD:
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Password length incorrect or not the same password as AP used\n");
break;
// Unexpected error
default:
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Unexpected connection failure\n");
}
}
/*********************************************************************************
* 3. Show Wi-Fi information
*********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Show Wi-Fi information\n");
rtw_wifi_setting_t setting;
wifi_get_setting(WLAN0_NAME,&setting);
wifi_show_setting(WLAN0_NAME,&setting);
/*********************************************************************************
* 4. Get AP's RSSI
*********************************************************************************/
int rssi = 0;
wifi_get_rssi(&rssi);
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Get AP RSSI: %d\n", rssi);
}
/**
* @brief Wi-Fi example for scenario case 6.
* @note Process Flow:
* - Enable Wi-Fi with STA mode
* - Scan network and handle the RSSI value (in dBm)
*/
static void scenario_6(void){
printf("\n\n[WLAN_SCENARIO_EXAMPLE] Wi-Fi example scenario case 6...\n");
/*********************************************************************************
* 1. Enable Wi-Fi with STA mode
**********************************************************************************/
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Enable Wi-Fi\n");
if(wifi_on(RTW_MODE_STA) < 0){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_on failed\n");
return;
}
/**********************************************************************************
* 2. Scan network and handle the RSSI value
**********************************************************************************/
// Scan network and print the RSSI & SSID out.
// Can refer to fATWS() in atcmd_wifi.c and scan_result_RSSI_handler() below.
printf("\n\r[WLAN_SCENARIO_EXAMPLE] Scan network\n");
if(wifi_scan_networks(scan_result_RSSI_handler, NULL) != RTW_SUCCESS){
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: wifi_scan_networks() failed\n");
return;
}
}
// For processing the scanned result -> just output them.
// Can refer to fATWS() in atcmd_wifi.c.
static rtw_result_t scan_result_handler(rtw_scan_handler_result_t* malloced_scan_result){
static int ApNum = 0;
if (malloced_scan_result->scan_complete != RTW_TRUE) {
rtw_scan_result_t* record = &malloced_scan_result->ap_details;
record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */
printf("%d\t", ++ApNum);
printf("%s\t ", ( record->bss_type == RTW_BSS_TYPE_ADHOC ) ? "Adhoc" : "Infra" );
printf("%02x:%02x:%02x:%02x:%02x:%02x", MAC_ARG(record->BSSID.octet));
printf(" %d\t ", record->signal_strength);
printf(" %d\t ", record->channel);
printf(" %d\t ", record->wps_type);
printf("%s\t\t ", ( record->security == RTW_SECURITY_OPEN ) ? "Open" :
( record->security == RTW_SECURITY_WEP_PSK ) ? "WEP" :
( record->security == RTW_SECURITY_WPA_TKIP_PSK ) ? "WPA TKIP" :
( record->security == RTW_SECURITY_WPA_AES_PSK ) ? "WPA AES" :
( record->security == RTW_SECURITY_WPA2_AES_PSK ) ? "WPA2 AES" :
( record->security == RTW_SECURITY_WPA2_TKIP_PSK ) ? "WPA2 TKIP" :
( record->security == RTW_SECURITY_WPA2_MIXED_PSK ) ? "WPA2 Mixed" :
( record->security == RTW_SECURITY_WPA_WPA2_MIXED ) ? "WPA/WPA2 AES" :
"Unknown");
printf( " %s ", record->SSID.val);
printf("\r\n");
}
return RTW_SUCCESS;
}
// For processing the scanned result -> output RSSI & SSID.
// Can refer to fATWS() in atcmd_wifi.c.
static rtw_result_t scan_result_RSSI_handler(rtw_scan_handler_result_t* malloced_scan_result){
static int ApNum = 0;
if (malloced_scan_result->scan_complete != RTW_TRUE) {
rtw_scan_result_t* record = &malloced_scan_result->ap_details;
record->SSID.val[record->SSID.len] = 0; /* Ensure the SSID is null terminated */
printf("%d\t", ++ApNum);
printf(" RSSI: %d\t", record->signal_strength);
printf(" SSID: %s", record->SSID.val);
printf("\r\n");
}
return RTW_SUCCESS;
}
static void example_wlan_scenario_thread(void* in_id){
char *id = in_id;
// Wait for other task stable.
vTaskDelay(4000);
if(strcmp(id, "S") == 0)
// Scan network.
scan_network();
else if(strcmp(id, "A") == 0)
// Authentication example.
authentication();
else if(strcmp(id, "M1") == 0)
// Mode switch case 1.
mode_switch_1();
else if(strcmp(id, "M2") == 0)
// Mode switch case 2.
mode_switch_2();
else if(strcmp(id, "M3") == 0)
// Mode switch case 3.
mode_switch_3();
else if(strcmp(id, "M4") == 0)
// Mode switch case 4.
mode_switch_4();
else if(strcmp(id, "M5") == 0)
// Mode switch case 5.
mode_switch_5();
else if(strcmp(id, "M6") == 0)
// Mode switch case 6.
mode_switch_6();
else if(strcmp(id, "M7") == 0)
// Mode switch case 7.
mode_switch_7();
else if(strcmp(id, "S1") == 0)
// Scenario case 1.
scenario_1();
else if(strcmp(id, "S2") == 0)
// Scenario case 2.
scenario_2();
else if(strcmp(id, "S3") == 0)
// Scenario case 3.
scenario_3();
else if(strcmp(id, "S4") == 0)
// Scenario case 4.
scenario_4();
else if(strcmp(id, "S5") == 0)
// Scenario case 5.
scenario_5();
else if(strcmp(id, "S6") == 0)
// Scenario case 6.
scenario_6();
else
printf("\n\r[WLAN_SCENARIO_EXAMPLE] ERROR: Invalid case identity\n");
vTaskDelete(NULL);
}
void example_wlan_scenario(char* id){
if(xTaskCreate(example_wlan_scenario_thread, ((const char*)"example_wlan_scenario_thread"), 1024,(void *const) id, tskIDLE_PRIORITY + 1, NULL) != pdPASS)
printf("\n\r%s xTaskCreate failed\n", __FUNCTION__);
}
#endif /* CONFIG_EXAMPLE_WLAN_SCENARIO */