📄 atframe.c
字号:
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<ATBUF)
{
Com1TrErr:
SendATFG.bits.ATing=0;
SendATFG.bits.DATAing=0;
_asm
goto EndTX2
_endasm
}
R3=*(TXpt1.pt++);
if(R3==0x0d)
{
if(SendATFG.bits.cipstart)
{
TXpt1.pt=ATBUF+1;
subah=0;
subal=AT_IPadr;
IICNUM=15;
IICMEM=ATBUF+1;
EEPR();
subah=0;
subal=AT_IPport;
IICNUM=5;
IICMEM=ATBUF+19;
EEPR();
ATBUF[0]='"';
ATBUF[16]='"';
ATBUF[17]=',';
ATBUF[18]='"';
ATBUF[24]='"';
ATBUF[25]=0x0d;
R3=ATBUF[0];
}
else SendATFG.bits.ATing=0;
SendATFG.bits.cipstart=0;
}
}
else
{
_asm
goto EndTX2
_endasm
}
TXREG2=R3;
}
void ResetCOMBUF2(void)
{
RXpt2.pt=COMBUF2;
TXpt2.pt=COMBUF2;
Framept2.pt=COMBUF2;
COMFG2.ch=0x0;
}
void ResetCOMBUF1(void)
{
RXpt1.pt=COMBUF1;
TXpt1.pt=COMBUF1;
Framept1.pt=COMBUF1;
COMFG1.ch=0x0;
SendATFG.bits.Tranning=0;
}
void ATframe(void)
{
ATFrameFG.ch=0;
if(COMFG2.bits.BUF_over)
{
INTCONbits.GIE=0;
ResetCOMBUF2();
INTCONbits.GIE=1;
}
if(COMFG2.bits.FramErr)
{
INTCONbits.GIE=0;
Framept2.data=FrameErr2.data;
COMFG2.bits.FramErr=0;
COMFG2.bits.AFrame=0;
INTCONbits.GIE=1;
}
ATframe1:
INTCONbits.GIE=0;
RXptbak.pt=RXpt2.pt;
INTCONbits.GIE=1;
if(Framept2.data==RXptbak.data)
{
COMFG2.bits.AFrame=0;
return;
}
temp4.Uchp=Framept2.pt; //temp4.Uchp 存储FRAME指针
Get_char2();
if(R3=='>') // > 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(NetRssi<CS_rssi) WorkFG.bits.NetWeek=1;
if(NetBer>CS_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: <mr>
{
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==' ')
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -