![](https://habrastorage.org/webt/0x/1u/5c/0x1u5csatiqgrunyifcmvymomca.jpeg)
Разработчик Гай Дюпон представил открытый проект мыши (на базе простой мышки HP и контроллера Seeed Studio XIAO RP2040) с игрой в стиле Pong, запущенной внутри прошивки микроконтроллера. Игра отображается на экране ПК при движении колёсиком мыши. Код проекта написан на С и С++ и опубликован на GitHub под лицензией MIT.
Встроенная в мышь игра останавливается/запускается, когда пользователь нажимает на колесо прокрутки. В противном случае мышь работает нормально. Счёт отображается после того, как набрано очко, путём отображения курсора где-то между левой и правой частью половины экрана. Чем ближе к данной части курсор, тем больше выигрывает игрок. Если курсор находится посередине, счёт равный.
Автор проекта использовал плату Seeed Studio XIAO RP2040 и возможности TinyUSB, чтобы запускать устройство в качестве пользовательского USB-адаптера в системе, так и в качестве хоста. Он отключил штатную USB-часть от внутренней части дешёвой мыши HP и подключился в разрыв USB-соединения с помощью контактов питания/GPIO XIAO к исходной печатной плате мыши. Этот позволило собрать USB-перехватчик, который можно запрограммировать на что угодно.
![](https://habrastorage.org/webt/8c/or/ki/8corkibfxnsy5r-uswn86rbtmpk.jpeg)
«Большинство современных компьютерных мышей используют относительное позиционирование — они сообщают об изменениях в своем движении. Если вы медленно перемещаете мышь влево, она может выдать кучу пакетов, где компонент x равен всего -1 (что означает, что мышь переместилась на 1 «пиксель» влево). Однако, можно реализовать USB-мышь, которая использует абсолютное позиционирование. Она может отправлять точную позицию на вашем мониторе (процент X, процент Y), куда курсор должен мгновенно переместиться. Это обычно используется для драйверов сенсорных экранов — вы хотите, чтобы курсор появлялся там, где палец касается экрана. Такая прошивка эмулирует мышь с абсолютным позиционированием и быстро перемещает курсор мыши между интересующими пользователя точками. Он движется достаточно быстро, чтобы курсор (вроде как) появлялся во всех позициях одновременно и создавалось впечатление, что он находится в нескольких местах одновременно. Я реализовал простую игру Pong для запуска в прошивке и установил точки интереса курсора на 2 ракетки и мяч, пока игра активна. Таким образом, игра полностью работает внутри мыши», — уточнил Дюпон.
Для создания такой мыши понадобится любая плата на базе RP2040, подключённая ко второму порту USB. Рекомендуется Feather RP2040 от Adafruit с USB-хостом. Настройка платы делается по руководству Adafruit по работе с Arduino IDE. Также нужно установить библиотеку Adafruit TinyUSB и библиотеку Pico PIO USB (опять же, согласно руководству). После этого нужно убедиться, что контакты USB D+/D- установлены правильно, а потом собрать и запустить мышку.