www.pudn.com > gprs.rar > ATframe.C


 
void CheckLine(void) 
{ 
//	if(WorkFG.bits.Online) 
//	{ 
		if(SecCnt&0x01) return; 
//	} 
	if(Framept2.pt!=RXpt2.pt) return; 
	 
	ATcipstatus(); 
	if(WaitFrame2()!=1) 
	{ 
	CheckLine_err: 
		WorkFG.bits.InitErr=1; 
		return; 
	} 
	Framept2.data=FrameEnd2.data; 
	R3=*(Framept2.pt-3); 
	COMFG2.bits.AFrame=0; 
	if(R3=='8') 
	{ 
		if(!WorkFG.bits.Online) 
		{ 
			if(ConnectOkEN) 
			{ 
				ConnectOk=1; 
				ConnectOkEN=0; 
			} 
			WorkFG.bits.Online=1; 
		} 
		Connecting=0; 
		SIG_Lap=0; 
		return; 
	} 
	else  
	{ 
	//	if((R3<=0x39)&&(R3>=0x30)&&(R3!=0x38)) 
	//	{ 
			WorkFG.bits.Online=0; 
			Connecting=1; 
	//	} 
	} 
	 
	if(!WorkFG.bits.Online) 
	{ 
		if(SecRedail>=SetReSec)	// if Online=0, per 16sec connect 
		{ 
			if(++ReDialCnt>=3) 
				RUNERR(); 
			ATcipclose(); 
			if(WaitFrame2()!=1) 
				goto CheckLine_err; 
			ResetCOMBUF2();	 
			ATcipstart(); 
			if(Wait300d_2()!=1)  
				goto CheckLine_err; 
			ResetCOMBUF2(); 
			R0=40; 
			while(R0--) 
			{ 
				Delay50ms(); 
			} 
			SecRedail=0; 
			ConnectOkEN=1; 
		} 
	} 
} 
	 
		 
void InitGPRS(void) 
{ 
	SendATFG.ch=0; 
	WorkFG.ch=0; 
	WorkFG.bits.TestMS=1; 
	ATclear(); 
	Delay50ms(); 
	Delay50ms(); 
	Delay50ms(); 
	Delay50ms(); 
	ATev(); 
	Delay50ms(); 
	Delay50ms(); 
	ResetCOMBUF1(); 
	ResetCOMBUF2(); 
//	ATuart(); 
//	Delay50ms(); 
//	Delay50ms(); 
//	if(Wait300d_2()!=1)  
//		goto InitGPRS_err; 
	ATev(); 
	if(Wait300d_2()!=1) 
	{ 
		Nop(); 
	InitGPRS_err: 
		WorkFG.bits.InitErr=1; 
		return; 
	} 
	 
	ATcscs(); 
	if(Wait300d_2()!=1) 
		goto InitGPRS_err; 
//	ATcfun(); 
//	if(Wait300d_2()!=1) goto InitGPRS_err; 
	ATcmgf(); 
	if(Wait300d_2()!=1)  
		goto InitGPRS_err; 
	ATcnmi(); 
	if(Wait300d_2()!=1)  
		goto InitGPRS_err; 
	 
	R0=40; 
	WorkFG.bits.NetERR=1; 
	while(R0--) 
	{ 
		ATcreg(); 
		if(WaitFrame2()!=1) 
			goto InitGPRS_err; 
		ATframe(); 
		Delay50ms(); 
		Delay50ms(); 
		Delay50ms(); 
		Delay50ms(); 
		Delay50ms(); 
		Delay50ms(); 
		Delay50ms(); 
		Delay50ms(); 
		Delay50ms(); 
		Delay50ms(); 
		SecErr=0; 
		if(COMFG2.bits.AFrame) ATframe(); 
		if(!WorkFG.bits.NetERR) break; 
	} 
	if(WorkFG.bits.NetERR) 
		goto InitGPRS_err;	//*/ 
//	ATcops(); 
//	if(WaitFrame2()!=1) goto InitGPRS_err; 
//	ATframe(); 
/*	R0=200; 
	while(R0--) 
	{ 
		Delay50ms(); 
		SecErr=0; 
	} 
*/ 
	ATcipshut(); 
	if(WaitFrame2()!=1) goto InitGPRS_err; 
	Delay50ms(); 
	Delay50ms(); 
	ResetCOMBUF2(); 
 
	ATciphead();		//1 
	if(Wait300d_2()!=1)  
		goto InitGPRS_err; 
	ATcipsprt();		//1 
	if(Wait300d_2()!=1) 
		goto InitGPRS_err; 
	ATcipflp();		//1 
	if(Wait300d_2()!=1)  
		goto InitGPRS_err; 
	ATcipsrip();		//0 
	if(Wait300d_2()!=1)  
		goto InitGPRS_err; 
	ATcdnsorip();		//0 
	if(Wait300d_2()!=1)  
		goto InitGPRS_err; 
	ATcipdpdp();		//=1,120,255 
	if(Wait300d_2()!=1) 
		goto InitGPRS_err; 
	ATcipmode(); 
	if(Wait300d_2()!=1)  
		goto InitGPRS_err; 
	ATcipstart(); 
	if(Wait300d_2()!=1)  
		goto InitGPRS_err; 
	ResetCOMBUF2(); 
	WorkFG.bits.InitErr=0; 
	SecRedail=0; 
	SecCnt=0; 
	MinTest=0; 
	ReDialCnt=0; 
	ConnectOkEN=1; 
} 
 
 
void sendAT(void) 
{ 
	SendATFG.bits.ATing=1; 
	TXpt1.pt=ATBUF; 
	TXOVERTMR2=0; 
	while(TXOVERTMR2<30)		//240ms 
	{ 
		Com1Trans(); 
		if(!SendATFG.bits.ATing)  
			break; 
	} 
	Nop(); 
} 
 
 
 
 
 
 
 
 
void Serialframe(void) 
{ 
	SFrameFG.ch=0; 
	if(COMFG1.bits.BUF_over) 
	{ 
		INTCONbits.GIE=0; 
		ResetCOMBUF1(); 
		INTCONbits.GIE=1; 
	} 
	if(COMFG1.bits.FramErr) 
	{ 
		INTCONbits.GIE=0; 
		Framept1.data=FrameErr1.data; 
		COMFG1.bits.FramErr=0; 
		COMFG1.bits.AFrame=0; 
		INTCONbits.GIE=1; 
	}	//*/ 
	INTCONbits.GIE=0; 
	RXptbak.pt=RXpt1.pt; 
	INTCONbits.GIE=1; 
	if(!COMFG1.bits.AFrame) 
	{ 
		if(Framept1.data==RXptbak.data)	return; 
	} 
	if(SendATFG.bits.Tranning)  
		return; 
 
	temp4.Uchp=Framept1.pt;		//temp4.Uchp 存储FRAME指针 
	Get_char1(); 
	if(R3=='#') 
	{ 
		Get_char1(); 
		if(R3!='#') goto check1_continue; 
		Get_char1(); 
		if(R3!='#') goto check1_continue; 
		Get_char1(); 
		if(R3!='*') goto check1_continue; 
		Get_char1(); 
		if(R3!='*') goto check1_continue; 
		Get_char1(); 
		if(R3!='*') goto check1_continue; 
		Get_char1(); 
		 
		if(!COMFG1.bits.AFrame) return; 
		Framept1.data=FrameEnd1.data; 
		COMFG1.bits.AFrame=0; 
		if(R3=='?') 
		{ 
			Get_char1(); 
			if(R3!='?') return;	//此帧数据无效 
			Get_char1(); 
			if(R3!='?') return; 
			if((COMFG2.ch&0x0f)||SendATFG.bits.IPDing) 
			return; 
			INTCONbits.GIE=0; 
			ResetCOMBUF2(); 
			COMBUF2[0]='#'; 
			COMBUF2[1]='#'; 
			COMBUF2[2]='#'; 
			COMBUF2[3]='*'; 
			COMBUF2[4]='*'; 
			COMBUF2[5]='*'; 
			COMBUF2[6]=0x0d; 
			COMBUF2[7]=0x0a; 
			 
			COMBUF2[8]=' '; 
			COMBUF2[9]=' '; 
			COMBUF2[10]='H'; 
			COMBUF2[11]='D'; 
			COMBUF2[12]='='; 
			COMBUF2[13]='0'; 
			if(CONFIGFG.bits.enID) COMBUF2[13]='1'; 
			COMBUF2[14]=','; 
			for(R0=0,R1=0;R0<12;R0++) 
			{ 
				R3=HeadID[R0]; 
				if((R3==0x0d)||(R3==' ')) R1=1; 
				if(R1) R3=' '; 
				COMBUF2[15+R0]=R3; 
			} 
			COMBUF2[27]=0x0d; 
			COMBUF2[28]=0x0a; 
			 
			COMBUF2[29]='M'; 
			COMBUF2[30]='O'; 
			COMBUF2[31]='D'; 
			COMBUF2[32]='E'; 
			COMBUF2[33]='='; 
			COMBUF2[34]=Mode; 
			COMBUF2[35]=0x0d; 
			COMBUF2[36]=0x0a; 
			 
			COMBUF2[37]=' '; 
			COMBUF2[38]='R'; 
			COMBUF2[39]='D'; 
			COMBUF2[40]='T'; 
			COMBUF2[41]='='; 
			R0=SetReSec/100; 
			COMBUF2[42]=0x30+R0; 
			R0=(SetReSec-R0*100)/10; 
			COMBUF2[43]=0x30+R0; 
			R0=SetReSec-(SetReSec/10)*10; 
			COMBUF2[44]=0x30+R0; 
			COMBUF2[45]=0x0d; 
			COMBUF2[46]=0x0a; 
			 
			COMBUF2[47]='T'; 
			COMBUF2[48]='E'; 
			COMBUF2[49]='S'; 
			COMBUF2[50]='T'; 
			COMBUF2[51]='='; 
			COMBUF2[52]='0'; 
			if(CONFIGFG.bits.enTest) COMBUF2[52]='1'; 
			COMBUF2[53]=','; 
			COMBUF2[54]=0x30+SetMinTest; 
			COMBUF2[55]=' '; 
			COMBUF2[56]=0x0d; 
			COMBUF2[57]=0x0a; 
			 
			COMBUF2[58]=' '; 
			COMBUF2[59]=' '; 
			COMBUF2[60]='I'; 
			COMBUF2[61]='P'; 
			COMBUF2[62]='='; 
			subah=0; 
			subal=AT_IPadr; 
			IICNUM=15; 
			IICMEM=COMBUF2+63; 
			EEPR(); 
			COMBUF2[78]=':'; 
			subah=0; 
			subal=AT_IPport; 
			IICNUM=5; 
			IICMEM=COMBUF2+79; 
			EEPR(); 
			COMBUF2[84]=0x0d; 
			COMBUF2[85]=0x0a; 
			 
			COMBUF2[86]=' '; 
			COMBUF2[87]='B'; 
			COMBUF2[88]='P'; 
			COMBUF2[89]='S'; 
			COMBUF2[90]='='; 
			COMBUF2[91]='0'; 
			if(CONFIGFG.bits.Com1Bit9) COMBUF2[91]='1'; 
			COMBUF2[92]=','; 
			COMBUF2[93]=' '; 
			if(Com1BPS==0) 
			{ 
				COMBUF2[94]=' '; 
				COMBUF2[95]='3'; 
			} 
			else if(Com1BPS==1) 
			{ 
				COMBUF2[94]=' '; 
				COMBUF2[95]='6'; 
			} 
			else if(Com1BPS==2) 
			{ 
				COMBUF2[94]='1'; 
				COMBUF2[95]='2'; 
			} 
			else if(Com1BPS==3) 
			{ 
				COMBUF2[94]='2'; 
				COMBUF2[95]='4'; 
			} 
			else if(Com1BPS==4) 
			{ 
				COMBUF2[94]='4'; 
				COMBUF2[95]='8'; 
			} 
			else if(Com1BPS==6) 
			{ 
				COMBUF2[93]='1'; 
				COMBUF2[94]='9'; 
				COMBUF2[95]='2'; 
			} 
			else 
			{ 
				COMBUF2[94]='9'; 
				COMBUF2[95]='6'; 
			} 
			 
			COMBUF2[96]='0'; 
			COMBUF2[97]='0'; 
			COMBUF2[98]=0x0d; 
			COMBUF2[99]=0x0a; 
			 
			COMBUF2[100]=' '; 
			COMBUF2[101]='C'; 
			COMBUF2[102]='S'; 
			COMBUF2[103]='Q'; 
			COMBUF2[104]='='; 
			COMBUF2[105]=(NetRssi/0x10)+0x30; 
			COMBUF2[106]=(NetRssi&0x0f)+0x30; 
			COMBUF2[107]=','; 
			COMBUF2[108]=(NetBer/0x10)+0x30; 
			COMBUF2[109]=(NetBer&0x0f)+0x30; 
			COMBUF2[110]=0x0d; 
			COMBUF2[111]=0x0a; 
			 
			COMBUF2[112]='V'; 
			COMBUF2[113]='e'; 
			COMBUF2[114]='r'; 
			COMBUF2[115]=' '; 
			COMBUF2[116]='='; 
			COMBUF2[117]='3'; 
			COMBUF2[118]='.'; 
			COMBUF2[119]='0'; 
			COMBUF2[120]=0x0d; 
			COMBUF2[121]=0x0a; 
			 
			TXSAVED2=IPDlen=122; 
			IPDtran=1; 
			SendATFG.bits.IPDing=1; 
			COMFG2.bits.AFrame=1; 
			RXpt2.pt=COMBUF2+122; 
			FrameEnd2.data=RXpt2.data; 
			RXOVERTMR2=0; 
			INTCONbits.GIE=1; 
			return; 
		} 
		if(R3=='I') 
		{ 
			Get_char1(); 
			if(R3!='P') return;	//此帧数据无效 
			Get_char1(); 
			if(R3!=':') return; 
			 
			Get_char1(); 
			BFIIC[0]=R3; 
			Get_char1(); 
			BFIIC[1]=R3; 
			Get_char1(); 
			BFIIC[2]=R3; 
			Get_char1(); 
			BFIIC[3]=R3; 
			 
			Get_char1(); 
			BFIIC[4]=R3; 
			Get_char1(); 
			BFIIC[5]=R3; 
			Get_char1(); 
			BFIIC[6]=R3; 
			Get_char1(); 
			BFIIC[7]=R3; 
			 
			Get_char1(); 
			BFIIC[8]=R3; 
			Get_char1(); 
			BFIIC[9]=R3; 
			Get_char1(); 
			BFIIC[10]=R3; 
			Get_char1(); 
			BFIIC[11]=R3; 
			 
			Get_char1(); 
			BFIIC[12]=R3; 
			Get_char1(); 
			BFIIC[13]=R3; 
			Get_char1(); 
			BFIIC[14]=R3; 
			Get_char1(); 
			BFIIC[15]=R3; 
			 
			Get_char1(); 
			BFIIC[16]=R3; 
			Get_char1(); 
			BFIIC[17]=R3; 
			Get_char1(); 
			BFIIC[18]=R3; 
			Get_char1(); 
			BFIIC[19]=R3; 
			Get_char1(); 
			BFIIC[20]=R3; 
			 
			if(Check_ServerIP()!=1) return;	//not Number 
			 
			if(SFrameFG.bits.Contin) return; 
			 
			subah=0; 
			subal=AT_IPadr; 
			IICNUM=15; 
			IICMEM=BFIIC; 
			EEPW(); 
			 
			subah=0; 
			subal=AT_IPport; 
			IICNUM=5; 
			IICMEM=BFIIC+16; 
			EEPW(); 
			SendATFG.bits.IPchange=1; 
			return; 
		} 
		if(R3=='P') 
		{ 
			Get_char1(); 
			if(R3!='A') return;	//此帧数据无效 
			Get_char1(); 
			if(R3!='S') return; 
			Get_char1(); 
			if(R3!='S') return; 
			Get_char1(); 
			if(R3!=':') return; 
			 
			Get_char1(); 
			BFIIC[0]=R3; 
			Get_char1(); 
			BFIIC[1]=R3; 
			Get_char1(); 
			BFIIC[2]=R3; 
			Get_char1(); 
			BFIIC[3]=R3; 
			if(SFrameFG.bits.Contin) return; 
			subah=0; 
			subal=AT_PASS; 
			IICNUM=4; 
			IICMEM=BFIIC; 
			EEPW();	 
			return; 
		} 
		if(R3=='B')			//bps 
		{ 
			Get_char1(); 
			if(R3!='P') return;	//此帧数据无效 
			Get_char1(); 
			if(R3!='S') return; 
			Get_char1(); 
			if(R3!=':') return; 
			Get_char1(); 
			if(SFrameFG.bits.Contin) return; 
			if(R3=='1') CONFIGFG.bits.Com1Bit9=1; 
			else if(R3=='0') CONFIGFG.bits.Com1Bit9=0; 
			 
			subah=0; 
			subal=AT_CONFIGFG; 
			IICNUM=1; 
			IICMEM=&CONFIGFG.ch; 
			EEPW();	 
			Get_char1(); 
			if(R3!=',') return; 
			Get_Lenth1(3); 
			if(temp3.Uint==300) R0=0; 
			else if(temp3.Uint==600) R0=1; 
			else if(temp3.Uint==120) R0=2; 
			else if(temp3.Uint==240) R0=3; 
			else if(temp3.Uint==480) R0=4; 
			else if(temp3.Uint==960) R0=5; 
			else if(temp3.Uint==192) R0=6; 
			else return; 
			if(SFrameFG.bits.Contin) return; 
			Com1BPS=R0; 
			subah=0; 
			subal=AT_Com1BPS; 
			IICNUM=1; 
			IICMEM=&Com1BPS; 
			EEPW();	 
			Init_Com1(); 
			return; 
		} 
		if(R3=='M') 
		{ 
			Get_char1(); 
			if(R3!='O') return;	//此帧数据无效 
			Get_char1(); 
			if(R3!='D') return; 
			Get_char1(); 
			if(R3!='E') return; 
			Get_char1(); 
			if(R3!=':') return; 
			 
			Get_char1(); 
			if((R3!=MODE_MS)&&(R3!=MODE_GPRS)) return; 
			if(SFrameFG.bits.Contin) return; 
			Mode=R3; 
			subah=0; 
			subal=AT_MODE; 
			IICNUM=1; 
			IICMEM=&Mode; 
			EEPW();	 
			return; 
		} 
		if(R3=='R')			// RedialTime ???sec  重新连接间隔(>=10,<=250秒) 
		{ 
			Get_char1(); 
			if(R3!='D') return;	//此帧数据无效 
			Get_char1(); 
			if(R3!='T') return; 
			Get_char1(); 
			if(R3!=':') return; 
			 
			Get_Lenth1(3); 
			if(temp3.Uint>250) return; 
			if(temp3.Uint<10) return; 
			if(SFrameFG.bits.Contin) return; 
			SetReSec=temp3.Uchar[0]; 
			subah=0; 
			subal=AT_SetReSec; 
			IICNUM=1; 
			IICMEM=&SetReSec; 
			EEPW();	 
			return; 
		} 
		if(R3=='H')		// ###***HD:1/0,HeadID(12)	// 
		{ 
			Get_char1(); 
			if(R3!='D') return;	//此帧数据无效 
			Get_char1(); 
			if(R3!=':') return; 
			Get_char1(); 
			if(SFrameFG.bits.Contin) return; 
			if(R3=='1') CONFIGFG.bits.enID=1; 
			else if(R3=='0') CONFIGFG.bits.enID=0; 
			else return; 
			subah=0; 
			subal=AT_CONFIGFG; 
			IICNUM=1; 
			IICMEM=&CONFIGFG.ch; 
			EEPW();	 
			Get_char1(); 
			if(R3!=',') return; 
			for(R0=0;R0<12;R0++) 
			{ 
				Get_char1(); 
				if(SFrameFG.bits.Contin) break; 
				if((R3==0x0d)||(R3==0x0a)||(R3==' ')) break; 
				BFIIC[R0]=R3; 
			} 
			BFIIC[R0]=' '; 
			subah=0; 
			subal=AT_HeadID; 
			IICNUM=14; 
			IICMEM=BFIIC; 
			EEPW();	 
			subah=0; 
			subal=AT_HeadID; 
			IICNUM=14; 
			IICMEM=HeadID; 
			EEPR();	 
			return; 
		} 
		if(R3=='T')		//###***TEST:1/0,?mins	//信跳测试周期 
		{ 
			Get_char1(); 
			if(R3!='E') return;	//此帧数据无效 
			Get_char1(); 
			if(R3!='S') return; 
			Get_char1(); 
			if(R3!='T') return; 
			Get_char1(); 
			if(R3!=':') return; 
			Get_char1(); 
			if(SFrameFG.bits.Contin) return; 
			if(R3=='1') CONFIGFG.bits.enTest=1; 
			else if(R3=='0') CONFIGFG.bits.enTest=0; 
			else return; 
			subah=0; 
			subal=AT_CONFIGFG; 
			IICNUM=1; 
			IICMEM=&CONFIGFG.ch; 
			EEPW();	 
			Get_char1(); 
			if(R3!=',') return; 
			Get_char1(); 
			CheckNum(); 
			if(!R3) return;	//not Number 
			if(SFrameFG.bits.Contin) return; 
			SetMinTest=R3-0x30; 
			subah=0; 
			subal=AT_TestLong; 
			IICNUM=1; 
			IICMEM=&SetMinTest; 
			EEPW();	 
			return; 
		} 
		return; 
	} 
		 
check1_continue: 
	if(COMFG1.bits.AFrame) 
		SendATFG.bits.Tranning=1; 
	if(!SFrameFG.bits.Contin) 
		SendATFG.bits.Tranning=1; 
} 
	 
 
//ret 0: err 
//ret 1: continue 
//ret 2: ok 
unsigned char CheckID2(void) 
{ 
	RXptbak.pt=RXpt2.pt; 
	temp4.Uchp=Framept2.pt; 
	ATFrameFG.bits.Contin=0; 
	for(R0=0;R0<17;R0++) 
	{ 
		Get_char2(); 
		if(ATFrameFG.bits.Contin) return(1); 
		if(HeadCS[R0]!=R3) 
		{ 
			Framept2.data=temp4.Uint; 
			IPDlen=0; 
			TXSAVED2=0; 
			return(0); 
		} 
		if(R3==' ') break; 
	} 
	IPDlen-=(R0+1); 
	TXSAVED2=IPDlen; 
	Framept2.data=temp4.Uint; 
	return(2); 
} 
	 
