📄 sms.c
字号:
if(NoLen<=18)
memcpy(MoveNumber[j],&tempbuff[24],NoLen);
else
memcpy(MoveNumber[j],&tempbuff[24],18); //wangyh080226只取前18位;
//*************
Ascii_H = 0x00;
Ascii_H = tempbuff[k];
Ascii_L = tempbuff[k + 1];
TwoAscii_OneBcd();
k = k + Ascii_H + 2+(Ascii_H % 2) + 4+16;
Ascii_H = 0x00;
Ascii_H = tempbuff[k];
Ascii_L = tempbuff[k + 1];
TwoAscii_OneBcd();
k = k + 2;
MsmMsg_Reco[j][0] = MSM_NEWMSG; //发PDU码
MsmMsg_Reco[j][1] = Ascii_H;
if (userdatahead == 0xFF)
{
Ascii_H = 0x00;
Ascii_H = tempbuff[k];
Ascii_L = tempbuff[k + 1];
TwoAscii_OneBcd();
userdatahead = Ascii_H + 1;
templen = userdatahead * 2;
}
else
{
userdatahead = 0;
templen = 0;
}
for (; templen <= (MsmMsg_Reco[j][1] *2); templen = templen + 2)
{
Ascii_H = 0x00;
Ascii_H = tempbuff[k + templen];
Ascii_L = tempbuff[k + templen + 1];
TwoAscii_OneBcd();
MsmMsg_Reco[j][2+sizelen] = Ascii_H;
sizelen++;
}
MsmMsg_Reco[j][1] = MsmMsg_Reco[j][1] - userdatahead;
sizelen = 0;
//wangyh080326取时间出来;
for(iTemp=0;iTemp<12;)
{//把时间调换一下位置;
aTemp =tempbuff[28+NoLen+iTemp+1];
tempbuff[iTemp] =aTemp;
aTemp =tempbuff[28+NoLen+iTemp];
tempbuff[iTemp+1] =aTemp;
iTemp += 2;
}
vAsciiToBcdBuf((uchar *)&MsgSmsTime[j], tempbuff, 12);
}
}
}
}
return ;
}
//*********************** 20070908 shinelee
void matterhead(uchar sum, uchar serial,uchar add)
{
//内容部份的消息头
//用户数据长度
SeSmsBuf1In = 0;
SeSmsBuf1[SeSmsBuf1In++] = 0; //定位,后面计算长度
SeSmsBuf1[SeSmsBuf1In++] = 0;
//流水号
//*************//20071108 shinelee
if(sequence==1)
{
//SeSmsBuf1[SeSmsBuf1In++] = smsnumber[0];//20080319
//SeSmsBuf1[SeSmsBuf1In++] = smsnumber[1];
//SeSmsBuf1[SeSmsBuf1In++] = smsnumber[2];
//SeSmsBuf1[SeSmsBuf1In++] = smsnumber[3];
}
else
{
//*************
OneHL_TwoAscii(SeSmsSeq >> 8);
SeSmsBuf1[SeSmsBuf1In++] = Ascii_H;
SeSmsBuf1[SeSmsBuf1In++] = Ascii_L;
OneHL_TwoAscii(SeSmsSeq);
SeSmsBuf1[SeSmsBuf1In++] = Ascii_H;
SeSmsBuf1[SeSmsBuf1In++] = Ascii_L;
if(add==1) SeSmsSeq++;
}//20071108 shinelee
//总帧数]
SeSmsBuf1[SeSmsBuf1In++] = sum;
//当前帧号
SeSmsBuf1[SeSmsBuf1In++] = serial;
SeSmsBuf1[SeSmsBuf1In++] = 0x0D;
SeSmsBuf1[SeSmsBuf1In++] = 0x0A;
}
//*********************** 20070908 shinelee
#if 0//air
void SetRegisterState(uchar state)
{
uchar aTmp[2];
if(state)
{
//设置终端已经注册子
ParaOneFill(fTerRegFlg1, "OK\r\n", 4); //air
}
else
{
//设置终端没注册
aTmp[0] = 0xff;
aTmp[1] = 0xff;
ulMemAddr = fTerRegFlg1;
ucMemRWLen = 2;
ucaMemBuf = aTmp;
vI2cWrite(); //ulMemAddr, ucaMemBuf, ucMemRWLen
SeSmsCaseBuf[REGISTER_REQ_0] = REGISTER_REQ_0; //没注册
if (IfRegistFlg == HAVEREGIST)
{
bFlashTime = 1;
IfRegistFlg = NOTREGIST;
}
}
//*************** 20070913 shinelee
aTmp[0] = 'F';
aTmp[1] = 'F';
ulMemAddr = fRegistrCase1;
ucMemRWLen = 2;
ucaMemBuf = aTmp;
vI2cWrite(); //ulMemAddr, ucaMemBuf, ucMemRWLen
//***************
}
////////////////////////////
void ChkRegister(void)
{
//检查是否已经与监控平台注册了
uchar aTmp[4];
ulMemAddr = fTerRegFlg1;
ucMemRWLen = 4;
ucaMemBuf = aTmp;
vI2cRead(); //ulMemAddr, ucaMemBuf, ucMemRWLen
if ((aTmp[0] != 'O') || (aTmp[1] != 'K'))
{
SeSmsCaseBuf[REGISTER_REQ_0] = REGISTER_REQ_0; //没注册
if (IfRegistFlg == HAVEREGIST)
{
bFlashTime = 1;
IfRegistFlg = NOTREGIST;
}
}
else
{
if (IfRegistFlg != HAVEREGIST)
{
IfRegistFlg = HAVEREGIST;
bFlashTime = 1;
}
}
Regstertime = cRegstertime;
}
#endif
//*************************** 20070913 shinelee
//写入四个字符到SeSmsBuf1。
void Load_SeSmsBuf1_Four(uchar v1, uchar v2)
{
SeSmsBuf1[SeSmsBuf1In++] = v1;
SeSmsBuf1[SeSmsBuf1In++] = v2;
SeSmsBuf1[SeSmsBuf1In++] = 0x0D;
SeSmsBuf1[SeSmsBuf1In++] = 0x0A;
}
//从flash中读出,写入SeSmsBuf1
void Flash_to_SeSmsBuf1(ulong add, uchar len)
{
SeSmsTmp1 = FillOnePara((uchar*) &SeSmsBuf1[SeSmsBuf1In], add, len);
if (SeSmsTmp1 != 0xFF)
SeSmsBuf1In += SeSmsTmp1;
SeSmsBuf1[SeSmsBuf1In++] = 0x0D;
SeSmsBuf1[SeSmsBuf1In++] = 0x0A;
}
//从flash中读出,写入SeSmsBuf1
void Flash2_to_SeSmsBuf1(uchar *p, uchar plen, ulong add, uchar len)
{
memcpy((uchar*) &SeSmsBuf1[SeSmsBuf1In], p, plen);
SeSmsBuf1In += plen;
Flash_to_SeSmsBuf1(add,len);
}
//往SeSmsBuf1填写内容
void Str_to_SeSmsBuf1(uchar *p, uchar len)
{
memcpy((uchar*) &SeSmsBuf1[SeSmsBuf1In], p, len);
SeSmsBuf1In += len;
SeSmsBuf1[SeSmsBuf1In++] = 0x0D;
SeSmsBuf1[SeSmsBuf1In++] = 0x0A;
}
//往SeSmsBuf1填写内容
void Str2_to_SeSmsBuf1(uchar *p1, uchar len1,uchar *p2, uchar len2)
{
memcpy((uchar*) &SeSmsBuf1[SeSmsBuf1In], p1, len1);
SeSmsBuf1In += len1;
Str_to_SeSmsBuf1(p2,len2);
}
///////////////////////////////////
void setREPORT_REQ(void)
{ //暂时注消 20080116 shinelee
//SeSmsCaseBuf[REPORT_REQ_0] = REPORT_REQ_0;
}
//////////////////////////////////////////////
void ResetSeSmsBuf(void)
{
memset(SeSmsCaseBuf, NOSMSFORSE, cSeSmsBufLen);
}
//////////////////////////////////////////////
uchar IfNeedSeSms(void)
{
uchar i;
for (i = 0; i < cSeSmsBufLen; i++)
{
if (SeSmsCaseBuf[i] == i)
return SeSmsCaseBuf[i];
}
return NOSMSFORSE;
}
//20070816hequpdate 整个函数需要替换
//04号命令监控平台下发下载/升级通知请求,现从包中取相相应数
uchar GetUPDATE_NOTIFY_REQ(void)
{
//对比序列号
uint Locat;
//uint Location; //暂时注释 20070826heq
uint temp;
uchar revalue, i;
uchar appid[5], appid2[5];
//********************************************************
//********************************************************
//取出各参数
//取出APPID,
Locat = GetNextDHLocat((uchar*) &ReSmsBuf1[0], 0, 50);
Locat++; //越过逗号
//**************************************************************
//对比地区号 20070826heq
if(memcmp((uchar *)&ReSmsBuf1[Locat+4], (uchar *)&SOFTVERSTR[3], 2)==1)
{
UpDataNo = 0x00;
return 0x24;//地区号不对,数据无效。
}
//*************************************************************
//取出APPVER
//对比版本号
//***********************************************************
//20070826heq
if(memcmp((uchar *)&ReSmsBuf1[Locat], (uchar *)&SOFTVERSTR[0], 3)==0 )
//************************************************************
{
UpDataNo = 0x00;
return 0x22; //已经是最新版本了
}
appid[0] = ReSmsBuf1[Locat];
appid[1] = ReSmsBuf1[Locat + 1];
appid[2] = ReSmsBuf1[Locat + 2];
appid[3] = '\r';
appid[4] = '\n';
temp = GetNextDHLocat((uchar*) &ReSmsBuf1[Locat], Locat, 50);
Locat = temp + Locat;
Locat++; //越过逗号
//取出URL
ulMemAddr = fUrl1; //fSysUPIp1;
ucMemRWLen = 100;
ucaMemBuf = (uchar*) &ReSmsBuf1[Locat];
vI2cWrite(); //ulMemAddr, ucaMemBuf, ucMemRWLen
revalue = Get_FLash_host();
if (revalue)
{
for (i = 0; i < 32; i++)
{
if (IpAndPortBuf[i] == 0)
break;
}
IpAndPortBuf[i++] = 0x0D;
IpAndPortBuf[i++] = 0x0A;
ulMemAddr = fSysUPIp1;
ucMemRWLen = i;
ucaMemBuf = IpAndPortBuf;
vI2cWrite(); //ulMemAddr, ucaMemBuf, ucMemRWLen
}
else
{
return 0x24; //无效数据内容
}
FillOnePara(appid2, fAppIdver1, 5);
if (memcmp((uchar*)appid, (uchar*)appid2, 3))
//Flash的版本号不同
{
ClrFileDegred(); //初始化下载文件
}
ParaOneFill(fAppIdver1, appid, 5);
UpDataNo = 0xFA;
return 0x20; //操作成功
}
/////////////////////////////////////////////////
void FillUPDATE_NOTIFY_RESP(uchar Result)
{
//终端对监控平台下发下载/升级通知请求的应答
//BasMsmHead(); 20080319
memset(SeSmsBuf1, '\0', sizeof(SeSmsBuf1));
// matterhead(); //20070908 shinelee
matterhead('1','1',1); //20070908 shinelee
// 命令字节
//*************************** 20070913 shinelee
Load_SeSmsBuf1_Four('8','4');
//****************************
//响应结果码
OneHL_TwoAscii(Result);
//*************************** 20070913 shinelee
Load_SeSmsBuf1_Four(Ascii_H,Ascii_L);
//****************************
//用户数据长度
//OneHL_TwoAscii(SeSmsBuf1In-2+12 );
OneHL_TwoAscii(SeSmsBuf1In - 2);
SeSmsBuf1[0] = Ascii_H;
SeSmsBuf1[1] = Ascii_L;
}
#if 0//air
///////////////////////////////////
uchar TerSeqCmp(uchar *p)
{
//对比序列号
uchar aTmp[16];
ulMemAddr = fTerSeq1;
ucMemRWLen = 16;
ucaMemBuf = aTmp;
vI2cRead(); //ulMemAddr, ucaMemBuf, ucMemRWLen
if (memcmp(aTmp, p, 16) == 0)
return 1;
else
return 0;
}
#endif
/////////////////////////////////////////////
void RecoAndSendSMS(void)
{
RecSmsMsg(); //收短信并解码
if(aFlagTemp != 0)
{
ReSmsPro(); //处理收到的短信 存储并清除SIM卡中相同内容短信
}
}
/////////////////////////////////////////////////////////////////////
void SeSmsPro(void)//短信主动发送
{
if (SeSmsStep == 0)
{
SeSmsTmp1 = IfNeedSeSms();
if (SeSmsTmp1 != NOSMSFORSE)
{
CurSeSmsCase[0] = SeSmsTmp1;
CurSeSmsCase[1] = cSmsComInBuf[SeSmsTmp1];
CurSeSmsCase[2] = 3;
CurSeSmsCase[3] = 0xff;
SeSmsStep = 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -