sms.c
来自「SIM300初始化源码,包括开机命令」· C语言 代码 · 共 2,008 行 · 第 1/5 页
C
2,008 行
{
if(memcmp(&ReSmsBuf1[3], "86337898", 8)==0)
temp=1;
}
if(temp==0)
{//保存普通短信;
SmsConTentdeal(ReSmsBuf1);
for(i=0;i<BUFFMAX;i++) //wangyh080401 清除发送短信标志;
MsmMsg_Send[i][0] = MSM_NULL;
return;
}
Ascii_H = ReSmsBuf1[11];
Ascii_L = ReSmsBuf1[12];
TwoAscii_OneBcd();
SeSmsTmp1 = Ascii_H;//消息类型
temp = ReSmsBuf1[0] - 13;
i=14;
if(ReSmsBuf1[i]=='#')
{
return;
}
#if 0 //20080216 shinelee
if(SeSmsTmp1==1)//名单设置
{
ReceiveSmsDeal(fWhiteRoll);
}
else if(SeSmsTmp1==2)//卡权限设置
{
ReceiveSmsDeal(fCardFeedom);
}
else if(SeSmsTmp1==3)//短信设置
{
ReceiveSmsDeal2(fSmsConTent);
}
else if(SeSmsTmp1==4)//预设号码
{
ReceiveSmsDeal(fPhoneNumber);
}
else if(SeSmsTmp1==5)//日期时间设置
{
UPdateTime();
}
else if(SeSmsTmp1==6)//网管设置
{
ReceiveSmsDeal(fServerNumber);
}
#endif
}
//****************
//-----------------------
else
DealComStep = 0;
}
#if 0 //air
////////////////////////////////////////////
void RegNewVer(void)
{
uchar temp[3];
ulMemAddr = fAppverput1;
ucMemRWLen = 3;
ucaMemBuf = temp;
vI2cRead();
if (temp[0] == '1')
{
ParaOneFill(fAppverput1, "0\r\n", 3);
Lab300A_ErrCode = 0;
Lab3008.Status = 2;
FillREPORT_RESP();
//开始发送
SendPduSms1(SeSmsBuf1, SeSmsBuf1In);
//清相关标志
SeSmsCaseBuf[CurSeSmsCase[0]] = 0xff;
CurSeSmsCase[0] = 0xff;
CurSeSmsCase[1] = 0xff;
SeSmsStep = 0;
}
else if (temp[0] == 'A')
{
Lab300A_ErrCode = 0x04;
Lab3008.Status = 0x01;
Lab3008.ErrCode = 0x1C;
setREPORT_REQ(); //2号信息
}
}
#endif
//////////////////////////////////
void vInitReSeSms(void)
{
GprsPara.GprsUseFlg = GPRS_RESESMS;
ucStatus = pRESESMS;
ReSeSmsStep = 0;
isHookOffSms = 0;
}
/////////////////////////////
void ReSeSmsPro(void) //收短信处理函数
{
//**********************************************************
//20070824heqbug 发送短信期间提机,提示等候
if ((HookFlg == HOOKOFF)&&(isHookOffSms==0))
{
isHookOffSms=1;
//vDispClear();
//vDispStr(2, 3, "正退出通讯");
//vDispStr(3, 3, "请 稍 等");
//************* 20070913 shinelee
//vDialInit(); //20071013heq
return;
//*************
}
//**********************************************************
switch(ReSeSmsStep) //_@20080723,Zhangkai把if.else if.else 的改为switch.
{
case 0: //Step 0
if (0==ChkReSeSmsTI) ReSeSmsStep =3;
break;
case 3: //Step 3
CheckATFree(1); //20070901 shinelee
ChkReSeSmsTI = 1800; //20070824heq
RecoAndSendSMS(); //短信底层收发
ReSeSmsStep = 4;
break;
case 4: //Step 4
if(pRESESMS == ucStatus)
{
if(ON == TelorSmsChk)
{
ReSeSmsStep =0;
return;
}
else
{
vMainWaitInit();
}
}
StarReceiveCom(1);
ReSeSmsStep =6;
break;
case 6: //Step 6
; //等调用它的程序来处理;
break;
default: //else Step
ReSeSmsStep = 0;
}
}
#if 0
//////////////////////////////////
void TerHaltPro(void)
{
if (TerHaltStep == 0)
{
if (ChkReSeSmsTI == 0)
{
if (Upreportstep == 0)
{
vInitReSeSms();
ChkReSeSmsTI = 2;
if (GprsPara.GprsSta == INGPRS)
{
SentComm(PRECOM, (uchar*)"+++", 3);
}
TerHaltStep = 2;
}
}
}
else if (TerHaltStep == 2)
{
if (ChkReSeSmsTI == 0)
TerHaltStep = 3;
else if (ChkReSeSmsTI > 3)
TerHaltStep = 3;
}
else if (TerHaltStep == 3)
{
ChkReSeSmsTI = 5;
RecoAndSendSMS(); //短信底层收发
TerHaltStep = 4;
}
else if (TerHaltStep == 4)
{
//if (SMSTimeOut == 0) //20070824heq
{
if (GprsPara.GprsSta == INGPRS)
{
// SentComm(WHOLECOM, (uchar*)"ATO", 3); //从AT到DATA模式
}
GprsPara.GprsUseFlg = GPRS_IDLE;
ChkReSeSmsTI = 20;
TerHaltStep = 0;
}
}
else
{
TerHaltStep = 0;
}
}
#endif
/*****************************************************************
函数:uchar GsmDecode7bit(uchar*pSrc, char*pDst, uchar nSrcLength)
功能:短信 7-bit解码
参数:pSrc: 源编码串指针
pDst: 目标字符串指针
nSrcLength: 源编码串长度
注意:
返回:目标字符串长度
设计:李雪辉
时间:20071203 shinelee
修改:
******************************************************************/
uchar GsmDecode7bit(uchar*pSrc, char*pDst, uchar nSrcLength)
{
uchar nSrc; // 源字符串的计数值
uchar nDst; // 目标解码串的计数值
uchar nByte; // 当前正在处理的组内字节的序号,范围是0-6
unsigned char nLeft; // 上一字节残余的数据
// 计数值初始化
nSrc = 0;
nDst = 0;
// 组内字节序号和残余数据初始化
nByte = 0;
nLeft = 0;
// 将源数据每7个字节分为一组,解压缩成8个字节
// 循环该处理过程,直至源数据被处理完
// 如果分组不到7字节,也能正确处理
while(nSrc<nSrcLength)
{
// 将源字节右边部分与残余数据相加,去掉最高位,得到一个目标解码字节
*pDst = ((*pSrc << nByte) | nLeft) & 0x7f;
// 将该字节剩下的左边部分,作为残余数据保存起来
nLeft = *pSrc >> (7-nByte);
// 修改目标串的指针和计数值
pDst++;
nDst++;
// 修改字节计数值
nByte++;
// 到了一组的最后一个字节
if(nByte == 7)
{
// 额外得到一个目标解码字节
*pDst = nLeft;
// 修改目标串的指针和计数值
pDst++;
nDst++;
// 组内字节序号和残余数据初始化
nByte = 0;
nLeft = 0;
}
// 修改源串的指针和计数值
pSrc++;
nSrc++;
}
*pDst = 0;
// 返回目标串长度
return nDst;
}
/*****************************************************************
函数:uchar gsmEncode7bit(uchar*pSrc, char*pDst, uchar nSrcLength)
功能:短信 7-bit编码
参数:
pSrc: 源字符串指针
pDst: 目标编码串指针
nSrcLength: 源字符串长度
注意:
返回: 目标编码串长度
设计:李雪辉
时间:20071203 shinelee
修改:
******************************************************************/
uchar gsmEncode7bit( uchar* pSrc, uchar* pDst, uchar nSrcLength)
{
uchar nSrc; // 源字符串的计数值
uchar nDst; // 目标编码串的计数值
uchar nChar; // 当前正在处理的组内字符字节的序号,范围是0-7
uchar nLeft; // 上一字节残余的数据
// 计数值初始化
nSrc = 0;
nDst = 0;
// 将源串每8个字节分为一组,压缩成7个字节
// 循环该处理过程,直至源串被处理完
// 如果分组不到8字节,也能正确处理
while(nSrc<nSrcLength)
{
// 取源字符串的计数值的最低3位
nChar = nSrc & 7;
// 处理源串的每个字节
if(nChar == 0)
{
// 组内第一个字节,只是保存起来,待处理下一个字节时使用
nLeft = *pSrc;
}
else
{
// 组内其它字节,将其右边部分与残余数据相加,得到一个目标编码字节
*pDst = (*pSrc << (8-nChar)) | nLeft;
// 将该字节剩下的左边部分,作为残余数据保存起来
nLeft = *pSrc >> nChar;
// 修改目标串的指针和计数值
pDst++;
nDst++;
}
// 修改源串的指针和计数值
pSrc++; nSrc++;
}
// 返回目标串长度
return nDst;
}
/*****************************************************************
函数:void SevenSmsHead(uchar* handnum)
功能:短信头
参数:七位编码短信
注意:
返回:
设计:李雪辉
时间:20071203 shinelee
修改:
******************************************************************/
void SevenSmsHead(uchar *number)
{
TpduHeadLen = 0;
memset(TpduHead, '\0', sizeof(TpduHead));
//memcpy(TpduHead, "0891683108707505F0040D91",24);
memcpy(TpduHead, (uchar*)cTelhead1, 6); //头6位
TpduHeadLen = TpduHeadLen + 6;
memcpy(TpduHead + TpduHeadLen, "0D", 2); //长度2位
TpduHeadLen = TpduHeadLen + 2;
memcpy(TpduHead + TpduHeadLen, "80", 2); //电话头部2位
TpduHeadLen = TpduHeadLen + 2;
memcpy(TpduHead + TpduHeadLen, number, 14); //电话
TpduHeadLen = TpduHeadLen + 14;
//memcpy(TpduHead + TpduHeadLen, cTelend, 6); //头6位 八位编码
if(CodeType!=0)
memcpy(TpduHead + TpduHeadLen, "000470", 6); //头6位 八位编码
else
memcpy(TpduHead + TpduHeadLen, "000070", 6); //头6位 七位编码
TpduHeadLen = TpduHeadLen + 6;
}
/*****************************************************************
函数:void HandSmsSend(uchar *content ,uchar *number)
功能:手机短信发送
参数:content内容 number目标号码
注意:
返回:
设计:李雪辉
时间:20071203 shinelee
修改:
******************************************************************/
void HandSmsSend(uchar *content ,uchar *number)
{
uint len;
uchar i,j;//,checks;
uchar ebuf[140];
memset(SeSmsBuf1, '\0', sizeof(SeSmsBuf1));
SeSmsBuf1In = 0;
SeSmsBuf1[SeSmsBuf1In++] = 0; //定位,后
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?