void Com2Trans(void) 
{ 
	if(!TXSTA1bits.TRMT)  
		return;		//use tx1 
	if(!IPDlen) SendATFG.bits.IPDing=0; 
	if(!SendATFG.bits.IPDing) 
	_asm 
	goto EndTX1 
	_endasm 
	if(!IPDtran) 
	{ 
	/*	if(CONFIGFG.bits.enID) 
		{ 
			R0=CheckID2(); 
			if(R0==0) 
			{ 
			//	Framept2.data=FrameEnd2.data;		//??????????? 
			//	IPDlen=0; 
			//	COMFG2.bits.AFrame=0; 
				return; 
			} 
			if(R0!=2) return; 
		}//*/ 
		IPDtran=1; 
	} 
	if(CONFIGFG.bits.enID) 
	{ 
		if(!TXSAVED2) 
		{ 
			IPDtran=0; 
			return; 
		} 
	} 
 
	TXSTA1bits.TXEN=1;		//打开发送允许位 
	 
	RXptbak.pt=RXpt2.pt; 
	temp4.Uchp=Framept2.pt; 
	ATFrameFG.bits.Contin=0; 
	Get_char2(); 
	if(ATFrameFG.bits.Contin) return; 
	Framept2.pt=temp4.Uchp; 
	 
	if(CONFIGFG.bits.Com1Bit9) 
	{ 
		R0=0; 
		if(R3&0x01) R0++; 
		if(R3&0x02) R0++; 
		if(R3&0x04) R0++; 
		if(R3&0x08) R0++; 
		if(R3&0x10) R0++; 
		if(R3&0x20) R0++; 
		if(R3&0x40) R0++; 
		if(R3&0x80) R0++; 
		if(R0&0x01) TXSTA1bits.TX9D=1; 
		else TXSTA1bits.TX9D=0; 
	} 
	TXREG1=R3; 
	IPDlen--; 
	TXSAVED2--; 
} 
 
