原文链接:
通过原文链接,关注公众号,可订阅QT/C++常用的开源软件及库。
1. 简介
本期介绍用于访问串行端口的跨平台库libserialport,libserialport 是用 C 语言编写的轻量级跨平台库,不依赖于其他库,旨在在编写使用串行端口的软件时处理特定于操作系统的细节。该库是在 LGPL3+ 许可下发布的开源项目,允许开发者编写能够在多个平台上透明工作的串行通信软件,而无需关心底层系统的差异。支持- Linux、Mac OS X、FreeBSD、Windows、Android等操作系统。
2. 功能列表
-
端口枚举:
获取系统上的串行端口列表。
-
端口处理:
打开、关闭和获取有关港口的信息。
-
配置:
波特率、奇偶校验等。
-
信 号:
调制解调器控制线、中断等。
-
数据处理:
读取和写入数据以及缓冲区管理。
-
等 待:
等待端口准备就绪,与事件循环集成。
-
错 误:
获取错误和调试信息。
3 . 线程安全
可以并发进行某些调用组合,如下所示。
-
使用不同端口的调用总是可以并发进行的,即单独的线程处理自己的端口是安全的。
-
当一个调用是读取操作和一个调用是写入操作时,可以使用同一端口同时进行调用,即对同一端口使用单独的“读取器”和“写入器”线程是安全的。
4 .调试
该库可以输出大量的跟踪和调试信息。最简单的使用方法是将环境变量设置为任何值;然后,消息将输出到标准错误流。LIBSERIALPORT_DEBUG,此行为由默认的调试消息处理回调实现。可以使用 sp_set_debug_handler() 设置替代回调,以便将输出重定向到其他位置或过滤它。
5 .源码目录
6. 从源代码构建
进入源码目录。
./configure
make
sudo make install
构建后生成的文件如下图所示。
7. 库的集成使用
此处以cmake+vscode介绍库的集成及使用。 CMakeLists.txt中加入库。
find_library(SERIA_LIB NAMES serialport HINTS ${CMAKE_SOURCE_DIR}/output_x86/lib NO_DEFAULT_PATH)
find_path(SER_INCLUDE NAMES libserialport.h HINTS ${CMAKE_SOURCE_DIR}/output_x86/include NO_DEFAULT_PATH)
include_directories(${SER_INCLUDE})
#链接库
target_link_libraries(${PROJECT_NAME} ${SERIA_LIB} )
主要代码。
#include<libserialport.h>
struct sp_port *ports[1];
sp_return iret = sp_get_port_by_name("dev/ttyS1", &ports[0]);
if(iret == SP_OK)
{
iret = sp_open(ports[0], SP_MODE_READ_WRITE);
if(iret == SP_OK)
{
sp_set_baudrate(ports[0], 115200);
sp_set_bits(ports[0], 8);
sp_set_parity(ports[0], SP_PARITY_NONE);
sp_set_stopbits(ports[0], 1);
sp_set_flowcontrol(ports[0], SP_FLOWCONTROL_NONE);
}
}
/*接收数据*/
unsignedchar buf[512] = {0};
sp_return iret = sp_blocking_read(ports[0], buf, 512, 500);
8.库地址
地址: https://sigrok.org/api/libserialport/unstable/index.html
原文链接:《二》开源:跨平台串行通讯库https://mp.weixin.qq.com/s/PVF03yJgXyFyhrcSLWnrOg?token=1806244109&lang=zh_CN
更多开源项目可通过原文链接关注公众号: