Beispiel #1
0
/**
*@brief		TCP模式初始化  客户端   默认连接三次,三次连接不上,返回Fail
*@param   无
*@return	无
*/
u8 RJ45_1_TCP_ClientInit(void)
{
	u8 i,j=0;
	RJ45_1_Write_Register(SIMR,1<<0); //允许SOCKET0产生中断                  
	RJ45_1_Write_Register(Sn_IMR(0) ,Sn_IR_RECV|Sn_IR_DISCON|Sn_IR_CON); //设置中断屏蔽寄存器
	CloseSocket_RJ45_1();
	RJ45_1_Write_Register(Sn_MR(0),Sn_MR_TCP|Sn_MR_ND);      //tcp模式,无延时
	WriteTem[0]=RJ45_1_Loc_Potr/256;
	WriteTem[1]=RJ45_1_Loc_Potr%256;
	RJ45_1_Write_Buf(Sn_PORT0(0),WriteTem,2);      //设置端口号
  WriteTem[0]=RJ45_1_Dir_Port/256;
	WriteTem[1]=RJ45_1_Dir_Port%256;
	RJ45_1_Write_Buf(Sn_DPORT0(0),WriteTem,2);     //设置目标服务器端口号
	RJ45_1_Write_Buf(Sn_DIPR0(0),RJ45_1_DirIP,4);  //目标服务器IP地址
	RJ45_1_Write_Register(Sn_KPALVTR(0),1);        //每5s自动检测一次连接状态
  Init1:	RJ45_1_Write_Register(Sn_CR(0),Sn_CR_OPEN);
	for(i=0;i<20;i++);
	while(RJ45_1_Read_Register(Sn_CR(0)))   	/*Wait to process the command*/
	{
		for(i=0;i<20;i++);       
	}
	if(RJ45_1_Read_Register(Sn_SR(0))!=SOCK_INIT)   //检测网口开启状态
	{
		j++;
		if(j<10)
		{
			CloseSocket_RJ45_1();
			goto Init1;
		}
		else
		{
			CloseSocket_RJ45_1();
			return Fail;
		}
	}
	
	RJ45_1_Write_Register(Sn_CR(0),Sn_CR_CONNECT);   //开启连接
	RJ45_1_Read_Buf(Sn_DIPR0(0),RJ45_1_DirIP,4);
	while(RJ45_1_Read_Register(Sn_CR(0)))   	/*Wait to process the command*/
	{ 
	}
	while(RJ45_1_Read_Register(Sn_SR(0))!=SOCK_SYNSENT)
	{
		if(RJ45_1_Read_Register(Sn_SR(0))==SOCK_ESTABLISHED)
		{
			return Success;
		}
		if(RJ45_1_Read_Register(Sn_IR(0))& Sn_IR_TIMEOUT)
		{
			RJ45_1_Write_Register(Sn_IR(0),Sn_IR_TIMEOUT);
			return Fail;
		}
	}
}
Beispiel #2
0
/**
@brief	This function established	the connection for the channel in Active (client) mode. 
		This function waits for the untill the connection is established.
		
@return	1 for success else 0.
*/ 
uint8 connect(SOCKET s, uint8 * addr, uint16 port)
{
	uint8 ret;
#ifdef __DEF_IINCHIP_DBG__
	printf("connect()\r\n");
#endif

	if 
		(
			((addr[0] == 0xFF) && (addr[1] == 0xFF) && (addr[2] == 0xFF) && (addr[3] == 0xFF)) ||
			((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
			(port == 0x00) 
		) 
	{
		ret = 0;
#ifdef __DEF_IINCHIP_DBG__
	printf("Fail[invalid ip,port]\r\n");
#endif
	}
	else
	{
		ret = 1;
		// set destination IP
		wiz_write_buf(Sn_DIPR0(s), addr,4);
		wiz_write_word(Sn_DPORT0(s),port);
		wiz_write_byte(Sn_CR(s),Sn_CR_CONNECT);
		/* m2008.01 [bj] :  wait for completion */
		while ( wiz_read_byte(Sn_CR(s)) ) ;
	}

	return ret;
}
Beispiel #3
0
// return values:
// 1 on success
// 0 otherwise
int EthernetDNSClass::_startDNSSession()
{
   (void)this->_closeDNSSession();
   
   int i;
   for (i = NUM_SOCKETS-1; i>=0; i--)
      if (SOCK_CLOSED == IINCHIP_READ(Sn_SR(i))) {
         if (socket(i, Sn_MR_UDP, DNS_CLIENT_PORT, 0) > 0) {
            this->_socket = i;
            break;
         }
      }

   if (this->_socket < 0)
      return 0;
	
	uint16 port = DNS_SERVER_PORT;

   for (i=0; i<4; i++)
      IINCHIP_WRITE((Sn_DIPR0(this->_socket) + i), this->_dnsData.serverIpAddr[i]);

   IINCHIP_WRITE(Sn_DPORT0(this->_socket), (uint8)((port & 0xff00) >> 8));
   IINCHIP_WRITE((Sn_DPORT0(this->_socket) + 1), (uint8)(port & 0x00ff));
   
   return 1;
}
Beispiel #4
0
/*----------- TCP Server Routine ------------*/
void ProcessTcpServer(SOCKET mSocket, uint16 port) {
  // if len is not volatile, it will overflow
  // and causes 'cstack' overstack error
  volatile uint16_t len;
  
  getSn = getSn_SR(mSocket);
  
  switch (getSn_SR(mSocket)) {
    case SOCK_ESTABLISHED:
      if(ch_status[mSocket] == 0) {
        printf("\r\n------------------------");
        printf("\r\nSocket No. %d : Connected", mSocket);
        
        printf("\r\n - Peer IP : %d.%d.%d.%d", 
               IINCHIP_READ(Sn_DIPR0(mSocket)+0), IINCHIP_READ(Sn_DIPR0(mSocket)+1), 
               IINCHIP_READ(Sn_DIPR0(mSocket)+2), IINCHIP_READ(Sn_DIPR0(mSocket)+3));
        
        printf("\r\n - Peer Port : %d", 
               ( (uint16)(IINCHIP_READ(Sn_DPORT0(mSocket)+0)<<8) + 
                 (uint16)IINCHIP_READ(Sn_DPORT0(mSocket)+1)) );
        
        printf("\r\n - Source Port : %d", IINCHIP_READ(Sn_PORT0(mSocket)));
        
        ch_status[mSocket] = 1;
      }
      
      /* check Rx data and set flags only when there's valid character recognized */
      if ((len = getSn_RX_RSR(mSocket)) > 0) {
        /* if Rx data size is lager than TX_RX_MAX_BUF_SIZE */
        /* the data size to read is MAX_BUF_SIZE. */
        if (len > TX_RX_MAX_BUF_SIZE) len = TX_RX_MAX_BUF_SIZE;
        
        switch(mSocket) {
        case SOCK_ZERO : E1Flag = true; break;  // EQ-DAQ-01 board
        case SOCK_ONE : E2Flag = true; break;   // EQ-DAQ-02 board
        case SOCK_TWO : PCFlag = true; break;   // PC Client
        default : break;
        }
        
        /* prevent from overflowing */
        len = recv(mSocket, RX_BUF, len);
      }
      
      break;
      
  case SOCK_CLOSE_WAIT:
      E1Flag = false; // Reset E1 flag
      E2Flag = false; // Reset E2 flag
      PCFlag = false; // Reset PC flag
      printf("\r\nSocket No. %d : CLOSE_WAIT", mSocket);
      
      // disconnect and set status
      disconnect(mSocket);
      ch_status[mSocket] = 0;
      break;
    
  case SOCK_INIT:
      lis = listen(mSocket);
      break;
      
  case SOCK_CLOSED:      
    //reinitialize the socket
    if(socket(mSocket, Sn_MR_TCP, port ,0x00) == 0) {
      printf("Fail to create socket.");
    } else {
      E1Flag = false; // Reset E1 flag
      E2Flag = false; // Reset E2 flag
      PCFlag = false; // Reset PC flag
      lis = listen(mSocket);
    }
    break;
  }
}
Beispiel #5
0
/*----------- TCP Server Routine ------------*/
void ProcessTcpSever(SOCKET mSocket, uint16 port) {
  // if len is not volatile, it will overflow
  // and causes 'cstack' overstack error
  volatile uint16_t len;
  
  getSn = getSn_SR(mSocket);
  
  switch (getSn_SR(mSocket)) {  
    case SOCK_ESTABLISHED:
      if(ch_status[mSocket] == 0) {
        printf("\r\n------------------------");
        printf("\r\nSocket No. %d : Connected", mSocket);
        
        printf("\r\n - Peer IP : %d.%d.%d.%d", 
               IINCHIP_READ(Sn_DIPR0(mSocket)+0), IINCHIP_READ(Sn_DIPR0(mSocket)+1), 
               IINCHIP_READ(Sn_DIPR0(mSocket)+2), IINCHIP_READ(Sn_DIPR0(mSocket)+3));
        
        printf("\r\n - Peer Port : %d", 
               ( (uint16)(IINCHIP_READ(Sn_DPORT0(mSocket)+0)<<8) + 
                 (uint16)IINCHIP_READ(Sn_DPORT0(mSocket)+1)) );
        
        printf("\r\n - Source Port : %d", IINCHIP_READ(Sn_PORT0(mSocket)));
        
        ch_status[mSocket] = 1;
      }
      
      /* check Rx data */
      if ((len = getSn_RX_RSR(mSocket)) > 0) {
        /* if Rx data size is lager than TX_RX_MAX_BUF_SIZE */
        /* the data size to read is MAX_BUF_SIZE. */
        if (len > TX_RX_MAX_BUF_SIZE) len = TX_RX_MAX_BUF_SIZE;

        /* read the received data */
        len = recv(mSocket, RX_BUF, len);
        RSR_len = len;
        
        if(mSocket == EQ_ONE) {
          
        }
        
        // start send those data
        SendFlag = True;
        
        /* send the received data */
        //send(mSocket, RX_BUF, len, (bool)False);
      }

      /* send the received data */
      //send(SOCK_TCPS, data_buf, len);
      
      break;
      
  case SOCK_CLOSE_WAIT:
      SendFlag = False; // Reset flag
      printf("\r\nSocket No. %d : CLOSE_WAIT", mSocket);
      
      // disconnect and set status
      disconnect(mSocket);
      ch_status[mSocket] = 0;
      break;
    
  case SOCK_INIT:
      lis = listen(mSocket);
      break;
      
  case SOCK_CLOSED:      
    //reinitialize the socket
    if(socket(mSocket, Sn_MR_TCP, port ,0x00) == 0) {
      printf("Fail to create socket.");
    } else {
      SendFlag = False; // Reset flag
      lis = listen(mSocket);
    }
    break;
  }
}
Beispiel #6
0
/**
@brief	This function is an application I/F function which is used to send the data for other then TCP mode. 
		Unlike TCP transmission, The peer's destination address and the port is needed.
		
@return	This function return send data size for success else -1.
*/ 
uint16 sendto(
	SOCKET s,		/**< socket index */
	const uint8 * buf,	/**< a pointer to the data */
	uint16 len,			/**< the data size to send */
	uint8 * addr,		/**< the peer's Destination IP address */
	uint16 port		/**< the peer's destination port number */
	)
{
	uint16 ret=0;
	
	if (len > IINCHIP_TxMAX) ret = IINCHIP_TxMAX; // check size not to exceed MAX size.
	else ret = len;

	if
		(
			((addr[0] == 0x00) && (addr[1] == 0x00) && (addr[2] == 0x00) && (addr[3] == 0x00)) ||
			((port == 0x00)) ||(ret == 0)
		) 
	{
		/* +2008.01 [bj] : added return value */
		ret = 0;
	}
	else
	{
		wiz_write_buf(Sn_DIPR0(s),addr,4);
		wiz_write_word(Sn_DPORT0(s),port);
		send_data_processing(s, (uint8 *)buf, ret);
		
/* +2008.01 bj */ 
#ifdef __DEF_IINCHIP_INT__
		while ( (getISR(s) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK ) 
#else
		while ( (wiz_read_byte(Sn_IR(s)) & Sn_IR_SEND_OK) != Sn_IR_SEND_OK ) 
#endif
		{
#ifdef __DEF_IINCHIP_INT__
			if (getISR(s) & Sn_IR_TIMEOUT)
#else
			if (wiz_read_byte(Sn_IR(s)) & Sn_IR_TIMEOUT)
#endif
			{
#ifdef __DEF_IINCHIP_DBG__
				printf("send fail.\r\n");
#endif
/* +2008.01 [bj]: clear interrupt */
#ifdef __DEF_IINCHIP_INT__
				putISR(s, getISR(s) & ~(Sn_IR_SEND_OK | Sn_IR_TIMEOUT));	 /* clear SEND_OK & TIMEOUT */
#else
				wiz_write_byte(Sn_IR(s), (Sn_IR_SEND_OK | Sn_IR_TIMEOUT)); /* clear SEND_OK & TIMEOUT */
#endif
			return 0;
			}
		}

/* +2008.01 bj */ 
#ifdef __DEF_IINCHIP_INT__
		putISR(s, getISR(s) & (~Sn_IR_SEND_OK));
#else
		wiz_write_byte(Sn_IR(s), Sn_IR_SEND_OK);
#endif

	}
	return ret;
}