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;
}