📄 csmscom.cpp
字号:
#include "class.h"
#include "globlclass.h"
SmsType CSmsCom:: m_SmsType;
void CSmsCom::Init(void)
{
m_InitFg=GGprsModule.InitNote();
}
void CSmsCom:: ReAckSms_NoCenter(const INT8U *DataSrc,INT16U datalen)
{
INT16U codelen;
INT16U tempdatalen;
INT16U deallen16;
INT8U tempsrclen;
INT8U temp8;
INT8U pDst[400];
INT8U tempSrc[140+4];
deallen16=0;
tempdatalen=datalen;
if((m_SmsType.TP_DCS&0x0c)==GSM_UCS2)
temp8=64;
else
temp8=138;
m_Smlseq=0;
for(INT8U m=0;m<7;m++)
{
if(tempdatalen>temp8)
{
tempsrclen=CodeSmsPro(&DataSrc[deallen16],temp8,0,tempSrc);
deallen16+=temp8;
tempdatalen-=temp8;
}
else
{
tempsrclen=CodeSmsPro(&DataSrc[deallen16],tempdatalen,1,tempSrc);
m=7;
}
codelen=(GsmEncodePdu_NoCenter(m_SmsType,tempSrc,tempsrclen,pDst));
GGprsModule.SendSmsNByte(pDst,codelen);
}
}
void CSmsCom:: ReAckSms_Center(const INT8U *DataSrc,INT16U datalen)
{
INT16U codelen;
INT16U tempdatalen;
INT16U deallen16;
INT8U tempsrclen;
INT8U temp8;
INT8U pDst[512];
INT8U tempSrc[140+4];
deallen16=0;
tempdatalen=datalen;
if((m_SmsType.TP_DCS&0x0c)==GSM_UCS2)
temp8=64;
else
temp8=138;
m_Smlseq=0;
for(INT8U m=0;m<7;m++)
{
if(tempdatalen>temp8)
{
tempsrclen=CodeSmsPro(&DataSrc[deallen16],temp8,0,pDst);
deallen16+=temp8;
tempdatalen-=temp8;
}
else
{
tempsrclen=CodeSmsPro(&DataSrc[deallen16],tempdatalen,1,pDst);
m=7;
}
codelen= (GsmEncodePdu_Center(m_SmsType,tempSrc,tempsrclen,pDst));
GGprsModule.SendSmsNByte(pDst,codelen);
}
}
void CSmsCom::AutoSendSms_NoCenter(const INT8U *pSrc,INT16U datalen)
{
INT8U tempbuf[8];
pa.Read(PAP0F4ADD,8,tempbuf);
SendSms_NoCenter(tempbuf,GSM_8BIT,pSrc, datalen);
}
void CSmsCom::SendSms_NoCenter(const INT8U *SrcNumber,INT8U type,const INT8U *DataSrc,INT16U datalen)
{
INT16U codelen;
INT16U tempdatalen;
INT16U deallen16;
INT8U tempsrclen;
INT8U temp8;
INT8U pDst[512];
INT8U tempSrc[140+4];
deallen16=0;
tempdatalen=datalen;
if((type&0x0c)==GSM_UCS2)
temp8=64;
else
temp8=138;
m_Smlseq=0;
for(INT8U m=0;m<7;m++)
{
if(tempdatalen>temp8)
{
tempsrclen=CodeSmsPro(&DataSrc[deallen16],temp8,0,tempSrc);
deallen16+=temp8;
tempdatalen-=temp8;
}
else
{
tempsrclen=CodeSmsPro(&DataSrc[deallen16],tempdatalen,1,tempSrc);
m=7;
}
codelen=(AnySmsEncode_NoCenter(SrcNumber,type,tempSrc,tempsrclen,pDst));
GGprsModule.SendSmsNByte(pDst,codelen);
}
}
INT8U CSmsCom::CodeSmsPro(const INT8U *pSrc,INT8U pSrcLen,INT8U type,INT8U *pDst)
{
BufToBuf(&pDst[2],pSrc,pSrcLen);
pDst[0]=m_Smseq;
pDst[1]=m_Smseq>>8;
pDst[1]&=0x0f;
pDst[1]|=m_Smlseq<<4;
if(type==0)
pDst[1]&=0x7f;
else
pDst[1]|=0x80;
m_Smlseq++;
if(m_Smlseq>7)
m_Smlseq=0;
return (pSrcLen+2);
}
INT16U CSmsCom::ReadMsgData(const INT8U index,INT8U *DataDst)
{
INT16U len16;
len16=GGprsModule.read_msg(index);
len16=(GsmDecodePdu(Task0Buf,len16,&m_SmsType ,DataDst));
if(len16>=2)
{
m_Smseq=DataDst[1];
m_Smseq<<=8;
m_Smseq|=DataDst[0];
m_Smseq&=0x0fff;
m_Smseq+=1;
if(m_Smseq>0xfff)
m_Smseq=0;
len16-=2;
BufToBuf(DataDst,&DataDst[2],len16);
return(len16);
}
return FALSE;
}
INT8U CSmsCom::ReadMsgCnt(void)
{
return(GGprsModule.QueSmCnt());
}
void CSmsCom::ClrMsgIndex(const INT8U pIndex)
{
GGprsModule.clr_msg(pIndex);
}
INT8U CSmsCom::CheckMsg_Cmti(INT16U pLen)
{
return (GGprsModule.check_cmti(pLen));
}
INT8U CSmsCom::CheckMsg_Cpri(INT16U pLen)
{
return(GGprsModule.check_cpri(pLen));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -