📄 sms.c
字号:
//------------------------------
else if (SeSmsStep == 1)
{
//判别是否适合发送
SeSmsStep = 10;
}
//----------------------------
else if (SeSmsStep == 10)
{
//开始填充数
if (CurSeSmsCase[1] == REGISTER_REQ)
{
//0x01// 终端/底座注册请求
//FillREGISTER_REQ(); //
//开始发送
//SendPduSms1(SeSmsBuf1, SeSmsBuf1In);
//清相关标志
SeSmsCaseBuf[CurSeSmsCase[0]] = 0xff;
CurSeSmsCase[0] = 0xff;
CurSeSmsCase[1] = 0xff;
SeSmsStep = 0;
//********************************
//20070824heq
if (ucStatus != pRESESMS) ChkReSeSmsTI=60;
return;
//*********************************
}
else if (CurSeSmsCase[1] == REPORT_REQ)
{
//02信息上报, 此命令平台不用应答
//FillREPORT_RESP();
//开始发送
//SendPduSms1(SeSmsBuf1, SeSmsBuf1In);
//清相关标志
SeSmsCaseBuf[CurSeSmsCase[0]] = 0xff;
CurSeSmsCase[0] = 0xff;
CurSeSmsCase[1] = 0xff;
SeSmsStep = 0;
}
else if (CurSeSmsCase[1] == CONFIG_GET_REQ)
{
// 0x03// 终端/底座配置参数请求
//FillCONFIG_GET_REQ();
//开始发送
//SendPduSms1(SeSmsBuf1, SeSmsBuf1In);
//清相关标志
SeSmsCaseBuf[CurSeSmsCase[0]] = 0xff;
CurSeSmsCase[0] = 0xff;
CurSeSmsCase[1] = 0xff;
SeSmsStep = 0;
}
else if (CurSeSmsCase[1] == HEARTBEAT_REQ)
{
// 0x09//心跳包
//FillHEARTBEAT_REQ();
//开始发送
//SendPduSms1(SeSmsBuf1, SeSmsBuf1In);
//清相关标志
SeSmsCaseBuf[CurSeSmsCase[0]] = 0xff;
CurSeSmsCase[0] = 0xff;
CurSeSmsCase[1] = 0xff;
SeSmsStep = 0;
}
if (ucStatus != pRESESMS)
ChkReSeSmsTI = 30; //20070824heq
//若不在短信收发状态,30秒钟以后切换20070811heq
}
//------------------
else
SeSmsStep = 0;
}
////////////////////////////////////////////
uchar GetSmsToReSmsBuf1(void)
{
//将短信整合到ReSmsBuf1中;
uchar i;//, j;
//uchar ii[6]; //存流水号和总帧数和当前帧数
//uchar Flg;
SmsBuffi =0;
memset(ReSmsBuf1, 0x0, cReSmsBufLen);
for (i = 0; i < BUFFMAX; i++)
{
// Flg = 0;
// memset(ReSmsBuf1, 0x0, cReSmsBufLen);
ReSmsBuf1In = 0;
ReSmsBuf1Out = 0;
//******************* 20071203 shinelee
if(SmsCodeType[i]==0)
{
//SmsCodeType[i]=0xff;
if(GsmDecode7bit(&MsmMsg_Reco[i][2], (char*)&ReSmsBuf1[1+i*140], MsmMsg_Reco[i][1]))
{
ReSmsBuf1[i*140] = MsmMsg_Reco[i][1];
memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);
SmsBuffi = i+1;
if((SmsCodeType[i+1]==0)||(SmsCodeType[i+1]==8)||(SmsCodeType[i+1]==4))
continue;
else
return 2;
}
else
{
SmsCodeType[i]=0xff;
memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);
if((SmsCodeType[i+1]==0)||(SmsCodeType[i+1]==8)||(SmsCodeType[i+1]==4))
continue;
else
return 0;
}
}
else if(SmsCodeType[i]==8)
{
//SmsCodeType[i]=0xff;
memcpy(&ReSmsBuf1[1+i*140],&MsmMsg_Reco[i][2],MsmMsg_Reco[i][1]);
ReSmsBuf1[i*140] = MsmMsg_Reco[i][1];
UnicodeToGBK(&ReSmsBuf1[1+i*140],ReSmsBuf1[i*140]);
memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);
SmsBuffi = i+1;
if((SmsCodeType[i+1]==0)||(SmsCodeType[i+1]==8)||(SmsCodeType[i+1]==4))
continue;
else
return 2;
}
//----------------------------- 20080221 shinelee
else if(SmsCodeType[i]==4)
{
memcpy(&ReSmsBuf1[1+i*140],&MsmMsg_Reco[i][2],MsmMsg_Reco[i][1]);
ReSmsBuf1[i*140] = MsmMsg_Reco[i][1];
memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);
SmsBuffi = i+1;
if((SmsCodeType[i+1]==0)||(SmsCodeType[i+1]==8)||(SmsCodeType[i+1]==4))
continue;
else
return 2;
}
//-----------------------------
else //if(SmsCodeType[i]!=4)//非法短信
{
SmsCodeType[i]=0xff;
memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);
SmsBuffi = i+1;
if((i+1)<BUFFMAX)
continue;
else
return 0;
}
//*******************
#if 0
if((MsmMsg_Reco[i][0] != MSM_NULL) && ((MsmMsg_Reco[i][2] ==0) || (MsmMsg_Reco[i][5] == 0)))
{
MsmMsg_Reco[i][0] = MSM_NULL;
}
if (MsmMsg_Reco[i][0] != MSM_NULL)
//第一个字节是状态,
{
//本条有短信
//判断消息是否有误
if (MsmMsg_Reco[i][3] == 0)
{
//判断消息是否有误
MsmMsg_Reco[i][0] = MSM_NULL; //改标志
continue;
}
//有些消息没有总幀数和当前幀数
if (GetNextDALocat(ReSmsBuf1, 0, 20) < 9)
{
//此消息没有总幀数和当前幀数
memcpy(ReSmsBuf1, (uchar*) &MsmMsg_Reco[i][2], MsmMsg_Reco[i][1]);
//烤内容
ReSmsBuf1In = MsmMsg_Reco[i][1]; //长度
MsmMsg_Reco[i][0] = MSM_NULL; //改标志
//去掉消息头
for (iSeSmsTmp1 = 8; iSeSmsTmp1 < cReSmsBufLen; iSeSmsTmp1++)
ReSmsBuf1[iSeSmsTmp1 - 8] = ReSmsBuf1[iSeSmsTmp1];
memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);//20071101 shinelee
return 1; //短信包整合完成
}
//先查看总帧数和当前帧数
if (MsmMsg_Reco[i][8] == '1')
//总包数为1没有后继包了.
{
memcpy(ReSmsBuf1, (uchar*) &MsmMsg_Reco[i][2], MsmMsg_Reco[i][1]);
//烤内容
memcpy(smsnumber,ReSmsBuf1,4);//流水号 20071108 shinelee
ReSmsBuf1In = MsmMsg_Reco[i][1]; //长度
MsmMsg_Reco[i][0] = MSM_NULL; //改标志
//去掉消息头
for (iSeSmsTmp1 = 10; iSeSmsTmp1 < cReSmsBufLen; iSeSmsTmp1++)
ReSmsBuf1[iSeSmsTmp1 - 10] = ReSmsBuf1[iSeSmsTmp1];
memset(MsmMsg_Reco[i], 0x0, MSGMAXLEN);//20071101 shinelee
return 1; //短信包整合完成
}
else
{
//本条有后继包,则先查出第一个包
if (MsmMsg_Reco[i][9] == '1')
{
//存第一个包的存流水号和总帧数
ii[0] = MsmMsg_Reco[i][2]; //存流水号
ii[1] = MsmMsg_Reco[i][3];
ii[2] = MsmMsg_Reco[i][4];
ii[3] = MsmMsg_Reco[i][5];
memcpy(smsnumber,ii,4);//流水号 20071108 shinelee
ii[4] = MsmMsg_Reco[i][8]; //总帧数
ii[5] = MsmMsg_Reco[i][9] + 1; //下一帧的包号
Flg = 1; //要查后继包
memcpy(ReSmsBuf1, (uchar*) &MsmMsg_Reco[i][2], MsmMsg_Reco[i][1]);
//烤内容
ReSmsBuf1In = MsmMsg_Reco[i][1]; //长度
MsmMsg_Reco[i][0] = MSM_TIMESAVE; //改标志为暂存标志
}
}
}
if (Flg == 1)
{
//以指定的流水号查后继包
for (j = 0; j < BUFFMAX; j++)
{
//查后继包
if (MsmMsg_Reco[j][0] != MSM_NULL)
//第一个字节是状态,
{
//本条有短信
//先对比流水号
if (memcmp(ReSmsBuf1, (uchar*) &MsmMsg_Reco[j][2], 4) == 0)
//流水号一致
{
if (MsmMsg_Reco[j][9] == ii[5])
//是不是所要的包号
{
//是所要包号
ii[5] = MsmMsg_Reco[j][9] + 1; //下一帧的包号
//memcpy(ReSmsBuf1,(uchar *)&MsmMsg_Reco[j][2],MsmMsg_Reco[j][1]); //内容
memcpy(ReSmsBuf1 + ReSmsBuf1In, (uchar*) &MsmMsg_Reco[j][12],
MsmMsg_Reco[j][1] - 10); //内容
ReSmsBuf1In += (MsmMsg_Reco[j][1] - 10); //长度
MsmMsg_Reco[j][0] = MSM_TIMESAVE; //改标志为暂存标志
/* if(MsmMsg_Reco[j][9]>ReSmsBuf1[7])
{ //已经接收完所有的包.
//将暂存标志改为空
for(j=0;j<BUFFMAX;j++)
{
if(MsmMsg_Reco[j][0]==MSM_TIMESAVE)
MsmMsg_Reco[j][0]=MSM_NULL;
}
//去掉消息头
for(iSeSmsTmp1=10;iSeSmsTmp1<cReSmsBufLen;iSeSmsTmp1++)
ReSmsBuf1[iSeSmsTmp1-10]=ReSmsBuf1[iSeSmsTmp1];
return 1;//短信包整合完成
}*/
if (MsmMsg_Reco[j][9] >= MsmMsg_Reco[j][8])
{
//已经接收完所有的包.
//将暂存标志改为空
for (j = 0; j < BUFFMAX; j++)
{
if (MsmMsg_Reco[j][0] == MSM_TIMESAVE)
{//20071109 shinelee
MsmMsg_Reco[j][0] = MSM_NULL;
memset(MsmMsg_Reco[j], 0x0, MSGMAXLEN);//20071109 shinelee
}//20071109 shinelee
}
//去掉消息头
for (iSeSmsTmp1 = 10; iSeSmsTmp1 < cReSmsBufLen;
iSeSmsTmp1++)
ReSmsBuf1[iSeSmsTmp1 - 10] = ReSmsBuf1[iSeSmsTmp1];
//memset(MsmMsg_Reco[j], 0x0, MSGMAXLEN);//20071109 shinelee
return 1; //短信包整合完成
}
//再从头开始查 下一包
j = 0;
}
//不是所要的包号则下一条。
}
}
} //流水号不一致,则下一条
}
#endif
}
return 0;
}
//////////////////////////////////////////
void ReSmsPro(void)
{
uchar i,temp;//,checksum;//20071203 shinelee
// uchar content[5];//20071203 shinelee
if(DealComStep == 0)//读缓冲区消息
{
temp = GetSmsToReSmsBuf1();
if (temp == 1)
{
//DealComStep = 10;
}
else if(temp==2)
{
DealComStep = 11;
}
}
//-----------------------------
if (DealComStep == 10)
{//处理消息
Ascii_H = ReSmsBuf1[0];
Ascii_L = ReSmsBuf1[1];
TwoAscii_OneBcd();
SeSmsTmp1 = Ascii_H;
if (SeSmsTmp1 == REGISTER_RESP)
{
DealComStep = 0;
}
else if (SeSmsTmp1 == CONFIG_GET_RESP)
{
DealComStep = 0;
}
else if (SeSmsTmp1 == UPDATE_NOTIFY_REQ)
{
//#define UPDATE_NOTIFY_REQ 0x04// 监控平台下发下载/升级通知请求
//#define UPDATE_NOTIFY_RESP 0x84// 终端对于下载/升级通知的应答
sequence=1;//20071108 shinelee
SeSmsTmp1 = GetUPDATE_NOTIFY_REQ();
FillUPDATE_NOTIFY_RESP(SeSmsTmp1);
sequence=0;//20071108 shinelee
//SendPduSms1(SeSmsBuf1, SeSmsBuf1In); 20080319
DealComStep = 0;
if (UpDataNo == 0xFA)
{//GPRS软件下载
UpdateStandBy();
SentComm(PRECOM, "+++", strlen("+++"));
StarReceiveCom(2);
CheckATFree(1);
//=============================================
//20080714xiehb
#ifdef SIM300 //断开GPRS连接
GprsToAt(0);
#else
SentComm(WHOLECOM, "ATH", strlen("ATH"));
StarReceiveCom(2);
CheckATFree(1);
#endif
//============================================
UpdateStart = 1; ////1= 升级开始0=升级结束
ulMemAddr = fUpdateStart;
ucMemRWLen = 1;
ucaMemBuf = (uchar*) &UpdateStart;
vI2cWrite(); //ulMemAddr, ucaMemBuf, ucMemRWLen
}
}
else if (SeSmsTmp1 == CONFIG_SET_REQ)
{
DealComStep = 0;
}
else if (SeSmsTmp1 == CONFIG_QUERY_REQ)
{
DealComStep = 0;
}
else if (SeSmsTmp1 == STATUS_QUERY_REQ)
{
DealComStep = 0;
}
else if (SeSmsTmp1 == REMOTE_CONTROL_REQ)
{
DealComStep = 0;
}
else if (SeSmsTmp1 == REPORT_Car_REQ)
{
DealComStep = 0;
}
else if (SeSmsTmp1 == CONFIG_NOTIFY_REQ)
{
DealComStep = 0;
}
}
//------------------------
//****************** 20071203 shinelee
else if(DealComStep == 11)
{
DealComStep = 0;
temp=0;
if( ((ReSmsBuf1[1]=='T')||(ReSmsBuf1[1]=='t'))
&&((ReSmsBuf1[2]=='P')||(ReSmsBuf1[2]=='p')))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -