# libserialport **Repository Path**: aikoder/libserialport ## Basic Information - **Project Name**: libserialport - **Description**: c++, linux - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-06-13 - **Last Updated**: 2025-03-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: serial, Linux, uart ## README # Serial Port Example ## 简介 该项目包含一个串口类 `serial_port` 和一个使用示例,旨在帮助用户在 Linux 环境下高效地进行串口通信。项目包括串口类的实现、数据编解码类 `data_codec` 以及一个演示如何接收和处理串口数据的示例程序。 ## 类说明 ### `serial_port` 类 `serial_port` 类提供了以下功能: - 打开串口 (`open_port`) - 关闭串口 (`close_port`) - 写入数据到串口 (`write_data`) - 从串口读取数据 (`read_data`) ### `data_codec` 类 `data_codec` 类用于数据的编码和解码,主要用于处理从串口接收到的数据包。 ## 使用方法 ### 依赖 - CMake 3.10 或更高版本 - g++ 或 clang++ 编译器 ### 编译和构建 在项目根目录中执行以下命令: ```bash mkdir build cd build cmake .. make ``` 编译完成后,您将在`build/bin`目录下找到生成的可执行文件`serial_port_example`。 ### 运行 ```bash ./build/bin/serial_port_example [baud_rate] [ctsrts] ``` 例如: ```bash ./build/bin/serial_port_example /dev/ttyUSB0 115200 0 ``` - ``: 串口设备名称(例如`/dev/ttyUSB0`) - `[baud_rate]`: 波特率(可选,默认为`115200`) - `[ctsrts]`: 硬件流控制(可选,`0`表示禁用,`1`表示启用,默认为禁用) ## 示例说明 示例程序会打开指定的串口端口,使用 data_codec 类解码接收到的数据,并输出解码后的数据包序列号。 ### 示例代码 ```C #include "serial_port.h" #include "data_codec.h" #include #include #include void serial_receiver_example(const std::string &port_name, int baud_rate, bool ctsrts) { try { serial_port sp(port_name, baud_rate, ctsrts); sp.open_port(); data_codec codec; while (true) { std::vector data = sp.read_data(256); std::vector> decoded_packets = codec.decode(data); for (const auto &packet : decoded_packets) { // 处理解码后的数据包 std::cout << "Received Packet with Sequence: " << packet->seq << std::endl; } std::this_thread::sleep_for(std::chrono::milliseconds(100)); } sp.close_port(); } catch (const std::exception &e) { std::cerr << "Exception: " << e.what() << std::endl; } } int main(int argc, char *argv[]) { if (argc < 2) { std::cerr << "Usage: " << argv[0] << " [baud_rate] [ctsrts]" << std::endl; return 1; } std::string port_name = argv[1]; int baud_rate = B115200; bool ctsrts = false; if (argc >= 3) { int baud = std::stoi(argv[2]); switch (baud) { case 9600: baud_rate = B9600; break; case 19200: baud_rate = B19200; break; case 38400: baud_rate = B38400; break; case 57600: baud_rate = B57600; break; case 115200: baud_rate = B115200; break; case 1000000: baud_rate = B1000000; break; default: std::cerr << "Unsupported baud rate. Using default 115200." << std::endl; break; } } if (argc >= 4) { ctsrts = std::stoi(argv[3]) != 0; } serial_receiver_example(port_name, baud_rate, ctsrts); return 0; } ``` ## 许可证 该项目使用 MIT 许可证,详情请参见 LICENSE 文件。 ## 作者 本项目由`Gavin`编写。如果您有任何问题或建议,请随时与我联系。