Последовательное соединение Posix с обратными вызовами - PullRequest
1 голос
/ 28 марта 2011

Я пытаюсь связаться с Arduino, используя код,

http://todbot.com/blog/2006/12/06/arduino-serial-c-code-to-talk-to-arduino/

, который использует termios, чтобы открыть и поговорить с Arduino неблокирующим способом, который работает нормально. Что мне было интересно, так это то, что на Java с использованием rxtx я могу зарегистрировать функцию обратного вызова, которая вызывается при наличии данных в строке, чтобы мне не приходилось проверять вручную. Я погуглил, но не смог найти никакой информации о том, как зарегистрировать функцию обратного вызова?

Я работаю в Linux / OS X и стараюсь не запускать новый поток только для просмотра / чтения данных в строке.

Ответы [ 2 ]

1 голос
/ 28 марта 2011

Boost.Asio может обеспечить функцию обратного вызова при использовании последовательных портов.Он работает на Linux и Mac OS X.

1 голос
/ 28 марта 2011

Сам Posix не определяет способ назначения функции обратного вызова, вызываемой при поступлении последовательных данных. Стандартный способ сделать этот тип обработки, если вы не хотите использовать отдельный поток, это использовать библиотечную функцию select. Это позволяет программе определить набор файловых дескрипторов, которые интересуют вашу программу, и затем перейти в спящий режим. Select автоматически активирует ваш процесс, если с одним из дескрипторов файлов, к которым вы заявили интерес, произойдет что-то интересное (например, новые данные станут доступны для чтения). Это позволяет избежать необходимости ждать и опрашивать несколько дескрипторов активности.

Другим вариантом может быть использование библиотеки, например libevent, которая расположена поверх слоя Posix и обеспечивает инфраструктуру обратного вызова. http://monkey.org/~provos/libevent/

...