(TL;DR: смотрите внизу поста дискретные коды Samsung.)

Введение

Чтобы упростить управление моим телевизором и его периферийными устройствами, имея так много пультов, я купил программируемый пульт. Пульт дистанционного управления использует программное обеспечение RCCreator, которое довольно хорошо. Он имеет огромную базу данных пультов дистанционного управления, а также поддерживает изучение новых кодов, направляя оригинальный пульт дистанционного управления на его инфракрасный датчик.

Однако что, если вы хотите запрограммировать коды, которые оригинальный пульт не поддерживает? Многие телевизоры на самом деле поддерживают секретные коды, которых нет на оригинальном пульте. Например, на вашем пульте дистанционного управления может быть только одна кнопка источник, которая позволяет вам переключаться между TV/AV1/AV2/HDMI1, но на самом деле существуют коды дистанционного управления, которые позволяют вам перейти прямо к HDMI1. Такие коды называются дискретными. Список дискретных кодов для Samsung можно найти в Интернете.

Формат ИК-сигналов

Но проблема в том, что найденный формат кода нельзя использовать в RCCreator из-за другого формата. Например, код для HDMI1 в формате Pronto:

0000 006D 0000 0022 00AC 00AC 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0040 0015 0040 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0015 0040 0015 0015 0015 0015 0015 0040 0015 0015 0015 0040 0015 0040 0015 0040 0015 0015 0015 0040 0015 0040 0015 0015 0015 0040 0015 0015 0015 0015 0015 0015 0015 0689

Это намного длиннее, чем то, что можно ввести в RCCreator. Проведя некоторое исследование, я обнаружил, что формат «Pronto» — это необработанная синхронизация для отправки сигналов (закодированных), а то, что RCCreator, вероятно, является декодированным форматом.

IRDB предоставляет инструмент для декодирования Pronto Format. Его декодирование дает Протокол NECx2, устройство 7, подустройство 7, OBC 233. JP1 Wiki дает хорошее описание протокола NECx2. По сути, он содержит адрес и команду. Адрес указывает устройство, которым оно управляет, и состоит из 8-битного устройства и 8-битного подустройства. Команда указывает действие, которое необходимо выполнить, и имеет длину 8 бит, обеспечивая в общей сложности 256 команд. По сети команда фактически отправляется как 8-битная, а за ней следует обратная команда для проверки ошибок, что в сумме составляет 16 бит. (OBC расшифровывается как Исходный код кнопки и, по сути, является другим названием команды.)

Демистификация формата RCCreator

Теперь мы знаем необработанную команду, как нам запрограммировать ее обратно в RCCreator? Давайте немного перепроектируем это.

Взял коды кнопок с пульта и заметил следующее:

  • Изменяются только 4 шестнадцатеричных цифры, поэтому это должен быть код функции, за которым следует его инверсия (помните, что 1 шестнадцатеричная цифра = 4 бита)
  • Интервал странный, поэтому вполне вероятно, что есть некоторая запутанность, чтобы пользователи не могли копировать удаленный код и использовать его в другом программном обеспечении. Об этом же нам говорит и тот факт, что цифры не соответствуют OSB.
  • Первая и третья цифры всегда составляют в сумме 0x13 или 0x03. То же самое касается второй и четвертой цифр. Так что скорее всего они парные.
  • Клавиши 1, 2 и 3 имеют последовательный OBC. Шестнадцатеричные значения: 0xBA, 0x3A и 0xFA, что наводит меня на мысль, что порядок следования байтов на уровне битов перевернут, поскольку меняется первая цифра, а не вторая цифра.

Короче говоря, после проб и ошибок вот как преобразовать OBC в код:

  • Сначала возьмите OBC, например, 233 и преобразуйте его в двоичный код, получив 0b11101001.
  • Переверните двоичный файл 0b11101001 (прочитайте справа налево и запишите слева для записи), получив 0b10010111.
  • Преобразовать 0b10010111 в шестнадцатеричный формат, получив 0x97.
  • Минус первый символ на 0x7 и второй символ на 0x6, получается 0x21. (Не переносите, если оно отрицательное, вместо этого просто вернитесь назад. Таким образом, 0x0–0x1=0xF.)
  • Найдите третью и четвертую цифру, найдя шестнадцатеричную цифру, которая в сумме дает 0x3 или 0x13. В этом случае они будут 0x12.
  • Вставьте его в шаблон, получив 2325E092D45A2921192.

Более простая альтернатива

Теперь это много работы и не работает при изменении протокола или идентификатора устройства, поскольку будет изменена обфускация, требующая повторения всего заново. Простым способом было бы просто поместить код Pronto в другой ИК-пульт (например, в телефон с ИК-бластером) и заставить RCCreator учиться на этом.

Список

  • HDMI1 = 2325E092D45A2921192
  • HDMI2 = 2325E092D45A290739C
  • HDMI3 = 2325E092D45A29DD696
  • HDMI4 = 2325E092D45A293D096
  • AV1 = 2325E092D45A29BB898
  • AV2 = 2325E092D45A2961D92
  • Комп1 = 2325E092D45A29FB498
  • Комп2 = 2325E092D45A29AB998