📄 itm100.c
字号:
startloginbit=0;
GPRSOnLineTime=20;
}
GpstDownCnt=1;
//----------------------------------------------2004-01-06
ChkSocketTime=6; //重新初始化GPRS下行指令值;
if(CurrentTxMode==0xcc) CurrentTxMode=0xbb;
//----------------------------------------------
}
else if (strstr(Uart1RxBUFF,"+CMGR:")!=0) //读写短信内容
{
delaynop(20);
strpos=0xff;
for(gprsonii=0;gprsonii<uart1datalen;gprsonii++)
{
if(Uart1RxBUFF[gprsonii]=='D')
{
strpos=gprsonii;
break;
}
}
if(strpos!=0xff) //取得对方的手机号码
{
for(gprsonii=0;gprsonii<11;gprsonii++)
NCtlCenterID[gprsonii]=Uart1RxBUFF[strpos+7+gprsonii];
RevGSMMark=0xaa;
}
MessDataStart=0xff;
for(gprsonii=0;gprsonii<128;gprsonii++)
{
if(Uart1RxBUFF[30+gprsonii]==0x0a)
{
MessDataStart=30+gprsonii;
break;
}
}
if(MessDataStart!=0xff)
_GPRSRevMess();
}
else if (strstr(Uart1RxBUFF,"+CMTI:")!=0) //接收到最新短信;[在短信模式下]
{
delaynop(20);
if(Uart1RxBUFF[15]==0x0d)
{
GprsMessPn=Uart1RxBUFF[14]-48;
}
else if(Uart1RxBUFF[15]!=0x0d&&Uart1RxBUFF[16]==0x0d)
{
GprsMessPn=Unite_Word(Uart1RxBUFF[14],Uart1RxBUFF[15]);
}
if(GPRSChgModebit) ScanGPRSTime=20;
if(startloginbit) //如果接收“CONNECT FAIL|
{
startloginbit=0;
GPRSOnLineTime=20;
}
TxGPRSMessCom('R'); //定时读GPRS短信
}
else if(strstr(Uart1RxBUFF,"CLOSED")!=0) //连接失败
{
if(GprsModbit)
{
TCPDownLine();
delaynop(2);
workmodebit=1;
RegMessModebit=1;
if(CurrentTxMode==0xbb)
CurrentTxMode=0xcc;
}
GprsMessbit=1;
GprsModbit=0;
GPRSChgModebit=1; //清除模式切换定时
ScanGPRSTime=20;
}
else if(strstr(Uart1RxBUFF,"CONNECT FAIL")!=0) //连接失败
{
if(GpstDownCnt<4) GpstDownCnt++; //如果小于3次,重新注册
else GpstDownCnt=1;
GPRSChgModebit=1; //清除模式切换定时
ScanGPRSTime=20*GpstDownCnt;
if(startloginbit) //如果接收“CONNECT FAIL|
{
startloginbit=0;
GPRSOnLineTime=20;
}
if(GprsModbit)
{
TCPDownLine();
delaynop(2);
workmodebit=1;
RegMessModebit=1;
if(CurrentTxMode==0xbb)
CurrentTxMode=0xcc;
GprsMessbit=1;
GprsModbit=0;
}
else
{
GprsMessbit=1;
GprsModbit=0;
if(CurrentTxMode==0xbb)
CurrentTxMode=0xcc;
delaynop(100);
DealMessPro();
}
}
else if(strstr(Uart1RxBUFF,"RING")!=0)
{
RxCallMark=0xee;
}
else if(strstr(Uart1RxBUFF,"NO CARRIER")!=0)
{
delaynop(20);
if(RxCallMark==0xee||CallMark==0xee) //拔打电话
{
U1Txbyte('A');
U1Txbyte('T');
U1Txbyte('H');
U1Txbyte(0x0d);
if(CallMark==0xee)
CallMark=0xff;
if(RxCallMark==0xee)
RxCallMark=0xff;
delaynop(2000);
}
}
else if(strstr(Uart1RxBUFF,"RDY")!=0) //接收到最新短信;
{
GprsMessbit=1; //短信图标显示
GprsModbit=0; //屏蔽GPRS图标显示;
}
else if(strstr(Uart1RxBUFF,"SEND OK")!=0)
{
ScanInnetCnt=2; //定时扫描GPRS网络与远程网络服务器联接
// if(GprsRegbit)
// {GprsRegbit=0;delaynop(1);GPRS_RunInnet();goto ExitGprsOnline;}
strpos=0xff;
if(uart1datalen<12) goto ExitGprsOnline; //len[send ok]=11
for(gprsonii=0;gprsonii<uart1datalen;gprsonii++)
{
if(Uart1RxBUFF[gprsonii]==0x80)
{
delaynop(10);
strpos=gprsonii;
break;
}
}
if(strpos!=0xff)
{
for(gprsonii=0;gprsonii<uart1datalen;gprsonii++)
{
if(Uart1RxBUFF[strpos+gprsonii]!=0x0d)
Uart1RxBUFF[gprsonii]=Uart1RxBUFF[strpos+gprsonii];
else
{
Uart1RxBUFF[gprsonii]=0x0d;
break;
}
}
// GPRSnetRxdata();
}
}
else if (strstr(Uart1RxBUFF,"+CPMS:")!=0)
{
strpos=0xff;
for(gprsonii=0;gprsonii<uart1datalen;gprsonii++)
{
if(Uart1RxBUFF[gprsonii]==':')
{
delaynop(10);
strpos=gprsonii;
break;
}
}
if(strpos!=0xff)
{
if(Uart1RxBUFF[strpos+8]==',')
GprsMessCnt=Uart1RxBUFF[strpos+7]-0x30;
else if((Uart1RxBUFF[strpos+8]>=0x30)&&(Uart1RxBUFF[strpos+8]<=0x93))
GprsMessCnt=Unite_Word(Uart1RxBUFF[strpos+7],Uart1RxBUFF[strpos+8]);
else
GprsMessCnt=0;
}
if(GprsMessCnt==0) ReadMessbit=0; //停止定时读短信1
else ReadMessbit=1; //定时处理完短信操作
}
ExitGprsOnline:;
}
/*=========================================================*/
/*功能说明:GPRS数传模式到短信模式的切换 */
/*函数名: DownGprsToMess() */
/*子程序编号: */
/*撰写人: 梁 辉 撰写时间: 2003-8-18 */
/*=========================================================*/
void DownGprsToMess()
{
if(GprsModbit)
{
delaynop(2);
workmodebit=1;
RegMessModebit=1;
if(CurrentTxMode==0xbb)
CurrentTxMode=0xcc;
//-----------------------
GprsMessbit=1;
GprsModbit=0;
//------------------------
}
if(!GprsMessbit) GprsMessbit=1;
GPRSChgModebit=1; //清除模式切换定时
ScanGPRSTime=20;
}
/*=========================================================*/
/*功能说明:查寻短信的条数 */
/*函数名: DealMessPro() */
/*子程序编号: */
/*撰写人: 梁 辉 撰写时间: 2003-12-06 */
/*=========================================================*/
code unsigned char *ConsultMess="AT+CPMS?";//查寻短信功能。
void DealMessPro()
{
unsigned char dealmessii;
for(dealmessii=0;dealmessii<8;dealmessii++)
Uart1TxBUFF[dealmessii]=ConsultMess[dealmessii];
Uart1TxBUFF[8]=0x0d;
for(dealmessii=0;dealmessii<9;dealmessii++)
U1Txbyte(Uart1TxBUFF[dealmessii]);
}
/*=========================================================*/
/*功能说明:主和备用IP的切换和选择 */
/*函数名: ChgGprsIPSet() */
/*子程序编号: */
/*撰写人: 梁 辉 撰写时间: 2003-12-08 */
/*=========================================================*/
/*unsigned char xdata GpRsIPKind=0xbb;
void ChgGprsIPSet()
{
unsigned char ChgIPii;
if(GprsIPKind==0xbb) //加载次IP地址
{
GprsIPKind=0xaa;//下次加载主IP地址
upsd_i2c_rcv(0xa2,0x00,0x90,15);
for(ChgIPii=0;ChgIPii<15;ChgIPii++)
RemoteIP[ChgIPii]=i2c_rcv_buf[ChgIPii]; //控制中心的IP地址
GPRSChgModebit=1; //定时GPRS上线操作
ScanGPRSTime=5;
}
else //加载主IP地址
{
GprsIPKind=0xbb;//下次加载次IP地址
upsd_i2c_rcv(0xa2,0x00,0x30,15);
for(ChgIPii=0;ChgIPii<15;ChgIPii++)
RemoteIP[ChgIPii]=i2c_rcv_buf[ChgIPii]; //控制中心的IP地址
GPRSChgModebit=1; //定时GPRS上线操作
ScanGPRSTime=5;
}
}*/
/*=========================================================*/
/*功能说明:定时扫描GPRS网络联接功能 */
/*函数名: void ScanInNetSocket() */
/*子程序编号: */
/*撰写人: 梁 辉 撰写时间: 2003-12-13 */
/*=========================================================*/
void ScanInnetSocket()
{
if(ScanInnetCnt!=0) ScanInnetCnt--;
else
{
ScanInnetCnt=2;
GPRSnetTxdata('L',1);
}
}
/*=========================================================*/
/*功能说明:定时6分钟检测下行指令 */
/*函数名: void ChkInNetSocket() */
/*子程序编号: */
/*撰写人: 梁 辉 撰写时间: 2004-01-06 */
/*=========================================================*/
void ChkInnetSocket()
{
if(ChkSocketTime!=0) ChkSocketTime--;
else
{
ChkSocketTime=6;
TCPDownLine(); //使能下线信号
delaynop(1500);
TCPconnectStart(); //使能上线
startloginbit=1; //定时20秒;确认能否上线:不能则下线
GPRSOnLineTime=20;
}
}
/***************************************************************************/
/*程序文件名:_GPRS_SMSMess */
/*功能说明:本程序模块主要用于SDR的短信通讯方式下的短信数据的接收 */
/*撰写时间: */
/*撰写人: */
/*主要说明: */
/*相关技术: */
/***************************************************************************/
void _GPRS_SMSMess() //"80"+"1E"+"长度[2]"+"短信内容"+"FF"
{
unsigned char messii;
unsigned char smstemp;
smstemp=Uart1RxBUFF[MessDataStart+4]&0x0f;
MessLon=smstemp*10;
smstemp=Uart1RxBUFF[MessDataStart+5]&0x0f;
MessLon=MessLon+smstemp;
MessLon=MessLon/2; //短信数据有效长度
for(messii=0;messii<MessLon;messii++) //接收短信数据
MessBUFF[13+messii]=Unite_Word(Uart1RxBUFF[MessDataStart+6+2*messii],Uart1RxBUFF[MessDataStart+7+2*messii]);
//---------------------------------------------------------------------------
for(messii=0;messii<2;messii++) MessBUFF[messii]=gpsTimeD[messii+2];
MessBUFF[2]='/';
for(messii=0;messii<2;messii++) MessBUFF[3+messii]=gpsTimeD[messii];
MessBUFF[5]=0x00;
for(messii=0;messii<2;messii++) MessBUFF[6+messii]=gpsTimeD[6+messii];
MessBUFF[8]=':';
for(messii=0;messii<2;messii++) MessBUFF[9+messii]=gpsTimeD[8+messii];
MessBUFF[11]='/';
MessBUFF[12]='M';
for(messii=0;messii<2;messii++)
MessBUFF[13+MessLon+messii]=0x20;
MessLen=MessLon+15;
NewMessbit=1; //短信标志位
//-------------------------------------
Taxistatus=Taxistatusbc;
statusValue=0x7f;
_GPRSSendMess(0xe1,1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -