⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myapp.c

📁 完整的实现RS232与TCP/IP网络协议的转换
💻 C
字号:

#include "..\uip.h"  //LEON.Z.
#include "myapp.h"
#include <serial.h>
#include <LCD\LCD.h>
#include "c51iic.h"
#include <R8051.H>

//sbit LED4=P3^3;
sbit DebugPin=P1^3;

#define NULL (void *)0

#ifdef DEBUG
#include <stdio.h>
#define PRINT(x) printf("%s", x)
#define PRINTLN(x) printf("%s\n", x)
#else /* DEBUG */
#define PRINT(x)
#define PRINTLN(x)
#endif /* DEBUG */

struct myapp_state *hs;

//#define APPport 1180
u16_t idata APPport= 1180;
/*-----------------------------------------------------------------------------------*/
void
myapp_init(void)
{
  
  /* Listen to port 1180. */
  uip_listen(APPport);
}
/*-----------------------------------------------------------------------------------*/
void
myapp(void)
{ 
  u8_t i;
    u16_t count;
//  switch(uip_conn->lport) {
  if(uip_conn->lport==APPport) {
//  case htons(APPport):
    /* Pick out the application state from the uip_conn structure. */
    hs = (struct myapp_state *)(uip_conn->appstate);

    if(uip_connected()) {
      /* first connect, the app do some initialize here */
      uip_connected=1;
      //data_Rec=0;
	  //Rec_len=0;
	  //dataRec_timecount=0;

      hs->count = 0;
      /* Don't send any data in return; we wait for the remote request
	 instead. */
	 // Uart0_print("CONNECT\n");//ADDFJB
//	  Uart0_RevEn();
      uip_send(uip_appdata, 0);
      return;

    } else if(uip_poll()) {
      /* If we are polled ten times, we abort the connection. This is
         because we don't want connections lingering indefinately in
         the system. */
      if(dataRec_timecount>=20)
	  {
        Uart0_RevDis();
        uip_len=Rec_len;
		 while(Rec_len)
		 {
		    Rec_len--;
		    uip_appdata[Rec_len]= Rec_data[Rec_len];
         }
        data_Rec=0;
		Rec_len=0;
         Uart0_RevEn();
		dataRec_timecount=0;
        hs->count = 0;
	  }
	  else //----------*/
      if(hs->count++ >= 30) {
	 
	    uip_connected=0;
	    uip_abort();
      }
      return;
    } else if(uip_newdata()) {
      /* we have recieved the request or data, apply the remote now*/	 
      //--------leon, add the protocal here----, we receive the pc data or 
      //--retquest,  in uip_appdata, length=uip_len;
      //and we process it, place our data in uip_appdata. and set uip_len;
     /*
      // Check for GET. 
      if(uip_appdata[0] != 't' ||
	     uip_appdata[1] != 'e' ||
	     uip_appdata[2] != 's' ||
	     uip_appdata[3] != 't') {
	// If it isn't a GET, we abort the connection
  	     uip_abort();
	     return;
      }	       
	   uip_appdata[0]='o';
	   uip_appdata[1]='k';
	   uip_len=2;    //-------*/
  
		if(!DebugPin) //setting parameters!
		{
            if(uip_len==3&&uip_appdata[0]=='G'&&uip_appdata[1]=='E'&&uip_appdata[2]=='T')//GET
			{
                 SubAddr=0;
	             Number=26;//20;
	           while( !IRcvStr(&uip_appdata[0]))  //读IP参数
	             { 
		           for(i=0;i<200;i++);
		           for(i=0;i<200;i++);
		           for(i=0;i<200;i++);
		           for(i=0;i<200;i++);
	             }
			   /* uip_appdata[0]=UIP_IPADDR0; 
				uip_appdata[1]=UIP_IPADDR1;              
				uip_appdata[2]=UIP_IPADDR2; 
				uip_appdata[3]=UIP_IPADDR3; 
				uip_appdata[4]=UIP_NETMASK0; 
				uip_appdata[5]=UIP_NETMASK1;              
				uip_appdata[6]=UIP_NETMASK2; 
				uip_appdata[7]=UIP_NETMASK3; 
				uip_appdata[8]= UIP_DRIPADDR0; 
				uip_appdata[9]= UIP_DRIPADDR1;  
				uip_appdata[10]=UIP_DRIPADDR2; 
				uip_appdata[11]=UIP_DRIPADDR3;              
				uip_appdata[12]=UIP_ETHADDR0; 
				uip_appdata[13]=UIP_ETHADDR1; 
				uip_appdata[14]=UIP_ETHADDR2; 
				uip_appdata[15]=UIP_ETHADDR3;              
				uip_appdata[16]=UIP_ETHADDR4; 
				uip_appdata[17]=UIP_ETHADDR5; 
				uip_appdata[18]=(APPport>>8)&0xff; 
				uip_appdata[19]=APPport&0xff; */
#if UIP_ACTIVE_OPEN
		/*	uip_appdata[20]=(REMOTE_IP[0]>>8)&0xff; 
				uip_appdata[21]= REMOTE_IP[0]&0xff;              
				uip_appdata[22]=(REMOTE_IP[1]>>8)&0xff;; 
				uip_appdata[23]= REMOTE_IP[1]&0xff; 
				uip_appdata[24]=(REMOTE_PORT>>8)&0xff; 
				uip_appdata[25]= REMOTE_PORT&0xff; */
    			uip_send(uip_appdata, 26);
#else
    			uip_send(uip_appdata, 20);
#endif
			}
			else
			if(uip_len>=24&&uip_len<=30&&uip_appdata[0]=='S'&&uip_appdata[1]=='E'&&uip_appdata[2]=='T')//SET
			{
               //uip_appdata[4]~uip_appdata[23]
			    TI=1;//????WHY
			   	SubAddr=0;
				Number=16;
				if( !ISendStr(&uip_appdata[4]) )
			       {uip_appdata[0]=1;uip_send(uip_appdata,1);return;}
                for(count=0;count<4000;count++);
			   	SubAddr=16;
				Number=uip_len-20;//4;
				if( !ISendStr(&uip_appdata[20]) )
			       {uip_appdata[0]=2;uip_send(uip_appdata,1);return;}
				uip_appdata[0]='S'; 
				uip_appdata[1]='E';              
				uip_appdata[2]='T'; 
				uip_appdata[3]='O'; 
				uip_appdata[4]='K'; 
				uip_send(uip_appdata,5);
			}
		}//if(!DebugPin)
		else //Normal running.
		{
   	   		Uart0_printR(&uip_appdata[0], uip_len); //数据发送
       		uip_send(uip_appdata, 0);
       		hs->count = 0;
		}
    }
    else
      if(uip_acked()) {
	  	//	Uart0_RevDis();
	  	//    uip_close();
	  }
	else
	{
	  uip_connected=0;
      uip_abort();
	}
    /* Finally, return to uIP. Our outgoing packet will soon be on its
       way... */
    return;
 }//end of if(uip_conn->lport==APPport)
 else // default:
 {
    /* Should never happen. */
	uip_connected=0;
    uip_abort();
    return;//break;
  }  
}
/*-----------------------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -