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

Модульный проект GraniCubicle.
Блок 5 для 'USB HID'.

Рис. 1 Внешний вид блока.
Увеличить

План.

       1) Вступление.
       2) Создание системы.
       3) Реализация системы.

Описание блоков.

       A) Общее описание. - тут.
       Б) Блок 1 для 'RS 232'. - тут.
       В) Блок 2 для 'IR'. - В разработке.
       Г) Блок 3 для 'LCD'. - В разработке.
       Д) Блок 4 для 'PS/2'. - тут.
       Е) Блок 5 для 'USB HID'. - Эта страница.
       Ж) Блок 6 для 'DAC/ADC'. - В разработке.
       З) Блок 7 для 'DISEqC'. - тут.
       И) Блок 8 для 'Print Server'. - тут.
       К) Блок 9 для 'Lan Bridge'. - тут.

Соединение блоков в набор.

       А) Набор "Panorama Sat Scaner". - тут.

       X) Обратная связь - тут.

Вступление.

       Предлагаю вашему вниманию материал, описывающий историю освоения мной USB - HID.
       Предлагаемые разъяснения не претендуют на академическую точность, потому что отражают лишь общие вопросы в объёме, вполне достаточном для популярного издания.
       С чего всё начиналось. Многие пользователи проекта IgorPlug2 жаловались на не корректную работу USB драйвера Игоря Цеско с USB на некоторых машинах. Жалобы в основном делились на два типа:

1) Не ставится драйвер на текущую версию
       Windows (по разным причинам, включая
       отсутствие прав администратора).
