WEB开发网
开发学院软件开发VC 深入浅出VC++串口编程之短信应用开发 阅读

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

 2007-03-25 21:30:17 来源:WEB开发网   
核心提示: 读取短消息点击"接收"按钮会通过gsmReadMessage函数的调用获得所有短消息,最后在列表控件中显示所有短信:void CSMSControlDlg::OnRecvButton(){// TODO: Add your control notification ha

读取短消息

点击"接收"按钮会通过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<smsNum;i++)
 {
  m_recvlist.AddString(CString(smsNum[i].TPA)+smsNum[i].TP_UD);
 }
}

其中调用的gsmReadMessage函数完成最核心的短信接收功能,它按照第1节阐述的GSM模块接收短消息的串口控制流程进行短信的接收:

// 参数:pMsg 短消息缓冲区,必须足够大
// 返回:短消息条数
int gsmReadMessage(SM_PARAM* pMsg)
{
 int nLength; // 串口收到的数据长度
 int nMsg; // 短消息计数值
 char* ptr; // 内部用的数据指针
 char cmd[16]; // 命令串
 char ans[1024]; // 应答串
 nMsg = 0;
 ptr = ans;
 sprintf(cmd, "AT+CMGL
"); // 生成命令,用+CMGL可一次性读出全部短消息
                  
 WriteComm(cmd, strlen(cmd)); // 输出命令串
 nLength = ReadComm(ans, 1024); // 读应答数据
 // 根据能否找到"+CMS ERROR"决定成功与否
 if(nLength > 0 && strncmp(ans, "+CMS ERROR", 10) != 0)
 {
  // 循环读取每一条短消息, 以"+CMGL:"开头
  while((ptr = strstr(ptr, "+CMGL:")) != NULL)
  {
   ptr += 6; // 跳过"+CMGL:"
   sscanf(ptr, "%d", &pMsg->index); // 读取序号
                   
   ptr = strstr(ptr, "
"); // 找下一行
   ptr += 2; // 跳过"
"
   gsmDecodePdu(ptr, pMsg); // PDU串解码
   pMsg++; // 准备读下一条短消息
   nMsg++; // 短消息计数加1
  }
 }
  return nMsg;
}

上一页  1 2 3 4 5 6 7  下一页

Tags:深入浅出 VC 串口

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接