示例#1
0
文件: OS_IP_Shell.c 项目: agb861/ddd
void MainTask(void) {
  IP_Init();
  OS_SetPriority(OS_GetTaskID(), 255);                                      // This task has highest prio for real-time application
  OS_CREATETASK(&_TCB     , "IP_Task"  , IP_Task       , 150, _Stack);      // Start the IP task
#if USE_RX_TASK
  OS_CREATETASK(&_IPRxTCB , "IP_RxTask", IP_RxTask     , 140, _IPRxStack);  // Start the IP_RxTask, optional.
#endif
  OS_CREATETASK(&_TCBShell, "Shell"    , IP_ShellServer, 100, _StackShell); // Start the shell server

  while (IP_IFaceIsReady() == 0) {
    OS_Delay(50);
  }
  while (1) {
    BSP_ToggleLED(1);
    OS_Delay (200);
  }
}
示例#2
0
文件: rtpnet.c 项目: maojxsir/upnp
/*----------------------------------------------------------------------*
                          rtp_net_connect
 *----------------------------------------------------------------------*/
int rtp_net_connect (RTP_HANDLE sockHandle, 
                     unsigned char *ipAddr, 
                     int port, int type)
{
    int sinLen;
    struct sockaddr_in sin;
    unsigned long in_addr = 0;
	int connectStatus;

    sinLen = sizeof(sin);
    memset(&sin, 0, sinLen);

    if (ipAddr)
    {
        unsigned char *ptr = (unsigned char *) &in_addr;

        ptr[0] = ipAddr[0];
        ptr[1] = ipAddr[1];
        ptr[2] = ipAddr[2];
        ptr[3] = ipAddr[3];
    }
    else
    {
        /* invalid address */
        return (-1);
    }

    sin.sin_family = AF_INET;
    sin.sin_addr.s_addr = in_addr;
    sin.sin_port = htons((unsigned short)port);

#ifdef DO_IFACE_CHECK
	while (IP_IFaceIsReady() == 0) {
	OS_Delay(100);
	}
#endif
	
	connectStatus = connect((int) sockHandle, ( struct sockaddr *) &sin, sinLen);
    if (connectStatus != 0)
    {
	  int errVal = _rtp_get_last_socket_error(sockHandle);
	  
        if ((errVal == EINPROGRESS) || 
            (errVal == EWOULDBLOCK) ||
            (errVal == EALREADY) ||
            (errVal == EISCONN))
        {
#ifdef RTP_DEBUG
            RTP_DEBUG_OUTPUT_STR("rtp_net_connect: non-fatal error returned ");
            RTP_DEBUG_OUTPUT_INT(errVal);
            RTP_DEBUG_OUTPUT_STR(".\n");
#endif
            return (-2);
        }
#ifdef RTP_DEBUG
        RTP_DEBUG_OUTPUT_STR("rtp_net_connect: error returned ");
        RTP_DEBUG_OUTPUT_INT(errVal);
        RTP_DEBUG_OUTPUT_STR(".\n");
#endif
        return (-1);
    }

    return (0);
}
示例#3
0
文件: rtpnet.c 项目: maojxsir/upnp
/*----------------------------------------------------------------------*
                           rtp_net_accept
 *----------------------------------------------------------------------*/
int rtp_net_accept (RTP_HANDLE *connectSock, RTP_HANDLE serverSock, 
                    unsigned char *ipAddr, int *port, int *type)
{
    struct sockaddr_in clientAddr;
    int clientLen;
    int conSocket;

    clientLen = sizeof(clientAddr);
    memset(&clientAddr, 0, clientLen);

#ifdef DO_IFACE_CHECK
	while (IP_IFaceIsReady() == 0) {
	OS_Delay(100);
	}
#endif
	
    conSocket = accept((int) serverSock, (struct sockaddr *) &clientAddr, &clientLen);

    if (conSocket == -1)
    {
		int errVal = _rtp_get_last_socket_error(serverSock);
	  
        *connectSock = ((RTP_HANDLE)-1);
        /* The man page for accept(2) indicates that due to Linux
           passing already-pending errors through accept, the following
           TCP/IP errors should be treated as EAGAIN:
           ENETDOWN, EPROTO, ENOPROTOOPT, EHOSTDOWN, ENONET,
           EHOSTUNREACH, EOPNOTSUPP, and ENETUNREACH. */
        if (//(errVal == EAGAIN) || 
            (errVal == EWOULDBLOCK) ||
            //(errVal == EINTR) ||
            //(errVal == ENETDOWN) ||
            //(errVal == EPROTO) ||
            (errVal == ENOPROTOOPT) ||
            //(errVal == EHOSTDOWN) ||
            //(errVal == ENONET) ||
            //(errVal == EHOSTUNREACH) ||
            (errVal == EOPNOTSUPP) ||
            (errVal == ENETUNREACH))
        {
#ifdef RTP_DEBUG
            RTP_DEBUG_OUTPUT_STR("rtp_net_accept: non-fatal error returned ");
            RTP_DEBUG_OUTPUT_INT(errVal);
            RTP_DEBUG_OUTPUT_STR(".\n");
#endif
            return (-2);
        }
#ifdef RTP_DEBUG
        RTP_DEBUG_OUTPUT_STR("rtp_net_accept: error returned ");
        RTP_DEBUG_OUTPUT_INT(errVal);
        RTP_DEBUG_OUTPUT_STR(".\n");
#endif
        return (-1);
    }

    *connectSock = (RTP_HANDLE)conSocket;
    
    if (ipAddr)
    {
        unsigned long d = clientAddr.sin_addr.s_addr;
        unsigned char *ptr = (unsigned char *) &d;
        
        *type = RTP_NET_TYPE_IPV4;
        
        ipAddr[0] = ptr[0];
        ipAddr[1] = ptr[1];
        ipAddr[2] = ptr[2];
        ipAddr[3] = ptr[3];
    }

    if (port)
    {
        *port = ntohs(clientAddr.sin_port);       
    }
    
    return (0);
}