Skip to content

About

Make a slow Allwinner H713 Android projector fast: debloat, Apple TV-style home screen, lamp & colour control, and an iPhone remote/mouse app over ADB

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

3 Commits

Folders and files

Repository files navigation

fastprojector

A slow, cheap Android projector made fast, an Apple TV–style home screen, and an iPhone app that works as a remote, a mouse and a picture-control panel.

Built for an Allwinner H713 projector (HTC/Hotack firmware, Android 11, 1 GB RAM, reports itself as "ADT-3"). The same board ships under many brand names. If yours is Allwinner H713 with UI_Veng.projector firmware, this should apply almost as is.

Before After
Stock HTC home screen Apple TV-style home with Netflix focused
Stock launcher: busy, ~100 MB of RAM, placeholder tiles for apps that aren't installed Cinematic top shelf: the focused app's name, "Last opened", a glow in its colour, a glass dock
Stock settings Apple TV-style home with YouTube focused
Stock settings grid Moving along the dock recolours the whole screen

What was wrong

Measured on the projector over ADB:

  • Out of memory at idle. About 360 MB free and 275 MB already in swap with nothing open. The stock launcher used ~100 MB, a screensaver that wasn't even showing ~87 MB, and six screen-mirroring services ~75 MB.
  • The brightness setting did nothing. Android's brightness doesn't reach the lamp on this board. The lamp is driven by a vendor service (vendor.aw.homlet.tvsystem.tvserver@1.0::ITvServer), and it was already at 100.
  • The picture was shrunk. Screen Zoom was at 84%, so only about 1472×834 of the 1920×1080 panel was in use.
  • The audio driver dies on sleep. android.hardware.audio.service aborts when the projector suspends, and the speaker stays silent (Bluetooth still works) until a reboot.

What this repo does

On the projector (projector/)

  • Debloat: 44 packages disabled with pm disable-user (telemetry, factory test apps, OEM app store, updaters, mirroring stack, unused AOSP services). Nothing is uninstalled. restore.sh re-enables all of it.
  • Launcher: the open-source CleanYourTV launcher with a theme tuned for this chip (theme/config.json): cinematic top shelf, glass dock, app-colour glow, lifted tiles, spring focus, with reduced motion and no wallpaper so it stays smooth.
  • Screensaver fix: points the screensaver at the launcher's clock, so the projector never suspends and the audio driver never dies.

Smoothness, measured (dumpsys gfxinfo while moving along the dock):

Setup Frames missing 60 fps Median frame
Every effect on 76% 27 ms
This theme 22% 11 ms

On the iPhone (ios/ProjectorRemote/)

Remote Mouse Keyboard Picture Settings
Swipe remote Trackpad mouse Keyboard Picture panel Settings
Swipe like a Siri Remote; back, home, play, keyboard, volume, power, shortcuts A trackpad for Android's real mouse pointer Types into the projector as you type Lamp, colour and picture modes, live Projector IP, keystone & zoom, restart

A SwiftUI app that talks to the projector directly over ADB on your Wi-Fi. No server or companion app is needed.

  • Swipe mode, like the Siri Remote's clickpad: swipe to move, tap the middle for OK, tap or hold an edge to step or keep going.
  • Mouse mode: a trackpad with Android's real mouse pointer. Tap to click, two fingers to scroll, two-finger tap to go back.
  • Keyboard that types into search boxes letter by letter.
  • Picture: lamp, brightness, contrast, saturation, tint, sharpness, colour temperature, noise reduction, dynamic contrast and backlight, all 7 picture modes, and an Accurate Colour preset. Changes apply live as you drag.
  • Shortcuts: HDMI inputs, launch Netflix / YouTube / Prime / Hotstar, a sleep timer, and a power button that shuts down cleanly instead of suspending (see the audio bug above).

Why it's fast: instead of running input keyevent (a new Java process on the projector per press, about half a second on this chip), the app registers a virtual Bluetooth-style keyboard, mouse and media remote through Android's built-in hid tool over one long-lived ADB stream. A press is a few bytes on an open connection. Holding a key repeats natively, and Android shows its own pointer. Picture sliders work the same way: a small helper (projector/pq-helper/) stays running while the Picture panel is open and reads commands from the stream.

