А все потому, что нельзя требовать от того, что сделано работать кое-как (судя по тому, что все здесь приобрели эти кривые китайские джойстики - мы подтвердили материально копейкой успех такой стратегии китайской промышленности), не обязано чему-то соответствовать или не отваливаться в играх!!!11
Поэтому консоль PS2 несогласная с угнетенным положением своим и сопротивляется неадекватным ответам из порта джойстика.
Другими словами:
0. моторы питаются отдельными +7.5-ю вольтами (pin 3) из порта, в порте логика кушает 3.3в (pin 5). Вывод: моторы не могут отъесть и просадить питание приемника беспроводного джойстика.
0.1. А активация моторов, кстати, командуется консолью: в 4 и 5 байтах команды засылается интенсивность. Но у меня есть китайский проводной джой, который всегда долбит моторами. не выяснял почему, просто отпаял моторы.
1. причина в свистке приемника, воткнутом в порт, притом причина может быть железячной или софтовой (некорректным ответом свистка приемника на диалог с консолью).
1.1. железячный вариант: если по прошествии годов и десяnилетий (PS2 Release date: 4 March 2000) подтухли конденсаторы, то на порту джойстика в консоль подпаять на 3.3в линию (pin 4,5) конденсатор помикрофарадистей.
1.2. если не помогло - доставать осциллограф и смотреть какие проблемы в 3.3в. линии.
1.3. вариант софт-трабл: что за конечный автомат запихан в свисток приемника, только одному впихивавшему китайцу известно... но... если представить себе общение консоли по SPI порту со свистком приемника, то:
1.3.1. самая простая либа на
ардуино делает чтение (функция
shift под видом консоли отправляет команду в джойстик) только лишь цифрового режима 0x42 (второй байт 0x42) дуалшока (без аналог-мод). в ответ джойстик отвечает 9 байт, из которых берут два байта (byte _data1; byte _data2;) о нажатых на нем кнопках.
1.3.2. Мне не хватало аналог-мода и я его допилил для личного использования - и в аналог-мод, когда от джойстика во втором байте (_PS2data[1] == 0x79) пришло 0x79 - то из порта надо не 9 байт читать, а продолжать читать до 21 байта.
1.3.3. а свисток приемника, если он претендует на совместимость, должен на запросы консоли делать примерно
как-то вот-так-вот (см. Blueretro, ps_spi.c, функциb ps_cmd_rsp_hdlr, ps_cmd_const_rsp_hdlr. консоль получит все что в адрес *rsp положено).
1.3.4. на что способен китайский свисток приемника может быть выяснено через подключение к ардуино по шине spi и перебором
режимов, которые известны для дуалшока, а потом сравнении его ответов с ответами оригинального дуалшока.
1.4. подключить в порт spi консоли цифровой анализатор, ловить момент, когда происходит отвал свистка, и выяснять, на какую команду из консоли свисток начал дурить.
Я все сказал.
З.Ы. Если кто-то дерзкий готов принять вызов этой китайской проблемы отвала свистка приемника, то выкладывайте результаты своих изысканий.
в меню работают два, а в игре только первый порт работает…
З.Ы.Ы. не в геймпаде.