谢欣伦 - 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提供四大功能,一是视频 ...
随机推荐
- Windows下图文详解PHP三种运行方式(php_mod、cgi、fastcgi)
PHP能不能成功的在Apache服务器上运行,就看我们如何去配置PHP的运行方式.PHP运行目前为止主要有三种方式: a.以模块加载的方式运行,初学者可能不容易理解,其实就是将PHP集成到Apache ...
- PHP 获取中国时间,即上海时区时间
/** * 获取中国时间,即上海时区时间 * @param <type> $format * @return <type> */ function getChinaTime($ ...
- Eclipse启动tomcat,http://localhost:8080/无法访问的解决方法
双击eclipse的Server打开配置页面,将server locations的选项改成第二项,然后把Destroy Path改成webapps,然后就可以了.如果是灰色的,没法进行修改,那么就要先 ...
- wdcp安装memcached解决办法
1.下载libevent-1.4.14b-stable.tar.gz和memcached-1.4.15.tar.gz这两个文件,上传到服务器,并给它一个可用的下载地址, 如http://地址/memc ...
- 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面
详细错误:HTTP 错误 404.2 - Not Found. 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面. 出现环境:win7 + IIS7.0 解决办法 ...
- js 连续赋值。。理解不了,先占坑
http://www.cnblogs.com/xxcanghai/p/4998076.html
- Effective C++ -----条款55:让自己熟悉Boost
Boost 是一个社群,也是一个网站.致力于免费.源码开放.同僚复审的C++ 程序库开发.Boost 在C++ 标准化过程中扮演深具影响力的角色. Boost 提供许多TR1 组件实现品,以及其他许多 ...
- UIImage加载本地图片的两种方式
UIImage加载图片方式一般有两种: (1)imagedNamed初始化:默认加载图片成功后会内存中缓存图片,这个方法用一个指定的名字在系统缓存中查找并返回一个图片对象.如果缓存中没有找到相应的图片 ...
- linux6的yum源
[base]name=CentOS-$releasever-Basebaseurl=http://centos.ustc.edu.cn/centos/6/os/x86_64/gpgcheck=1gpg ...
- eclipse 搭建python环境
1.安装eclipse + jdk windows下面就直接下载,双击安装就完了. Linux下: 安装eclipse: 安装完之后,可直接运行eclipse: 快捷方式在: 安装jidk: 2. ...