谢欣伦 - OpenDev原创教程 - 串口类CxSerial
这是一个精练的串口类,类名、函数名和变量名均采用匈牙利命名法。小写的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
谢欣伦 - OpenDev原创教程 - 串口类CxSerial的更多相关文章
- 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRadio & CxBthRadioFind
这是一个精练的蓝牙设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxBthRadioFind的使用如下: void CU ...
- 谢欣伦 - OpenDev原创教程 - 服务端套接字类CxServerSocket
这是一个精练的服务端套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxServerSocket的使用如下(以某个叫做CSo ...
- 谢欣伦 - OpenDev原创教程 - 蓝牙设备查找类CxBthRemoteDeviceFind
这是一个精练的蓝牙设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxBthRemoteDeviceFind的使用如下: ...
- 谢欣伦 - OpenDev原创教程 - 无连接套接字类CxUdpSocket
这是一个精练的无连接套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxUdpSocket的使用如下(以某个叫做CSomeC ...
- 谢欣伦 - OpenDev原创教程 - 客户端套接字类CxClientSocket
这是一个精练的客户端套接字类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxClientSocket的使用如下(以某个叫做CSo ...
- 谢欣伦 - OpenDev原创教程 - 网络设备查找类CxNetworkHostFind & CxNetworkAdapterFind
这是一个精练的网络设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxNetworkHostFind的使用如下: void ...
- 谢欣伦 - OpenDev原创教程 - 本地IP查找类CxLocalHostIPAddrFind
这是一个精练的本地IP查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxLocalHostIPAddrFind的使用如下: ...
- 谢欣伦 - OpenDev原创教程 - 设备查找类CxDeviceFind & CxDeviceMapFind
这是一个精练的设备查找类,类名.函数名和变量名均采用匈牙利命名法.小写的x代表我的姓氏首字母(谢欣伦),个人习惯而已,如有雷同,纯属巧合. CxDeviceFind的使用如下: void CUsbSc ...
- 谢欣伦 - OpenDev原创教程 - 媒体开发库libMedia
libMedia是一个免费的简单的媒体开发库,其中的接口类与函数大都以小写的x打头,来源于我的姓氏首字母(谢欣伦). 下载 OpenDev for VS2012 libMedia提供四大功能,一是视频 ...
随机推荐
- CentOS 7下安装Mono
最近的项目中需要用到Linux作为服务器,而我们的开发技术是基于.NET的,所以只能在CentOS 7上尝试着安装一下Mono,下面是具体的安装步骤: 1.安装一些必备的依赖项 yum -y inst ...
- PYTHON 深拷贝,浅拷贝
声明:本篇笔记,模仿与其它博客中的内容 浅拷贝 浅拷贝,在内存中只额外创建第一层数据 import copy n1 = {"k1": "wu", "k ...
- 使用python列表推导式进行99乘法表
首先这很python for i in range(1, 10): print(" ".join(["%d*%d=%d" % (j, i, i*j) for j ...
- JSON.stringify()和JSON.parse()
parse用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age":&qu ...
- ORA-27101 ORACLE not available
问题描述:今天打开plsql,报错无法识别连接服务 1.然后去找,是不是oracle服务没有启动,但是发现oracle的其他服务都能启动.只有OracleDBConsolearies不能启动,这说明O ...
- Redis Sentinel 高可用实现说明
背景: 前面介绍了Redis 复制.Sentinel的搭建和原理说明,通过这篇文章大致能了解Sentinel的原理和实现方法以及相关的搭建.这篇文章就针对Redis Sentinel的搭建做 ...
- securecrt设置 (外观,中文不乱码)
最终效果图 这叫做先入为主,哈哈~~ 详细设置,action!!!! ############### 菜单栏: 选项---会话选项 一.终端---仿真 1.终端选择 linux 2.ANSI颜色 ...
- 【python】点分十进制ip与数字互转
来源:http://www.cnblogs.com/vovlie/archive/2012/10/17/2727029.html 利用lambda表达式,非常简洁 int_to_ip = lambda ...
- Java基础之反射和动态代理
1,反射是依赖于Class对象,然后根据Class对象,去操作该类的资源的.Class对象是发射的基石! 问题1:人这类事物用什么表示?汽车这类事物用什么表示>计算机文件用什么表示?有如此多的事 ...
- 使用vs2008搭建php扩展环境
所需要的工具或者文件: 1.php源码,去官网下载即可.http://windows.php.net/download 2.php-sdk:php 开发工具包 3.deps类库 4.Cygwin:wi ...