void Com1Trans(void) 
{ 
	if(!TXSTA2bits.TRMT)  
		return;		//use tx2 
 
	TXSTA2bits.TXEN=1;		//打开发送允许位 
	 
	if(SendATFG.bits.ATing) 
	{ 
		if(TXpt1.pt>=ATBUF+32) goto Com1TrErr; 
		if(TXpt1.pt')		// > TSsign 
	{ 
		Framept2.pt=temp4.Uchp; 
		ATFrameFG.bits.TSsign=1; 
		return; 
	} 
	 
	if(R3=='+') 
	{ 
		Get_char2(); 
		if(ATFrameFG.bits.Contin) return; 
		if(R3=='I')		//+IPD(len): 
		{ 
			Get_char2(); 
			if(R3!='P') goto check_continue; 
			Get_char2(); 
			if(R3!='D') goto check_continue; 
			Get_Lenth2(3); 
			Get_char2(); 
			if(R3!=':') goto check_continue; 
			if(ATFrameFG.bits.Contin) return; 
			IPDlen=temp3.Uint; 
			SendATFG.bits.IPDing=1; 
			TXSAVED2=IPDlen; 
			Framept2.pt=temp4.Uchp; 
			return;	 
		} 
 
		if(R3=='C')		//+C... 
		{ 
			Get_char2(); 
			if(ATFrameFG.bits.Contin) return; 
		/*	if(R3=='O')	//+COPS: 0,0,"CHINA MOBILE" 
			{ 
				Get_char2(); 
				if(R3!='P') goto check_continue; 
				Get_char2(); 
				if(R3!='S') goto check_continue; 
				Get_char2(); 
				if(R3!=':') goto check_continue; 
				Get_char2(); 
				if(R3!=0x20) goto check_continue; 
				Get_char2(); 
				if(R3!='2') goto check_continue; 
				if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1; 
				if(ATFrameFG.bits.Contin) return; 
				WorkFG.bits.NetERR=1; 
				goto	End_AFrame; 
			}	//*/ 
			 
			if(R3=='S')	//+CSQ: 0 
			{ 
				Get_char2(); 
				if(R3!='Q') goto check_continue; 
				Get_char2(); 
				if(R3!=':') goto check_continue; 
				Get_char2(); 
				if(R3!=0x20) goto check_continue; 
				Get_Lenth2(3); 
				Get_char2(); 
				if(R3!=',') goto check_continue; 
				Get_char2();				//????????????? 
				R3-=0x30; 
				if(R3>0x09) goto check_continue; 
				if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1; 
				if(ATFrameFG.bits.Contin) return; 
				if(R3==9) R3=99; 
				NetBer=HEX1BCD1(R3); 
				NetRssi=HEX1BCD1(temp3.Uchar[0]); 
				WorkFG.bits.NetWeek=0; 
				if(NetRssiCS_ber) WorkFG.bits.NetWeek=1; 
				goto	End_AFrame; 
			} 
			 
			if(R3=='R')	//+CREG: 0,1 
			{ 
				Get_char2(); 
				if(R3!='E') goto check_continue; 
				Get_char2(); 
				if(R3!='G') goto check_continue; 
				Get_char2(); 
				if(R3!=':') goto check_continue; 
				Get_char2(); 
				if(R3!=0x20) goto check_continue; 
				Get_char2(); 
				Get_char2(); 
				if(R3!=',') goto check_continue; 
				Get_char2();  
				if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1; 
				if(ATFrameFG.bits.Contin) return; 
				WorkFG.bits.NetERR=1; 
				if(R3=='1') WorkFG.bits.NetERR=0; 
				if(R3=='5') WorkFG.bits.NetERR=0; 
				goto	End_AFrame; 
			} 
			 
			if(R3=='M')		//+CM... 
			{ 
				Get_char2(); 
				if(ATFrameFG.bits.Contin) return; 
				if(R3=='E')	//+CME ERROR: 
				{ 
					Get_char2(); 
					if(R3!=' ') goto check_continue; 
					Get_char2(); 
					if(R3!='E') goto check_continue; 
					Get_char2(); 
					if(R3!='R') goto check_continue; 
					Get_char2(); 
					if(R3!='R') goto check_continue; 
					Get_char2(); 
					if(R3!='O') goto check_continue; 
					Get_char2(); 
					if(R3!='R') goto check_continue; 
					Get_char2(); 
					if(R3!=':') goto check_continue; 
					if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1; 
			 
					if(ATFrameFG.bits.Contin) return; 
					ATFrameFG.bits.CMEERR=1; 
					goto	End_AFrame; 
				} 
				 
				if(R3=='T')	//+CMTI: index 
				{ 
					Get_char2(); 
					if(R3!='I') goto check_continue; 
					Get_char2(); 
					if(R3!=':') goto check_continue; 
					if(!COMFG2.bits.AFrame) 
					{ 
						ATFrameFG.bits.Contin=1; 
						return; 
					} 
					Find_char2(','); 
					Get_char2(); 
					if(R3==' ') Get_char2(); 
					CheckNum(); 
					if(!R3) goto check_continue;	//not Number 
					MSindex[0]=R3; 
					Get_char2(); 
					if(R3>=0x3a||R3<0x30||ATFrameFG.bits.Contin) MSindex[1]='0'; 
					else MSindex[1]=R3; 
					 
					WorkFG.bits.NewMS=1; 
					goto	End_AFrame; 
				} 
				 
				if(R3=='S')	//+CMSS:  
				{ 
					Get_char2(); 
					if(R3=='S') 
					{ 
						Get_char2(); 
						if(R3!=':') goto check_continue; 
						if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1; 
						if(ATFrameFG.bits.Contin) return; 
						ATFrameFG.bits.SendMS=1; 
						goto	End_AFrame; 
					} 
					if(R3==' ') 
					{ 
						Get_char2(); 
						if(R3!='E') goto check_continue; 
						Get_char2(); 
						if(R3!='R') goto check_continue; 
						Get_char2(); 
						if(R3!='R') goto check_continue; 
						Get_char2(); 
						if(R3!='O') goto check_continue; 
						Get_char2(); 
						if(R3!='R') goto check_continue; 
						Get_char2(); 
						if(R3!=':') goto check_continue; 
						if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1; 
				 
						if(ATFrameFG.bits.Contin) return; 
						ATFrameFG.bits.CMEERR=1; 
						goto	End_AFrame; 
					} 
					goto check_continue;	//unknow 
					 
				} 
				 
				if(R3=='G')	//+CMG... 
				{ 
					Get_char2(); 
					if(ATFrameFG.bits.Contin) return; 
					R2=R3; 
					Get_char2(); 
					if(R3!=':') goto check_continue; 
					R3=R2; 
					if(R3=='R')	//+cmgr: 
					{ 
						if(!COMFG2.bits.AFrame) 
						{ 
							ATFrameFG.bits.Contin=1; 
							return; 
						} 
						ATFrameFG.bits.cmgd=1; 
						Find_char2('"'); 
						Get_char2(); 
						if(R3=='R') 
						{ 
							Get_char2();	//'E' 
							Get_char2();	//'C' 
							Get_char2();	//' ' 
							Get_char2();	//'U' or 'R' 
							if(R3!='U') goto End_AFrame; 
							Find_char2(','); 
							Find_char2(','); 
							Find_char2(','); 
							Get_char2(); 
							if(R3!='"') goto End_AFrame; 
							Find_char2('"'); 
							Get_char2(); 
							if(R3!=0x0d) goto End_AFrame; 
							Get_char2(); 
							if(R3!=0x0a) goto End_AFrame; 
							Get_char2(); 
							if(R3!='#') goto End_AFrame; 
							Get_char2(); 
							if(R3!='#') goto End_AFrame; 
							Get_char2(); 
							if(R3!='#') goto End_AFrame; 
							Get_char2(); 
							if(R3!='*') goto End_AFrame; 
							Get_char2(); 
							if(R3!='*') goto End_AFrame; 
							Get_char2(); 
							if(R3!='*') goto End_AFrame; 
							Get_char2(); 
							if(R3=='I') 
							{ 
								Get_char2(); 
								if(R3!='P') goto End_AFrame; 
								Get_char2(); 
								if(R3!=':') goto End_AFrame; 
							 
								Get_char2(); 
								BFIIC[0]=R3; 
								Get_char2(); 
								BFIIC[1]=R3; 
								Get_char2(); 
								BFIIC[2]=R3; 
								Get_char2(); 
								BFIIC[3]=R3; 
								 
								Get_char2(); 
								BFIIC[4]=R3; 
								Get_char2(); 
								BFIIC[5]=R3; 
								Get_char2(); 
								BFIIC[6]=R3; 
								Get_char2(); 
								BFIIC[7]=R3; 
								 
								Get_char2(); 
								BFIIC[8]=R3; 
								Get_char2(); 
								BFIIC[9]=R3; 
								Get_char2(); 
								BFIIC[10]=R3; 
								Get_char2(); 
								BFIIC[11]=R3; 
								 
								Get_char2(); 
								BFIIC[12]=R3; 
								Get_char2(); 
								BFIIC[13]=R3; 
								Get_char2(); 
								BFIIC[14]=R3; 
								Get_char2(); 
								BFIIC[15]=R3; 
								 
								Get_char2(); 
								BFIIC[16]=R3; 
								Get_char2(); 
								BFIIC[17]=R3; 
								Get_char2(); 
								BFIIC[18]=R3; 
								Get_char2(); 
								BFIIC[19]=R3; 
								Get_char2(); 
								BFIIC[20]=R3; 
		 
								if(Check_ServerIP()!=1) goto End_AFrame;	//not Number 
								 
								if(ATFrameFG.bits.Contin) goto End_AFrame; 
								Framept2.data=FrameEnd2.data; 
								COMFG2.bits.AFrame=0; 
							 
								subah=0; 
								subal=AT_IPadr; 
								IICNUM=15; 
								IICMEM=BFIIC; 
								EEPW(); 
								 
								subah=0; 
								subal=AT_IPport; 
								IICNUM=5; 
								IICMEM=BFIIC+16; 
								EEPW(); 
								SendATFG.bits.IPchange=1; 
								goto End_AFrame;	//return;	??????? 
							} 
							if(R3=='H') 
							{ 
								Get_char2(); 
								if(R3!='D') goto End_AFrame; 
								Get_char2(); 
								if(R3!=':') goto End_AFrame; 
								 
								Get_char2(); 
								if(ATFrameFG.bits.Contin) goto End_AFrame; 
								if(R3=='1') CONFIGFG.bits.enID=1; 
								else if(R3=='0') CONFIGFG.bits.enID=0; 
								else goto End_AFrame; 
								subah=0; 
								subal=AT_CONFIGFG; 
								IICNUM=1; 
								IICMEM=&CONFIGFG.ch; 
								EEPW();	 
								Get_char2(); 
								if(R3!=',') goto End_AFrame; 
								for(R0=0;R0<12;R0++) 
								{ 
									Get_char2(); 
									if(ATFrameFG.bits.Contin) goto End_AFrame; 
									if((R3==0x0d)||(R3==0x0a)||(R3==' ')) break; 
									BFIIC[R0]=R3; 
								} 
								BFIIC[R0]=' '; 
								subah=0; 
								subal=AT_HeadID; 
								IICNUM=14; 
								IICMEM=BFIIC; 
								EEPW();	 
								subah=0; 
								subal=AT_HeadID; 
								IICNUM=14; 
								IICMEM=HeadID; 
								EEPR();	 
								goto End_AFrame; 
							} 
							if(R3=='T')		//###***TEST:1/0,?mins	//信跳测试周期 
							{ 
								Get_char2(); 
								if(R3!='E') goto End_AFrame; 
								Get_char2(); 
								if(R3!='S') goto End_AFrame; 
								Get_char2(); 
								if(R3!='T') goto End_AFrame; 
								Get_char2(); 
								if(R3!=':') goto End_AFrame; 
								Get_char2(); 
								if(ATFrameFG.bits.Contin) goto End_AFrame; 
								if(R3=='1') CONFIGFG.bits.enTest=1; 
								else if(R3=='0') CONFIGFG.bits.enTest=0; 
								else goto End_AFrame; 
								subah=0; 
								subal=AT_CONFIGFG; 
								IICNUM=1; 
								IICMEM=&CONFIGFG.ch; 
								EEPW();	 
								Get_char2(); 
								if(R3!=',')  goto End_AFrame; 
								Get_char2(); 
								CheckNum(); 
								if(!R3)  goto End_AFrame; 
								if(ATFrameFG.bits.Contin) goto End_AFrame; 
								SetMinTest=R3-0x30; 
								subah=0; 
								subal=AT_TestLong; 
								IICNUM=1; 
								IICMEM=&SetMinTest; 
								EEPW();	 
								goto End_AFrame; 
							} 
							goto End_AFrame; 
						} 
						if(R3=='S') 
						{ 
							Get_char2();	//'T' 
							Get_char2();	//'O' 
							Get_char2();	//' ' 
							Get_char2();	//'U' or 'S' 
							if(R3!='U') goto End_AFrame; 
						//	此信息未发送, 
							ATFrameFG.bits.cmgd=0;		//not clear 
							ATFrameFG.bits.OKend=1; 
							if(ATFrameFG.bits.Contin) goto End_AFrame; 
							goto End_AFrame; 
						} 
						goto check_continue;	//unknow	 
						 
					} 
					if(R3=='W') 
					{ 
						 
					} 
					if(R3=='L') 
					{ 
						 
					} 
					goto check_continue;	//unknow 
				} 
			}	 
		} 
		 
		else if(R3=='P')	//+PDP: DEACT 
		{ 
			Get_char2(); 
			if(R3!='D') goto check_continue; 
			Get_char2(); 
			if(R3!='P') goto check_continue; 
			Get_char2(); 
			if(R3!=':') goto check_continue; 
			Get_char2(); 
			if(R3!=0x20) goto check_continue; 
			Get_char2(); 
			if(R3!='D') goto check_continue; 
			Get_char2(); 
			if(R3!='E') goto check_continue; 
			Get_char2(); 
			if(R3!='A') goto check_continue; 
			Get_char2();  
			if(R3!='C') goto check_continue; 
			Get_char2(); 
			if(R3!='T') goto check_continue; 
			 
			if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1; 
			if(ATFrameFG.bits.Contin) return; 
			WorkFG.bits.Online=0; 
		//	SIG_Lap=1;	//由终端完成闪烁显示 
			Connecting=1; 
			goto	End_AFrame; 
		} 
		 
		else if(R3=='S')	//+SCKS: 0 
		{ 
			Get_char2(); 
			if(R3!='C') goto check_continue; 
			Get_char2(); 
			if(R3!='K') goto check_continue; 
			Get_char2(); 
			if(R3!='S') goto check_continue; 
			Get_char2(); 
			if(R3!=':') goto check_continue; 
			Get_char2(); 
			if(R3!=0x20) goto check_continue; 
			Get_char2(); 
			if(R3!='0') goto check_continue; 
			 
			if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1; 
			if(ATFrameFG.bits.Contin) return; 
			WorkFG.bits.NoSIM=1; 
			goto	End_AFrame; 
		} 
		goto check_continue;		//不能识别 
	} 
 
	if(R3=='2')	//RING 
	{ 
		Get_char2(); 
		if(R3!=0x0d) goto check_continue; 
		if(!COMFG2.bits.AFrame) ATFrameFG.bits.Contin=1; 
		if(ATFrameFG.bits.Contin) return; 
		WorkFG.bits.Ring=1; 
		goto	End_AFrame; 
	} 
	if(R3=='0') 
	{ 
		Get_char2(); 
		if(R3!=0x0d) goto check_continue; 
		ATFrameFG.bits.OKend=1; 
		if(FrameEnd2.data==temp4.Uint) goto End_AFrame; 
		Framept2.pt=temp4.Uchp; 
		return; 
	} 
	if(R3=='4') 
	{ 
		Get_char2(); 
		if(R3!=0x0d) goto check_continue; 
		ATFrameFG.bits.ERRend=1; 
		if(FrameEnd2.data==temp4.Uint) goto End_AFrame; 
		Framept2.pt=temp4.Uchp; 
		return; 
	} 
	if(R3==0x0D) 
	{ 
		Get_char2(); 
		if(ATFrameFG.bits.Contin) return; 
		if(R3==0x0a) 
		{ 
			Framept2.pt=temp4.Uchp; 
			goto ATframe1; 
		} 
	} 
check_continue: 
	if(ATFrameFG.bits.Contin) return; 
	ATFrameFG.bits.unknow=1; 
	if(!COMFG2.bits.AFrame) 
	{ 
		Framept2.pt=temp4.Uchp; 
		return; 
	} 
End_AFrame: 
	Framept2.data=FrameEnd2.data; 
	COMFG2.bits.AFrame=0; 
	return; 
} 
 
void Find_char2(unsigned char ch) 
{ 
	unsigned char i; 
	i=50; 
	while(--i) 
	{ 
		Get_char2(); 
		if(ATFrameFG.bits.Contin) break; 
		if(R3==ch) break; 
	} 
}	 
		 
unsigned char Wait300d_2(void) 
{ 
//	COMFG2.bits.RXING=0; 
//	RXOVERTMR2=0; 
//	COMFG2.bits.AFrame=0; 
	if(WaitFrame2()!=1) 
		 return(0); 
	if(RXpt2.data==Framept2.data) 
		 return(0); 
	Framept2.data=FrameEnd2.data; 
	COMFG2.bits.AFrame=0; 
	if((*((unsigned int *)(Framept2.pt-2)))!=0x0d30)  
		 return(0); 
	return(1); 
} 
 
unsigned char WaitFrame2(void) 
{ 
	temp2.Uint=1000; 
	while(temp2.Uint--) 
	{ 
		DelayXms(1); 
		if(COMFG2.bits.RXING) temp2.Uint=100; 
		if(COMFG2.bits.AFrame||COMFG2.bits.FramErr) return(1); 
	} 
	return(0); 
} 
 
unsigned int PTinc2(unsigned int pt) 
{ 
	if(++pt>=COMBUF2_end) return(COMBUF2_st); 
	return(pt); 
} 
 
unsigned int PTdec2(unsigned int pt) 
{ 
	if(--pt=COMBUF1_end) return(COMBUF1_st); 
	return(pt); 
} 
 
unsigned int PTdec1(unsigned int pt) 
{ 
	if(--pt=0x0a) 
		{ 
			temp4.Uint=PTdec2(temp4.Uint); 
			return; 
		} 
		temp3.Uint=temp3.Uint*10+R3; 
	} 
} 
 
void Get_Lenth1(unsigned char Maxbit) 
{ 
	temp3.Uint=0; 
	if(SFrameFG.bits.Contin) return; 
	while(Maxbit--) 
	{ 
		Get_char1(); 
		R3-=0x30; 
		if((R3>=0x0a)||SFrameFG.bits.Contin) 
		{ 
			SFrameFG.bits.Contin=0; 
			temp4.Uint=PTdec1(temp4.Uint); 
			return; 
		} 
		temp3.Uint=temp3.Uint*10+R3; 
	} 
} 
	 
void CheckNum(void) 
{ 
	if(R3>=0x3a||R3<0x30) R3=0; 
} 
 
unsigned char HEX1BCD1(unsigned char hex1) 
{ 
	unsigned char bcd1; 
	while(hex1>=100) hex1-=100; 
	bcd1=(hex1/10); 
	return( bcd1*0x10+(hex1-bcd1*10) ); 
} 
 
void CheckMS(void) 
{ 
	if(!WorkFG.bits.TestMS) return; 
	temp1.Uint=0x3030; 
	for(R0=1;R0<=15;R0++)			////care for R0!!!!! 
	{ 
		if(++temp1.Uchar[0]>0x39) 
		{ 
			temp1.Uchar[0]=0x30; 
			temp1.Uchar[1]++; 
		} 
		ATcmgr(); 
		if(!WaitFrame2()) WaitFrame2(); 
	//	while(!WaitFrame2()) Nop(); 
		ATframe(); 
		if(ATFrameFG.bits.CMEERR) return; 
		if(ATFrameFG.bits.cmgd) 
		{ 
			ATcmgd(); 
			if(!WaitFrame2()) WaitFrame2(); 
		//	while(!WaitFrame2()) Nop(); 
			ResetCOMBUF2();	 
		} 
//		else if(!ATFrameFG.bits.OKend) 
//		{ 
//			WorkFG.bits.TestMS=1; 
//			return; 
//			Nop(); 
//		} 
	} 
	WorkFG.bits.TestMS=0; 
}