这是一个精练的串口类,类名、函数名和变量名均采用匈牙利命名法。小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合。

串口类CxSerial的使用如下(以某个叫做CSomeClass的类的相关代码为例):

一、声明串口对象实例。

CxSerial m_xComm;

二、打开串口。

三、配置串口(可选)。通常配置波特率、奇偶校验位、停止位等。

四、设置串口(可选)。通常设置缓冲区大小、接收阈值等。

五、设置串口接收缓冲区事件通知方式。消息响应或回调函数,任选其一。

六、侦听串口。

BOOL CSomeClass::OpenCommPort(LPCSTR lpszCommPort, DWORD dwBitrate)
{
BOOL bRet = m_xComm.Open(lpszCommPort, sizeof(SOME_DATA_STRUCT)); if (bRet)
{
DCB dcb = {};
m_xComm.GetSettings(&dcb);
dcb.BaudRate = dwBitrate;
dcb.ByteSize = ;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
m_xComm.SetSettings(&dcb);
m_xComm.SetWndMsgProc(GetSafeHwnd(), WM_SERIAL_EVENT, NULL, 0
);
}
else
{
TCHAR szDebug[MAX_PATH];
_stprintf(szDebug, _T("Open %s failed. err code [%d].\n"),
lpszCommPort, ::GetLastError());
OutputDebugString(szDebug);
} return bRet;
}

七、处理消息响应或函数回调。
1.消息响应

BEGIN_MESSAGE_MAP(CSomeClass, CStatic)
//{{AFX_MSG_MAP(CSomeClass)
ON_WM_DESTROY()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_SERIAL_EVENT, OnCommEvent)
END_MESSAGE_MAP() /////////////////////////////////////////////////////////////////////////////
// CSomeClass message handlers LRESULT CSomeClass::OnCommEvent(WPARAM wParam, LPARAM lParam)
{
LRESULT lRet = ;
switch (lParam)
{
case EV_RXCHAR:
lRet = OnCommRead(wParam, lParam);
break;
default: break;
} return lRet;
} LRESULT CSomeClass::OnCommRead(WPARAM wParam, LPARAM lParam)
{// may not be more than SetRThreshold, due to a delay message coming
LRESULT lRet = ;
TCHAR szDebug[MAX_PATH], szComm[FIX_SERIALCOMM];
if ((HANDLE)wParam == m_xComm.GetSafeHandle())
{
int nSize = sizeof(SOME_DATA_STRUCT);
DWORD dwInQue, dwOutQue;
if (!m_xComm.GetBufferCount(&dwInQue, &dwOutQue))
return lRet; m_xComm.GetCommPort(szComm);
while (dwInQue >= nSize)
{
_stprintf(szDebug, _T("%s dwInQue=%d, dwOutQue=%d\n"),
szComm, dwInQue, dwOutQue);
OutputDebugString(szDebug); SOME_DATA_STRUCT data = {};
if (m_xComm.Receive((LPBYTE)&data, nSize))
       {
  //do something with data;
       }
if (!m_xComm.GetBufferCount(&dwInQue, &dwOutQue))
return lRet;
}
lRet = ;
} return lRet;
}

2.回调函数

LRESULT CALLBACK CSomeClass::CommProc(LPVOID lpParam, WPARAM wParam, LPARAM lParam)
{
LRESULT lRet = ;
CSomeClass* pThis = (CSomeClass*)lpParam;
if (pThis != NULL)
lRet = pThis->OnCommEvent(wParam, lParam); return lRet;
}

注意,在使用回调函数时应设置串口接收缓冲区事件通知方式为回调函数,并且设法把this指针传入设置函数,方便在回调函数中调用成员函数。

m_xComm.SetWindowMessage(NULL, 0, CommProc, (LPVOID)this);

八、关闭串口。

BOOL CSomeClass::CloseCommPort()
{
return m_xComm.Close();
}

  至于串口数据发送,很简单,在需要处调用以下函数:

m_xComm.Send((LPBYTE)pData, sizeof(SOME_DATA_STRUCT));

  精练的代码不需要过多解释,你们懂的。To be continued...

下载

