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

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

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
其中调用的gsmReadMessage函数完成最核心的短信接收功能,它按照第1节阐述的GSM模块接收短消息的串口控制流程进行短信的接收: // 参数:pMsg 短消息缓冲区

  其中调用的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;
}

  删除短消息

  我们可以在读取完所有短信息后调用gsmDeleteMessage函数在GSM模块上删除那些已经被接收到PC上的短信息,它按照第1节阐述的GSM模块删除短消息的串口控制流程进行短信的删除:

// index: 短消息序号,从1开始
BOOL gsmDeleteMessage(const int index)
{
 int nLength; // 串口收到的数据长度
 char cmd[16]; // 命令串
 char ans[128]; // 应答串

 sprintf(cmd, "AT+CMGD=%d ", index); // 生成命令

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

 // 读应答数据
 nLength = ReadComm(ans, 128);

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

精彩图集

赞助商链接