Флаги I2C, доступные для записи / чтения в файловом дескрипторе I2C - PullRequest
0 голосов
/ 11 октября 2018

Я бы хотел подключить несколько термометров к плате Raspberry через шину I2C на Raspbian, используя приложение C ++ с циклом событий, содержащим pselect().Открыв дескриптор файла i2c-0 по умолчанию (и используя интерфейс linux / i2c-dev.h ) из приложения, я бы добавил дескриптор файла к pselect() fd_set *readfds и fd_set *writefds.Интересно, станет ли этот файловый дескриптор FD_WRITEABLE или FD_READABLE?Поскольку I2C является установкой «ведущий / ведомый», термометр не может инициировать связь, поскольку и операции чтения, и записи инициируются приложением в пользовательском пространстве, поэтому я полагаю, что вопрос FD_READABLE не может быть и речи,верно?

Я не нашел ничего об использовании I2C с pselect, что означает чтение / запись в дескрипторе файла сокета?И почему обычные файлы не беспокоятся об этом? был самым близким ответом, на который я наткнулся: «Доступно для чтения означает, что в буфере приема сокета имеются данные или FIN. Доступно для записи означает, что в буфере отправки сокета есть свободное место."Устройство I2C буферизовано?Могу ли я зависеть от этого механизма?

Большое спасибо!

1 Ответ

0 голосов
/ 11 октября 2018

Итак, вот что:

Функции pselect () и select () должны поддерживать обычные файлы, терминальные и псевдо-терминальные устройства, файлы на основе STREAMS, FIFO, каналы и сокеты.Поведение pselect () и select () в файловых дескрипторах, которые ссылаются на другие типы файлов, не определено.

i2c-0 - это тип файлов символов устройства: https://www.kernel.org/doc/Documentation/i2c/dev-interface

pselect() действительно ничего не гарантирует для этого файла.Так что нет, вы не можете зависеть от этого.

...