有没有人知道一个好的串行通信库,它是boost :: asio :: serialport的一个不错的替代品?
Boost::Asio::SerialPort does not seem to support non-standard baud rates - 就像31250一样(它肯定不适用于Mac OS 10.6,提升1.48.0)
我需要这个库才能在最低限度的Mac OS X和Windows上运行
答案 0 :(得分:1)
这是MIDI波特率。总是让我印象深刻,以确保您被迫从乐器供应商处购买硬件。首先购买硬件,软件通常随附。因此,您最终不会对您的Apple机器这样做:
答案 1 :(得分:1)
您可以使用ioctl和termios直接控制波特率和串口参数。它并不十分困难。
如果您只需要一个简单的串口并且不需要异步IO组件,您可以尝试:https://github.com/wjwwood/serial我的一个朋友为他的一些项目编写了一个库。请务必使用boostless
分支。我知道OS X驱动程序支持自定义波特率,我已经测试了这些,并且自定义波特率也适用于Linux。它目前不支持Windows,因此如果您需要Windows支持,目前它将没有多大帮助。
如果你只想使用ioctl和termios,你可以这样做:
#define IOSSIOSPEED _IOW('T', 2, speed_t)
int new_baud = static_cast<int> (baudrate_);
ioctl (fd_, IOSSIOSPEED, &new_baud, 1);
它可以让您将波特率设置为OS X中的任何值,但这是特定于操作系统的。对于Linux,你需要做:
struct serial_struct ser;
ioctl (fd_, TIOCGSERIAL, &ser);
// set custom divisor
ser.custom_divisor = ser.baud_base / baudrate_;
// update flags
ser.flags &= ~ASYNC_SPD_MASK;
ser.flags |= ASYNC_SPD_CUST;
if (ioctl (fd_, TIOCSSERIAL, ser) < 0)
{
// error
}
对于任何其他操作系统,您将不得不阅读一些手册页,或者它甚至可能根本不工作,它依赖于操作系统。
答案 2 :(得分:1)
最简单的解决方法是为相应的设备创建asio :: serial_port实例,然后调用serial_port.native_native()并使用返回的句柄调用ioctl()或SetCommState()来设置速度。
这样你除了设置线速度之外你可以使用asio,你可以用最少的特殊代码获得你想要的线速度。
您将需要此代码对每个操作系统都是特殊的,但至少其他一切都很常见。
但是:您引用的错误是针对特定版本的Linux / glibc的特定解决方法。您是否在Windows和OSX上遇到此问题?