/************************************************************************/
/* 功能: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实现串口通信(一):小试牛刀的更多相关文章

  1. 使用Boost.Asio编写通信程序

    摘要:本文通过形像而活泼的语言简单地介绍了Boost::asio库的使用,作为asio的一个入门介绍是非常合适的,可以给人一种新鲜的感觉,同时也能让体验到asio的主要内容. Boost.Asio是一 ...

  2. 在C#中实现串口通信的方法

    通常,在C#中实现串口通信,我们有四种方法: 第一:通过MSCOMM控件这是最简单的,最方便的方法.可功能上很难做到控制自如,同时这个控件并不是系统本身所带,所以还得注册,不在本文讨论范围.可以访问h ...

  3. .NET 串口通信

    这段时间做了一个和硬件设备通信的小项目,涉及到扫描头.输送线.称重机.贴标机等硬件.和各设备之间通信使用的是串口或网络(Socket)的方式.扫描头和贴标机使用的网络通信,输送线和称重机使用的是串口通 ...

  4. BluetoothChat用于蓝牙串口通信的修改方法

    本人最近在研究嵌入式的串口通信,任务是要写一个手机端的遥控器用来遥控双轮平衡小车.界面只用了一个小时就写好了,重要的问题是如何与板子所带的SPP-CA蓝牙模块进行通信. SPP-CA模块自带代码,在这 ...

  5. Win10 IoT C#开发 4 - UART 串口通信

    Windows 10 IoT Core 是微软针对物联网市场的一个重要产品,既可以开发设备UI与用户交互式操作,又可以控制GPIO等接口,使得原来嵌入式繁琐的开发变得简单.通过Remote Debug ...

  6. 使用Java实现简单串口通信

    最近一门课要求编写一个上位机串口通信工具,我基于Java编写了一个带有图形界面的简单串口通信工具,下面详述一下过程,供大家参考 ^_^ 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar ...

  7. Java 串口通信

    在Windows系统下,用Java开发串口通信相关的程序时,需要用到几个文件. (1)win32com.dll 要放在jdk\jre\bin目录下. (2)comm.jar 和javax.comm.p ...

  8. .NET 串口通信中断接收,包含0X1A(作为EOF)

    .NET串口通信中将`0X1A`当做EOF处理,.NET接收到EOF会触发一次接收中断,此时事件形参`SerialDataReceivedEventArgs`值为枚举 `Eof`,其他为`Chars` ...

  9. STC12C5A60S2 双串口通信

    STC12C5A60S2单片机是一款功能比较强大的单片机,它拥有两个全双工串行通信接口,串口1的功能及操作与传统51单片机串行口相同:特殊的是STC12C5A60S2单片机内部有一个独立波特率发生器, ...

随机推荐

  1. codeforces 557 D. Vitaly and Cycle 组合数学 + 判断二分图

    D. Vitaly and Cycle       time limit per test 1 second memory limit per test 256 megabytes input sta ...

  2. c++学习-字符串

    字符数组和 string类型比较的区别 #include<iostream> #include<string> using namespace std; class area{ ...

  3. $(document).ready() 与 window.onload的区别

    1.执行时间 window.onload 必须等到页面内所有元素(包括图片 css js等)加载完毕后才会执行. $(document).ready() 是DOM结构绘制完毕后就执行,不必等到所有元素 ...

  4. ArcGIS Engine 图层裁剪 Clip的实现方法

    方法一, 图层对图层裁剪,输出图层 ILayer pLayer; IFeatureLayer pFeatureLayer; IFeatureClass pFeatureClass; IWorkspac ...

  5. java 宠物商店代码

    Pet.java interface Pet{ public String getName(); public String getColor(); public int getAge(); publ ...

  6. C#中如何设置窗体的默认按钮和取消按钮

    可以直接在窗体的AcceptButton和CancelButton中设置相应的按钮. 也可以在后头通过代码设置: this.AcceptButton = (IButtonControl)btnSave ...

  7. ListView的position的保持

    需求场景: 一个ListView页面,滑动阅读到某一位置,然后退出页面,下次再进入页面的时候,想要直接滑动到上次阅读的位置. 方案1: 页面退出的时候,ListView.getFirstVisible ...

  8. Scala模式匹配语言,java的替代者

    1.建立的JVM之上 2.强大的集合工具类,增强模式匹配 3.函数式编程模型(链式编程模式) 4.线程池与消息机制的增强 5.面向对象,运行在jvm之上

  9. JavaScriptResult用法

    写MVC项目的时候,一开始就遇到返回脚本无法执行的情况,查阅博客园中老鸟的各种文章,最后没有得出个所以然,没办法,找项目经理实地讨论. public JavaScriptResult Hello() ...

  10. iOS 7.0获取iphone UDID 【转】

    iOS 7.0 iOS 7中苹果再一次无情的封杀mac地址,使用之前的方法获取到的mac地址全部都变成了02:00:00:00:00:00.有问题总的解决啊,于是四处查资料,终于有了思路是否可以使用K ...