C: кросс-платформенная последовательная библиотека RS-232?

Я ищу кроссплатформенную библиотеку с открытым исходным кодом для работы с последовательным портом на C, что-то вроде замечательной PySerial (к сожалению, для этого приложения мне приходится использовать C).

Я нашел только этот: http://www.teuniz.net/RS-232/, и это, похоже, не упоминает совместимость с OS X.


person Hamza    schedule 04.06.2010    source источник


Ответы (6)


Можно подумать, что кроссплатформенная библиотека C для последовательных портов существует уже 20 лет, но по состоянию на 2013 год ее еще не было, поэтому я создал libserialport.

Он протестирован на Windows, Mac OS X, Linux (включая Android), BSD и, вероятно, будет построен и на других системах Unix. Он поддерживает:

  • Перечисление портов (получение списка последовательных портов в системе)
  • Открытие, закрытие и запрос портов
  • Настройка параметров порта (скорость передачи, четность и т.д.)
  • Операции сигнализации портов (линии управления модемом, разрывы и т. д.)
  • Чтение, запись и сброс данных
  • В ожидании событий
  • Получение информации об ошибке

Первоначальный выпуск 0.1.0 активно используется проектом Sigrok для поддержки последовательного оборудования и уже включен в несколько дистрибутивов Linux. . Версия git также включает новые вызовы API для получения информации о последовательных USB-адаптерах (VID/PID и т. д.).

person Martin L    schedule 11.07.2014
comment
Отлично, за исключением лицензии gnu - person jjxtra; 27.08.2016
comment
Лицензия — LGPL. Мы приняли это решение специально, чтобы его можно было использовать и в проектах с закрытым исходным кодом. - person Martin L; 20.12.2016
comment
LGPLv2 было бы здорово. LGPLv3 слишком ограничивает встроенные устройства. - person cj8scrambler; 06.11.2020

Это бесстыдная заглушка, но у меня есть лицензированная MIT библиотека для связи RS-232, которую можно переносить на Windows, Linux и OS X здесь:

http://wjwwood.io/serial/

person wjwwood    schedule 25.08.2013
comment
Похоже, это библиотека C++, а не библиотека C. Я вижу в нем исключения. - person Warpspace; 03.04.2019
comment
Это С++, это правда. Возможно, как и ответ @mark-rushakoff о Boost ASIO, может быть, он все еще полезен. - person wjwwood; 04.04.2019

Я понимаю, что вы сказали C, а не C++, но, возможно, вы могли бы использовать Увеличьте последовательные порты Asio и скомпилируйте их в библиотеку, чтобы связать ее с вашим приложением C. Он утверждает, что совместим с POSIX, а OS X - это POSIX.

person Mark Rushakoff    schedule 04.06.2010

Я выпустил свой под лицензией MIT: https://github.com/Marzac/rs232

Он написан на C и хорошо работает для Windows, Mac и Linux.

person Frédéric    schedule 16.08.2015
comment
Действительно красиво и чисто. - person Sam Washburn; 27.01.2017
comment
Да красиво и аккуратно. Тем не менее, вы можете столкнуться с серьезными проблемами со случайными дублированиями и пропусками байтов в потоке rx. Установка c_lflag = 0 в comOpen волшебным образом исправила это. - person Heath Raftery; 28.04.2019
comment
Здесь есть ответвление с дополнительными функциями: github.com/mrh1997/rs232/tree/add -функции - person eri0o; 28.11.2020

OS X поддерживает стандартный серийный API POSIX, начиная с <termios.h> и <unistd.h>. Найдите функции tcsetattr(), cfsetspeed() и так далее.

person caf    schedule 05.06.2010

Получите дополнительный код цели-C, специфичный для OS X, в строках AMSerialPort, goSerial, serialconnect, PolKit,... и реализуйте условную компиляцию вашего исходного файла C.

http://osx.hyperjeff.net/Apps/apps?f=serial

person trivvo    schedule 04.06.2010
comment
Спасибо за предложение, но я бы хотел оставить только C. - person Hamza; 04.06.2010