且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

libserialport: cross-platform library for accessing serial ports

更新时间:2022-08-12 21:07:50

/***********************************************************************************
 *       libserialport: cross-platform library for accessing serial ports
 * 说明:
 *     很多时候,我们经常需要写一下串口方面的调试工具,象征一下我们的知识产权,
 * 但是对于很多人来说,也许仅仅关心上层的软件,并不关心驱动上的事,所以使用串
 * 口库就变成了一种很不错的选择。
 * 
 *                                             2015-12-22 深圳 南山平山村 曾剑锋
 **********************************************************************************/

一、参考文档:
    1. C: cross-platform RS232 serial library? [closed]
        http://***.com/questions/2973402/c-cross-platform-rs232-serial-library
    2. request basic example code please #11
        https://github.com/martinling/libserialport/issues/11

二、README 翻译:
    -------------------------------------------------------------------------------
    libserialport: cross-platform library for accessing serial ports
    libserialport: 跨平台的串口库
    -------------------------------------------------------------------------------

    libserialport is a minimal library written in C that is intended to take care
    of the OS-specific details when writing software that uses serial ports.
    libserialport采用C语言编写,当我们写软件的时候可以规避一些操作系统 特有的内容。

    By writing your serial code to use libserialport, you enable it to work
    transparently on any platform supported by the library.
    通过使用libserialport,你的软件可以在任何平台上运行。

    The operations that are supported are:
    支持以下操作:

    - Port enumeration (obtaining a list of serial ports on the system).
    枚举串口
    - Opening and closing ports.
    打开关闭串口
    - Setting port parameters (baud rate, parity, etc).
    设置串口参数
    - Reading, writing and flushing data.
    读、写、刷新数据
    - Obtaining error information.
    获取错误

    libserialport is an open source project released under the LGPL3+ license.
    libserialport是一个开源项目,在LGPL3+协议下发行的

    Status
    现状
    ======

    The library should build and work on any Windows or Unix-based system. If it
    does not, please submit a bug.
    该库能够在任何Windows或者Unix-based系统下工作。当然,如果不能工作,请提交bug

    Enumeration is currently only implemented on Windows, Mac OS X and Linux. On
    other systems enumeration is not supported, but ports can still be opened by
    name and then used.
    枚举目前只在Windows、Mac OS X和Linux上实现了,在其他的系统上目前还不支持,
    但是串口还是可以通过名字打开并使用。

    If you know how to enumerate available ports on another OS, please submit a bug
    with this information, or better still a patch implementing it.
    如果你知道怎么枚举串口在其他的OS上,请提交对应的bug,将会实现这个功能。

    Future
    将来
    ======

    Future versions will add additional API calls for obtaining metadata about a
    port, e.g. for USB devices the USB VID and PID of the underlying device.
    将来的版本将添加用于获取串口元数据的API,例如,获取USB底层设备的VID、PID。

    Dependencies
    ============

    On Linux, libudev is required. On other systems no other libraries are required.
    在Linux系统上,libudev是依赖的库,在其他的系统上不依赖任何其他的库。

    The libudev dependency could be eliminated in favour of direct sysfs queries at
    the cost of some brevity. This is not currently a priority but if you feel like
    doing this feel free to submit a patch.

    Building
    编译
    ========

    The package uses a GNU style build system and requires a Unix style shell.
    On Windows it can be built with the MinGW toolchain and MSYS environment.
    这个包使用GNU编译系统,需要一个Unix形式的shell,在Windows上,可以通过MinGW
    工具、MSYS环境进行编译。

    Run "./autogen.sh" to generate the build system, "./configure" to setup, then
    "make" to build the library and "make install" to install it.
    运行"./autogen.sh" 来生成编译系统,"./configure"来配置,同时"make"来生成库,
    "make install"来进行安装

    API
    ===

    Doxygen API documentation is included.

三、Simple Demo:
    #include <stdio.h>
    #include "libserialport.h"

    int main ( void ) 
    {
        int i = 0;
        struct sp_port **ports;

        sp_list_ports(&ports);

        for (i = 0; i > 0 && ports[i]; i++)
            printf("Found port: '%s'.\n", sp_get_port_name(ports[i]));

        sp_free_port_list(ports);
    }