boost实现串口通信(一):小试牛刀
/************************************************************************/
/* 功能:boost实现串口通信类 */
/* 作者: kernelmain QQ:835609451 */
/* 版本:v0.1 build at 2014.3.25 */
/************************************************************************/ #include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <iostream> using namespace std;
using namespace boost::asio; typedef string anytype; class SuperTerminal
{
public:
SuperTerminal(const anytype &port_name);
~SuperTerminal(); private:
bool init_port(const anytype port, const unsigned int char_size); public:
void write_to_serial(const anytype data);
void read_from_serial();
void handle_read(char buf[], boost::system::error_code ec,std::size_t bytes_transferred);
void call_handle(); private:
io_service m_ios;
serial_port *pSerialPort;
anytype m_port;
boost::system::error_code m_ec;
};
/************************************************************************/
/* 功能:boost实现串口通信类 */
/* 作者: kernelmain QQ:835609451 */
/* 版本:v0.1 build at 2014.3.25 */
/************************************************************************/
#include "SuperTerminal.h" SuperTerminal::SuperTerminal(const anytype & port_name):pSerialPort(NULL)
{
pSerialPort = new serial_port(m_ios);
if (pSerialPort)
{
init_port(port_name,);
}
} SuperTerminal::~SuperTerminal()
{
if (pSerialPort)
{
delete pSerialPort;
}
} bool SuperTerminal::init_port(const anytype port, const unsigned int char_size)
{
if (!pSerialPort)
{
return false;
} pSerialPort->open(port,m_ec); pSerialPort->set_option(serial_port::baud_rate(),m_ec);
pSerialPort->set_option(serial_port::flow_control(serial_port::flow_control::none),m_ec);
pSerialPort->set_option(serial_port::parity(serial_port::parity::none),m_ec);
pSerialPort->set_option(serial_port::stop_bits(serial_port::stop_bits::one),m_ec);
pSerialPort->set_option(serial_port::character_size(char_size),m_ec); return true;
} void SuperTerminal::write_to_serial(const anytype data)
{
if (!pSerialPort)
{
return;
} size_t len = write(*pSerialPort, buffer(data),m_ec);
cout << len << "\t" << data << endl;
} void SuperTerminal::handle_read(char buf[], boost::system::error_code ec,std::size_t bytes_transferred)
{
cout << "\nhandle_read: " ;
cout.write(buf, bytes_transferred);
} void SuperTerminal::read_from_serial()
{
char v[];
async_read(*pSerialPort, buffer(v), boost::bind(&SuperTerminal::handle_read,this,v,_1, _2));
} void SuperTerminal::call_handle()
{
m_ios.run();
}
一直比较喜欢c++的简洁, 尤其用上boost后,代码显得更加简洁。
想把之前给同学用C#做的刷苹果设备软件用C++重写一下,一点一点来, 计划:
(1). 在控件台程序中调试熟悉boost串口通信
(2). 用C++ builder xe5画界面,调试。
(3). 实现windows超级终端的所有功能。
(4). 添加扩展功能。
下面是控件台程序测试代码:
#include <vector>
#include <string> #define BOOST_REGEX_NO_LIB
#define BOOST_DATE_TIME_SOURCE
#define BOOST_SYSTEM_NO_LIB
#include "SuperTerminal.h" int main()
{
try
{
SuperTerminal sp("COM1");
sp.write_to_serial("serialPort");
sp.read_from_serial();
sp.call_handle();
getchar();
return ;
}
catch (std::exception &e)
{
cout << e.what();
getchar();
}
}
boost实现串口通信(一):小试牛刀的更多相关文章
- 使用Boost.Asio编写通信程序
摘要:本文通过形像而活泼的语言简单地介绍了Boost::asio库的使用,作为asio的一个入门介绍是非常合适的,可以给人一种新鲜的感觉,同时也能让体验到asio的主要内容. Boost.Asio是一 ...
- 在C#中实现串口通信的方法
通常,在C#中实现串口通信,我们有四种方法: 第一:通过MSCOMM控件这是最简单的,最方便的方法.可功能上很难做到控制自如,同时这个控件并不是系统本身所带,所以还得注册,不在本文讨论范围.可以访问h ...
- .NET 串口通信
这段时间做了一个和硬件设备通信的小项目,涉及到扫描头.输送线.称重机.贴标机等硬件.和各设备之间通信使用的是串口或网络(Socket)的方式.扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通 ...
- BluetoothChat用于蓝牙串口通信的修改方法
本人最近在研究嵌入式的串口通信,任务是要写一个手机端的遥控器用来遥控双轮平衡小车.界面只用了一个小时就写好了,重要的问题是如何与板子所带的SPP-CA蓝牙模块进行通信. SPP-CA模块自带代码,在这 ...
- Win10 IoT C#开发 4 - UART 串口通信
Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,既可以开发设备UI与用户交互式操作,又可以控制GPIO等接口,使得原来嵌入式繁琐的开发变得简单.通过Remote Debug ...
- 使用Java实现简单串口通信
最近一门课要求编写一个上位机串口通信工具,我基于Java编写了一个带有图形界面的简单串口通信工具,下面详述一下过程,供大家参考 ^_^ 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar ...
- Java 串口通信
在Windows系统下,用Java开发串口通信相关的程序时,需要用到几个文件. (1)win32com.dll 要放在jdk\jre\bin目录下. (2)comm.jar 和javax.comm.p ...
- .NET 串口通信中断接收,包含0X1A(作为EOF)
.NET串口通信中将`0X1A`当做EOF处理,.NET接收到EOF会触发一次接收中断,此时事件形参`SerialDataReceivedEventArgs`值为枚举 `Eof`,其他为`Chars` ...
- STC12C5A60S2 双串口通信
STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...
随机推荐
- HTML5表单与PHP交互
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 转_Java中常用的设计模式总结
1.工厂模式:客户类和工厂类分开.消费者任何时候需要某种产品,只需向工厂请求即可.消费者无须修改就可以接纳新产品.缺点是当产品修改时,工厂类也要做相应的修改.如:如何创建及如何向客户端提供. 2.建造 ...
- db2删除数据库
1.断开所有连接 db2 stop application all force 2.停止数据库 db2stop 3.删除数据库(系统管理员权限下)db2 drop 数据库name
- JAVA 根据用户输入数据求某年到某年有多少天
实例: import java.util.*; //求某年到某年有多少天 public class Test{ public static void main(String[] args){ Scan ...
- CentOS 6.5 更新163源(转载)
From:http://www.cnblogs.com/buffer/p/3426908.html 众所周知,Centos 有个很方便的软件安装工具 yum,但是默认安装完centos,系统里使用的 ...
- python 批量重命名文件后缀
# batch_file_rename.py # Created: 6th August 2012 ''' This will batch rename a group of files in a g ...
- oninput 属性
在HTML5中,新增加了oninput属性,它和onchange 的不同就是立刻发生,而onchange 是在失去焦点的时候才发生 <script> function rangeChang ...
- Angularjs路由.让人激动的技术.真给前端长脸了.
先看文件的摆放 不废话,直接上代码. detail.html: <hr/> <h3>路由 <span style="color: red;">{ ...
- mysql 非安装版本就可以用, 用于打包用
http://blog.csdn.net/iihero/article/details/5596401 http://blog.csdn.net/iihero/article/details/5596 ...
- Lua 架构 The Lua Architecture
转载自:http://magicpanda.net/2010/10/lua%E6%9E%B6%E6%9E%84%E6%96%87%E6%A1%A3/ Lua架构文档(翻译) 十 102010 前段时间 ...