Ковыряю ИК-контроллер Nakitek
Недавно, ковыряясь в глубинах своей сокровищницы, по совместительству кладовки, в поисках кое-чего для кое-кого и кое-зачем, о чём я ещё расскажу, я наткнулся на интересный артефакт. Вот он (фото моё):
Если не ошибаюсь, он был передан мне, когда деятельность точки на Черкизовском вещевом рынке, на которой я работал в конце 90-х годов, окончательно сошла на нет.
Это инфракрасный беспроводной геймпад Nakitek с программируемым турбо-режимом. По внешнему виду и обозначениям кнопок я предположил, что предназначен он для 3DO, и угадал — Google подтвердил мои догадки. Вроде бы даже относительная редкость: комплект из двух джойстиков и приёмника в среднем состоянии стоит на eBay около 150 долларов. Вот такой (фото из интернета):
Комплекта, а самое главное, приёмника у меня нет, и думаю, именно это является причиной его попадания в конечном счёте в моё владение. Но сам геймпад, вероятнее всего, рабочий. Что бы такое такое интересное с ним сотворить?
Чтобы не курочить почём зря раритет, я надумал, что можно и нужно отреверсить его протокол и сделать приёмник на микроконтроллере, ну а точнее на Arduino. Получив состояние кнопок, дальше можно преобразовать данные во что угодно и таким образом подключить куда захочется, хотя бы даже и к 3DO. К тому же я никогда не реверсил ИК-устройства — это должно быть интересно.
Первый шаг для реализации этой задумки был прост. У меня есть широко известный в узких кругах китайский приборчик, T7 Transistor Tester. Замечательнейшая вещь, умеющая за секунды проверять исправность различных электронных компонентов, а заодно и в принципе определять, что это за компонент: конденсатор, диод, транзистор и так далее.
Помимо основного функционала, в приборчике есть ИК-приёмник и функция декодирования стандартных пакетов. Можно взять пульт от телевизора или другой техники, нажать рядом с прибором, и он покажет код нажатой кнопки.
Я попробовал провернуть этот фокус, и… не сработало.
Впрочем, это было вполне ожидаемо. Во-первых, прибор поддерживает только популярный протокол NEC, а есть ещё множество других. Во-вторых, вряд ли этот геймпад использует протокол ИК-пульта от бытовой техники.
Дело в том, что бытовой технике не нужно определять одновременные нажатия, там нажимается одна кнопка за раз, и её передача может идти довольно долго, торопиться особо некуда. Игровому контроллеру же необходимо передавать любые комбинации нажатия кнопок, а их там десять штук у каждого из двух игроков, и делать это надо очень быстро, хотя бы 60 раз в секунду.
Проверить догадки по поводу скорости и характеру передачи в первом приближении просто: надо посмотреть на пульт и геймпад через камеру смартфона. Камера детектирует ИК излучение и превращает его в видимый глазу свет. Видно, что вспышки диода пульта при нажатии кнопок яркие и длительные — низкая частота. У геймпада они не видны, только слабое мигание при отпускании нажатых ранее кнопок. Как минимум это говорит о более высокой частоте, а также намекает, что передача ведётся не постоянно, и, возможно, не в формате битового состояния кнопок, а кодов нажатия и отпускания, аналогично клавиатуре на ПК.
Пока стало понятно, что ничего не понятно, и нужно привлекать более тяжёлую артиллерию.