/************************************************************************/
/* 功能: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. cf380D Sereja and Cinema 组合数学

              time limit per test 1 second memory limit per test 256 megabytes input standard input outp ...

  2. linux命令(10)使用kill杀死含有指定关键字的进程

    命令:ps -ef|grep keyword|grep -v grep|cut -c 9-15|xargs kill -9 批量杀死包含关键字“keyword”的进程. "ps -ef&qu ...

  3. XHTML的使用规范

    一.XHTML的简介 XHTML指的是可扩展超文本标记语言 XHTML与HTML4.01几乎是相同的 XHTML是更严格更纯净的HTML版本 XHTML是以XML应用的方式定义的HTML 二.为什么使 ...

  4. UCOS-2 消息邮箱与队列

    一个有趣的网络解释: 信号量就是中央政府发给官人做一方大员的官印,有很多种官印但是不能一印多发,得到官印者才能掌权鱼肉一方百姓(任务得到信号量才能运行),否则你就只要等官跑官.(当然官印也可随时被政府 ...

  5. Spring MVC 中文乱码的解决

    对于POST方法提交的中文乱码 , 可在web.xml中添加如下代码 : <filter> <filter-name>encodingFilter</filter-nam ...

  6. http示例代码

    //下载文件 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletEx ...

  7. DEDE5.7如何制作网站地图?

    DEDE用的人很多,可能大家在使用的过程中会碰到一些问 题,这很正常的,今天我们来讲讲DEDE5.7如何制作网站地图,其实网站地图分两种,一种做给网友看的,方便网友可以方便地找到自己想浏览的内容,另外 ...

  8. 20145305 《Java程序设计》第6周学习总结

    教材学习内容总结 1.输入串流代表对象为java.io.InputStream实例,输出串流代表对象为java.io.OutputStream实例 2.InputStream与OutputStream ...

  9. Java SE 第十一讲----面向对象特征之封装2

    1.如果一个类包含了属性跟方法,那么该类的每一个对象都具有自己的属性,但无乱一个类有多少个对象,这些对象共享同一个方法. 2.关于方法参数传递的总结: 对于Java中的方法参数传递,无论传递的是原生数 ...

  10. Eclipse CDT 代码高亮配置

    效果图如下: 配置生效方式: 找到CDT的workspace目录中如下文件 X:\workspace\.metadata\.plugins\org.eclipse.core.runtime\.sett ...