原创 构建PDU格式的中文SMS(II)

2010-12-31 14:33 2521 19 26 分类: 消费电子

UD代码的实现例子:

void CPdu_formatDlg::gb2unicode(BYTE* src, BYTE* result)
{
 // find unicode code based on gb code
 CFile file;
 CString strPath = GetDeviceFullPath();
 CString sBinFilename = strPath + "gb2unicode.bin";
 if(!file.Open(sBinFilename, CFile::modeRead)) {
  AfxMessageBox("File can NOT be openned!");
  return;
 }


 // calc gb index
 UINT index = (src[0]<<8) + src[1];

 // half-lookup method
 int low,high,mid;
 low = 0; high = MAX_UNI_INDEX;
 UINT gbcode_mid = 0;
 BYTE tmp[2];
 while(low {
  mid = (low+high)/2;
  file.Seek((mid<<2)+2, CFile::begin);
  file.Read((char*)tmp, 2);
  gbcode_mid = (tmp[0]<<8) + tmp[1];

  if( index < gbcode_mid ) high--;
  else if( index > gbcode_mid ) low++;
  else break;
 }
 if(low>high) {
  AfxMessageBox("Cannot find gb char in current gb2unicode table!");
  return;
 }

 // result
 file.Seek( (mid<<2),  CFile::begin );
 file.Read((char*)tmp, 2);
 
 result[0] = tmp[0];
 result[1] = tmp[1];

 file.Close(); 

}



void CPdu_formatDlg::OnButtonBuild()
{
 char phone[32];
 memset(phone, 0, sizeof(phone));
 
 // (1) receive phone number inputed
 m_editPhone.GetWindowText(phone, sizeof(phone));
 if(strlen(phone) != 11) {
  AfxMessageBox("Please input the correct mobile phone number!");
  return;
 }
 for(int i=0; i<11; i++) {
  if( (phone<'0') || (phone>'9') ) {
   AfxMessageBox("Please input the correct mobile phone number!");
   return;
  }
 }

 // (2) receive sms text inputed
 BYTE buf[256];
 memset(buf, 0, sizeof(buf)); 
 m_editInput.GetWindowText((char*)buf, sizeof(buf));
 if(strlen((char*)buf) == 0) {
  AfxMessageBox("Input should not be null!");
  return; 
 }
 

 // (3) build UD(sms text)
 BYTE result[256];
 memset(result, 0, sizeof(result));
 
 UINT j=0, len1=0;
 while(j < strlen((char*)buf)) {
  
  // arcII
  if(buf[j] < 128) {
   result[len1] = 0x00;
   result[len1+1] = buf[j];
   j++;
   len1 = len1+2;
  }
  // gb
  else {
   BYTE tmp[2];
   gb2unicode((BYTE*)(&buf[j]), (BYTE *)tmp);
   
   result[len1] = tmp[0];
   result[len1+1] = tmp[1];
   j++;
   j++;
   len1 = len1 + 2;
  }
 }

 BYTE ud[256];
 memset(ud, 0, sizeof(ud));
 for(UINT k=0; k  if( (result[k]>>4) < 10 ) { ud[(k<<1)] = (result[k]>>4) + '0'; }
  else { ud[(k<<1)] = (result[k]>>4) - 10 + 'A'; }

  if( (result[k]&0x0f) < 10 ) { ud[(k<<1)+1] = (result[k]&0x0f) + '0'; }
  else { ud[(k<<1)+1] = (result[k]&0x0f) - 10 + 'A'; }
 }

 // (4) build DA(phone num)
 BYTE da[256];
 memset(da, 0, sizeof(da));
 da[0] = '0';  // da_len
 da[1] = 'D';  // da_len
 da[2] = '9';  // type
 da[3] = '1';  // type
 da[4] = '6';  // china code
 da[5] = '8';  // china code
 da[6] = phone[1];
 da[7] = phone[0];
 da[8] = phone[3];
 da[9] = phone[2];
 da[10] = phone[5];
 da[11] = phone[4];
 da[12] = phone[7];
 da[13] = phone[6];
 da[14] = phone[9];
 da[15] = phone[8];
 da[16] = 'F';
 da[17] = phone[10];

 // (5) output pdu format after receiving >[sp]
 BYTE pdu[256];
 memset(pdu, 0, sizeof(pdu));
 pdu[0] = '0';  // SCA (with embeded csca)
 pdu[1] = '0';  // SCA (with embeded csca)
 pdu[2] = '1';  // Type
 pdu[3] = '1';  // Type
 pdu[4] = '0';  // MR
 pdu[5] = '0';  // MR
 strcat((char*)pdu, (char *)da); // DA
 pdu[24] = '0';  // PID
 pdu[25] = '0';  // PID
 pdu[26] = '0';  // DCS
 pdu[27] = '8';  // DCS
 pdu[28] = '0';  // VP
 pdu[29] = '1';  // VP
 if( (len1>>4) < 10 ) { pdu[30] = (len1>>4) + '0'; }  // UDL
 else { pdu[30] = (len1>>4) - 10 + 'A'; }
 if( (len1&0x0f) < 10 ) { pdu[31] = (len1&0x0f) + '0'; } // UDL
 else { pdu[31] = (len1&0x0f) - 10 + 'A'; }
 memcpy(&pdu[32], ud, (len1<<1));  // ud
 m_editOutput.SetWindowText((char *)pdu);

 // (6) output the cmgs len
 BYTE sLen[4];
 memset(sLen, 0, sizeof(sLen));
 len1 += 15;
 sLen[0] = (len1/100) + '0';
 sLen[1] = (len1%100)/10 + '0';
 sLen[2] = (len1%10) + '0';
 m_editLen.SetWindowText((char*)sLen);

}

<发送PDU格式SMS验证>
1. PDU生成工具:
pdu格式2.jpg

2. 使用GPRS/GSM 模块进行验证:
pdu格式1.jpg

3. 手机上成功收取并显示中文短消息.

Allen
2010.12.31 发表于<电子工程专辑>

构建PDU格式的中文SMS(I)

构建PDU格式的中文SMS(II)

文章评论7条评论)

