📄 cdmasms.cpp
字号:
功能:解析出SMS
*********************************************************/
void TForm1::Alert_On_Msgs_CDMASMSDec(L3_SMSDef* pMsg,int charAddr,int length,SMSElementDef& out_sms)
{
out_sms.Alert_on_msg=(pMsg->l3_data[charAddr]>>6)&0x3;
out_sms.Have_Alert_on_msg=1;
return;
}
//---------------------------------------------------------------------------
/*********************************************************
函数说明:
输入参数:pMsg:层三DBM消息
charAddr :UserData起始位置对应l3_data[]的下标(参数开始位置,不包括ID和长度)
length:参数长度
输出参数:output_sms结构
功能:解析出SMS
*********************************************************/
void TForm1::Lan_Indicator_CDMASMSDec(L3_SMSDef* pMsg,int charAddr,int length,SMSElementDef& out_sms)
{
out_sms.Lan_Indicator=pMsg->l3_data[charAddr];
out_sms.Have_Lan_Indicator=1;
return;
}
//---------------------------------------------------------------------------
/*********************************************************
函数说明:
输入参数:pMsg:层三DBM消息
charAddr :UserData起始位置对应l3_data[]的下标(参数开始位置,不包括ID和长度)
length:参数长度
输出参数:output_sms结构
功能:解析出SMS
*********************************************************/
void TForm1::CallbackNumber_CDMASMSDec(L3_SMSDef* pMsg,int charAddr,int length,SMSElementDef& out_sms)
{
char digit_mode;
char number_type;
char number_plan;
char num_field;
char bitAddr = 0;
char field[20];
int i;
/*0 DTMF编码 1 ASCII编码*/
digit_mode = (pMsg->l3_data[charAddr]>>7)&(0x00000001);
bitAddr++;
if(digit_mode == 1)
{
number_type = (pMsg->l3_data[charAddr]>>4)&(0x00000111);
bitAddr = bitAddr+3;
}
if(digit_mode == 1)
{
number_plan = (pMsg->l3_data[charAddr])&(0x00001111);
bitAddr = bitAddr+4;
}
uint32 copyLength = 8;
BitCopyFromBitStream((byte*)(pMsg->l3_data),(uint32)(charAddr*8+bitAddr),(byte)num_field,copyLength);
bitAddr = bitAddr+copyLength;
out_sms.callbackLen = num_field;
if(digit_mode == 0)
{
for(i=0;i<num_field;i++)
{
BitCopyFromBitStream((byte*)(pMsg->l3_data),(uint32)(charAddr*8+bitAddr),(byte)field[i],4);
bitAddr = bitAddr+4;
}
for(i=0;i<num_field;i++)
{
switch(field[i])
{
case 0:
out_sms.callbackNumber[i] = 0;
break;
case 1 :
out_sms.callbackNumber[i] = 1;
break;
case 2 :
out_sms.callbackNumber[i] = 2;
break;
case 3 :
out_sms.callbackNumber[i] = 3;
break;
case 4 :
out_sms.callbackNumber[i] = 4;
break;
case 5 :
out_sms.callbackNumber[i] = 5;
break;
case 6 :
out_sms.callbackNumber[i] = 6;
break;
case 7 :
out_sms.callbackNumber[i] = 7;
break;
case 8 :
out_sms.callbackNumber[i] = 8;
break;
case 9 :
out_sms.callbackNumber[i] = 9;
break;
case 10 :
out_sms.callbackNumber[i] = 0;
break;
case 11 :
out_sms.callbackNumber[i] = '*';
break;
case 12 :
out_sms.callbackNumber[i] = '#';
break;
}
}
}
if(digit_mode == 1)
{
for(i=0;i<num_field;i++)
{
BitCopyFromBitStream((byte*)(pMsg->l3_data),(uint32)(charAddr*8+bitAddr),(byte)field[i],8);
out_sms.callbackNumber[i] = field[i];
bitAddr = bitAddr+8;
}
}
}
//---------------------------------------------------------------------------
/*********************************************************
函数说明:
输入参数:pMsg:层三DBM消息
charAddr :UserData起始位置对应l3_data[]的下标(参数开始位置,不包括ID和长度)
length:参数长度
输出参数:output_sms结构
功能:解析出SMS
*********************************************************/
void TForm1::Msg_Disp_Mode_CDMASMSDec(L3_SMSDef* pMsg,int charAddr,int length,SMSElementDef& out_sms)
{
out_sms.Msg_disp_mode=(pMsg->l3_data[charAddr]>>6)&0x3;
out_sms.Have_Msg_disp_mode=1;
return;
}
//---------------------------------------------------------------------------
/*********************************************************
函数说明:
输入参数:pMsg:层三DBM消息
charAddr :UserData起始位置对应l3_data[]的下标(参数开始位置,不包括ID和长度)
length:参数长度
输出参数:output_sms结构
功能:解析出SMS
*********************************************************/
void TForm1::Mul_Encoding_UD_CDMASMSDec(L3_SMSDef* pMsg,int charAddr,int length,SMSElementDef& out_sms)
{
char msg_encoding;
char num_fields;
char currBit = 0;
int i;
msg_encoding = pMsg->l3_data[charAddr]>>3;
currBit = currBit+5;
uint32 copyLength = 8;
BitCopyFromBitStream((byte*)(pMsg->l3_data),(uint32)(charAddr*8+currBit),(byte)num_fields,copyLength);
currBit = currBit+copyLength;
out_sms.Mul_data_Len = num_fields;
// 内容解码
/* ascii解码*/
if(msg_encoding == SEVEN_BIT_ASCII)
{
byte* ptr_ascii_string;
uint32 byteCount = num_fields+1;
ptr_ascii_string = new byte[byteCount];
for(i=0;i<num_fields;i++)
{
BitCopyFromBitStream((byte*)(pMsg->l3_data),(uint32)(charAddr*8+currBit),ptr_ascii_string[i],7);
currBit = currBit+7;
}
strcpy((char *)(&out_sms.Mul_data), ptr_ascii_string);
delete ptr_ascii_string;
}
/*Unicode 解码*/
if(msg_encoding == UNICODE_ENCOD)
{
byte* ptr_unicode_string; //要解码的数据流
uint32 byteCount = (num_fields*16)/8+1;
ptr_unicode_string = new byte[byteCount];
BCopy((byte*)(pMsg->l3_data),(uint32)(charAddr*8+currBit),ptr_unicode_string,0,num_fields*16);
String_uni2qw_convert((void*)ptr_unicode_string, num_fields*2);
strcpy((char *)(&out_sms.Mul_data), ptr_unicode_string);
delete ptr_unicode_string;
}
return;
}
//---------------------------------------------------------------------------
void TForm1::SMSDisplay(SMSElementDef output_sms)
{
AnsiString Tel_ser_id;
Tel_ser_id="电信业务标志::";
if(output_sms.Tel_ser==1)
Tel_ser_id=Tel_ser_id+"Reserved for maintenance.";
if(output_sms.Tel_ser>=2 && output_sms.Tel_ser<=4095)
Tel_ser_id=Tel_ser_id+"Reserved for assignment by TIA/EIA-41.";
if(output_sms.Tel_ser==4096)
Tel_ser_id=Tel_ser_id+"AMPS Extended Protocol Enhanced Services.";
if(output_sms.Tel_ser==4097)
Tel_ser_id=Tel_ser_id+"CDMA Cellular Paging Teleservice .";
if(output_sms.Tel_ser==4098)
Tel_ser_id=Tel_ser_id+"CDMA Cellular Messaging Teleservice";
if(output_sms.Tel_ser==4099)
Tel_ser_id=Tel_ser_id+"CDMA Voice Mail Notification";
if(output_sms.Tel_ser>=4100 && output_sms.Tel_ser<=32512)
Tel_ser_id=Tel_ser_id+"Reserved for assignment by TIA/EIA-41.";
if(output_sms.Tel_ser==32513)
Tel_ser_id=Tel_ser_id+"TDMA Cellular Messaging Teleservice";
if(output_sms.Tel_ser>=32514 && output_sms.Tel_ser<=32639)
Tel_ser_id=Tel_ser_id+"Reserved for assignment by this Standard for TDMA MS-based SMEs.";
if(output_sms.Tel_ser>=32640 && output_sms.Tel_ser<=32767)
Tel_ser_id=Tel_ser_id+"Reserved for carrier specific teleservices for TDMA MS-based SMEs.";
if(output_sms.Tel_ser>=32768 && output_sms.Tel_ser<=49151)
Tel_ser_id=Tel_ser_id+"Reserved for node specific teleservices.";
if(output_sms.Tel_ser>=49152 && output_sms.Tel_ser<=65535)
Tel_ser_id=Tel_ser_id+"Reserved for carrier specific teleservices.";
Form1->SMSMemo->Lines->Append(Tel_ser_id);
if(output_sms.Have_Ser_cate!=0)
{
AnsiString Ser_cate;
Ser_cate="服务策略::";
switch(output_sms.Ser_cate)
{
case 0x00:
Ser_cate=Ser_cate+"Unknown or unspecified";
break;
case 0x01:
Ser_cate=Ser_cate+"Emergency Broadcasts";
break;
case 0x02:
Ser_cate=Ser_cate+"Administrative";
break;
case 0x03:
Ser_cate=Ser_cate+"Maintenance";
break;
case 0x04:
Ser_cate=Ser_cate+"General News – Local";
break;
case 0x05:
Ser_cate=Ser_cate+"General News – Regional";
break;
case 0x06:
Ser_cate=Ser_cate+"General News – National";
break;
case 0x07:
Ser_cate=Ser_cate+"General News – International";
break;
case 0x08:
Ser_cate=Ser_cate+"Business/Financial News – Local";
break;
case 0x09:
Ser_cate=Ser_cate+"Business/Financial News – Regional";
break;
case 0x0a:
Ser_cate=Ser_cate+"Business/Financial News – National";
break;
case 0x0b:
Ser_cate=Ser_cate+"Business/Financial News – International";
break;
case 0x0c:
Ser_cate=Ser_cate+"Sports News – Local";
break;
case 0x0d:
Ser_cate=Ser_cate+"Sports News – Regional";
break;
case 0x0e:
Ser_cate=Ser_cate+"Sports News – National";
break;
case 0x0f:
Ser_cate=Ser_cate+"Sports News – International";
break;
case 0x10:
Ser_cate=Ser_cate+"Entertainment News – Local";
break;
case 0x11:
Ser_cate=Ser_cate+"Entertainment News – Regional";
break;
case 0x12:
Ser_cate=Ser_cate+"Entertainment News – National";
break;
case 0x13:
Ser_cate=Ser_cate+"Entertainment News – International";
break;
case 0x14:
Ser_cate=Ser_cate+"Local Weather";
break;
case 0x15:
Ser_cate=Ser_cate+"Area Traffic Reports";
break;
case 0x16:
Ser_cate=Ser_cate+"Local Airport Flight Schedules";
break;
case 0x17:
Ser_cate=Ser_cate+"Restaurants";
break;
case 0x18:
Ser_cate=Ser_cate+"Lodgings";
break;
case 0x19:
Ser_cate=Ser_cate+"Retail Directory";
break;
case 0x1a:
Ser_cate=Ser_cate+"Advertisements";
break;
case 0x1b:
Ser_cate=Ser_cate+"Stock Quotes";
break;
case 0x1c:
Ser_cate=Ser_cate+"Employment Opportunities";
break;
case 0x1d:
Ser_cate=Ser_cate+"Medical/Health/Hospitals";
break;
case 0x1e:
Ser_cate=Ser_cate+"Technology News";
break;
case 0x1f:
Ser_cate=Ser_cate+"Multi-category";
break;
default:
Ser_cate=Ser_cate+"Reserved";
}
Form1->SMSMemo->Lines->Append(Ser_cate);
}
if(output_sms.Msg_type!=0)
{
AnsiString Type;
Type= "消息类型::";
switch(output_sms.Msg_type)
{
case 1:
Type= Type+"Deliver (mobile-terminated only)";
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -