Skip to content

About

MOCUTE-052 S firmware patch: a Bluetooth media remote and presentation clicker for Mac, plus mouse and gamepad

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MOCUTE-052 S: пульт на каждый день для Mac

English: README.en.md

MOCUTE-052 — Bluetooth-пульт для раннего мобильного VR и игр на телефоне. То, для чего он создавался, устарело: iCade, VR-плееры для смартфонов, а современные iOS и macOS его как геймпад не видят. Сам пульт при этом хорош: стик, семь кнопок, батарейки AAA на десятки часов. Этот патч даёт ему вторую жизнь как пульту для Mac (и не только): видео с дивана, слайды, при желании — мышь и геймпад.

Подходит только для MOCUTE-052 версии S, сборка 052_S23 (чип Beken, ARM968E-S).

  • KEY — пульт для видео. Стик шлёт стрелки (перемотка, громкость плеера, прокрутка), X — пробел, Power — Esc, A/B — громкость, Y — Mute. Это компромисс: набор клавиш, который одинаково полезен в плеерах, браузере и презентациях.
  • Мышь по ≡ в KEY: стик — курсор, курок — клик.
  • GAME — настоящий HID-геймпад на Mac: аналоговый стик, аналоговый курок, 9 кнопок. Виден в Chrome и эмуляторах.
  • Автовыключение через 1 час без касаний вместо 30 минут.

Интерактивная схема пульта и изменений: theru27.github.io/mocute-052s-patch (исходник — index.html).

Готовые APK — на странице Releases: поставить на Android-телефон и прошить пульт (см. «Прошивка и откат»). Это неофициальные сборки на основе прошивки и приложения Mocute; по первому требованию правообладателя они будут удалены.

В самом репозитории прошивок и приложений Mocute нет. Всё можно собрать самому: tools/fetch_firmware.sh скачивает оригиналы с сайта Mocute и из Web Archive и сверяет их SHA-256, остальное делают скрипты (см. «Сборка»).

Проект не связан с Mocute. Патч рассчитан только на 052_S23: скрипт проверяет SHA-256 исходной прошивки и байты в каждом месте правки. Перед прошивкой прочитайте раздел «Отказ от ответственности».

Отказ от ответственности

Это любительский проект, сделанный для себя. Он проверен на одном пульте MOCUTE-052 S с прошивкой 052_S23 и одном Mac; на нём всё работает так, как описано. На другом экземпляре, другой версии прошивки или другом компьютере поведение может отличаться.

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

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

Сборки

APK Для чего
MOCUTE-052S.apk основная: KEY для видео, мышь по ≡, геймпад в GAME, 1 час до выключения
MOCUTE-052S-restore-original.apk откат на заводскую 052_S23

Какой пульт подходит

MOCUTE-052 версии S: в Bluetooth виден как MOCUTE-052_S23-…, апдейтер Mocute в режиме прошивки определяет его как 052S и ищет файл MCT_05000001.ISP. Другие версии 052 (F, BLE-M45) и другие модели не подходят.

Режимы и переключатель

Режим выбирается сочетанием при включении и запоминается; обычное включение Power оставляет последний режим. Боковой переключатель KEY/GAME работает на лету. Буквы в сочетаниях — напечатанные на кнопках ромба; Power — левая малая кнопка ⏻.

Включение Режим KEY GAME (основная сборка)
A+Power AUTO видео, мышь по ≡ HID-геймпад
X+Power NEWGAME видео не исследован
Y+Power XJMTK видео заводская клавиатура «стрелки + цифры»
B+Power iCade видео не проверен
A+X+Power прошивка — — (Bluetooth MCT-ISP01)
B+Y+Power сброс — —

Основной режим для Mac — AUTO.

Что меняет патч

KEY (все режимы)

Отчёт №3 в HID-описании переведён из медиа-клавиш (Consumer) в клавиатурные, коды заменены в функции 0x59E20.

Кнопка Было Стало
Стик → / ← следующий / предыдущий трек → / ←
Стик ↑ / ↓ перемотка вперёд / назад ↑ / ↓
X Play/Pause пробел
A / B громкость + / − клавиатурная громкость + / −
Y Mute клавиатурный Mute
Power (коротко) «Меню» (на Mac после смены типа отчёта — F7) Esc
Курок Enter без изменений

Мышь и геймпад на Mac

Пульт показывает хосту одну из двух SDP-записей. «iOS»-запись — только клавиатура. «Android»-запись — мышь, клавиатура и геймпад. Какую выбрать, прошивка решает по признакам, собранным при сопряжении (судя по коду — по типу ключа Bluetooth), и Mac получает «iOS»-запись. Основная сборка отдаёт «Android»-запись всем хостам (переход в 0x49116), а медиа-кнопки оставляет на «Apple»-ветке (0x59E8C), чтобы Y и Power в KEY вели себя как выше. --no-android-sdp отключает эту правку.

Проверено на Mac: мышь по ≡ в KEY, геймпад в GAME (режим AUTO) виден в Chrome. SDL и Steam пульт пока не видят: основной тип устройства у него «мышь», потому что мышь — первая коллекция описания. Раздел «Игровые контроллеры» в настройках macOS такие геймпады не показывает в принципе.

Кнопка Геймпад (Chrome)
Стик ← / → ось 0: −1 / +1, аналоговый
Стик ↑ / ↓ ось 1: −1 / +1, аналоговый
Курок B0 + B9 + ось 4 (аналоговый)
Power (коротко) B1
X B3
Y B4
B B7 + клик мыши
≡ B10, только короткий импульс
A B11

Номера кнопок заданы прошивкой под Android: курок — A, Power — B, ≡ — Select, напечатанная A — Start.

Кликер в режиме XJMTK (в работе)

У режима XJMTK два заводских варианта «геймпад как клавиатура» для Android-приставок на MediaTek. Для Apple-хостов коды берутся из таблицы 0x68E24, для Android-хостов они зашиты в функции 0x66660 — «стрелки + цифры». Основная сборка считает Mac Android-ом, поэтому в ней работает второй вариант, и кликера в XJMTK пока нет (A → 1, X → 3, стик ↑ → ←). Слайды в основной сборке листаются из KEY: стрелки, пробел, Esc.

Таблицу 0x68E24 патч уже переписывает под кликер — это заработает, когда те же клавиши будут подставлены и в 0x66660. Планируемая раскладка:

Кнопка Было Стало В PowerPoint
Стик → и ↓, X, курок \ # пробел, 0xC6/0xD0 → следующий слайд
Стик ← и ↑, A ; ' Backspace ← предыдущий слайд
Y - F5 начать показ
B Esc B чёрный экран
≡ = W белый экран
Power (коротко) [ Esc выйти из показа
Второй слой стика цифровой блок ничего —

Курок назначен по методу исключения (позиции 14–15 таблицы). На пульте раскладка ещё не проверена.

Автовыключение

Порог в 0x5A3A0 — одна инструкция 0x5A3BC: 1800 → 3600 секунд. Отсчёт идёт от последнего касания любой кнопки.

Сборка

Нужны Python 3, curl, unzip, Android SDK build-tools (zipalign, apksigner) и Java (например, brew install openjdk@21).

tools/fetch_firmware.sh
python3 tools/patch_firmware.py build/MCT_05000001_052_S23.ISP build/MCT_05000001_052S.ISP
tools/build_apk.sh build/MCT_05000001_052S.ISP build/MOCUTE-052S.apk

--no-android-sdp у patch_firmware.py оставляет заводское определение хоста: на Mac тогда нет мыши и геймпада, зато XJMTK берёт таблицу кликера (на пульте не проверено). APK для отката — тот же build_apk.sh с оригиналом build/MCT_05000001_052_S23.ISP.

Подпись: при первом запуске build_apk.sh создаёт ключ в build/. Храни его: Android ставит новый APK поверх старого, только если подпись совпадает. Свой ключ можно задать переменными KEYSTORE и KEYSTORE_PASS или в tools/signing.local (не в git).

Прошивка и откат

  1. Удалить с телефона официальный апдейтер Mocute, если он стоит: у пропатченного APK другая подпись.
  2. Установить APK.
  3. Выключить пульт, зажать A+X+Power, сопрячь MCT-ISP01 в настройках Bluetooth телефона, запустить обновление в приложении. На 100% приложение может показать «device connection failed» — это нормально: пульт уже перезагружается с новой прошивкой.
  4. Прошивка сбрасывает режим в AUTO. На Mac удалить пульт из Bluetooth и сопрячь заново: macOS кэширует HID-описание.

Загрузчик с режимом прошивки лежит ниже 0x40000 и не перезаписывается. Откат — прошить MOCUTE-052S-restore-original.apk.

Как устроена прошивка

  • Файл MCT_05000001.ISP — 245 760 байт. Код (raw 0x00000–0x37FFF) хранится блоками по 32 байта данных + 2 байта CRC-16 (poly 0x8005, init 0xFFFF, big-endian); без CRC он загружается по адресу 0x40000.
  • Область настроек (raw 0x38000–конец) хранится как есть: таблица клавиатурных кодов, имя MOCUTE-052_S23, 4 байта неизвестной контрольной суммы в конце. Патч её не трогает.
  • Апдейтер (com.sk.update) читает у пульта код модели и шлёт по SPP файл assets/MCT_<код>.ISP без проверок.
  • Для разбора: tools/DumpDecomp.java — скрипт для headless Ghidra, выгружает декомпиляцию всех функций (образ 0x40000, ARM:LE:32:v5t).

Идеи на будущее

  • Кликер в XJMTK для основной сборки: заменить 14 констант в 0x66660.
  • Геймпад первой коллекцией описания — чтобы его видели SDL и Steam.
  • Номера кнопок по буквам на корпусе (A/B/X/Y) — для ретро-игр без ручной настройки.
  • ≡ как переключатель второго слоя клавиш, сочетания с модификаторами (⌘⇧↩) — нужен свой код.
  • Vendor/Product ID (SDP-запись Device ID) — для Steam и стандартной раскладки в Chrome.

Лицензия

Скрипты, документация и index.html — MIT, © 2026 TheRu27. Прошивка и приложение Mocute, в том числе пропатченные сборки в Releases, под эту лицензию не подпадают и принадлежат правообладателю.

About

MOCUTE-052 S firmware patch: a Bluetooth media remote and presentation clicker for Mac, plus mouse and gamepad

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages