void MyWIFI_Connect(void) { UINT8 ConnectionProfileID; UINT8 channelList[] = MY_DEFAULT_CHANNEL_LIST; /* create a Connection Profile */ WF_CPCreate(&ConnectionProfileID); WF_CPSetSsid(ConnectionProfileID, AppConfig.MySSID, AppConfig.SsidLength); WF_CPSetNetworkType(ConnectionProfileID, MY_DEFAULT_NETWORK_TYPE); WF_CASetScanType(MY_DEFAULT_SCAN_TYPE); WF_CASetChannelList(channelList, sizeof (channelList)); // The Retry Count parameter tells the WiFi Connection manager how many attempts to make when trying // to connect to an existing network. In the Infrastructure case, the default is to retry forever so that // if the AP is turned off or out of range, the radio will continue to attempt a connection until the // AP is eventually back on or in range. In the Adhoc case, the default is to retry 3 times since the // purpose of attempting to establish a network in the Adhoc case is only to verify that one does not // initially exist. If the retry count was set to WF_RETRY_FOREVER in the AdHoc mode, an AdHoc network // would never be established. The constants MY_DEFAULT_LIST_RETRY_COUNT_ADHOC and // MY_DEFAULT_LIST_RETRY_COUNT_INFRASTRUCTURE have been created specifically for the June 2011 MAL release. #if (MY_DEFAULT_NETWORK_TYPE == WF_ADHOC) WF_CASetListRetryCount(MY_DEFAULT_LIST_RETRY_COUNT_ADHOC); #else WF_CASetListRetryCount(MY_DEFAULT_LIST_RETRY_COUNT_INFRASTRUCTURE); #endif WF_CASetEventNotificationAction(MY_DEFAULT_EVENT_NOTIFICATION_LIST); WF_CASetBeaconTimeout(40); WF_CPSetSecurity(ConnectionProfileID, AppConfig.SecurityMode, AppConfig.WepKeyIndex, /* only used if WEP enabled */ AppConfig.SecurityKey, AppConfig.SecurityKeyLength); MyConsole_SendMsg("Start WiFi Connect\n"); WF_CMConnect(ConnectionProfileID); }
static int WFEasyConfigProcess(void) { UINT8 ConnectionProfileID; UINT8 ConnectionState; #if defined (EZ_CONFIG_STALL) if (CFGCXT.cfg_state == cfg_stopped) { /* State machine just started get current time stamp */ CFGCXT.cfg_state = cfg_stalled; CFGCXT.timeStart = TickGet(); return 0; } /* Wait for stall time to expire */ if (CFGCXT.cfg_state == cfg_stalled) { UINT32 time = TickGet(); if ((time - CFGCXT.timeStart) < WF_STALL_TIME_MS) return 0; } #endif //EZ_CONFIG_STALL /* We will re-use the current profile */ WF_CMGetConnectionState(&ConnectionState, &ConnectionProfileID); /* Need to disconnect */ WF_CMDisconnect(); /* Delete profile */ WF_CPDelete(ConnectionProfileID); /* Create and prepare new profile */ WF_CPCreate(&ConnectionProfileID); /* Now set the various connection profile parameters */ /* Set SSID... */ if (CFGCXT.ssid) #if defined(__18CXX) WF_CPSetSsid(ConnectionProfileID, (ROM char *)CFGCXT.ssid, strlen(CFGCXT.ssid)); #else WF_CPSetSsid(ConnectionProfileID, CFGCXT.ssid, strlen((char*)CFGCXT.ssid)); #endif /* Now deal with security... */ switch ((BYTE)CFGCXT.security) { case WF_SECURITY_OPEN: /* No security */ WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_OPEN, 0, 0, 0); break; case WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE: if (CFGCXT.key) { WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE, 0, CFGCXT.key, strlen((char *)CFGCXT.key)); } break; case WF_SECURITY_WPA_AUTO_WITH_KEY: if (CFGCXT.key) { WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_KEY, 0, CFGCXT.key, 32); } break; case WF_SECURITY_WEP_40: { BYTE keys[20]; int i; if (CFGCXT.key) { /* Clear key */ for (i = 0; i < 20; i++) keys[i] = 0; memcpy(keys, CFGCXT.key, 20); WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WEP_40, CFGCXT.defaultWepKey, keys, 20); } } break; case WF_SECURITY_WEP_104: { BYTE keys[52]; int i; if (CFGCXT.key) { /* Clear key */ for (i = 0; i < 52; i++) keys[i] = 0; memcpy(keys, CFGCXT.key, 52); WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WEP_104, CFGCXT.defaultWepKey, keys, 52); } } break; } #if defined (EZ_CONFIG_STORE) SaveWifiConfig(); #endif /* Set wlan mode */ WF_CPSetNetworkType(ConnectionProfileID, CFGCXT.type); /* Kick off connection now... */ WF_CMConnect(ConnectionProfileID); /* Change state and return TRUE to show we are done! */ CFGCXT.cfg_state = cfg_stopped; return 1; }
static int WFEasyConfigProcess(void) { uint8_t ConnectionProfileID; uint8_t ConnectionState; #if defined (EZ_CONFIG_STALL) if (CFGCXT.cfg_state == cfg_stopped) { /* State machine just started get current time stamp */ CFGCXT.cfg_state = cfg_stalled; CFGCXT.timeStart = TickGet(); return 0; } /* Wait for stall time to expire */ if (CFGCXT.cfg_state == cfg_stalled) { uint32_t time = TickGet(); if ((time - CFGCXT.timeStart) < WF_STALL_TIME_MS) return 0; } #endif //EZ_CONFIG_STALL /* We will re-use the current profile */ WF_CMGetConnectionState(&ConnectionState, &ConnectionProfileID); /* Need to disconnect */ WF_CMDisconnect(); /* Delete profile */ WF_CPDelete(ConnectionProfileID); /* Create and prepare new profile */ WF_CPCreate(&ConnectionProfileID); AppConfig.passPhraseToKeyFlag = 0; /* Now set the various connection profile parameters */ /* Set SSID... */ if (CFGCXT.ssid) #if defined(__XC8) WF_CPSetSsid(ConnectionProfileID, //(ROM char *)CFGCXT.ssid, Note (VMH): fixed compile warning - not sure why this is necessary. CFGCXT.ssid, strlen(CFGCXT.ssid)); #else WF_CPSetSsid(ConnectionProfileID, CFGCXT.ssid, strlen((char*)CFGCXT.ssid)); #endif #if defined(DERIVE_KEY_FROM_PASSPHRASE_IN_HOST) if ((uint8_t)CFGCXT.security == WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE) { WF_ConvPassphrase2Key(strlen((char *)CFGCXT.key), CFGCXT.key, strlen((char*)CFGCXT.ssid), CFGCXT.ssid); CFGCXT.security--; #if MY_DEFAULT_NETWORK_TYPE == WF_ADHOC if (AppConfig.SecurityMode == WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE) { WF_ConvPassphrase2Key(AppConfig.SecurityKeyLength, AppConfig.SecurityKey, AppConfig.SsidLength, AppConfig.MySSID); AppConfig.SecurityMode--; AppConfig.SecurityKeyLength = 32; AppConfig.passPhraseToKeyFlag = 1; } #endif /* MY_DEFAULT_NETWORK_TYPE == WF_ADHOC */ } #endif /* defined(DERIVE_KEY_FROM_PASSPHRASE_IN_HOST) */ /* Now deal with security... */ switch ((uint8_t)CFGCXT.security) { case WF_SECURITY_OPEN: /* No security */ WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_OPEN, 0, 0, 0); break; case WF_SECURITY_WEP_40: { uint8_t keys[20]; int i; if (CFGCXT.key) { /* Clear key */ for (i = 0; i < 20; i++) keys[i] = 0; memcpy(keys, (void*)CFGCXT.key, 20); WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WEP_40, CFGCXT.defaultWepKey, keys, 20); } } break; case WF_SECURITY_WEP_104: { uint8_t keys[52]; int i; if (CFGCXT.key) { /* Clear key */ for (i = 0; i < 52; i++) keys[i] = 0; memcpy(keys, (void*)CFGCXT.key, 52); WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WEP_104, CFGCXT.defaultWepKey, keys, 52); } } break; case WF_SECURITY_WPA_AUTO_WITH_KEY: if (CFGCXT.key) { WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_KEY, 0, CFGCXT.key, 32); } break; case WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE: if (CFGCXT.key) { WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE, 0, CFGCXT.key, strlen((char *)CFGCXT.key)); } break; } #if defined (EZ_CONFIG_STORE) SaveAppConfig(&AppConfig); #endif /* Set wlan mode */ WF_CPSetNetworkType(ConnectionProfileID, CFGCXT.type); if (AppConfig.networkType == WF_INFRASTRUCTURE) WF_CASetListRetryCount(MY_DEFAULT_LIST_RETRY_COUNT_INFRASTRUCTURE); #if defined(DISABLE_MODULE_FW_CONNECT_MANAGER_IN_INFRASTRUCTURE) WF_DisableModuleConnectionManager(); #endif #if MY_DEFAULT_NETWORK_TYPE == WF_SOFT_AP // SoftAP: To allow redirection, need to hibernate before changing network type. Module FW has SoftAP flag and therefore hibernate mode // is needed to clear this indication and allow proper network change. // This should work for non-SoftAP. But these have not been tested yet. // Operation of hibernate mode // Turned off LDO of the MRF24W module, which is turning off the power completely. Has same effect of resetting the module. // // FW flow of hibernate mode: // Ensure WF_USE_POWER_SAVE_FUNCTIONS is enabled. // In main() loop, StackTask() -> MACProcess() will be called. It will invoke CheckHibernate(), which executes/handles // hibernate mode based on WF_hibernate.state and WF_hibernate.wakeup_notice. WF_hibernate.state = WF_HB_ENTER_SLEEP; WF_hibernate.wakeup_notice = false; //WFConsolePrintRomStr("SoftAP redirection: Put Wi-Fi module into hibernate mode.", true); DelayMs(50); // SOFTAP_ZEROCONF_SUPPORT. Timing reduced from 200 to 50. WF_hibernate.wakeup_notice = true; //WFConsolePrintRomStr("Wakeup Wi-Fi module.", true); #else /* Kick off connection now... */ WF_CMConnect(ConnectionProfileID); #endif /* Change state and return true to show we are done! */ CFGCXT.cfg_state = cfg_stopped; return 1; }
/***************************************************************************** * FUNCTION: void WF_Connect(void) * * RETURNS: None * * PARAMS: none * * NOTES: This routine creates a Connection Profile Entry, Initializes it * then creates the connection algorithm and establishes the WiFi * connection according to the Profile settings. * Customize this function as needed for your application. * * Wifi Direct, ensure following parameters are set up properly * - AppConfig.MySSID = "DIRECT-" * - sizeof(channelList) == 3) * - channelList[0] == 1 * - channelList[1] == 6 * - channelList[2] == 11 * *****************************************************************************/ void WF_Connect(void) { uint8_t ConnectionProfileID; uint8_t channelList[] = MY_DEFAULT_CHANNEL_LIST; uint8_t channelList_postscan[] = MY_DEFAULT_CHANNEL_LIST_POSTSCAN; /* create a Connection Profile */ WF_CPCreate(&ConnectionProfileID); AppConfig.passPhraseToKeyFlag = 0; // Enables or disables the MRF24W Regional Domain with RF module FW version 0x3106 or earlier // With RF module FW version 0x3107 and future releases, this function is NOT supported due to changes // in FCC requirements, which does not allow programming of the regional domain. WF_SetRegionalDomain(MY_DEFAULT_DOMAIN); if ((AppConfig.networkType == WF_SOFT_AP) || (AppConfig.networkType == WF_ADHOC)) { /**********************************************************************/ /* Append Last 4 digits to MAC address to SSID - Creating unique SSID */ /* Wifi comm demo SSID : MCHP_xxxx */ /* Wifi G demo SSID : MCHP_G_xxxx */ /**********************************************************************/ sprintf((char *) AppConfig.MySSID, "MCHP_G_%02x%02x", AppConfig.MyMACAddr.v[4], AppConfig.MyMACAddr.v[5]); sprintf((char *) AppConfig.NetBIOSName, "%s%02x%02x", MY_DEFAULT_HOST_NAME, AppConfig.MyMACAddr.v[4], AppConfig.MyMACAddr.v[5]); size_t i = 0; // in the following while loop, all lower case letters have been changed to upper case ones // because browser automatically translates lower case letters to upper case while (i < sizeof (AppConfig.NetBIOSName)) { if (((*((char *) AppConfig.NetBIOSName + i)) >= 'a') & ((*((char *) AppConfig.NetBIOSName + i)) <= 'z')) { *((char *) AppConfig.NetBIOSName + i) = *((char *) AppConfig.NetBIOSName + i) - 32; } else if (*((char *) AppConfig.NetBIOSName + i) == '\0') break; i++; } FormatNetBIOSName(AppConfig.NetBIOSName); } AppConfig.SsidLength = strlen((char *) (AppConfig.MySSID)); WF_CPSetSsid(ConnectionProfileID, AppConfig.MySSID, AppConfig.SsidLength); WF_CPSetNetworkType(ConnectionProfileID, AppConfig.networkType); if (AppConfig.networkType == WF_ADHOC) { WF_CPSetAdHocBehavior(ConnectionProfileID, WF_ADHOC_CONNECT_THEN_START); } #if !defined(MRF24WG) Delay10us(10); /* required for MRF24WB */ #endif #if WF_HOST_DERIVE_KEY_FROM_PASSPHRASE == WF_ENABLED if (AppConfig.SecurityMode == WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE) { WF_ConvPassphraseToKey(AppConfig.SecurityKeyLength, AppConfig.SecurityKey, AppConfig.SsidLength, AppConfig.MySSID); AppConfig.SecurityMode--; AppConfig.SecurityKeyLength = 32; AppConfig.passPhraseToKeyFlag = 1; } #endif /* #if WF_HOST_DERIVE_KEY_FROM_PASSPHRASE == WF_ENABLED */ switch (AppConfig.SecurityMode) { case WF_SECURITY_OPEN: WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_OPEN, 0, NULL, 0); break; case WF_SECURITY_WEP_40: // assume key 0 WF_CPSetSecurity(ConnectionProfileID, AppConfig.SecurityMode, 0, AppConfig.SecurityKey, 5); break; case WF_SECURITY_WEP_104: // assume key 0 WF_CPSetSecurity(ConnectionProfileID, AppConfig.SecurityMode, 0, AppConfig.SecurityKey, 13); break; case WF_SECURITY_WPA_AUTO_WITH_KEY: WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_KEY, 0, AppConfig.SecurityKey, 32); break; default: WF_ASSERT(false); break; } WF_CASetScanType(MY_DEFAULT_SCAN_TYPE); if (((CFGCXT.type != WF_SOFT_AP)&&(CFGCXT.prevWLAN == WF_SOFT_AP)) || (AppConfig.networkType != WF_SOFT_AP)) { WF_CASetChannelList(channelList_postscan, sizeof (channelList_postscan)); } else { WF_CASetChannelList(channelList, sizeof (channelList)); } // The Retry Count parameter tells the WiFi Connection manager how many attempts to make when trying // to connect to an existing network. In the Infrastructure case, the default is to retry forever so that // if the AP is turned off or out of range, the radio will continue to attempt a connection until the // AP is eventually back on or in range. In the Adhoc case, the default is to retry 3 times since the // purpose of attempting to establish a network in the Adhoc case is only to verify that one does not // initially exist. If the retry count was set to WF_RETRY_FOREVER in the AdHoc mode, an AdHoc network // would never be established. The constants MY_DEFAULT_LIST_RETRY_COUNT_ADHOC and // MY_DEFAULT_LIST_RETRY_COUNT_INFRASTRUCTURE have been created specifically for the June 2011 MAL release. if ((AppConfig.networkType == CFG_WF_ADHOC) || (AppConfig.networkType == CFG_WF_SOFT_AP)) { WF_CASetListRetryCount(ADHOC_RETRY_COUNT); } else /* AppConfig.networkType == CFG_WF_INFRASTRUCTURE */ { WF_CASetListRetryCount(MY_DEFAULT_LIST_RETRY_COUNT_INFRASTRUCTURE); } WF_CASetEventNotificationAction(MY_DEFAULT_EVENT_NOTIFICATION_LIST); #if defined(WF_USE_POWER_SAVE_FUNCTIONS) #if (MY_DEFAULT_PS_POLL == WF_ENABLED) WF_PsPollEnable(true); #else WF_PsPollDisable(); #endif #endif WF_CASetBeaconTimeout(MY_DEFAULT_BEACON_TIMEOUT); #if defined(STACK_USE_UART) WF_OutputConnectionInfo(&AppConfig); #endif if (AppConfig.networkType == CFG_WF_SOFT_AP) { #if (WF_SOFTAP_SEND_KEEP_ALIVE == WF_ENABLED) WF_SetLinkDownThreshold(WF_SOFTAP_LINK_LOST_THRESHOLD); #endif } else { // AppConfig.networkType != CFG_WF_SOFT_AP #if (WF_CHECK_LINK_STATUS == WF_ENABLED) WF_SetLinkDownThreshold(WF_LINK_LOST_THRESHOLD); #endif } // Initiates connection to BSS WF_CMConnect(ConnectionProfileID); }
/***************************************************************************** * FUNCTION: WF_Connect * * RETURNS: None * * PARAMS: None * * NOTES: Connects to an 802.11 network. Customize this function as needed * for your application. *****************************************************************************/ static void WF_Connect(void) { UINT8 ConnectionProfileID; UINT8 channelList[] = MY_DEFAULT_CHANNEL_LIST; #if defined(WF_USE_POWER_SAVE_FUNCTIONS) BOOL PsPollEnabled; #endif /* create a Connection Profile */ WF_CPCreate(&ConnectionProfileID); #if defined(STACK_USE_UART) putrsUART("Set SSID ("); putsUART(AppConfig.MySSID); putrsUART(")\r\n"); #endif WF_CPSetSsid(ConnectionProfileID, AppConfig.MySSID, AppConfig.SsidLength); #if defined(STACK_USE_UART) putrsUART("Set Network Type\r\n"); #endif WF_CPSetNetworkType(ConnectionProfileID, AppConfig.networkType); if (AppConfig.networkType == WF_ADHOC) { WF_CPSetAdHocBehavior(ConnectionProfileID, WF_ADHOC_CONNECT_THEN_START); } #if defined(STACK_USE_UART) putrsUART("Set Security\r\n"); #endif switch(AppConfig.SecurityMode) { case WF_SECURITY_OPEN: WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_OPEN, 0, NULL, 0); break; case WF_SECURITY_WEP_40: // assume key 0 WF_CPSetSecurity(ConnectionProfileID, AppConfig.SecurityMode, 0, AppConfig.SecurityKey, 5); break; case WF_SECURITY_WEP_104: // assume key 0 WF_CPSetSecurity(ConnectionProfileID, AppConfig.SecurityMode, 0, AppConfig.SecurityKey, 13); break; case WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE: WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE, 0, AppConfig.SecurityKey, strlen((char*)AppConfig.SecurityKey)); break; case WF_SECURITY_WPA_AUTO_WITH_KEY: WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_KEY, 0, AppConfig.SecurityKey, 32); break; default: { } //#if defined(STACK_USE_UART) // putrsUART("\r\n\r\nCaptain this should NOT happen.\r\n\r\n"); //#endif } #if defined(STACK_USE_UART) putrsUART("Set Scan Type\r\n"); #endif WF_CASetScanType(MY_DEFAULT_SCAN_TYPE); #if defined(STACK_USE_UART) putrsUART("Set Channel List\r\n"); #endif WF_CASetChannelList(channelList, sizeof(channelList)); #if defined(STACK_USE_UART) putrsUART("Set list retry count\r\n"); #endif WF_CASetListRetryCount(MY_DEFAULT_LIST_RETRY_COUNT); #if defined(STACK_USE_UART) putrsUART("Set Event Notify\r\n"); #endif WF_CASetEventNotificationAction(MY_DEFAULT_EVENT_NOTIFICATION_LIST); #if defined(WF_USE_POWER_SAVE_FUNCTIONS) PsPollEnabled = (MY_DEFAULT_PS_POLL == WF_ENABLED); if (!PsPollEnabled) { /* disable low power (PS-Poll) mode */ #if defined(STACK_USE_UART) putrsUART("Disable PS-Poll\r\n"); #endif WF_PsPollDisable(); } else { /* Enable low power (PS-Poll) mode */ #if defined(STACK_USE_UART) putrsUART("Enable PS-Poll\r\n"); #endif WF_PsPollEnable(TRUE); } #endif #if defined(STACK_USE_UART) putrsUART("Set Beacon Timeout\r\n"); #endif WF_CASetBeaconTimeout(40); #if defined(STACK_USE_UART) putrsUART("Start WiFi Connect\r\n"); #endif WF_CMConnect(ConnectionProfileID); }
/***************************************************************************** * FUNCTION: WF_Connect * * RETURNS: None * * PARAMS: None * * NOTES: Connects to an 802.11 network. Customize this function as needed * for your application. *****************************************************************************/ static void WF_Connect(void) { UINT8 ConnectionProfileID; UINT8 channelList[] = MY_DEFAULT_CHANNEL_LIST; #if defined(WF_USE_POWER_SAVE_FUNCTIONS) BOOL PsPollEnabled; #endif /* create a Connection Profile */ WF_CPCreate(&ConnectionProfileID); #if defined(STACK_USE_UART) putrsUART("Set SSID ("); putsUART(AppConfig.MySSID); putrsUART(")\r\n"); #endif WF_CPSetSsid(ConnectionProfileID, AppConfig.MySSID, AppConfig.SsidLength); #if defined(STACK_USE_UART) putrsUART("Set Network Type\r\n"); #endif WF_CPSetNetworkType(ConnectionProfileID, MY_DEFAULT_NETWORK_TYPE); #if defined(STACK_USE_UART) putrsUART("Set Scan Type\r\n"); #endif WF_CASetScanType(MY_DEFAULT_SCAN_TYPE); #if defined(STACK_USE_UART) putrsUART("Set Channel List\r\n"); #endif WF_CASetChannelList(channelList, sizeof(channelList)); #if defined(STACK_USE_UART) putrsUART("Set list retry count\r\n"); #endif // The Retry Count parameter tells the WiFi Connection manager how many attempts to make when trying // to connect to an existing network. In the Infrastructure case, the default is to retry forever so that // if the AP is turned off or out of range, the radio will continue to attempt a connection until the // AP is eventually back on or in range. In the Adhoc case, the default is to retry 3 times since the // purpose of attempting to establish a network in the Adhoc case is only to verify that one does not // initially exist. If the retry count was set to WF_RETRY_FOREVER in the AdHoc mode, an AdHoc network // would never be established. The constants MY_DEFAULT_LIST_RETRY_COUNT_ADHOC and // MY_DEFAULT_LIST_RETRY_COUNT_INFRASTRUCTURE have been created specifically for the June 2011 MAL release. #if defined(EZ_CONFIG_STORE) if (AppConfig.networkType == WF_ADHOC) WF_CASetListRetryCount(MY_DEFAULT_LIST_RETRY_COUNT_ADHOC); else WF_CASetListRetryCount(MY_DEFAULT_LIST_RETRY_COUNT_INFRASTRUCTURE); #else #if (MY_DEFAULT_NETWORK_TYPE == WF_ADHOC) WF_CASetListRetryCount(MY_DEFAULT_LIST_RETRY_COUNT_ADHOC); #else WF_CASetListRetryCount(MY_DEFAULT_LIST_RETRY_COUNT_INFRASTRUCTURE); #endif #endif #if defined(STACK_USE_UART) putrsUART("Set Event Notify\r\n"); #endif WF_CASetEventNotificationAction(MY_DEFAULT_EVENT_NOTIFICATION_LIST); #if defined(WF_USE_POWER_SAVE_FUNCTIONS) PsPollEnabled = (MY_DEFAULT_PS_POLL == WF_ENABLED); if (!PsPollEnabled) { /* disable low power (PS-Poll) mode */ #if defined(STACK_USE_UART) putrsUART("Disable PS-Poll\r\n"); #endif WF_PsPollDisable(); } else { /* Enable low power (PS-Poll) mode */ #if defined(STACK_USE_UART) putrsUART("Enable PS-Poll\r\n"); #endif WF_PsPollEnable(TRUE); } #endif #if defined(STACK_USE_UART) putrsUART("Set Beacon Timeout\r\n"); #endif WF_CASetBeaconTimeout(40); /* Set Security */ #if (MY_DEFAULT_WIFI_SECURITY_MODE == WF_SECURITY_OPEN) #if defined(STACK_USE_UART) putrsUART("Set Security (Open)\r\n"); #endif #elif (MY_DEFAULT_WIFI_SECURITY_MODE == WF_SECURITY_WEP_40) #if defined(STACK_USE_UART) putrsUART("Set Security (WEP40)\r\n"); #endif #elif (MY_DEFAULT_WIFI_SECURITY_MODE == WF_SECURITY_WEP_104) #if defined(STACK_USE_UART) putrsUART("Set Security (WEP104)\r\n"); #endif #elif MY_DEFAULT_WIFI_SECURITY_MODE == WF_SECURITY_WPA_WITH_KEY #if defined(STACK_USE_UART) putrsUART("Set Security (WPA with key)\r\n"); #endif #elif MY_DEFAULT_WIFI_SECURITY_MODE == WF_SECURITY_WPA2_WITH_KEY #if defined(STACK_USE_UART) putrsUART("Set Security (WPA2 with key)\r\n"); #endif #elif MY_DEFAULT_WIFI_SECURITY_MODE == WF_SECURITY_WPA_WITH_PASS_PHRASE #if defined(STACK_USE_UART) putrsUART("Set Security (WPA with pass phrase)\r\n"); #endif #elif MY_DEFAULT_WIFI_SECURITY_MODE == WF_SECURITY_WPA2_WITH_PASS_PHRASE #if defined(STACK_USE_UART) putrsUART("Set Security (WPA2 with pass phrase)\r\n"); #endif #elif MY_DEFAULT_WIFI_SECURITY_MODE == WF_SECURITY_WPA_AUTO_WITH_KEY #if defined(STACK_USE_UART) putrsUART("Set Security (WPA with key, auto-select)\r\n"); #endif #elif MY_DEFAULT_WIFI_SECURITY_MODE == WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE #if defined(STACK_USE_UART) putrsUART("Set Security (WPA with pass phrase, auto-select)\r\n"); #endif #endif /* MY_DEFAULT_WIFI_SECURITY_MODE */ WF_CPSetSecurity(ConnectionProfileID, AppConfig.SecurityMode, AppConfig.WepKeyIndex, /* only used if WEP enabled */ AppConfig.SecurityKey, AppConfig.SecurityKeyLength); #if defined(STACK_USE_UART) putrsUART("Start WiFi Connect\r\n"); #endif WF_CMConnect(ConnectionProfileID); }
/***************************************************************************** * FUNCTION: WF_Connect * * RETURNS: None * * PARAMS: None * * NOTES: Connects to an 802.11 network. Customize this function as needed * for your application. *****************************************************************************/ void WF_Connect(void) { //UINT8 ConnectionProfileID; UINT8 channelList[] = MY_DEFAULT_CHANNEL_LIST; #if (MY_DEFAULT_NETWORK_TYPE == WF_SOFT_AP) UINT8 channelList_postscan[] = MY_DEFAULT_CHANNEL_LIST_POSTSCAN; #endif /* create a Connection Profile */ WF_CPCreate(&ConnectionProfileID); WF_SetRegionalDomain(MY_DEFAULT_DOMAIN); WF_CPSetSsid(ConnectionProfileID, AppConfig.MySSID, AppConfig.SsidLength); WF_CPSetNetworkType(ConnectionProfileID, AppConfig.networkType); if (AppConfig.networkType == WF_ADHOC) { WF_CPSetAdHocBehavior(ConnectionProfileID, WF_ADHOC_CONNECT_THEN_START); } #if !defined(MRF24WG) // Delay10us(10); //If necessary, give time to Roadrunner to clean message buffer, because Security message is a big data package #endif switch(AppConfig.SecurityMode) { case WF_SECURITY_OPEN: WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_OPEN, 0, NULL, 0); break; case WF_SECURITY_WEP_40: // assume key 0 WF_CPSetSecurity(ConnectionProfileID, AppConfig.SecurityMode, 0, AppConfig.SecurityKey, 5); break; case WF_SECURITY_WEP_104: // assume key 0 WF_CPSetSecurity(ConnectionProfileID, AppConfig.SecurityMode, 0, AppConfig.SecurityKey, 13); break; case WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE: WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE, 0, AppConfig.SecurityKey, strlen((char*)AppConfig.SecurityKey)); break; case WF_SECURITY_WPA_AUTO_WITH_KEY: WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_KEY, 0, AppConfig.SecurityKey, 32); break; default: putrsUART("\r\n\r\nCaptain this should NOT happen.\r\n\r\n"); } WF_CASetScanType(MY_DEFAULT_SCAN_TYPE); #if (MY_DEFAULT_NETWORK_TYPE == WF_SOFT_AP) if (((CFGCXT.type!=WF_SOFT_AP)&&(CFGCXT.prevWLAN==WF_SOFT_AP)) || (AppConfig.networkType!=WF_SOFT_AP)) { // putrsUART("\r\n\r\nWF_Connect: Channel list update when transitioning from SoftAP to non-SoftAP or NOT in SoftAP..\r\n\r\n"); WF_CASetChannelList(channelList_postscan, sizeof(channelList_postscan)); } else { WF_CASetChannelList(channelList, sizeof(channelList)); } #else WF_CASetChannelList(channelList, sizeof(channelList)); #endif // (MY_DEFAULT_NETWORK_TYPE == WF_SOFT_AP) // The Retry Count parameter tells the WiFi Connection manager how many attempts to make when trying // to connect to an existing network. In the Infrastructure case, the default is to retry forever so that // if the AP is turned off or out of range, the radio will continue to attempt a connection until the // AP is eventually back on or in range. In the Adhoc case, the default is to retry 3 times since the // purpose of attempting to establish a network in the Adhoc case is only to verify that one does not // initially exist. If the retry count was set to WF_RETRY_FOREVER in the AdHoc mode, an AdHoc network // would never be established. The constants MY_DEFAULT_LIST_RETRY_COUNT_ADHOC and // MY_DEFAULT_LIST_RETRY_COUNT_INFRASTRUCTURE have been created specifically for the June 2011 MAL release. WF_CASetListRetryCount(ADHOC_RETRY_COUNT); WF_CASetEventNotificationAction(MY_DEFAULT_EVENT_NOTIFICATION_LIST); #if defined(WF_USE_POWER_SAVE_FUNCTIONS) #if (MY_DEFAULT_PS_POLL == WF_ENABLED) WF_PsPollEnable(TRUE); #else WF_PsPollDisable(); #endif #endif WF_CASetBeaconTimeout(MY_DEFAULT_BEACON_TIMEOUT); #if defined(STACK_USE_UART) WF_OutputConnectionInfo(&AppConfig); #endif #if (SOFTAP_CHECK_LINK_STATUS == WF_ENABLED) WF_SetLinkDownThreshold(SOFTAP_LINK_FAILURE_THRESHOLD); #endif WF_CMConnect(ConnectionProfileID); }
/***************************************************************************** * FUNCTION: WF_Connect * * RETURNS: None * * PARAMS: None * * NOTES: Connects to an 802.11 network. Customize this function as needed * for your application. *****************************************************************************/ void WF_Connect(void) { //UINT8 ConnectionProfileID; UINT8 channelList[] = MY_DEFAULT_CHANNEL_LIST; /* create a Connection Profile */ WF_CPCreate(&ConnectionProfileID); WF_SetRegionalDomain(MY_DEFAULT_DOMAIN); WF_CPSetSsid(ConnectionProfileID, AppConfig.MySSID, AppConfig.SsidLength); #if defined(WF_USE_HIDDEN_SSID) WF_CPSetSsidType(ConnectionProfileID, FALSE); #endif WF_CPSetNetworkType(ConnectionProfileID, AppConfig.networkType); if (AppConfig.networkType == WF_ADHOC) { WF_CPSetAdHocBehavior(ConnectionProfileID, WF_ADHOC_CONNECT_THEN_START); } switch(AppConfig.SecurityMode) { case WF_SECURITY_OPEN: WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_OPEN, 0, NULL, 0); break; case WF_SECURITY_WEP_40: // assume key 0 WF_CPSetSecurity(ConnectionProfileID, AppConfig.SecurityMode, 0, AppConfig.SecurityKey, 5); break; case WF_SECURITY_WEP_104: // assume key 0 WF_CPSetSecurity(ConnectionProfileID, AppConfig.SecurityMode, 0, AppConfig.SecurityKey, 13); break; case WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE: WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE, 0, AppConfig.SecurityKey, strlen((char*)AppConfig.SecurityKey)); break; case WF_SECURITY_WPA_AUTO_WITH_KEY: WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_KEY, 0, AppConfig.SecurityKey, 32); break; default: putrsUART("\r\n\r\nCaptain this should NOT happen.\r\n\r\n"); } WF_CASetScanType(MY_DEFAULT_SCAN_TYPE); WF_CASetChannelList(channelList, sizeof(channelList)); // The Retry Count parameter tells the WiFi Connection manager how many attempts to make when trying // to connect to an existing network. In the Infrastructure case, the default is to retry forever so that // if the AP is turned off or out of range, the radio will continue to attempt a connection until the // AP is eventually back on or in range. In the Adhoc case, the default is to retry 3 times since the // purpose of attempting to establish a network in the Adhoc case is only to verify that one does not // initially exist. If the retry count was set to WF_RETRY_FOREVER in the AdHoc mode, an AdHoc network // would never be established. The constants MY_DEFAULT_LIST_RETRY_COUNT_ADHOC and // MY_DEFAULT_LIST_RETRY_COUNT_INFRASTRUCTURE have been created specifically for the June 2011 MAL release. WF_CASetListRetryCount(ADHOC_RETRY_COUNT); WF_CASetEventNotificationAction(MY_DEFAULT_EVENT_NOTIFICATION_LIST); #if defined(WF_USE_POWER_SAVE_FUNCTIONS) #if (MY_DEFAULT_PS_POLL == WF_ENABLED) WF_PsPollEnable(TRUE); #else WF_PsPollDisable(); #endif #endif WF_CASetBeaconTimeout(MY_DEFAULT_BEACON_TIMEOUT); #if defined(STACK_USE_UART) WF_OutputConnectionInfo(&AppConfig); #endif WF_CMConnect(ConnectionProfileID); }
static int WFEasyConfigProcess(void) { UINT8 ConnectionProfileID; UINT8 ConnectionState; #if defined (EZ_CONFIG_STALL) if (CFGCXT.cfg_state == cfg_stopped) { /* State machine just started get current time stamp */ CFGCXT.cfg_state = cfg_stalled; CFGCXT.timeStart = TickGet(); return 0; } /* Wait for stall time to expire */ if (CFGCXT.cfg_state == cfg_stalled) { UINT32 time = TickGet(); if ((time - CFGCXT.timeStart) < WF_STALL_TIME_MS) return 0; } #endif //EZ_CONFIG_STALL /* We will re-use the current profile */ WF_CMGetConnectionState(&ConnectionState, &ConnectionProfileID); /* Need to disconnect */ WF_CMDisconnect(); /* Delete profile */ WF_CPDelete(ConnectionProfileID); /* Create and prepare new profile */ WF_CPCreate(&ConnectionProfileID); /* Now set the various connection profile parameters */ /* Set SSID... */ if (CFGCXT.ssid) #if defined(__18CXX) WF_CPSetSsid(ConnectionProfileID, //(ROM char *)CFGCXT.ssid, Note (VMH): fixed compile warning - not sure why this is necessary. CFGCXT.ssid, strlen(CFGCXT.ssid)); #else WF_CPSetSsid(ConnectionProfileID, CFGCXT.ssid, strlen((char*)CFGCXT.ssid)); #endif #if defined(DERIVE_KEY_FROM_PASSPHRASE_IN_HOST) if ((BYTE)CFGCXT.security == WF_SECURITY_WPA_WITH_PASS_PHRASE || (BYTE)CFGCXT.security == WF_SECURITY_WPA2_WITH_PASS_PHRASE || (BYTE)CFGCXT.security == WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE) { WF_ConvPassphrase2Key(strlen((char *)CFGCXT.key), CFGCXT.key, strlen((char*)CFGCXT.ssid), CFGCXT.ssid); CFGCXT.security--; } #endif /* defined(DERIVE_KEY_FROM_PASSPHRASE_IN_HOST) */ /* Now deal with security... */ switch ((BYTE)CFGCXT.security) { case WF_SECURITY_OPEN: /* No security */ WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_OPEN, 0, 0, 0); break; case WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE: if (CFGCXT.key) { WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_PASS_PHRASE, 0, CFGCXT.key, strlen((char *)CFGCXT.key)); } break; case WF_SECURITY_WPA_AUTO_WITH_KEY: if (CFGCXT.key) { WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WPA_AUTO_WITH_KEY, 0, CFGCXT.key, 32); } break; case WF_SECURITY_WEP_40: { BYTE keys[20]; int i; if (CFGCXT.key) { /* Clear key */ for (i = 0; i < 20; i++) keys[i] = 0; memcpy(keys, (void*)CFGCXT.key, 20); WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WEP_40, CFGCXT.defaultWepKey, keys, 20); } } break; case WF_SECURITY_WEP_104: { BYTE keys[52]; int i; if (CFGCXT.key) { /* Clear key */ for (i = 0; i < 52; i++) keys[i] = 0; memcpy(keys, (void*)CFGCXT.key, 52); WF_CPSetSecurity(ConnectionProfileID, WF_SECURITY_WEP_104, CFGCXT.defaultWepKey, keys, 52); } } break; } #if defined (EZ_CONFIG_STORE) SaveAppConfig(&AppConfig); #endif /* Set wlan mode */ WF_CPSetNetworkType(ConnectionProfileID, CFGCXT.type); #if defined(DISABLE_MODULE_FW_CONNECT_MANAGER_IN_INFRASTRUCTURE) WF_DisableModuleConnectionManager(); #endif if (AppConfig.networkType == WF_INFRASTRUCTURE) WF_CASetListRetryCount(MY_DEFAULT_LIST_RETRY_COUNT_INFRASTRUCTURE); #if MY_DEFAULT_NETWORK_TYPE == WF_SOFT_AP // SoftAP: To allow redirection, need to hibernate before changing network type. Module FW has SoftAP flag and therefore hibernate mode // is needed to clear this indication and allow proper network change. // This should work for non-SoftAP. But these have not been tested yet. WF_hibernate.state = WF_HB_ENTER_SLEEP; WF_hibernate.wakeup_notice = FALSE; //WFConsolePrintRomStr("SoftAP redirection: Put Wi-Fi module into hibernate mode.", TRUE); DelayMs(200); WF_hibernate.wakeup_notice = TRUE; //WFConsolePrintRomStr("Wakeup Wi-Fi module.", TRUE); #else /* Kick off connection now... */ WF_CMConnect(ConnectionProfileID); #endif /* Change state and return TRUE to show we are done! */ CFGCXT.cfg_state = cfg_stopped; return 1; }
/***************************************************************************** FUNCTION TCPIPTask Main function to handle the TCPIP stack RETURNS None PARAMS None *****************************************************************************/ void TCPIPTask() { WFConnection = WF_CUSTOM; ConnectionProfileID = 0; static DWORD dwLastIP = 0; _WFStat = NOT_CONNECTED; dwLastIP = 0; // Function pointers for the callback function of the TCP/IP and WiFi stack #if defined (FLYPORT_WF) FP[1] = cWFConnect; FP[2] = cWFDisconnect; FP[3] = cWFScan; FP[5] = cWFPsPollDisable; FP[6] = cWFPsPollEnable; FP[7] = cWFScanList; #if defined (FLYPORT_G) FP[8] = cRSSIUpdate; FP[9] = cWFGetPSK; #endif FP[10] = cWFStopConnecting; #endif #if defined (FLYPORT_ETH) FP[1] = cETHRestart; #endif #if defined (STACK_USE_SSL_CLIENT) FP[14] = cTCPSSLStatus; FP[15] = cTCPSSLStart; #endif FP[16] = cTCPRxFlush; FP[17] = cTCPpRead; FP[18] = cTCPRemote; FP[19] = cTCPServerDetach; FP[20] = cTCPGenericOpen; FP[21] = cTCPRead; FP[22] = cTCPWrite; FP[23] = cTCPGenericClose; FP[24] = cTCPisConn; FP[25] = cTCPRxLen; #if defined(STACK_USE_SMTP_CLIENT) FP[26] = cSMTPStart; FP[27] = cSMTPSetServer; FP[28] = cSMTPSetMsg; FP[29] = cSMTPSend; FP[30] = cSMTPBusy; FP[31] = cSMTPStop; FP[32] = cSMTPReport; #endif FP[ARP_RESOLVE] = cARPResolveMAC; #if MAX_UDP_SOCKETS_FREERTOS>0 FP[35] = cUDPGenericOpen; FP[36] = cUDPWrite; FP[37] = cUDPGenericClose; FP[38] = cUDPMultiOn; #endif // Initialize stack-related hardware components that may be // required by the UART configuration routines // Initialization of tick and of DHCPs SM only at the startup of the device if (hFlyTask == NULL) { TickInit(); #if defined STACK_USE_DHCP_SERVER DHCPServerSMInit(); #endif } #if defined(STACK_USE_MPFS) || defined(STACK_USE_MPFS2) MPFSInit(); #endif // Initialize Stack and application related NV variables into AppConfig. InitAppConfig(); // Initialize core stack layers (MAC, ARP, TCP, UDP) and application modules (HTTP, SNMP, etc.) StackInit(); if (hFlyTask == NULL) { NETConf[0] = AppConfig; NETConf[1] = AppConfig; } #if defined(WF_CS_TRIS) // On startup no connection profile should be present inside WiFi module, so a new one is created UINT8 listIds = 0; WF_CPGetIds(&listIds); if (listIds == 0) { WF_CPCreate(&ConnectionProfileID); } // Logical connection state initialization SetLogicalConnectionState(FALSE); #endif #if defined(STACK_USE_ZEROCONF_LINK_LOCAL) ZeroconfLLInitialize(); #endif #if defined(STACK_USE_ZEROCONF_MDNS_SD) mDNSInitialize(MY_DEFAULT_HOST_NAME); mDNSServiceRegister( (const char *) "DemoWebServer", // base name of the service "_http._tcp.local", // type of the service 80, // TCP or UDP port, at which this service is available ((const BYTE *)"path=/index.htm"), // TXT info 1, // auto rename the service when if needed NULL, // no callback function NULL // no application context ); mDNSMulticastFilterRegister(); #endif // INITIALIZING UDP #if MAX_UDP_SOCKETS_FREERTOS>0 _dbgwrite("Initializing UDP...\r\n"); UDPInit(); activeUdpSocket=0; while (activeUdpSocket < MAX_UDP_SOCKETS_FREERTOS) { tmp_len[activeUdpSocket]=0; if (activeUdpSocket == 0) { BUFFER_UDP_LEN[0] = BUFFER1_UDP_LEN; udpBuffer[activeUdpSocket] = udpBuffer1; udpSocket[0] = INVALID_UDP_SOCKET; } #if MAX_UDP_SOCKETS_FREERTOS>1 if (activeUdpSocket == 1) { BUFFER_UDP_LEN[1] = BUFFER2_UDP_LEN; udpBuffer[activeUdpSocket] = udpBuffer2; udpSocket[1] = INVALID_UDP_SOCKET; } #endif #if MAX_UDP_SOCKETS_FREERTOS>2 if (activeUdpSocket == 2) { BUFFER_UDP_LEN[2] = BUFFER3_UDP_LEN; udpBuffer[activeUdpSocket] = udpBuffer3; udpSocket[2] = INVALID_UDP_SOCKET; } #endif #if MAX_UDP_SOCKETS_FREERTOS>3 if (activeUdpSocket == 3) { BUFFER_UDP_LEN[3] = BUFFER4_UDP_LEN; udpBuffer[activeUdpSocket] = udpBuffer4; udpSocket[3] = INVALID_UDP_SOCKET; } #endif p_udp_wifiram[activeUdpSocket] = udpBuffer[activeUdpSocket]; p_udp_data[activeUdpSocket] = udpBuffer[activeUdpSocket]; activeUdpSocket++; } #endif if (hFlyTask == NULL) { // Creates the task dedicated to user code xTaskCreate(FlyportTask,(signed char*) "FLY" , (configMINIMAL_STACK_SIZE * 4), NULL, tskIDLE_PRIORITY + 1, &hFlyTask); } // DEBUG code - Firmware version on UART 1 #ifdef FW_VER_ON_U1 char fwVerString[30]; tWFDeviceInfo deviceInfo; WF_GetDeviceInfo(&deviceInfo); sprintf(fwVerString,"ver.%02x%02x\n", deviceInfo.romVersion , deviceInfo.patchVersion); _dbgwrite(fwVerString); #endif //------------------------------------------------------------------------------------------- //| --- COOPERATIVE MULTITASKING LOOP --- | //------------------------------------------------------------------------------------------- while(1) { #if defined (FLYPORT_WF) if (_WFStat != TURNED_OFF) #endif { // This task performs normal stack task including checking // for incoming packet, type of packet and calling // appropriate stack entity to process it. vTaskSuspendAll(); StackTask(); xTaskResumeAll(); #if defined(STACK_USE_HTTP_SERVER) || defined(STACK_USE_HTTP2_SERVER) vTaskSuspendAll(); HTTPServer(); xTaskResumeAll(); #endif // This tasks invokes each of the core stack application tasks StackApplications(); #if defined(STACK_USE_ZEROCONF_LINK_LOCAL) ZeroconfLLProcess(); #endif #if defined(STACK_USE_ZEROCONF_MDNS_SD) mDNSProcess(); // Use this function to exercise service update function // HTTPUpdateRecord(); #endif #if defined(STACK_USE_SNMP_SERVER) && !defined(SNMP_TRAP_DISABLED) //User should use one of the following SNMP demo // This routine demonstrates V1 or V2 trap formats with one variable binding. SNMPTrapDemo(); #if defined(SNMP_STACK_USE_V2_TRAP) //This routine provides V2 format notifications with multiple (3) variable bindings //User should modify this routine to send v2 trap format notifications with the required varbinds. //SNMPV2TrapDemo(); #endif if(gSendTrapFlag) SNMPSendTrap(); #endif #if defined(STACK_USE_BERKELEY_API) BerkeleyTCPClientDemo(); BerkeleyTCPServerDemo(); BerkeleyUDPClientDemo(); #endif // Check on the queue to verify if other task have requested some stack function xStatus = xQueueReceive(xQueue,&Cmd,0); CmdCheck(); #if defined (FLYPORT_WF) // Check to verify the connection. If it's lost or failed, the device tries to reconnect switch(_WFStat) { case CONNECTION_LOST: case CONNECTION_FAILED: tick01 = TickGetDiv64K(); _WFStat = RECONNECTING; break; case RECONNECTING: tick02 = TickGetDiv64K(); if ((tick02 - tick01) >= 3) { _WFStat = CONNECTING; WF_Connect(WFConnection); } break; } // RSSI management if (myRSSI.stat == RSSI_TO_READ) { tWFScanResult rssiScan; WF_ScanGetResult(0, &rssiScan); myRSSI.value = rssiScan.rssi; myRSSI.stat = RSSI_VALID; } #endif // If the local IP address has changed (ex: due to DHCP lease change) // write the new IP address to the LCD display, UART, and Announce // service if(dwLastIP != AppConfig.MyIPAddr.Val) { dwLastIP = AppConfig.MyIPAddr.Val; _dbgwrite("\r\nNew IP Address: "); DisplayIPValue(AppConfig.MyIPAddr); _dbgwrite("\r\n"); #if defined(STACK_USE_ANNOUNCE) AnnounceIP(); #endif #if defined(STACK_USE_ZEROCONF_MDNS_SD) mDNSFillHostRecord(); #endif } } //end check turnoff } }