Sample using libComm - v1.1 For WinXP

libComm - v1.2 For WinXP/Win7

谢欣伦 - OpenDev原创教程 - 串口类CxSerial的更多相关文章

  1. 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRadio & CxBthRadioFind

    这是一个精练的蓝牙设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxBthRadioFind的使用如下: void CU ...

  2. 谢欣伦 - OpenDev原创教程 - 服务端套接字类CxServerSocket

    这是一个精练的服务端套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxServerSocket的使用如下(以某个叫做CSo ...

  3. 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRemoteDeviceFind

    这是一个精练的蓝牙设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxBthRemoteDeviceFind的使用如下: ...

  4. 谢欣伦 - OpenDev原创教程 - 无连接套接字类CxUdpSocket

    这是一个精练的无连接套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxUdpSocket的使用如下(以某个叫做CSomeC ...

  5. 谢欣伦 - OpenDev原创教程 - 客户端套接字类CxClientSocket

    这是一个精练的客户端套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxClientSocket的使用如下(以某个叫做CSo ...

  6. 谢欣伦 - OpenDev原创教程 - 网络设备查找类CxNetworkHostFind & CxNetworkAdapterFind

    这是一个精练的网络设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxNetworkHostFind的使用如下: void ...

  7. 谢欣伦 - OpenDev原创教程 - 本地IP查找类CxLocalHostIPAddrFind

    这是一个精练的本地IP查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxLocalHostIPAddrFind的使用如下: ...

  8. 谢欣伦 - OpenDev原创教程 - 设备查找类CxDeviceFind & CxDeviceMapFind

    这是一个精练的设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxDeviceFind的使用如下: void CUsbSc ...

  9. 谢欣伦 - OpenDev原创教程 - 媒体开发库libMedia

    libMedia是一个免费的简单的媒体开发库,其中的接口类与函数大都以小写的x打头,来源于我的姓氏首字母(谢欣伦). 下载 OpenDev for VS2012 libMedia提供四大功能,一是视频 ...

随机推荐

  1. Idea 开发 web项目

    1.经历 很久没有搞 web 项目了,最近一段时间搞过很多次了,但是总是在 mac 上部署失败. 2.方法: 用idea 新建一个模板的 Spring MVC 项目,部署就可以了. 3.参考: htt ...

  2. jQuery radio取值,checkbox取值,select取值

    语法解释: $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发 var checkTex ...

  3. MySQL 的 find_in_set 函数使用方法

    举个例子来说: 有个文章表里面有个type字段,它存储的是文章类型,有 1头条.2推荐.3热点.4图文...1,12,13 等等 . 现在有篇文章他既是 头条,又是热点,还是图文, type中以 1, ...

  4. 去除ios系统a标签点击时的灰色背景

    使用图片作为a标签的点击按钮时,当触发touchstart的时候,往往会有一个灰色的背景,想要去掉的话可以用下面这种方式 a,a:hover,a:active,a:visited,a:link,a:f ...

  5. c语言libcurl库的异步用法

    multi接口的使用会比easy 接口稍微复杂点,毕竟multi接口是依赖easy接口的,首先粗略的讲下其使用流程:curl_multi _init初始化一个multi curl对象,为了同时进行多个 ...

  6. ubuntu下安装nodejs,无node情况

      Updating nodejs solved the issue: npm cache clean -f npm install -g n n stable node --version node ...

  7. 前端小知识(转载http://www.cnblogs.com/Wayou/p/things_you_dont_know_about_frontend.html)

    前端已经被玩儿坏了!像console.log()可以向控制台输出图片等炫酷的玩意已经不是什么新闻了,像用||操作符给变量赋默认值也是人尽皆知的旧闻了,今天看到Quora上一个帖子,瞬间又GET了好多前 ...

  8. hive创建索引

    索引是hive0.7之后才有的功能,创建索引需要评估其合理性,因为创建索引也是要磁盘空间,维护起来也是需要代价的 创建索引 hive> create index [index_studentid ...

  9. Django【进阶篇 】

    Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...

  10. MIS系统开发利器,快速的字典录入解决方案,另类的、可管理的.NET DataWindow

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...