Memory: the remote costs the projector about 17 MB while the app is open, and the picture helper another 17 MB only while its panel is open. Both stop when the app goes to the background.

The app screenshots are from the iOS Simulator in the app's debug-only demo mode (-demo, plus -mode Mouse or -demoSheet keyboard|picture|settings), because the projector wasn't at hand. Everything else was measured on the real device.

How it works under the hood

  • ADB client in Swift (ADBClient.swift): the CNXN/AUTH/OPEN/WRTE protocol over Network.framework, with TCP_NODELAY and one write in flight per stream, coalescing anything written meanwhile.
  • RSA sign-in (ADBKey.swift): a 2048-bit key in the iOS Keychain, the token signed as a SHA-1 digest with PKCS#1 v1.5, and the public key encoded in adb's own adbkey.pub format (mincrypt RSAPublicKey with n0inv and R² mod n). It was verified byte for byte against a real adbkey.pub.
  • Virtual remote (HIDRemote.swift): one HID descriptor with three reports (keyboard, 3-button mouse with wheel, consumer control). OK is sent as consumer usage 0x41 (KEY_SELECT, i.e. DPAD_CENTER), because TV apps such as Netflix ignore ENTER.
  • Lamp and picture (Backlight.java): run with app_process, borrowing the vendor ITvServer classes from the projector's own settings APK. PQ types: 1 brightness, 2 contrast, 3 saturation, 4 hue, 5 sharpness, 6 backlight, 7 temporal NR, 8 spatial NR, 9 dynamic contrast, 10 black extension, 11 gamma, 12 colour temperature (0–2), 13 dynamic backlight.

Setup

1. Projector

  1. Settings → About → press OK on Build seven times → Developer options → turn on USB debugging (and network/ADB debugging if listed).
  2. From a computer on the same Wi-Fi (brew install --cask android-platform-tools):
    adb connect <projector-ip>:5555        # accept the prompt on the projector, tick "Always allow"
    grep -vE '^\s*(#|$)' projector/debloat.txt | while read -r p; do adb shell pm disable-user --user 0 "$p" </dev/null; done
    adb shell settings put secure screensaver_components com.gathin.tvhome/.ClockDream
    Read debloat.txt first and comment out anything you use. It disables the built-in screen mirroring and the OEM updaters, for example.
  3. Build and install the CleanYourTV launcher as its README describes, then push theme/config.json with its tools/theme.sh.

Undo everything: projector/restore.sh <projector-ip>:5555.

2. iPhone app

Needs Xcode and XcodeGen.

cd ios/ProjectorRemote
# set DEVELOPMENT_TEAM in project.yml to your Apple team ID
xcodegen generate && open ProjectorRemote.xcodeproj

Run it on your iPhone, allow Local Network access, enter the projector's IP in Settings, and tick Always allow on the projector's prompt.

To rebuild the picture helper after changing it: projector/pq-helper/build.sh, then paste the printed base64 into ProjectorPQ.swift.

Limits worth knowing

  • 4K isn't possible. The panel has exactly one mode, 1920×1080 at 60 Hz, with no HDR. "4K" on the box means it accepts 4K over HDMI and scales it down.
  • Netflix and Prime stream at about 480–540p on this projector. It has no hardware DRM (liboemcrypto.so is absent, so Widevine L3), and those services cap L3 devices. YouTube isn't affected. For full-HD Netflix, plug in a certified streaming stick and switch to it with Inputs.
  • Network ADB on port 5555 is unencrypted. Anyone on your Wi-Fi could try to connect, though the projector still asks you to approve each new device. Keystrokes from the app's keyboard also travel in the clear, so don't type passwords through it: use the projector's own on-screen keyboard for those. This firmware also runs SELinux in permissive mode. Keep it on a network you trust.

Credits

  • Launcher: CleanYourTV by Gathin23 (MIT). This repo only configures it.
  • The rest, debugging and measurements: Shaaz Khan, with Claude Code.

License

MIT, see LICENSE.

About

Make a slow Allwinner H713 Android projector fast: debloat, Apple TV-style home screen, lamp & colour control, and an iPhone remote/mouse app over ADB

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages