PIP 5.6.1
Platform-Independent Primitives
Сложный ввод-вывод (PIConnection)

PIConnection — абстрактный слой над физическими устройствами ввода-вывода: пул устройств, фильтры (извлечение пакетов), отправители (периодическая отправка) и диагностика. Несколько соединений могут использовать одно физическое устройство через пул; у каждого устройства есть поток чтения, запуск и остановка — startThreadedRead() и stopThreadedRead().

Пул устройств

Пул устройств — единственный на приложение набор уникальных устройств. PIConnection обращается к железу через этот пул, поэтому один порт или сокет может обслуживать несколько логических соединений.

Фильтры

Фильтр — это PIPacketExtractor и набор привязанных устройств или других фильтров. Когда поток чтения получает данные с устройства, они могут передаваться в один или несколько фильтров. У фильтров уникальные имена; filter(name) возвращает PIPacketExtractor*, filterBoundedDevices() — список привязанных устройств и фильтров. Один фильтр может получать данные из нескольких источников и быть привязан к нескольким.

Отправители (senders)

Отправители — именованные таймеры, периодически отправляющие данные на привязанные устройства. Создание или добавление устройства — addSender(). У каждого отправителя свой таймер и вызов виртуального senderData(); возвращённое значение отправляется на устройства. Либо setSenderFixedData() — отправка фиксированных данных без вызова senderData().

Диагностика

Для каждого устройства или фильтра создаётся PIDiagnostics. Доступ — diagnostic().

Конфигурация

PIConnection можно собрать из секции конфига или настроить позже через configureFromConfig() (см. Конфигурация из файла). Устройства задаются полными путями (см. документацию PIIODevice). makeConfig() формирует строку для вставки в конфиг.