Плагин USB-IrDA
Прием ИК команд с пульта ДУ через USB IrDA
Автор Тимохин Валерий Сергеевич
ТЕОРИЯ
Для работы с ИК-устройствами в ОС Windows встроен специальный инфракрасный сокет - IrSock. Но из-за того, что он основан на протоколе TCP - использовать ИК-сокет для приёма данных от ИК-устройства НЕ ПОЛУЧИТСЯ!
(подробнее о ик-сокетах можно почитать: Э.Джонс, Д.Оланд - программирование в сетях Microsoft Windows)
Напрямую обратиться к USB-устройству из USER-MODE - то же НЕЛЬЗЯ!
Любые манипуляции с USB-устройством программа должна производить с помощью соответствующего драйвера.
Для ИК-устройств, подключенных к usb порту - стек драйверов будет примерно таким:
=IrEnum.sys= < вершина стека >
=Драйвер ИК-устройства USB-IrDA=
=USBD.sys= < дно стека >
Драйвер USB-IrDA постоянно опрашивает своё устройство на предмет, например, приёма данных. Для этого он посылает IRP-пакет драйверу USB шины - USBD. Драйвер USBD возвращает принятый IRP-пакет с принятыми данными, которые пришли на ИК-устройство (либо пустой пакет, т.е. данные не пришли).
(подробнее о разработке драйверов: Уолтер Они - использование Windows Driver Model)
Идея состоит в следующем:
1) Установить свой фильтр-драйвер "IrRemote.sys" в приведенный выше стек для перехвата принятых данных. Таким образом он приобритёт следующий вид:
=IrRemote.sys= < вершина стека >
=Драйвер ИК-устройства USB-IrDA=
=IrRemote.sys= <Драйвер для перехвата принятых данных>
=USBD.sys= < дно стека >
2) С помощью плагина к программе SlyControl - "UsbIrRemote.dll" принимать данные от драйвера IrRemote.sys.[b][/b]
Исходные тексты драйвера IrRemote.sys и UsbIrRemote.dll, а также руководство по установке находятся в прилагаемом архиве.
Каждый кто хочет может внести свой вклад в развитие ПО USB-IrDA Remote Control.
|