正 文

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


www.7dspace.com  更新日期:2006-2-22 5:52:44  七度空间


  删除短消息

  我们可以在读取完所有短信息后调用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\r", index); // 生成命令

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

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

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

  在PC控制软件的短信列表框中删除所有短消息的"清空"按钮函数为:

void CSMSControlDlg::OnDeleteallButton()
{
 // TODO: Add your control notification handler code here
 m_recvlist.ResetContent();
}

  设置/读/写串口

  在应用程序启动与退出及gsmSendMessage、gsmReadMessage和gsmDeleteMessage函数中广泛使用的串口相关函数用WIN32 API实现:

// 串口设备句柄
HANDLE hComm;

// 打开串口
// pPort: 串口名称或设备路径,可用"COM1"或"\\.\COM1"两种方式,建议用后者
// nBaudRate: 波特率
// nParity: 奇偶校验
// nByteSize: 数据字节宽度
// nStopBits: 停止位
BOOL OpenComm(const char *pPort, int nBaudRate, int nParity, int nByteSize, int
nStopBits)
{
 DCB dcb; // 串口控制块
 COMMTIMEOUTS timeouts =
 {
  // 串口超时控制参数
  100, // 读字符间隔超时时间: 100 ms
  1, // 读操作时每字符的时间: 1 ms (n个字符总共为n ms)
  500, // 基本的(额外的)读超时时间: 500 ms
  1, // 写操作时每字符的时间: 1 ms (n个字符总共为n ms)
  100
 }; // 基本的(额外的)写超时时间: 100 ms

 hComm = CreateFile(pPort, // 串口名称或设备路径
  GENERIC_READ | GENERIC_WRITE, // 读写方式
  0, // 共享方式:独占
  NULL, // 默认的安全描述符
  OPEN_EXISTING, // 创建方式
  0, // 不需设置文件属性
  NULL); // 不需参照模板文件

 if (hComm == INVALID_HANDLE_VALUE)
  return FALSE;
 // 打开串口失败

 GetCommState(hComm, &dcb); // 取DCB
 dcb.BaudRate = nBaudRate;
 dcb.ByteSize = nByteSize;
 dcb.Parity = nParity;
 dcb.StopBits = nStopBits;

 SetCommState(hComm, &dcb); // 设置DCB
 
 SetupComm(hComm, 4096, 1024); // 设置输入输出缓冲区大小

 SetCommTimeouts(hComm, &timeouts); // 设置超时
 return TRUE;
}

// 关闭串口
BOOL CloseComm()
{
 return CloseHandle(hComm);
}

// 写串口
// pData: 待写的数据缓冲区指针
// nLength: 待写的数据长度
void WriteComm(void *pData, int nLength)
{
 DWORD dwNumWrite; // 串口发出的数据长度
 WriteFile(hComm, pData, (DWORD)nLength, &dwNumWrite, NULL);
}

// 读串口
// pData: 待读的数据缓冲区指针
// nLength: 待读的最大数据长度
// 返回: 实际读入的数据长度
int ReadComm(void *pData, int nLength)
{
 DWORD dwNumRead; // 串口收到的数据长度
 ReadFile(hComm, pData, (DWORD)nLength, &dwNumRead, NULL);
 return (int)dwNumRead;
}

5页,页码:[1] [2] [3] [4] [5] 

上一篇:什么是优化的网页设计?
下一篇:向搜索引擎提交网站的技巧
标题:深入浅出VC++串口编程之短信应用开发 作者:宋宝华 来源:天极网
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