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

Re: USB Sega gamepad

Вс сен 22, 2019 09:43:57

Reloader, есть игры на андройде, типа contra evolution, в которых невозможно переназначить кнопки. Нужен человек, который смог бы разобраться с кнопками в коде.

Re: USB Sega gamepad

Вс сен 22, 2019 21:43:25

Нужен человек...

почему бы вам не стать этим человеком? )

Ну или здесь оставить сообщение. можа кто и откликнется

Добавлено after 13 minutes 4 seconds:
dasich, я туть немного погуглил..
Вот ссыль на 4PDA.
Думаю именно то что вам и нужно.

"С помощью этой программы можно подключить джойстик к устройству и играть с контроллером даже в те игры, которые по-умолчанию не поддерживают его. У программы есть два режима работы: 1. переназначение кнопок на манипуляторе; 2. транслирование действий (нажатия, свайпы, круговые и бесконечные и т.п.) с манипулятора на дисплей устройства (для этого потребуются рут права)."


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

Re: USB Sega gamepad

Вс сен 22, 2019 22:23:06

Reloader, а я начал код копать :lol:
Спасибо, доберусь до консоли, опробую и отпишусь.

Re: USB Sega gamepad

Пн окт 28, 2019 19:38:47

Отписываюсь... Не работает! Джойстик не видится. Другой софт тоже пробовал, так же не работает. Пока подзабил.

Re: USB Sega gamepad

Сб ноя 09, 2019 20:08:10

Все таки пришлось по изучать код... Мне конечно это не помогло, contra evolution все так же не управляема.
Находим в исходниках файл twelve.c В нем находим метод static void twelveUpdate(void)
Нас интересует вот этот кусок кода
if (data[0] & 0x02) // btn 0 - START
last_read_controller_bytes[2] |= 0x01;

if (data[0] & 0x01) // btn 1 - MODE
last_read_controller_bytes[2] |= 0x02;

if (data[1] & 0x20) // btn 2 - Z
last_read_controller_bytes[2] |= 0x04;

if (data[1] & 0x10) // btn 3 - Y
last_read_controller_bytes[2] |= 0x08;

if (data[1] & 0x08) // btn 4 - X
last_read_controller_bytes[2] |= 0x10;

if (data[1] & 0x04) // btn 5 - C
last_read_controller_bytes[2] |= 0x20;

if (data[1] & 0x02) // btn 6 - B
last_read_controller_bytes[2] |= 0x40;

if (data[1] & 0x01) // btn 7 - A
last_read_controller_bytes[2] |= 0x80;

Красным выделены переменные посылаемые при нажатии кнопок. Меняем их в нужном нам порядке, компилим и льем в мегу. Вот и все.

В андройде кнопки прописаны по пути system\usr\keylayout\Generic.kl

key 304 BUTTON_A
key 305 BUTTON_B
key 306 BUTTON_C
key 307 BUTTON_X
key 308 BUTTON_Y
key 309 BUTTON_Z
key 310 BUTTON_L1
key 311 BUTTON_R1
key 312 BUTTON_L2
key 313 BUTTON_R2
key 314 BUTTON_SELECT
key 315 BUTTON_START
key 316 BUTTON_MODE
key 317 BUTTON_THUMBL
key 318 BUTTON_THUMBR

Код кнопок MODE и START не нашел. Бьются какие-то L1/LB и R1/RB(0x80/0x40)

Re: USB Sega gamepad

Сб дек 28, 2019 00:35:07

С весны лежат 2 новых джойстика, 2 штуки atmega8-16au, фоторезист, плёнка для печати, программатор, текстолит, 2 флакона перекиси, лимонная кислота...
Только бери да делай.

Изображение

Вот у меня вопрос, джойстики у меня с turbo/slow, если я просто приделаю 2 контактные плошадки к свободному входу меги, потом в коде же можно будет отловить их замыкание на землю, и уже сами кнопки потом проверять. Кстати в оригинальном(китайском) джойстике земли 2, на кнопки ABCXYZ одна, на остальные другая.
Если замкнуто turbo, тогда при зажатии кнопок ABCXYZ отправлять нажатие/отжатие быстро, если slow - тогда медленно, если ничего - тогда в обычном режиме.

Посмотрел разводку от dasich, к моим джойстикам не подходит, кнопки смещены по другому, ну думаю подвину...
Ответить