Вибрационный геймпад Arduino с силовой обратной связью

Я проектирую геймпад с помощью Arduino Micro. Я использую библиотеку джойстиков Arduino.

Я разрабатываю этот геймпад для гоночных игр, поэтому мне нужно ловить такие сигналы, как hit_the_wall, hit_another_car.

Интересно, как игра на ПК выводит сигнал вибро/силовой обратной связи и отправляет бросок USB на геймпад.

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

Я подумал о (псевдокоде):

input = Serial.read();

if(input == hit_something_signal){

   digitalWrite(engine, HIGH);

}

Теперь мой вопрос: что это за волшебный hit_something_signal?

ОБНОВЛЕНИЕ

Я читаю документ PID и вижу на странице 24 адреса регистров для реализации силовая обратная связь.

;Определения команды Start Force Feedback
USAGE_PAGE (Physical Interface) 05 0F
;Определение отчета об эффекте
 USAGE (Set Effect Report) 09 21
 COLLECTION (Logical) A1 02
 USAGE (Effect Block Index) 09 22
 LOGICAL_MAXIMUM (127) 25 7F
 REPORT_SIZE (7) 75 07
 REPORT_COUNT (1) 95 01
 OUTPUT (Data,Var,Abs)
 .......

В файле Joystick.cpp я заметил реализацию HID:

// USAGE_PAGE (общий рабочий стол)
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x05;
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x01;

// ИСПОЛЬЗОВАНИЕ (джойстик — 0x04; геймпад — 0x05; многоосевой контроллер — 0x08)
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
tempHidReportDescriptor[hidReportDescriptorSize++] = joystickType;

// СБОР (приложение)
tempHidReportDescriptor[hidReportDescriptorSize++] = 0xa1;
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x01;

// REPORT_ID (по умолчанию: 3)
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x85;
tempHidReportDescriptor[hidReportDescriptorSize++] = _hidReportId;
.......
......

Как вы думаете, возможно ли реализовать часть обратной связи по усилию? Мне не нужно ловить все силы, а запускать движок вибратора каждый раз, когда игра отправляет и вводит всевозможную силу.

Проблема в том, что я не эксперт по низкоуровневому программированию и драйверам. Есть идеи?

, 👍1

Обсуждение

существующие игры, такие как грязь 4 или F1 2017, @Andrea Mancini


1 ответ


1

Эта библиотека не поддерживает вибрацию.

Дескриптор отчета HID должен включать правильные элементы OUTPUT, чтобы ПК мог отправлять инструкции по вибрации на Arduino — и, конечно же, библиотека должна иметь возможность обрабатывать входящие данные — ни один из этих элементов не реализован.

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

,