Итак, создана утилита для исследования IOCTL запросов к тюнеру.
Вложение:
![BeholdRC_20240318a.png](./download/file.php?id=1222&sid=43717249746f01c9f8ca4bf554b13c33)
BeholdRC_20240318a.png [ 22.19 КБ | Просмотров: 22448 ]
Вложение:
BeholdRC_v10.rar [55.03 КБ]
Скачиваний: 385
В официальном BeholdRC.dll выявлено наличие кода для 8 различных IOCTL-команд: 0x233804, 0x233808, 0x233844, 0x233BC4, 0x233998, 0x23390C, 0x233904, 0x233908
На моём BeholdTV T8 – работают только первые 4.
804 – поля 0,2,3 без изменений, в поле 1 – 0x00000001. Очевидно какой-то флаг, непонятно чего (APRC? MultiDec? Просто готовность?). Надо на разных моделях посмотреть и найти корреляцию с чем-то.
808 – поля 0,1 без изменений, в остальных полях (2-8) идентификаторы ven(2) dev(3) subsys(4,5) rev(6), и ещё что-то (7,8)
844 – поле 0 без изменений, в остальных много каких-то небольших значений. Вероятно какие-то опции тюнера.
BC4 – поля 1,2,3 без изменений, в поле 0 – полный сканкод нажатой кнопки пульта. Для опроса пульта – очевидно надо в цикле делать именно эту команду.
Смысла в командах 804 808 844 я не нашёл. Открыл девайс, и сходу можно делать в цикле BC4 для опроса пульта. Всё работает вроде.
Задача 1. Найти корреляцию свойств APRC и MultiDec (кстати что это такое?) с какими-то данными в ответах 804/808/844. Для этого нужны ответы 804/808/844 множества разных моделей…
Зачем нужны ещё команды 998, 90C, 904, 908? На моем тюнере они не поддерживаются, очевидно они для других моделей (Wander, Voyage, Cruise, старые PCI ?).
Интересно что в коде DLL для 90C, 904, 908 вообще не читают результат. Вероятно они переключают какой-то режим? Включают/выключают работу сенсора?
Задача 2. Найти назначение команд 998, 90C, 904, 908. Это может быть опасно для тюнера (может они вводят его в какой-то необратимый режим, хотя это и крайне маловероятно, в BeholdRC.dll врядли бы был смысл реализовывать какие-то опасные команды).
Ещё есть вопросы про RC_Type (GetRemoteType, тип пульта – 30/28/34 кнопочный). Не очень понятно как официальная BeholdRC.dll выдаёт тип пульта. Там не прямое чтение некой опции с железа, а табличка из нескольких десятков элементов для каждого из которых прописан тип пульта (30/28/34 кнопочный). Тип пульта – это константа привязанная к модели тюнера, а не реально работающий сейчас пульт?
У всех вариантов пультов бехолдера – одинаковый шаблон 32-битного сканкода. Получается если допустим взять пульт от другой модели бехолдера (например для современной модели где родной пульт 34 кнопки – взять старый 30 кнопочный пульт) – то GetRemoteType будет указывать неактуальный тип пульта?
Причём у пультов же некоторые сканкоды не совпадают: например 0x0E Sleep и Teletext, 0x0F Audio и Record, 0x11 TV/AV и Mute. Пульт от другой модели бехолдера будет работать некорректно (если программа использует автодетект типа пульта по GetRemoteType)?
Задача 3. Исследовать работу с другой моделью пульта бехолдера.