/************************************************************************/
/* 功能: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. NeHe OpenGL教程 第十八课:二次几何体

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. 安装Nginx+uWSGI+Django环境

    Ubuntu Server 12.04 安装Nginx+uWSGI+Django环境 今天要介绍的是利用APT源直接apt-get install安装配置我们所需要的环境,首先按惯例先安装MySQL和 ...

  3. mysqli 操作数据库

    从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加 i表示改进的意思 功能多.效率高.稳定 编译时参数: ./configure --with-mysql=/usr/bin/ ...

  4. Linux Deepin 2014安装Lenovo LJ2600D驱动

    双11老师给实验室抢了个Lenovo LJ2600D的USB接口打印机,并用旧的HP-1080MFP网络打印服务器连接上了.Windows下就不多说了,官方给的驱动就是针对它的,同学们都用得爽爆了,因 ...

  5. 在ScrollView中嵌入GridView

    做android程序开发的都知道,不能在一个拥有Scrollbar的组件中嵌入另一个拥有Scrollbar的组件,因为这不科学,会混淆滑动事件,导致只显示一到两行数据.那么就换一种思路,首先让子控件的 ...

  6. VS2008 调试记录

    <以后追加> F10 单步调试 F11 进入函数 SHIFT+F11  推出当前函数

  7. spring mvc视频

    视频内容: 1.下载spring mvc以及spring mvc示例演示http://pan.baidu.com/s/1kTHRfDH 2.配置完善&初步探究控制器拦截http://pan.b ...

  8. ORM框架:EF与NHibernate了解

    在.Net Framework SP1微软包含一个实体框架(Entity Framework),此框架可以理解成微软的一个ORM产品.用于支持开发人员通过对概念性应用程序模型编程(而不是直接对关系存储 ...

  9. crm 4 UserHasRole

    //获取当前人员是否含有指定角色权限 function UserHasRole(roleName) { //get Current User Roles, oXml is an object var ...

  10. photoshop CS 调整选择区域的大小

    网上看到说:矩形选框不能直接调整大小,如果你不想重新画一个可以利用转换路径,然后再调整.这是不对的,矩形选框是可以调整大小的,使用"变换选区"即可.   对应步骤截图如下: 1.画 ...