Как переделать геймпад под usb

Обновлено: 05.07.2024

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

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

Компилятор

В данном проекте используется компилятор mikroC v8 compiler. Используемые методы сходятся с большинством других компиляторов, которые генерируют HID код.

Джойстик

В данном проекте используется старый джойстик IBM 76H1571, фото показано ниже:


76H1571 – это 4-кнопочный джойстик с колесиком throttle и переключателем видов POV hat. Наиболее интересно, что вы не можете использовать колесико и переключатель одновременно – можно использовать либо один элемент, либо другой. Два ползунковых переключателя на передней стороне джойстика используются для включения и выключения колесика и переключателя POV, поэтому вы можете выбрать тот элемент, который хотите использовать в конкретный момент.


Поскольку с USB интерфейсом не существует ограничений, переделанный джойстик сможет одновременно использовать колесико и переключатель видов. Тогда два переключателя не будут задействованы, так почему бы для них не назначить новые функции?

В заключении хочу указать, что переделанный джойстик имеет следующие характеристики:

  • 2-осевой джойстик
  • Колесико Throttle
  • 4 направленный переключатель видов POV
  • 6 кнопок

Дескриптор отчета HID

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

Создание дескриптора

На веб-сайте USB IF размещается полезная программа, которая значительно облегчает создание дескрипторов отчета HID. Она называется HID Descriptor Tool и может быть загружена бесплатно со страницы HID Tools page. После загрузки, распакуйте архив и запустите файл Dt.exe.

Используя данную программу можно создать ваш собственный дескриптор отчета для джойстика (или любого другого HID устройства), определить количество осей и кнопок, и указать другие характеристики (педали управления рулем направления, колеса и т.д.). Также данная программа поставляется с шаблонами дескрипторов, которые можно незамедлительно использовать или модифицировать для своих потребностей. Они находятся в той же папке, что и исполняемый файл, и имеют расширение .hid. Шаблон дескриптора джойстика называется joystk.hid, именно его я и использовал. После загрузки появится следующий экран:


На нем красной рамкой выделены важные секции. В них указываются следующие параметры:

  • 1 колесико, описываемое 8 битным значением от -127 до 127
  • Оси X и Y
  • 1 переключатель видов POV, имеющий 4 положения (0-3) и представляющий угол 0-270, описывается 4-битным значением
  • 4 кнопки, каждая из которых описывается 1 битом

Как можно заметить, показатель REPORT_SIZE определяет разрядность данных, которые используются для представления параметра и показатель REPORT_COUNT, который определяет количество отчетов, которые пересылаются для представления параметра.

Модификация дескриптора

Просмотрите сноску по модификации дескриптора Modifying the Joystick HID Descriptor.

Добавление дескриптора в ваш код

После создания дескриптора отчета вы должны экспортировать его в код на языке Си. Для этого, нажмите File->Save As (Файл-сохранить как) в меню программы HID Descriptor Tool. В появившемся диалоговом окне измените тип файла на Header File (*.h).


При этом будет создан заголовочный файл C, который можно впоследствии добавить в ваш проект.

Интеграция mikroC

Для добавления заголовочного файла в дескриптор, генерируемый mikroC, потребуется выполнить некоторые действия. Если вы посмотрите на дескриптор mikroC, вы заметите, что каждый байт сопровождается символом ‘,0’ (игнорируя кавычки, это запятая-ноль). Вам потребуется модифицировать дескриптор отчета, который был сгенерирован, включая данные дополнения. В конечном итоге вы должны получить дескриптор следующего вида:

После заполнения дескриптора, на следующем шаге необходимо удалить дескриптор отчета, сгенерированный mikroC и заменить его на ваш. Для этого сначала создайте дескриптор mikroC, используя программу mikroC HID tool, затем откройте его в редакторе.

Фактические данные дескриптора полностью хранятся в массиве DescTables. Нижние 50 или около того записей в массиве являются дескриптором отчета (строки 109-160). Удалите эти строки, и далее вставьте в новый дескриптор в этом месте. Теперь необходимо выполнить следующие модификации с файлом USBdsc.c:

  • Измените строку 23, чтобы она соответствовала незаполненному размеру дескриптора отчета (т.е. размеру дескриптора, сгенерированного программой HID tool, без дополнительных нулевых записей 0′, которые необходимо добавить для mikroC – 77 байт в случае дескриптора по умолчанию для джойстика):
    • unsigned char const HID_ReportDesc_len = 77;

    Это все, что нужно было сделать. Теперь дескриптор модифицирован и может работать как USB джойстик. Самый простой способ для тестирования – это скомпилировать код для микроконтроллера PIC, подключить к USB порту вашего ПК и убедиться в том, что он правильно распознается ПК. Далее, необходимо войти в Панель управления и открыть диалоговое окно Игровые устройства. Ваш джойстик должен отображаться в списке устройств.


    Пересылка данных в ПК

    Если микроконтроллер PIC распознается как USB джойстик, тогда наиболее сложная часть проекта завершена. Пересылка данных джойстика в ПК выполняется простым способом. Когда мы ранее создали дескриптор, мы разработали удобный формат данных с точки зрения дескриптора. В результате экспериментов мы получили следующие параметры:

    Читайте также: