/************************************************************************/
/* 功能: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. UVA116 单向 DSP(多段图最短路)

    单向 DSP [题目链接]单向 DSP [题目类型]dp &题解: 紫书P271 这块的字典序排序我觉得挺厉害的,每次都把那3步sort一下,之后if (v< d[i][j]) 这块的小 ...

  2. Python中HTTPS连接

    permike 原文 Python中HTTPS连接 今天写代码时碰到一个问题,花了几个小时的时间google, 首先需要安装openssl,更新到最新版本后,在浏览器里看是否可访问,如果是可以的,所以 ...

  3. HTTP协议与HTTPS的区别

    permike 原文 HTTP协议与HTTPS的区别 HTTP协议 HTTP协议主要应用是在服务器和客户端之间,客户端接受超文本. HTTP是在七层网络模型中的应用层的协议,由发送请求和接受响应构成, ...

  4. HTML 表单验证和事件

    1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电话号码, ...

  5. c++学习-特殊类成员

    静态变量: #include<iostream> #include<string> #include <typeinfo> using namespace std; ...

  6. python (16) 如何在linux下安装lxml(pip安装,ubuntu下,centos下)

    首先需要明白lxml包依赖其他包,必须先安装其他包然后再安装lxml 安装python-pip:方便安装python的第三方包 [root@******/]# wget https://bootstr ...

  7. ICE安装

    第一步,基于Windows下的安装,所以下载windows版的Ice: http://www.zeroc.com/download       第二步,安装Ice: 常规安装即可,可以选择安装目录,本 ...

  8. Tomcat下部署多个项目

    转载地址:http://blog.csdn.net/philosophyatmath/article/details/30246631 同一端口号的多个项目部署     添加: <Context ...

  9. plsql如果表和函数等显示不出来

    就把用户设为所有用户,所有的东西就会都显示出来了,然后再把用户切换为当前用户和My objects,你想看的东西就全部显示出来了.

  10. JAVA中复写equals方法

    在JAVA中“==”用于比较两个引用对象的地址是否相同.但是如果我们想比较两个对象的内容是否相同,通常会覆写equals方法.equals方法用来比较两个对象的内容是否相等. package org. ...