Вы можете использовать ioctl и termios для прямого управления скоростью передачи и параметрами последовательного порта. Это не очень сложно.
Если вам нужен только простой последовательный порт и вам не нужны асинхронные компоненты ввода-вывода, вы можете попробовать: 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
}
Для любой другой ОС вам придется читать некоторые справочные страницы, иначе она может вообще не работать, она зависит от самой ОС.