登录后参与讨论

用户1028144 2011-1-12 11:42

hao!

用户1028144 2011-1-12 11:41

hao!

用户1398709 2011-1-12 09:05

谢谢博主分享,下载学习

用户1589982 2011-1-11 14:36

thank you

用户1291225 2011-1-5 08:49

谢谢博主分享,下载学习

用户1190942 2011-1-4 08:22

hao

用户1277994 2010-12-31 15:02

Thank you!

相关推荐阅读
allen_zhan 2023-02-27 19:08
对"三极管"译名由来的探讨
想讨论一个有意思的话题:今天中国大陆的电子业界, 为何将 BJT 称呼为 "三极管"? 或因其象形, 前辈自行进行随意的不严谨定义么? 带着疑问我们做了一下延伸查阅, 或得出这样的结论, 即中译名"三...
allen_zhan 2023-02-19 18:15
对知乎提问"为何三极管的一个PN结工作在反偏"的回复
将这个回复, 也发表在博文中, 作为自己的一个学习笔记叭.知乎问题: "三极管里面的PN结相当于二极管,为什么里面PN结加反向电压也能导通?"我的回复:首先, 二极管的"反向"概念, 容易给初学者某种...
allen_zhan 2023-02-18 10:17
从肖特基二极管到PN结与三极管
最近数个工作日的兴趣是回顾电子基础器件的发明/发展历史, 期待夯实技术基础的底蕴. 在学习与搜索资料的过程中, 顺便对知乎的一个同学的基础问题, 进行了回复. 不小心回复一下就成了千字文, 觉得挺有趣...
allen_zhan 2023-01-28 11:53
微功率 ISM 频率探讨相关文档组总结
不知不觉, 自开启关于微功率频率的话题起, 即从第一份文章写就到今天总结之日, 已经接近 10 个工作日左右. 早先的想法是对工程界未来的微功率设备相关项目, 从项目规划开始, 对选择系统, 频率, ...
allen_zhan 2023-01-27 22:50
关于 LoRa 应用场景的讨论
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. "第52号文" 对 470MHz 的约束引自 如下:(四)民用计量仪表限在建筑楼宇、住宅小区及村庄等小范围内组网应用,任意时刻限...
allen_zhan 2023-01-25 13:24
ISM 频段中 2.4G 与 5.8GHz 设备的使用与限制
说明: 本文中斜体部分表示来自公告文件的部分内容剪贴或合并整理.1. ISM 频段定义中的 2.4G 与 5.8GHz正如同 文中确定的, 2.4G, 5.8GHz 属于中国大陆 ISM 频段的定义...
我要评论
7
19
关闭 站长推荐上一条 /2 下一条