KEEN SIDE успешно заменяет аналогичные продукты таких известных брендов, как Phoenix Contact, Weidmueller, Degson, Winstar, Hsuan Mao, KLS, G-NOR, Mean Well и др.

10-кнопочная USB HID клавиатура. Часть 2 - ПО

Часть 1 – Схема и конструкция

Как отмечалось в первой части статьи, за основу конструкции были взяты примеры приложений, которые предназначены для использования с отладочным набором Low Pin Count Development Kit от компании Microchip. Этих примеров и демонстрационных приложений для разработки USB устройств очень много, для нашего устройства был выбран пример реализации USB HID клавиатуры.

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Для разработки программного обеспечения, а также для внесения корретив, переназначения сочетаний клавиш необходима интегрированная среда разработки MPLAB и компилятор С18, которые доступны для скачивания на официальном сайте компании.

Программы микроконтроллера из примеров компании Microchip написаны таким образом, что ее можно использовать для различных PIC микроконтроллеров со встроенным USB интерфейсом. Единственное, что понадобится, – это скорректировать код функции Keyboard().

Данная функция вложенная и условно расположена так: ProcessIO() -> Keyboard() -> Check if IN endpoint is ready -> Check Switches ->Send Data -> ProcessIO()

Основной момент в программе – это поверка состояния кнопок, заполнение буфера данных соответствующими данными и отправка их по USB в компьютер. Затем цикл повторяется.

В буфер данных записываются 8 байт, которые имеют определенные значения. В программе эти 8 байт обозначены как hid_report_in[0] - hid_report_in[7].

Рассмотрим их назначение.

hid_report_in[0]= – это байт модификатора, он содержит информацию о состоянии функциоанльных клавиш (Alt, Ctrl, Shift, Win). 8 битное значение, которое характеризует нажатие этих кнопок по отдельности, или одновременное нажатие нескольких (напрмер Ctrl+Shift).

Назначение битов в байте hid_report_in[0]

Бит 
Соответствующая
клавиша
 
0
Левый Ctrl
1
Левый Shift
2
Левый Alt
3
Левая Win
4
Правый Ctrl
5
Правый Shift
6
Правый Alt
7
Правая Win

Например, запись:

hid_report_in[0]=4 означает, что байт имеет значение 4 (десятичное число), и это соответствует нажатой кнопке Alt (бинарный код 100);
hid_report_in[0]=7 означает, что байт имеет значение 7, и это соответствует нажатым кнопкам Ctrl+Alt+Shift (бинарный код 111).

Следующий байт hid_report_in[1]=0, всегда равный 0, зарезервирован.

Байты hid_report_in[2] … hid_report_in[7] предназначены для записи и отправки по USB интерфейсу кодов клавиш. Т.е. одновременно может эмулироваться нажатие до 6 клавиш, и данные отправляются как единое целое. Коды клавиш для USB HID устройств можно взять в документе HID Usage Tables, который доступен для скачивания в разделе загрузок.

Такая реализация позволяет эмулировать и посылать данные (коды) о нескольких одновременно нажатых кнопках. К примеру, Alt+Пробел+n. Также, иногда потребуется эмулировать нажатие комбо-клавиш, наприер Alt+Пробел и затем клавиша n. Для такой реализации в программном обеспечении нужно использовать байты данных NextModKey and NextKey и затем установить флаг AnotherFlag. В этом случае, после посылки первой команды, отправится следующая с кодом данной последней клавиши.

Для прошивки микроконтроллера можно использовать внешний программатор или предусмотреть установку разъема для внутрисхемного программирования установленного микроконтроллера.

Загрузки

Документ HID Usage Tables – скачать
Принципиальная схема, рисунки печатной платы, исходные коды – скачать
HEX файл для прошивки микроконтроллера – скачать
Фалы проекта для MPLAB – скачать

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: Quick Key Adapter, 10 Button HID Keyboard. Part 2 - Firmware

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • Никак не получается реализовать функциональные кнопки: 1. Завершение работы 2. Ждущий режим/спящий режим (гибернация) 3. Пробуждение 4. Громкость + 5. Громкость - 6. Вкл. Выкл. звук 7. Следующий трек 8. Предыдущий трек 9. Плей/Пауза Какие бы значения не прописывал в hid_report_in[2] - всё бесполезно! P.S.: в программировании не шарю, но как и где менять значения и компилировать разобрался.