Главная Проекты Идеи Soft О авторе
 

Универсальный алгоритм ХЭШ'ирования.

Рис. 1 Внешний вид универсального сэмпла.
Увеличить.

Внимание!!!
В связи с добавлением поддержки Win7 и переходом на HID версию описание проекта обновляется, и новый вариант описания развивается ОТДЕЛЬНО - с самостоятельным оформлением (это этот же сайт, но убрано все лишнее кроме описания HID версии проекта), а не обновленные ссылки временно свернуты в "пояснения":
»Щелкните по этому тексту, чтобы развернуть пояснения«

Вступление.

       Ко мне часто приходили письма с предложениями организовать включение компьютера, освещения, вентиляторов (от компьютерных до напольных), автоматизировать переключатель или другую бытовую технику с помощью пульта дистанционного управления. Благо теперь стало возможным применять данную конструкцию в качестве комбаина USB-IR и USB-Реле, управляя при этом портом из SlyControl с помощью скрипта. Подробнее об этом тут.
       В целом всё это оборудование делится на две категории:
  А) оборудование, которым нужно управлять при включённом компьютере.
  Б) оборудование, управлять которым желательно и при выключенном ПК.
Если с пунктом А всё понятно - настраивай скрипт и пользуйся, то с пунктом Б возникают вариации.
       Реализовывать пункт Б под один заданный тип пульта - не интересно. У пользователя именно этого пульта в наличии может и не оказаться. А писать алгоритмы под каждый тип кодировки с родни борьбы с ветряными мельницами... Реализовывать это под одну-две кнопки пульта пользователя - записав это с помощью прилагаемой программы в EPROM микропроцес- сора - тоже мало привлекательно. Распознанная таким методом посылка может не стабильно распознаваться, этот метод работает не со всеми кодировками и даёт возможность управлять максимум двумя устройствами. А устройств обычно намного больше 2х, а реализация на 1-2 кнопки даёт мизерный прирост функциональности, но на то время - это была единственная автономная альтернатива пункта А ...
       Для реализации пункта Б требовался универсальный алгоритм ХЭШирования, который позволил бы, изменив пару настроек, подстроиться под любую кодировку. Я попытался найти нечто похожее в интернете, но через пару недель выяснилось, что все найденные алгоритмы были либо узкоспециализированными (под 1 или 2 кодировки), либо очень громоздкими и ресурсоёмкими, что не позволяло реализовать их на МК.
       Но тут мне пришло письмо по почте, содержащее такую фразу "А зачем нужно интеллектуальное сжатие, у меня и без него всё нормально работает...". Ответ на поверхности - сжатие было создано для увеличения масштаба и отказа от первоначальной системы переменного масштаба (подробнее об этом тут). Первоначально это было задумано для повторения посылки через IR передатчик... Иначе управляемое устройство (например тот же телевизор) отказывалось принимать загрублённые маленьким масштабом IR посылки... Но тут я задумался над вопросом: "А почему так происходит?" И понял: при увеличенном масштабе каждый пульт имеет присущий только этой кодировке "уникальное" сочетание длин... Чуть короче или длиннее по сравнению с другими...
       Думая в этом направлении, я довольно быстро разработал подмно- жество простейших математических действий, результат вычисления которых однозначно фиксировал кнопку пульта... То есть, получился универсальный алгоритм ХЭШирования, для настройки которого требовалось:
  А) Ввести 16 констант, общих для всех кнопок пульта, задающих битность ХЭШа, количество проходов и степень сжатия результата.
  Б) И таблица результатов вычислений, т.е. ХЭШей, зависящих от этих 16 констант.


       Это уже был явный прорыв. Но вернёмся к ленте новостей:

20.05.08.    В рамках проекта IgorPlug2 завершено тестирование нового алгоритма ХЭШирования, который можно перенести на аппаратную часть. Первая его версия вышла 23.04.08. и до 20.05.08. он активно тестировался нашей командой.
22.05.08.    На его базе создана первая экспериментальная прошивка для управляемого реле. (Опубликованного первый раз 07.04.08.)

Введение данного алгоритма в проект IgorPlug2 позволит:

