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.
Отчёт №3 в HID-описании переведён из медиа-клавиш (Consumer) в клавиатурные, коды заменены в функции 0x59E20.
| Кнопка | Было | Стало |
|---|---|---|
| Стик → / ← | следующий / предыдущий трек | → / ← |
| Стик ↑ / ↓ | перемотка вперёд / назад | ↑ / ↓ |
| X | Play/Pause | пробел |
| A / B | громкость + / − | клавиатурная громкость + / − |
| Y | Mute | клавиатурный Mute |
| Power (коротко) | «Меню» (на Mac после смены типа отчёта — F7) | Esc |
| Курок | Enter | без изменений |
Пульт показывает хосту одну из двух 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 два заводских варианта «геймпад как клавиатура» для 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).
- Удалить с телефона официальный апдейтер Mocute, если он стоит: у пропатченного APK другая подпись.
- Установить APK.
- Выключить пульт, зажать A+X+Power, сопрячь
MCT-ISP01в настройках Bluetooth телефона, запустить обновление в приложении. На 100% приложение может показать «device connection failed» — это нормально: пульт уже перезагружается с новой прошивкой. - Прошивка сбрасывает режим в AUTO. На Mac удалить пульт из Bluetooth и сопрячь заново: macOS кэширует HID-описание.
Загрузчик с режимом прошивки лежит ниже 0x40000 и не перезаписывается. Откат — прошить MOCUTE-052S-restore-original.apk.
- Файл
MCT_05000001.ISP— 245 760 байт. Код (raw0x00000–0x37FFF) хранится блоками по 32 байта данных + 2 байта CRC-16 (poly0x8005, init0xFFFF, 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, под эту лицензию не подпадают и принадлежат правообладателю.