Kleine Android-App für XGIMI H20 / Android 14. Sie nimmt ADB-Broadcasts entgegen
und ruft über Reflection die private XGIMI-API GmTvManager auf.
Dieses Projekt wird jetzt zusätzlich als Reverse-Engineering-Repo für native XGIMI-H20-Steuerung geführt. Ziel ist eine Home-Assistant-Integration ohne DPAD-/Menü-Automatisierung.
Neue Struktur:
apks/ lokale, ignorierte APK-Inputs
framework/ lokale, ignorierte Framework-/DEX-Inputs
libs/ lokale, ignorierte native Libraries
binder/ Binder-Service-Notizen
docs/ Analyseplan und Native-API-Map
scripts/ reproduzierbare Scan- und ADB-Testwerkzeuge
findings.md fortlaufende Erkenntnisse
homeassistant/ Zielbild für die native HA-Integration
Wichtig: Firmware-APKs, Framework-JARs und .so-Dateien werden absichtlich nicht
ins öffentliche Git-Repo aufgenommen. Sie bleiben lokal und werden von den Skripten
analysiert.
Bestätigt ist bisher der native Autofokus-Aufruf:
adb shell service call xgimi.hardware.gmpf.IProjectorFocusManager/default 3 i32 2Die bisherigen Picture-/MEMC-Aufrufe über GmTvManager erreichen zwar die App,
ändern aber den sichtbaren HDR10-Bildmodus nicht zuverlässig. Der aktuell stärkste
Lead für HDR Picture Mode, MEMC, Color Temperature, Gamma, Brightness und AI Picture
ist daher die MediaTek-PQ-Pipeline:
Settings -> PqModeManager -> JNI -> vendor.mediatek.hardware.pq-impl.so -> GM_DISP_SCENE_V3
Bestätigt ist inzwischen ein nativer MediaTek-PQ-Statusleser:
scripts/xgimi_h20_adb.py -s 192.168.0.223:5555 pq-get-global-settingsDieser liest direkt Werte wie Picture_Mode, Backlight, Brightness,
Gamma, Color_Temperature, AI_PQ, MJC_Effect und Local_Contrast.
Wichtig: Der dort gelesene Picture_Mode ist nicht der sichtbare OSD-Bildmodus.
Beim manuellen Wechsel von Lebhaft auf Spiel blieb der rohe native Wert auf
ImaxEnhanced; der echte Bildmodus liegt in der geschuetzten MediaTek
Settings-PQ-Datenbank beziehungsweise in der PqModeManager-Schicht.
Zusätzlich ist jetzt die OSD-nahe Java-Schicht gefunden: Google TV bindet
com.mediatek.extservice mit der Action PqService.remote und ruft
com.mediatek.extservice.IPqService auf. Besonders relevant ist
setPqRepositoryByPkg(packageName, enable, json), weil dieser Pfad full-profile
JSON mit Source-/Paket-Ziel nutzt. Details stehen in docs/extservice_ipq.md.
Die Bridge 0.1.7 enthält dafür den ersten vorsichtigen Lesetest:
de.drapple.xgimi.GET_EXT_PQ_SETTINGS. Live getestet: der Dienst ist durch
com.mediatek.tv.extservice.permission.USE_PQSERVICE geschützt
(signature|privileged). Eine normal sideloaded APK kann ihn daher nicht direkt
binden; der Pfad bleibt als Diagnose und für mögliche privilegierte Installationen
dokumentiert.
Projekt in Android Studio öffnen und Build > Build APK(s) wählen.
Die APK liegt anschließend typischerweise hier:
app/build/outputs/apk/debug/app-debug.apk
Installation:
adb install -r app-debug.apkDie App hat absichtlich kein Launcher-Icon. Sie arbeitet nur als Broadcast-Receiver.
Bildprofil Film:
adb shell am broadcast -n de.drapple.xgimi/.XgimiCommandReceiver -a de.drapple.xgimi.SET_PICTURE_MODE --es mode movieWeitere Profile:
bright, standard, soft, user, game, auto, pc, movie, natural, sports
MEMC:
adb shell am broadcast -n de.drapple.xgimi/.XgimiCommandReceiver -a de.drapple.xgimi.SET_MEMC --es level highMEMC-Werte:
off, low, middle, high, bypass
Status abfragen:
adb shell am broadcast -n de.drapple.xgimi/.XgimiCommandReceiver -a de.drapple.xgimi.GET_STATUSBestimmte Quelle erzwingen:
--ei source 0Quellen laut XGIMI-API:
0 = internes Google TV / MM
1 = HDMI 1
2 = HDMI 2
3 = HDMI 3
4 = HDMI 4
Direkte numerische Werte sind ebenfalls möglich:
adb shell am broadcast -n de.drapple.xgimi/.XgimiCommandReceiver -a de.drapple.xgimi.SET_PICTURE_MODE --ei value 7Bildprofile:
0 bright
1 standard
2 soft
3 user
4 game
5 auto
6 pc
7 movie
8 natural
9 sports
MEMC:
0 off
1 low
2 middle
3 high
4 bypass
-
HACS öffnen.
-
Custom repositories öffnen.
-
Repository hinzufügen:
https://github.com/dr-apple/XgimiControlBridge -
Kategorie Integration auswählen.
-
XGIMI Control Bridge installieren.
-
Home Assistant neu starten.
-
In Home Assistant Einstellungen > Geräte & Dienste > Integration hinzufügen öffnen und XGIMI Control Bridge auswählen.
-
Die bestehende Android-TV-/ADB-
media_player-Entity des Projektors auswählen.
Dieses Repository enthält zusätzlich eine Custom Integration unter:
custom_components/xgimi_control_bridge
Manuelle Installation:
- Den Ordner
custom_components/xgimi_control_bridgenach Home Assistant in/config/custom_components/xgimi_control_bridgekopieren. - Home Assistant neu starten.
- In Home Assistant Einstellungen > Geräte & Dienste > Integration hinzufügen öffnen und XGIMI Control Bridge auswählen.
- Die bestehende Android-TV-/ADB-
media_player-Entity des Projektors auswählen.
Die Integration legt zwei klassische Select-Entities fuer die alte XGIMI-Bridge an:
select.xgimi_control_bridge_picture_mode
select.xgimi_control_bridge_memc
Fuer die bestaetigte native MediaTek-PQ-Steuerung gibt es zusaetzlich echte HA-Regler:
number.xgimi_control_bridge_native_pq_backlight
number.xgimi_control_bridge_native_pq_brightness
number.xgimi_control_bridge_native_pq_contrast
Diese Regler schreiben direkt ueber vendor.mediatek.hardware.pq.IPq/default
und lesen den Status danach wieder zurueck. Auf deiner Anlage heissen sie je
nach gewaehlter Entity zum Beispiel:
number.wohnzimmer_xgimi_control_bridge_native_pq_backlight
number.wohnzimmer_xgimi_control_bridge_native_pq_brightness
number.wohnzimmer_xgimi_control_bridge_native_pq_contrast
Die nativen Bildoptionen liegen als eigene Dropdowns daneben:
select.wohnzimmer_xgimi_control_bridge_native_pq_gamma
select.wohnzimmer_xgimi_control_bridge_native_pq_color_temperature
select.wohnzimmer_xgimi_control_bridge_native_pq_ai_picture
select.wohnzimmer_xgimi_control_bridge_native_pq_memc
select.wohnzimmer_xgimi_control_bridge_native_pq_local_contrast
Wichtig: select.xgimi_control_bridge_picture_mode ist der alte XGIMI-Wrapper
und aendert den sichtbaren HDR10/IMAX-Bildmodus auf dem H20 nicht zuverlaessig.
Der fruehere select.*_native_pq_picture_mode wurde ab v0.1.12 entfernt,
weil der native Rohwert Picture_Mode nicht dem sichtbaren OSD-Bildmodus
entspricht. Der Wert bleibt als Diagnose-Sensor erhalten.
Ab v0.1.11 nutzt die Integration zwei unterschiedliche native Schreibpfade:
globale PQ-Werte wie Gamma, Color_Temperature und Backlight laufen ueber
setPqParamsByGlobal; stream-/bildbezogene Werte wie Brightness, Contrast,
MJC_Effect, AI_PQ und Local_Contrast laufen ueber setPqParams(0, json).
Zusaetzlich gibt es Status-Sensoren und einen Button zum manuellen Aktualisieren:
button.xgimi_control_bridge_refresh_status
button.xgimi_control_bridge_refresh_native_pq_status
sensor.xgimi_control_bridge_picture_mode
sensor.xgimi_control_bridge_memc
sensor.xgimi_control_bridge_source
sensor.xgimi_control_bridge_native_pq_backlight
sensor.xgimi_control_bridge_native_pq_brightness
sensor.xgimi_control_bridge_native_pq_contrast
sensor.xgimi_control_bridge_native_pq_gamma
sensor.xgimi_control_bridge_native_pq_color_temperature
sensor.xgimi_control_bridge_native_pq_ai_picture
sensor.xgimi_control_bridge_native_pq_memc
sensor.xgimi_control_bridge_native_pq_local_contrast
sensor.xgimi_control_bridge_native_pq_picture_mode
sensor.xgimi_control_bridge_last_command_ok
sensor.xgimi_control_bridge_last_adb_response
Der Status wird aus dem adb_response-Attribut der Android-TV-ADB-Entity gelesen.
Wenn Steuerung oder Status nicht funktionieren, zuerst den Button
Refresh Native PQ Status druecken und danach die nativen Sensoren pruefen.
Der Roh-ADB-Sensor wird absichtlich gekuerzt, damit Home Assistant keine zu grossen
Recorder-Attribute speichert.
Außerdem stehen Services zur Verfügung:
xgimi_control_bridge.set_picture_mode
xgimi_control_bridge.set_memc
xgimi_control_bridge.get_status
xgimi_control_bridge.get_native_pq_status
xgimi_control_bridge.set_native_pq_value
xgimi_control_bridge.get_ext_pq_status
Beispiel Service-Aufruf:
action: xgimi_control_bridge.set_picture_mode
target:
entity_id: media_player.xgimi_h20
data:
mode: movieNativer MediaTek-PQ-Status:
action: xgimi_control_bridge.get_native_pq_status
target:
entity_id: media_player.xgimi_h20Nativer MediaTek-PQ-Schreibzugriff, live bestätigt mit Backlight 40 -> 41 -> 40:
action: xgimi_control_bridge.set_native_pq_value
target:
entity_id: media_player.xgimi_h20
data:
key: Backlight
value: 40OSD-nahe ExtService-PQ-Schicht:
action: xgimi_control_bridge.get_ext_pq_status
target:
entity_id: media_player.xgimi_h20Ab Bridge-APK 0.1.9 kann der erreichbare XGIMI-MiscKey-Middleware-Service
diagnostisch abgefragt werden:
scripts/xgimi_h20_adb.py -s 192.168.0.223:5555 \
bridge-middleware-exec-sync getBoostEnableBestaetigt erreichbar sind zum Beispiel getBoostEnable und getALOnOff.
Die naheliegenden Picture-Mode-Kommandos getPQMode, queryPQMode,
getPictureMode und getImageMode liefern derzeit leer zurueck; der sichtbare
Bildmodus ist also auch ueber diesen oeffentlichen Middleware-Eingang noch nicht
freigelegt.
MEMC:
action: xgimi_control_bridge.set_memc
target:
entity_id: media_player.xgimi_h20
data:
level: highDie Integration nutzt intern weiterhin die Android-TV-ADB-Aktion. Der äquivalente Rohbefehl wäre:
action: androidtv.adb_command
target:
entity_id: media_player.xgimi_h20
data:
command: >-
am broadcast -n de.drapple.xgimi/.XgimiCommandReceiver
-a de.drapple.xgimi.SET_PICTURE_MODE
--es mode movieHinweis: Das ist eine experimentelle Bridge gegen eine nicht dokumentierte Hersteller-API. Nach Firmware-Updates können Methodennamen oder Berechtigungen geändert sein.