А) Уменьшить нагрузку на ПК и USB интерфейс. Теперь все вычисления ХЭШа будут происходить в МК.
Б) Благодаря высокой степени сжатия можно хранить таблицу ХЭШей в Епром. Это даст возможность пользователям самостоятельно назначать внешние события при нажатии. Например, для включения компьютера с помощью управляемого реле, разработанного ещё 07.04.08.
В) Сделать возможным переключение на работу с вашим пультом дистанционного управления в режиме HID устройства (не требуются драйвера и программы для стыковки с Windows).
Г) Сделать возможным переключение на автономную работу с вашим пультом дистанционного управления вне компьютера. Т.е., использовать "обученный" пульт дистанционного управления для управления любыми устройствами, имеющими вход типа "сухой контакт". (включение устройств, переключение режимов и т.д., и т.п.)
Д) Сделать возможным, при использовании софта не совместимого с посылками IgorPlug2, переключится на режим эмуляции посылки оригинального IgorPlug, что позволит использовать клавиатуру SWK-8630 и "обученный" пульт с любыми системами, совместимыми с оригинальным форматом посылок IgorPlug. При этом в систему отправляется посылка данных - вида, которая стабильно распознаётся любым устаревшим софтом.
Е) Реализовать несколько раскладок пульта, что увеличивает кол-во принимаемых значений кнопок пульта в разы...

       Для примера давайте сравним ресурсоёмкость приёма самой распространённой посылки длиной 67 бит (в программе длина одного бита чаше всего измеряется одним байтом, но при длинных импульсах двумя - срабатывает интеллектуальное сжатие посылки) в случае обработки 4х кнопок по методу прямой заливки и обработки моим алгоритмом:
   A) Создание ХЭШа по времени займёт примерно столько же времени как 3 проверки по методу прямой заливки, но потом требуется сравнивать только заданное кол-во байт (в зависимости от задания от 3х до 8 байт) на предмет равенства, что на порядок быстрее одной проверки "больше/меньше" всех 67 байт посылки. То есть, по времени четыре проверки метода "прямой" заливки немного больше четырёх проверок алгоритма хеширования. То есть, после проверки 4х команд алгоритм ХЭШирования значительно вырывается вперёд. А за время, требуемое для проверки 5 команд по методу "прямой" заливки, можно проверить около 15 комбинаций методом ХЭШирования.
   Б) В памяти, требуемой для одной записи 67 байтной посылки по методу "прямой" заливки, можно разместить от 6 до 17 записей ХЭШей (зависит от выбранного пользователем битрейта).
   С) Теоретически* по времени (без потери следующей посылки с учётом времени на передачу данных) можно провести только 9-15 проверок по методу "прямой" заливки, а по методу ХЭШирования более 150.

       * - Почему теоретически? Просто 10 посылок по 67 бит (а в байтах, учитывая служебные, длина займёт ещё больше) уже хранить негде... (в епром влезет максимум одна-две записи, а про 10 и речи нет...). Причём не надо забывать, что некоторые кодировки имеют по два уникальных кода на кнопку...

       На данный момент завершено тестирование автоматизированного комплекса по созданию "обученных" прошивок самим пользователем. Т.е., программного обеспечения со стороны компьютера, призванного облегчить вычисление 16 констант по сохранённому программой Осциллограф образу пульта дистанционного управления пользователя. А на основе 16 констант уже вычисляется и записывается в епром устройства таблица соответствия между ХЭШами и выбранными пользователем действиями на нажатие. На первом этапе в программе реализована модификация прошивки, что на данном этапе требует перепрошивку устройства "Обученным" под пульт пользователя программным обеспечением. В будущем планируется запись автообновления не используя программатор - т.е., через USB интерфейс.

Методика обучения прошивок.

       Исходными данными для вычисления переменных служат три текстовых файла с данными, созданные в соответствии с 1,2 и 3 частью инструкции.

       По этим инструкциям создано несколько обучающих видео роликов:

Часть № 1 - Как создать первый файл.
Как создать первый файл.

Часть № 2 - Альтернативный вариант создания первого файла.
Альтернативный вариант создания первого файла.

Часть № 3 - Как создать второй и третий файлы.
Как создать второй и третий файлы.

Часть № 4 - Как создать файл патча.
Как создать файл патча.

Часть № 5 - Как пропатчить прошивку.
Как пропатчить прошивку.

       Данная инструкция использует термины из вспомогательного материала - Виды кодировок ПДУ.

Продолжение следует !!!



Ограничения.

       Устройство разработано по принципу КАК ЕСТЬ и автор не несёт ответственности за явный (или не явный) ущерб, причинённый в результате повторения.

То есть все эксперименты вы делаете на свой страх и риск.

       Список часто задаваемых вопросов читайте в    FAQ.

       Если у вас возникли вопросы и предложения - пишите мне по адресу внизу страницы

       Если вы нашли на моём сайте что-либо интересное или полезное для себя и хотите видеть на этом сайте новые интересные проекты, а также поддержку, доработки существующих проектов, то все желающие могут поддержать данный проект, частично покрыть оплату хостинга, затраты на разработку и переделку проектов.

       Кошелёк для оплаты накладных расходов на сайт Z158779319858 в системе WebMoney.

       Принимаю только безвозмездную помощь :)


       Все статьи, опубликованные на этом сайте защищены Частью 4 Гражданского Кодекса Российской Федерации. Запрещено полное или частичное копирование материалов без согласия их авторов. Незаконное использование материалов сайта влечет за собой административную ответственность в виде компенсации в размере от 10.000 рублей до 5.000.000 рублей [Ст. 1301, 1250, 1252, 1253 ГК РФ]. При согласованном использовании материалов сайта обязательна активная ссылка на www.mindrunway.ru и указание авторства.



Copyright© 2007-2012 QuickWitted Почта     grani СОБАКА mindrunway РУ
Ссылки
Гостевая
Форум
проверок по методу right width