2) Устройство некорректно работает с хабами.

       Но так как Игорь забросил свою разработку, то заменить драйвер было нечем. Ситуация ещё усугублялась тем, что большой парк существующих программ был рассчитан на работу со встроенной по началу платной библиотекой поддержки IgorPlug2. С одной стороны данная библиотека работала только на Win9х и 32х битными ХР/2000 системах, что не позволяло использовать её с другими системами (например, на основе Linuxs и 64х битными Windows'ами) и требовало прав администратора для установки драйвера (но в ветке IgorPlug2 позже появилась клавиатурная версия которая после настройки работает везде где есть мышь или клавиатура).
А с другой стороны, при смене интерфейса терялась совместимость с существующим парком программ контроля. При этом надо учитывать ещё тот факт, что большая часть этих программ морально устарела и не развивается.
       Такая ситуация сложилась ввиду того, что современные, имеющиеся в продаже системы управления работают на основе USB HID и в большинстве своём не требуют каких - либо программ контроля. Это полностью укомплектованные девайсы (у которых и приёмник и пульт идут комплектно), которые призваны выполнять строго заданный при разработке набор действий.
       С одной стороны, технология "Воткнул и управляй" хороша тем, что её поддержка встроена в Windows, при этом не требуется установка драйверов, прав администратора и настройки компьютера - всё уже готово. В общем, идеальная вещь, если вы решили придти в гости и воткнуть его в гостевой компьютер - всё настроено и готово. Но при стационарном использовании эта автоматизация скорее всего будет не соответствовать требованиям пользователя. Ну судите сами - настроить ничего нельзя (например штатно переназначить функции кнопок), функции включения компьютера у 80% таких пультов нет совсем, а дополнительно к ней функции управления внешними нагрузками и подавно.
       Отступая от темы уточню причину необходимости внешних нагрузок. При использовании компьютера в качестве медиа - центра, в том числе для просмотра спутниковых каналов возникает необходимость оперативного управления внешней периферией. Самый простой пример - переключить антенный вход с дивана или немного притушить свет в комнате на время просмотра.
       Раньше процесс просмотра у меня выглядел так (до создания системы управления четырьмя нагрузками с пульта): встать с дивана, пройти в конец комнаты, переключить тумблер, переключить программу с пульта, посмотреть, что идёт по второй антенне, вернуться на диван, обнаружить, что ничего там всё-таки нет, встать, пройти в конец комнаты, переключить тумблер, переключить программу с пульта, вернуться на диван.
       Первая мысль, которая приходит в голову после нескольких пробежек: "А зачем вообще тогда нужен пульт?". C таким же успехом каналы можно переключать и с клавиатуры, всё равно уже встал с дивана и пришёл к компьютеру дёргать тумблер.
       Обобщая вышесказанное, приходим к выводу, что нужна система, подлежащая тонкой настройке на уровне железа, имеющая возможность управления внешними нагрузками и лишённая перечисленных недостатков самодельных и покупных систем.
       Возвращаясь к идее создания универсального пульта, можно сказать, что сделать систему на одну кодировку с поддержкой одного - двух заранее известных пультов относительно просто. Но основное преимущество самодельных систем - свободный выбор пульта пользователем и полная самостоятельность в выборе и присвоении кнопкам исполняемых функций. А в более общем плане - полёт фантазии пользователя в этом случае не ограничивался одним пультом, идущим в комплекте. Даже если рассматривать эту проблему с позиции эргономики - у всех размеры рук разные и в связи с этим понятие удобного пульта у каждого своё. То есть, нужна система, в которой пользователь может настроить систему на любой удобный ему пульт или даже на несколько пультов, имеющих схожую кодировку или использовать совместно с любым пультами инфрокрасную клавиатуру...
       Но без встроенной системы распознавания реализовать такое было невозможно. То есть, большинство проектов дистанционного управления (включая основную модификацию моего устройства IgorPlug2) занимались только обработкой входящего сигнала и передавали результат измерений для дальнейшей обработки в компьютер. Доступные для повторения, обучаемые проекты могли обучиться только какой - либо одной заданной кодировке (в основном рс5) или только одной кнопке пульта дистанционного управления, что позволяло включать компьютер с пульта дистанционного управления, но не более того.
       Ситуация выглядела так до момента завершения разработки мной адаптивного алгоритма, который состоит из множества самостоятельных функций, в совокупности влияющих на вычисление ХЭШ'а данной посылки. Набор и настройка этих функций определяются при обучении устройства. Это позволило перенести алгоритмы распознавания кнопок пульта с компьютера непосредственно в микропроцессор. А в результате можно получить 100% автономную систему, которая может работать как в составе компьютерных систем, так и в составе любых радиолюбительских конструкций, частично или полностью отвязанных от компьютера. Данный принцип был реализован в моём проекте управляемого реле, что в составе компьютерных систем давало возможность использовать её так же, как контроллер 4х внешних нагрузок (Кол - во управляющих линий ограничено только количеством кнопок пульта в расширенном варианте), состояние которых можно контролировать как с пульта дистанционного управления, так и с компьютера.
       Благодаря автономности, этот алгоритм оптимален для переноса в HID системы - не имеющие возможность передачи данных о продолжительности импульса во внешний мир, а инициирующих какое - либо действие на компьютере. То есть, эмулирующих клавиатуру и мышь компьютера.
       Начало работ над реализацией данной системы задерживалось из-за отсутствия прямой необходимости в его создании у автора. Старые разновидности систем вполне неплохо решали насущные проблемы автора. Проект создавался как не коммерческий (в соответствии с лицензией на USB драйвер), а помогать в его развитии никто не хотел. Даже новые сэмплы кодировок, необходимые для совершенствования кода, шлют редко, не говоря уже о большем...

Создание системы.

       Так было до появления у автора необходимости сделать HID интерфейс программатора I2C микросхем памяти. За основу был выбран СИ драйвер с открытым кодом, который не имеет недостатков драйвера IgorPlug2 (т.к. драйвер HID уже встроен в Windows), и позволяет относительно легко комбинировать несколько логических девайсов в одном.
       В результате для отладки программатора была создана плата, имеющая на борту кроме микропроцессора ATMega8 разведённый на плате интерфейс I2C, четыре кнопки управления и IR приёмник (совершенно лишний в проекте программатора, но необходимый проекту IR).

Рис. 2 Сообщения при установке.

       Для реализации программатора мной был в общих чертах изучен язык СИ для микропроцессоров. На мои вопросы в форумах по СИ для начинающих народ отвечал неохотно и однообразно - "Изучи инструкцию, ВЕСЬ ХЭЛП, там есть ответ", "Как вообще можно писать программы для МК не зная основ СИ?". Ответ элементарный и простой - на ассемблере, а со стороны компьютера на Дэльфи. То есть, прорвавшись через дебри форума, мне удалось собрать проект на СИ и написать программу, добавляющую код на ассемблере в собранный в результате сборки проекта на СИ (прошивку).
       Вдаваясь в подробности: на первом этапе пометить части программ - вставив маркеры, а далее уже всё относительно понятно - написать патчер, который ориентируясь по маркерам, встроит в заданные места кода переходы на незадействованные в СИ коде области Flash памяти и интегрирует туда сменный код на ассемблере и таблицы истинности.
       Самое простое сравнение: СИ можно рассматривать как программу, строящую карточный домик на основе проекта (код на СИ). Домик состоит из фундамента (инициализации МК и драйверов периферии) и непосредственно самой конструкции (центральной части программы, управляющей этой периферией) интерпретированной на ассемблере. Если абстрагироваться от проекта и сосредоточиться на результате - карточном домике, то построив фундамент (по проекту на СИ), на его основе можно возводить нужные в данный момент конструкции (на чистом ассемблере).
       На что мне в форуме сказали: "Кривой пяти колёсный велосипед с квадратными колёсами". Для тех кто не работал на ассемблере это может показаться дикостью - писать без визуальных средств на чистом ассемблере... Но а как собрать проект адаптированный под пульт пользователя в домашних условиях? Математика под каждый пульт - своя, таблица истинности тем более... И до этого момента я прекрасно обходился без СИ на МК - код на ассемблере в несколько раз компактнее и во столько же раз быстр.
       Но вернёмся к нашим пультам. Обычно "обучение" прошивки в проекте управляемого реле ведётся двумя автономные утилитами, позволяющими "обучить" прошивку заданному пульту (или пультам) пользователя.
       Одна из этих утилит - "Осциллограф" служит для полуавтоматического выявления закономерностей, а вторая утилита - это непосредственно сам патчер (Hex Util). А без применения программы патчера ПРИ ТОЙ ЖЕ или даже МЕНЬШЕЙ функциональности надо было бы выбрать один из нижеследующих вариантов:

1 - Установить внешнюю дополнительную флэшку для хранения таблиц.

2 - Использовать более дорогой микропроцессор.

3 - В инструкции для пользователя написать об острой необходимости изучения пользователем среды разработки для самостоятельной сборки проекта в домашних условиях. То есть стань разработчиком и на основе моих исходников напиши прошивку под себя.

       В результате мы получаем одно из двух: или растёт цена, сложность сборки и габариты устройства, или теряется часть функциональности при той же цене и габаритах... А пользователю оно надо?
       Пользователю нужен быстро получаемый результат без вникания в аппаратные тонкости программирования. Желательно как можно дешевле и проще с большой функциональностью... А в случае доп утилит процесс обучения элементарно прост - Краткая инструкция - От Пользователей.
       Часто при этом ещё спрашивают: "А почему не сделаете самопрограммирование?". Причём некоторым пользователям кажется, что при этом прошивку собирать из кусков не придётся.
       Но самопрограммирование не решит проблемы сборки прошивки. При наличии самопрограммирования программа - сборщик/утилита самопрограмматора будет сама без программатора заливать подготовленную прошивку (собранную под пульт пользователя) в девайс и только.
       Но с другой стороны, при реализации алгоритма самопрограммирования нужно будет где то его размещать. То есть, алгоритм самопрограммирования будет отъедать флэш память МК (которая и без него забита под завязку, что приведёт к урезанию текущей функциональности), а использоваться весь этот набор будет только один раз при обучении...
       Был бы проект коммерческим - разработка самопрограмматора была бы оправдана, но на данном этапе и при данном статусе разработки - бесперспективна. Пользователь собирает устройство сам, прошивает тоже сам. А раз при сборке с прошивкой справится, то прошьёт ещё раз.

Реализация системы.

       Разрабатываемый блок N5 для 'USB HID' должен эмулировать USB HID мышь и USB HID клавиатуру. Он служит для эмулирования компьютерной клавиатуры или мыши, управляемых по командам от I2C (или RS 232).

Рис. 3 Вид диспетчера устройств.

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

Принципиальные схемы.
Все схемы одним файлом.

       После месяца подготовки материала в интернете были найдены ответы на основные технические вопросы, которые позволили скомпановать два дескриптора - мыши и клавиатуры в исходном коде проекта на СИ. После чего на функциональные кнопки, оставшиеся от проекта программатора для тестовых целей, были заведены "события" Hid мыши.

Прошивка.
Демонстрационная прошивка для тестов.
Как работать с программатором под управлением PonyProg. - тут.
А как с USB программатором 'AvrUsb500 by Petka' - тут.

       Прошивка позволяет передвигать курсор мыши по экрану.

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


       А не по теме - Всем последователям - Хэллоу.
Если бы мы объединили наши усилия - результат можно было бы получить проще...


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

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

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

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

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

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

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


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



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