示例#1
0
文件: tcp.c 项目: dafyddcrosby/L4OS
/*-----------------------------------------------------------------------------------*/
void
tcp_init(void)
{
  /* initialise the TCP PCB hashtables & lists */
  tcp_pcb_init();  

  /* Register memory reclaim function */
#if MEM_RECLAIM
  mem_register_reclaim((mem_reclaim_func)tcp_mem_reclaim, NULL);
#endif /* MEM_RECLAIM */

#if MEMP_RECLAIM
  memp_register_reclaim(MEMP_PBUF, (memp_reclaim_func)tcp_memp_reclaim, NULL);
  memp_register_reclaim(MEMP_TCP_SEG, (memp_reclaim_func)tcp_memp_reclaim, NULL);
  memp_register_reclaim(MEMP_TCP_PCB, (memp_reclaim_func)tcp_memp_reclaim, NULL);
#endif /* MEMP_RECLAIM */

  /* initialize timer */
  tcp_ticks = 0;
  tcp_timer = 0;
}
示例#2
0
UINT32 WiFiService(void)
{
	static uint APScanStartTime;
    uint32 ret = -1;
    int temp;

    ////////////////////////////////////////////////////////////////////////////////////////////////
    //WIFI Scan
    if (GetMsg(MSG_WIFI_SCAN_START))
    {
		if (wl_do_escan())
		{
			SendMsg(MSG_WIFI_SCAN_ERR);
		}
		else
		{
			SendMsg(MSG_WIFI_SCAN);
			APScanStartTime = SysTickCounter;//SysTickCounter unit is 0.5ms
			printf("APScanStartTime:%d\n", APScanStartTime);
		}
    }
	
	if (CheckMsg(MSG_WIFI_SCAN))
	{
		if (GetScanEventOpen())
		{
	        if (SDC_GetSdioEvent(0) == SDC_SUCCESS)
	        { 
	            process_sdio_pending_irqs();
	        }

			/* check the scan process..*/
			temp = rk_scan_work();
			if ((temp > 0) || 
				/* check the scan timeout.*/
				(SysTickCounter > APScanStartTime + AP_SCAN_TIMEOUT))
			{
				printf("scan tout\n");
				ClearMsg(MSG_WIFI_SCAN);
				SendMsg(MSG_WIFI_SCAN_OK);
			}
		}
		else
		{
			ClearMsg(MSG_WIFI_SCAN);
		}
	}
    
    //WIFI Scan end
    ////////////////////////////////////////////////////////////////////////////////////////////////
        
    ////////////////////////////////////////////////////////////////////////////////////////////////
    if (GetMsg(MSG_WIFI_CONNECT))
    {
		int APScanclrTail;

		ClearMsg(MSG_WIFI_APPW_JUMP);
		ClearMsg(MSG_WIFI_SCAN);
		
        ModuleOverlay(MODULE_ID_WIFI_WPA,  MODULE_OVERLAY_DATA | MODULE_OVERLAY_BSS); //goto scan code
        rk_printf_save_ap();
        if (0 != rk_wifi_connect_pro(gSysConfig.WiFiConfig.ssid, 
                                     gSysConfig.WiFiConfig.password, 
                                     strlen(gSysConfig.WiFiConfig.password)))
    	{		
    		SendMsg(MSG_WIFI_CONN_FAILURE);
    	}
        else
        {
            NETIF  *netif;
        	uint32 timeout;
        	IP_ADDR3 * pIp;	
			int i;

			if (GetMsg(MSG_WIFI_NO_ENCODE))
			{
				MSG_SET_WPA_SH();
			}

	        ModuleOverlay(MODULE_ID_WIFI_LWIP, MODULE_OVERLAY_ALL);
            ModuleOverlay(MODULE_ID_WIFI_DHCP, MODULE_OVERLAY_ALL);
			for (i=0; i<3; i++)
			{
	            tcp_pcb_init();
	        	udp_pcb_init();
	        	arp_list_init();
	            netif = netif_add(NULL, NULL, NULL);
	            
	        	eth_tickinit();
	           	
	        	dhcp_start(netif);

			udp_user_use();
	            
	        	dns_init();

	        	timeout = SysTickCounter;
	        	while(1)
	        	{									  
	        		if (netif_is_up())
	        		{
	                    netif->dhcp = NULL;
	                    SendMsg(MSG_WIFI_CONN_SUCCESS);
	        			return TRUE;
	        		}
	                if(SysTickCounter > (timeout + 2000))
	                {
	        			break;
	                }        
	        		/* Ethernet data packet received procession....*/
					//printf("fle-->eth service\n");
	        		eth_service(FALSE);
	        	}  
			}
            SendMsg(MSG_WIFI_CONN_FAILURE);
        }
    }

    if (CheckMsg(MSG_WIFI_TCP_CONNECTING))
    {       
    
        UserIsrDisable();

    		eth_service(0);

        UserIsrEnable(1);
    }

	if(CheckMsg(MSG_QPW_ENABLE)) {
		QpwNumber++;
		if(QpwNumber > 0x780000) {  // 1 min
			QpwNumber = 0;
			upload_connect(C_QPW);
		}
	}
    
	return ret;
}