龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

深入浅出VC++串口编程之短信应用开发(4)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
其中调用的gsmSendMessage函数体现了串口通信的核心内容,它按照第1节阐述的GSM模块发送短消息的串口控制流程进行短信的发送: BOOL gsmSendMessage(const SM_PA

  其中调用的gsmSendMessage函数体现了串口通信的核心内容,它按照第1节阐述的GSM模块发送短消息的串口控制流程进行短信的发送:

BOOL gsmSendMessage(const SM_PARAM *pSrc // pSrc: 源PDU参数指针)
{
 int nPduLength; // PDU串长度
 unsigned char nSmscLength; // SMSC串长度
 int nLength; // 串口收到的数据长度
 char cmd[16]; // 命令串
 char pdu[512]; // PDU串
                                                       char ans[128]; // 应答串

 nPduLength = gsmEncodePdu(pSrc, pdu); // 根据PDU参数,编码PDU串
 strcat(pdu, "x01a"); // 以Ctrl-Z结束

 gsmString2Bytes(pdu, &nSmscLength, 2); // 取PDU串中的SMSC信息长度
 nSmscLength++; // 加上长度字节本身

 // 命令中的长度,不包括SMSC信息长度,以数据字节计
 sprintf(cmd, "AT+CMGS=%d ", nPduLength / 2-nSmscLength); // 生成命令

 WriteComm(cmd, strlen(cmd)); // 先输出命令串

 nLength = ReadComm(ans, 128); // 读应答数据
 
 // 根据能否找到" > "决定成功与否
 if (nLength == 4 && strncmp(ans, " > ", 4) == 0)
 {
  WriteComm(pdu, strlen(pdu)); // 得到肯定回答,继续输出PDU串

  nLength = ReadComm(ans, 128); // 读应答数据
                                                                                     
  // 根据能否找到"+CMS ERROR"决定成功与否
  if (nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
  {
   return TRUE;
  }
 }
 return FALSE;
}

  读取短消息

  点击"接收"按钮会通过gsmReadMessage函数的调用获得所有短消息,最后在列表控件中显示所有短信:

void CSMSControlDlg::OnRecvButton()
{
 // TODO: Add your control notification handler code here
 SM_PARAM smParam[100];//短信缓冲区
 int smsNum;//短信条数
 smsNum = gsmReadMessage(smParam);//读取短信

 //显示短信
 for(int i=0;i {
  m_recvlist.AddString(CString(smsNum[i].TPA)+smsNum[i].TP_UD);
 }
}

精彩图集

赞助商链接