📄 zcmma_sms_dec.cpp
字号:
void TForm1::cdmasmsDec(void* pInputMsg, SMSElementDef& output_sms)
{
//输入pInputMsg是结构为L3_SMSDef形式的消息
pDealMsg = (L3_SMSDef*)pInputMsg;
char burst_Type; //突发消息类型
char num_Datas; //突发消息包括char的数目
char smsmsg_Type;
/*SMS data相关域的定义*/
char paraID;
char paraLength;
char paraData[200];
char numChar_DataField = 0; //作为判断是否char域结束的标志
int i; //当前字节位置
burst_Type = pDealMsg->smsHeader.burst_Type;
/*如果消息类型不是SMS,则丢弃消息,并退出*/
if((burst_Type!=SHORT_MESSAGE_SERVICES)
&&(pDealMsg->smsHeader.msg_number != 1)
&&(pDealMsg->smsHeader.num_msgs != 1)
&&(pDealMsg->smsHeader.num_fields <= 0))
{
ShowMessage("DBM 包不正确!");
delete pInputMsg;
return;
}
//有效char数目
num_Datas = pDealMsg->smsHeader.num_Fields;
smsmsg_Type = pDealMsg->l3_data[0];
numChar_DataField = 1; //SMS类型占1 byte
/*判断SMS消息类型,若不是点到点的SMS,则丢弃消息,并退出*/
if(smsmsg_Type!=SMS_POINT_TO_POINT)
{
ShowMessage("不是点到点的SMS");
delete pInputMsg;
return;
}
while(numChar_DataField<num_Datas)
{
paraID = pDealMsg->l3_data[numChar_DataField];
numChar_DataField++;
paraLength = pDealMsg->l3_data[numChar_DataField];
numChar_DataField++;
//源/目地址参数的分析 //54页
if((paraID == Originating_Address)||(paraID == Destination_Address))
{
CDMASMSAddrDec(pDealMsg,numChar_DataField,paraLength,output_sms);
}
if(paraID == Bearer_Data) //61页
{
CDMASMSBearDataDec(pDealMsg,numChar_DataField,paraLength,output_sms);
}
//更新 numChar_DataField 参数
numChar_DataField = numChar_DataField+paraLength;
}
SMSDisplay(output_sms);
delete pInputMsg;
ShowMessage("SMS分析结束,退出");
return;
}
//---------------------------------------------------------------------------
/*********************************************************
函数说明:
输入参数:pMsg:层三DBM消息
charAddr :BearData起始位置对应l3_data[]的下标(参数开始位置,不包括ID和长度)
length:参数长度
输出参数:output_sms结构
功能:解析出SMS
*********************************************************/
void TForm1::CDMASMSBearDataDec(L3_SMSDef* pMsg,int charAddr,int length,SMSElementDef& out_sms)
{
int i;
char subParaID;
char subParaLength;
char currCharAddr = charAddr; //当前处理字节位置
while((currCharAddr-charAddr)<length)
{
subParaID = pMsg->l3_data[currCharAddr];
currCharAddr++;
subParaLength = pMsg->l3_data[currCharAddr];
currCharAddr++;
/*消息类型字段的处理*/
if(subParaID == MESSAGE_IDENTIFIER)
{
MsgID_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
}
/*用户数据字段的处理*/
if(subParaID == USER_DATA)
{
UserData_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
}
/*用户反应码字段的处理*/
if(subParaID == USER_RESPONSE_CODE)
{
User_RC_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
}
/*消息类型字段的处理*/
if(subParaID == MESSAGE_IDENTIFIER)
{
MsgID_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
}
/*时间字段的处理*/
if(subParaID == MESSAGE_CENTER_TIME_STAMP)
{
Timer_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
}
/*回叫号码的处理*/
if(subParaID == CALLBACK_NUMBER)
{
CallbackNumber_CDMASMSDec(pMsg,currCharAddr,subParaLength,out_sms);
}
currCharAddr = currCharAddr+ subParaLength;
}
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -