/***************************************************************************** * FUNCTION: WF_Init * * RETURNS: true if success * false otherwise * * PARAMS: * N/A. * * * NOTES: This function must be called once prior to calling any other WF... * functions. This function initializes the Wifi Driver internal State. * It also verifies functionality of the lower level SPI driver and * connected hardware. *****************************************************************************/ bool WF_Init(const void* pNetIf) { tWFDeviceInfo deviceInfo; if(!WFHardwareInit()) { return false; } RawInit(); WFEnableMRF24WMode(); WF_GetDeviceInfo(&deviceInfo); // if MRF24W if (deviceInfo.deviceType == MRF24WB0M_DEVICE) { SYS_ASSERT(deviceInfo.romVersion == 0x12, ""); SYS_ASSERT(deviceInfo.patchVersion >= 0x02, ""); if (deviceInfo.romVersion == 0x12 && deviceInfo.patchVersion >= 0x09) { gRFModuleVer1209orLater = true; } } /* send init messages to MRF24W */ WF_LibInitialize((NET_CONFIG*)pNetIf); #if defined(WF_CONSOLE) WFConsoleInit(); #if defined(APP_USE_IPERF) // IperfConsoleInit(); IperfAppInit("MRF24W"); #endif #endif // save network handle SetNetworkConfig((NET_CONFIG *)pNetIf); return true; }
/***************************************************************************** * FUNCTION: WF_Init * * RETURNS: None * * PARAMS: * N/A. * * * NOTES: This function must be called once prior to calling any other WF... * functions. This function initializes the Wifi Driver internal State. * It also verifies functionality of the lower level SPI driver and * connected hardware. *****************************************************************************/ void WF_Init(void) { tWFDeviceInfo deviceInfo; WFHardwareInit(); RawInit(); WFEnableMRF24WB0MMode(); WF_GetDeviceInfo(&deviceInfo); // if MRF24WB #if !defined(MRF24WG) WF_ASSERT(deviceInfo.romVersion == 0x12); WF_ASSERT(deviceInfo.patchVersion >= 0x02); if (deviceInfo.romVersion == 0x12 && deviceInfo.patchVersion >= 0x09) { gRFModuleVer1209orLater = TRUE; } #else // must be a MRF24WG WF_ASSERT(deviceInfo.romVersion == 0x30 || deviceInfo.romVersion == 0x31); #endif /* send init messages to MRF24W */ WF_LibInitialize(); #if defined(WF_CONSOLE) WFConsoleInit(); #if defined(WF_CONSOLE_DEMO) IperfAppInit(); #endif #endif if(DHCPIsEnabled(0)) { SetDhcpProgressState(); } }
// // Main application entry point. // int main(void) { #if defined(APP_USE_IPERF) static uint8_t iperfOk = 0; #endif static SYS_TICK startTick = 0; static IP_ADDR dwLastIP[sizeof (TCPIP_HOSTS_CONFIGURATION) / sizeof (*TCPIP_HOSTS_CONFIGURATION)]; uint8_t i; // perform system initialization if(!SYS_Initialize()) { return 0; } SYS_CONSOLE_MESSAGE("\r\n\n\n --- Unified TCPIP Demo Starts! --- \r\n"); SYS_OUT_MESSAGE("TCPStack " TCPIP_STACK_VERSION " "" "); #if defined(TCPIP_STACK_USE_MPFS) || defined(TCPIP_STACK_USE_MPFS2) MPFSInit(); #endif // Initiates board setup process if button is depressed // on startup if(BUTTON0_IO == 0u) { #if defined(TCPIP_STACK_USE_STORAGE) && (defined(SPIFLASH_CS_TRIS) || defined(EEPROM_CS_TRIS)) // Invalidate the EEPROM contents if BUTTON0 is held down for more than 4 seconds SYS_TICK StartTime = SYS_TICK_Get(); LED_PUT(0x00); while(BUTTON0_IO == 0u) { if(SYS_TICK_Get() - StartTime > 4*SYS_TICK_TicksPerSecondGet()) { TCPIP_STORAGE_HANDLE hStorage; // just in case we execute this before the stack is initialized TCPIP_STORAGE_Init(0); hStorage = TCPIP_STORAGE_Open(0, false); // no refresh actually needed if(hStorage) { TCPIP_STORAGE_Erase(hStorage); SYS_CONSOLE_MESSAGE("\r\n\r\nBUTTON0 held for more than 4 seconds. Default settings restored.\r\n\r\n"); TCPIP_STORAGE_Close(hStorage); } else { SYS_ERROR(SYS_ERROR_WARN, "\r\n\r\nCould not restore the default settings!!!.\r\n\r\n"); } TCPIP_STORAGE_DeInit(0); LED_PUT(0x0F); // wait 4.5 seconds here then reset while((SYS_TICK_Get() - StartTime) <= (9*SYS_TICK_TicksPerSecondGet()/2)); LED_PUT(0x00); while(BUTTON0_IO == 0u); SYS_Reboot(); break; } } #endif // defined(TCPIP_STACK_USE_STORAGE) && (defined(SPIFLASH_CS_TRIS) || defined(EEPROM_CS_TRIS)) } // Initialize the TCPIP stack if(!TCPIP_STACK_Init(TCPIP_HOSTS_CONFIGURATION, sizeof(TCPIP_HOSTS_CONFIGURATION)/sizeof(*TCPIP_HOSTS_CONFIGURATION), TCPIP_STACK_MODULE_CONFIG_TBL, sizeof(TCPIP_STACK_MODULE_CONFIG_TBL)/sizeof(*TCPIP_STACK_MODULE_CONFIG_TBL) )) { return 0; } #if defined(TCPIP_STACK_USE_TELNET_SERVER) TelnetRegisterCallback(ProcessIO); #endif // defined(TCPIP_STACK_USE_TELNET_SERVER) #if defined (TCPIP_STACK_USE_IPV6) TCPIP_ICMPV6_RegisterCallback (ICMPv6Callback); #endif #if defined(TCPIP_STACK_USE_ICMP_CLIENT) || defined(TCPIP_STACK_USE_ICMP_SERVER) ICMPRegisterCallback (PingProcessIPv4); #endif #if defined(TCPIP_STACK_USE_EVENT_NOTIFICATION) TCPIP_NET_HANDLE hWiFi = TCPIP_STACK_NetHandle("MRF24W"); if(hWiFi) { TCPIP_STACK_SetNotifyEvents(hWiFi, TCPIP_EV_RX_ALL|TCPIP_EV_TX_ALL|TCPIP_EV_RXTX_ERRORS); TCPIP_STACK_SetNotifyHandler(hWiFi, StackNotification, 0); } #endif // defined(TCPIP_STACK_USE_EVENT_NOTIFICATION) #if defined(APP_USE_IPERF) IperfConsoleInit(); iperfOk = IperfAppInit(TCPIP_HOSTS_CONFIGURATION[0].interface); #endif // Now that all items are initialized, begin the co-operative // multitasking loop. This infinite loop will continuously // execute all stack-related tasks, as well as your own // application's functions. Custom functions should be added // at the end of this loop. // Note that this is a "co-operative mult-tasking" mechanism // where every task performs its tasks (whether all in one shot // or part of it) and returns so that other tasks can do their // job. // If a task needs very long time to do its job, it must be broken // down into smaller pieces so that other tasks can have CPU time. while(1) { // Blink LED0 (right most one) every second. if(SYS_TICK_Get() - startTick >= SYS_TICK_TicksPerSecondGet()/2ul) { startTick = SYS_TICK_Get(); LED0_IO ^= 1; } // This task performs normal stack task including checking // for incoming packet, type of packet and calling // appropriate stack entity to process it. TCPIP_STACK_Task(); // Process application specific tasks here. // For this demo app, this will include the Generic TCP // client and servers, and the SNMP, Ping, and SNMP Trap // demos. Following that, we will process any IO from // the inputs on the board itself. // Any custom modules or processing you need to do should // go here. #if defined(TCPIP_STACK_USE_GENERIC_TCP_CLIENT_EXAMPLE) GenericTCPClient(); #endif #if defined(TCPIP_STACK_USE_GENERIC_TCP_SERVER_EXAMPLE) GenericTCPServer(); #endif #if defined(TCPIP_STACK_USE_SMTP_CLIENT) SMTPDemo(); #endif #if defined(TCPIP_STACK_USE_ICMP_CLIENT) || defined (TCPIP_STACK_USE_ICMP_SERVER) || defined (TCPIP_STACK_USE_IPV6) // use ping on the default interface PingDemoTask(); #endif #if defined(TCPIP_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) || defined(SNMP_V1_V2_TRAP_WITH_SNMPV3) //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(TCPIP_STACK_USE_BERKELEY_API) BerkeleyTCPClientDemo(); BerkeleyTCPServerDemo(); BerkeleyUDPClientDemo(0); #endif #if defined(APP_USE_IPERF) IperfConsoleProcess(); if (iperfOk) IperfAppCall(); // Only running in case of init succeed IperfConsoleProcessEpilogue(); #endif // If the local IP address has changed (ex: due to DHCP lease change) // write the new IP address to the console display, UART, and Announce // service // We use the default interface for (i = 0; i < sizeof(TCPIP_HOSTS_CONFIGURATION)/sizeof(*TCPIP_HOSTS_CONFIGURATION); i++) { TCPIP_NET_HANDLE netH = TCPIP_STACK_NetHandle(TCPIP_HOSTS_CONFIGURATION[i].interface); if((uint32_t)dwLastIP[i].Val != TCPIP_STACK_NetAddress(netH)) { dwLastIP[i].Val = TCPIP_STACK_NetAddress(netH); SYS_CONSOLE_MESSAGE(TCPIP_HOSTS_CONFIGURATION[i].interface); SYS_CONSOLE_MESSAGE(" new IP Address: "); DisplayIPValue(dwLastIP[i]); SYS_CONSOLE_MESSAGE("\r\n"); } } #if defined(TCPIP_STACK_USE_EVENT_NOTIFICATION) if(stackNotifyCnt) { stackNotifyCnt = 0; ProcessNotification(stackNotifyHandle); } #endif // defined(TCPIP_STACK_USE_EVENT_NOTIFICATION) } }