/********************************************************************* * Function: void StackInit(void) * * PreCondition: None * * Input: None * * Output: Stack and its componets are initialized * * Side Effects: None * * Note: This function must be called before any of the * stack or its component routines are used. * ********************************************************************/ void StackInit(void) { smStack = SM_STACK_IDLE; #if defined(STACK_USE_IP_GLEANING) || defined(STACK_USE_DHCP_CLIENT) /* * If DHCP or IP Gleaning is enabled, * startup in Config Mode. */ AppConfig.Flags.bInConfigMode = TRUE; #endif // Seed the rand() function srand(GenerateRandomDWORD()); MACInit(); #if defined( ZG_CS_TRIS ) #if defined(ZG_CONFIG_LINKMGRII) ZGLibInitialize(); ZGLinkMgrInit(); #endif #endif ARPInit(); #if defined(STACK_USE_UDP) UDPInit(); #endif #if defined(STACK_USE_TCP) TCPInit(); #endif #if defined(STACK_USE_BERKELEY_API) BerkeleySocketInit(); #endif #if defined(STACK_USE_HTTP_SERVER) || defined(STACK_USE_HTTP2_SERVER) HTTPInit(); #endif #if defined(STACK_USE_RSA) RSAInit(); #endif #if defined(STACK_USE_SSL) SSLInit(); #endif #if defined(STACK_USE_FTP_SERVER) && defined(STACK_USE_MPFS) FTPInit(); #endif #if defined(STACK_USE_SNMP_SERVER) SNMPInit(); #endif #if defined(STACK_USE_DHCP_CLIENT) DHCPInit(0); if(!AppConfig.Flags.bIsDHCPEnabled) { DHCPDisable(0); } #endif #if defined(STACK_USE_DYNAMICDNS_CLIENT) DDNSInit(); #endif }
/***************************************************************************** FUNCTION TCPIPTask Main function to handle the TCPIP stack RETURNS None PARAMS None *****************************************************************************/ void TCPIPTask() { WFConnection = WF_CUSTOM; ConnectionProfileID = 0; static DWORD dwLastIP = 0; WFStatus = NOT_CONNECTED; dwLastIP = 0; // Function pointers for the callback function of the TCP/IP and WiFi stack #if defined (FLYPORT) FP[1] = cWFConnect; FP[2] = cWFDisconnect; FP[3] = cWFScan; FP[5] = cWFPsPollDisable; FP[6] = cWFPsPollEnable; FP[7] = cWFScanList; FP[10] = cWFStopConnecting; #endif #if defined (FLYPORTETH) FP[1] = cETHRestart; #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; #endif // Initialize stack-related hardware components that may be // required by the UART configuration routines // Initialization of tick only at the startup of the device if (hFlyTask == NULL) { TickInit(); } #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) if (WFStatus == CONNECTION_LOST) WF_Connect(WFConnection); #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 #if defined (STACK_USE_UART) UARTWrite(1, "Initializing UDP...\r\n"); #endif 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); } //------------------------------------------------------------------------------------------- //| --- COOPERATIVE MULTITASKING LOOP --- | //------------------------------------------------------------------------------------------- while(1) { #if defined (FLYPORT) if (WFStatus != TURNED_OFF) { // Check to verify the connection. If it's lost or failed, the device tries to reconnect if ((WFStatus == CONNECTION_LOST) || (WFStatus == CONNECTION_FAILED)) WF_Connect(WFConnection); #else { #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 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; #if defined(STACK_USE_UART) UARTWrite(1,"\r\nNew IP Address: "); #endif DisplayIPValue(AppConfig.MyIPAddr); #if defined(STACK_USE_UART) UARTWrite(1,"\r\n"); #endif #if defined(STACK_USE_ANNOUNCE) AnnounceIP(); #endif #if defined(STACK_USE_ZEROCONF_MDNS_SD) mDNSFillHostRecord(); #endif } } //end check turnoff } }
/********************************************************************* * Function: void StackInit(void) * * PreCondition: None * * Input: None * * Output: Stack and its componets are initialized * * Side Effects: None * * Note: This function must be called before any of the * stack or its component routines are used. * ********************************************************************/ void StackInit(void) { static bool once = false; smStack = SM_STACK_IDLE; #if defined(STACK_USE_IP_GLEANING) || defined(STACK_USE_DHCP_CLIENT) /* * If DHCP or IP Gleaning is enabled, * startup in Config Mode. */ AppConfig.Flags.bInConfigMode = true; #endif #if defined (WF_CS_TRIS) && defined (STACK_USE_DHCP_CLIENT) g_DhcpRenew = false; g_DhcpRetryTimer = 0; #endif if (!once) { // Seed the LFSRRand() function LFSRSeedRand(GenerateRandomDWORD()); once = true; } MACInit(); #if defined(WF_CS_TRIS) && defined(STACK_USE_EZ_CONFIG) && !defined(__XC8) WFEasyConfigInit(); #endif ARPInit(); #if defined(STACK_USE_ANNOUNCE) AnnounceInit(); #endif #if defined(STACK_USE_UDP) UDPInit(); #endif #if defined(STACK_USE_TCP) TCPInit(); #endif #if defined(STACK_USE_BERKELEY_API) BerkeleySocketInit(); #endif #if defined(STACK_USE_HTTP2_SERVER) HTTPInit(); #endif #if defined(STACK_USE_RSA) RSAInit(); #endif #if defined(STACK_USE_SSL) SSLInit(); #endif #if defined(STACK_USE_FTP_SERVER) && defined(STACK_USE_MPFS2) FTPInit(); #endif #if defined(STACK_USE_DHCP_CLIENT) DHCPInit(0); if(!AppConfig.Flags.bIsDHCPEnabled) { DHCPDisable(0); } #endif #if defined(STACK_USE_AUTO_IP) AutoIPInit(0); #endif #if defined(STACK_USE_DYNAMICDNS_CLIENT) DDNSInit(); #endif #if defined(STACK_USE_RANDOM) RandomInit(); #endif #if defined(STACK_USE_NBNS) NBNSInit(); #endif }
/********************************************************************* * Function: void StackInit(void) * * PreCondition: None * * Input: None * * Output: Stack and its componets are initialized * * Side Effects: None * * Note: This function must be called before any of the * stack or its component routines are used. * ********************************************************************/ void StackInit(void) { static BOOL once = FALSE; smStack = SM_STACK_IDLE; #if defined(STACK_USE_IP_GLEANING) || defined(STACK_USE_DHCP_CLIENT) /* * If DHCP or IP Gleaning is enabled, * startup in Config Mode. */ AppConfig.Flags.bInConfigMode = TRUE; #endif #if defined (WF_CS_TRIS) && defined (STACK_USE_DHCP_CLIENT) g_DhcpRenew = FALSE; g_DhcpRetryTimer = 0; #endif if (!once) { // Seed the LFSRRand() function LFSRSeedRand(GenerateRandomDWORD()); once = TRUE; } MACInit(); #if defined (WF_AGGRESSIVE_PS) && defined (WF_CS_TRIS) WFEnableAggressivePowerSave(); #endif #if defined(WF_CS_TRIS) && defined(STACK_USE_EZ_CONFIG) && !defined(__18CXX) WFEasyConfigInit(); #endif ARPInit(); #if defined(STACK_USE_UDP) UDPInit(); #endif #if defined(STACK_USE_TCP) TCPInit(); #endif #if defined(STACK_USE_BERKELEY_API) BerkeleySocketInit(); #endif #if defined(STACK_USE_HTTP2_SERVER) HTTPInit(); #endif #if defined(STACK_USE_RSA) RSAInit(); #endif #if defined(STACK_USE_SSL) SSLInit(); #endif #if defined(STACK_USE_FTP_SERVER) && defined(STACK_USE_MPFS2) FTPInit(); #endif #if defined(STACK_USE_SNMP_SERVER) SNMPInit(); #endif #if defined(STACK_USE_DHCP_CLIENT) DHCPInit(0); if(!AppConfig.Flags.bIsDHCPEnabled) { DHCPDisable(0); } #endif #if defined(STACK_USE_AUTO_IP) AutoIPInit(0); #endif #if defined(STACK_USE_DYNAMICDNS_CLIENT) DDNSInit(); #endif #if defined(STACK_USE_RANDOM) RandomInit(); #endif }
/********************************************************************* * Function: void StackInit(void) * * PreCondition: None * * Input: None * * Output: Stack and its componets are initialized * * Side Effects: None * * Note: This function must be called before any of the * stack or its component routines are used. * ********************************************************************/ void StackInit(void) { smStack = SM_STACK_IDLE; #if defined(STACK_USE_IP_GLEANING) || defined(STACK_USE_DHCP_CLIENT) /* * If DHCP or IP Gleaning is enabled, * startup in Config Mode. */ AppConfig.Flags.bInConfigMode = TRUE; #endif // Seed the LFSRRand() function LFSRSeedRand(GenerateRandomDWORD()); MACInit(); #if defined(WF_CS_TRIS) && defined(STACK_USE_EZ_CONFIG) && !defined(__18CXX) WFEasyConfigInit(); #endif ARPInit(); #if defined(STACK_USE_UDP) UDPInit(); #endif #if defined(STACK_USE_TCP) TCPInit(); #endif #if defined(STACK_USE_BERKELEY_API) BerkeleySocketInit(); #endif #if defined(STACK_USE_HTTP2_SERVER) HTTPInit(); #endif #if defined(STACK_USE_RSA) RSAInit(); #endif #if defined(STACK_USE_SSL) SSLInit(); #endif #if defined(STACK_USE_FTP_SERVER) && defined(STACK_USE_MPFS2) FTPInit(); #endif #if defined(STACK_USE_SNMP_SERVER) SNMPInit(); #endif #if defined(STACK_USE_DHCP_CLIENT) AppConfig.Flags.bIsDHCPEnabled = TRUE; DHCPInit(0); #endif #if defined(STACK_USE_AUTO_IP) AutoIPInit(0); #endif #if defined(STACK_USE_DYNAMICDNS_CLIENT) DDNSInit(); #endif #if defined(STACK_USE_RANDOM) RandomInit(); #endif }