# luka-dev/mib2q-carplay-rgi architecture

> Architecture diagram of the GitHub repository luka-dev/mib2q-carplay-rgi, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/luka-dev/mib2q-carplay-rgi
- Repository: https://github.com/luka-dev/mib2q-carplay-rgi

## Overview

This repository patches Audi MHI2Q CarPlay to add Virtual Cockpit and HUD route guidance, cluster cover art, touchpad-to-DPAD input, and parking-popup coexistence. The primary workflow carries iPhone route guidance through the native hook and Java integration to BAP cluster updates and a separate maneuver renderer, while preserving the stock map. The graph also shows display composition and the independent media, input, and parking features. Some source excerpts are partial; uncertain internal wiring is omitted.

Main entry points: [`java_patch/com/luka/carplay/rgd/RouteGuidance.java`](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/rgd/RouteGuidance.java) (Route guidance), [`hook/routeguidance/rgd_hook.c`](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/hook/routeguidance/rgd_hook.c) (Route guidance hook), [`java_patch/com/luka/carplay/bus/CarplayBus.java`](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/bus/CarplayBus.java) (Java bus), [`java_patch/com/luka/carplay/rgd/BAPBridge.java`](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/rgd/BAPBridge.java) (BAP bridge)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_guidance["Route guidance"]
  node_rgd_hook["Route guidance hook<br/>[rgd_hook.c]"]
  node_route["Route guidance<br/>[RouteGuidance.java]"]
  node_bap["BAP bridge<br/>[BAPBridge.java]"]
  node_cluster_service["Cluster navigation"]
  node_gated["Native update gate"]
  node_renderer_client["Renderer transport"]
  node_renderer_server["Renderer TCP server<br/>[server.c]"]
  node_engine["Maneuver engine<br/>[main.c]"]
  node_scene["Scene rendering<br/>[scene.cpp]"]
end

subgraph group_display["Cluster display"]
  node_combi_map["Cluster map controller"]
  node_layer["Cluster layer policy"]
  node_display_manager["Display contexts"]
end

subgraph group_integration["CarPlay integration"]
  node_hook["Hook framework<br/>[main.c]"]
  node_java_app["CarPlay app<br/>[CarPlayApp.java]"]
  node_bus["Java bus<br/>[CarplayBus.java]"]
  node_dsi["CarPlay DSI lifecycle"]
end

subgraph group_enhancements["Cluster features"]
  node_cover_hook["Cover-art hook<br/>[coverart_hook.c]"]
  node_cover_java["Cover-art handling<br/>[CoverArt.java]"]
  node_touch["Touchpad controller"]
  node_parking["Parking controller"]
  node_pdc_guard["PDC small-stage guard"]
end

node_phone(("iPhone navigation"))

node_phone -->|"sends guidance"| node_rgd_hook
node_hook -->|"registers module"| node_rgd_hook
node_rgd_hook -->|"forwards updates"| node_bus
node_java_app -->|"initializes"| node_bus
node_bus -->|"delivers messages"| node_route
node_route -->|"maps guidance"| node_bap
node_route -->|"sends maneuvers"| node_renderer_client
node_bap -->|"updates cluster"| node_cluster_service
node_cluster_service -->|"routes native updates"| node_gated
node_renderer_client -->|"sends commands"| node_renderer_server
node_renderer_server -->|"dispatches commands"| node_engine
node_engine -->|"renders scene"| node_scene
node_combi_map -->|"updates geometry"| node_layer
node_layer -->|"reapplies layout"| node_display_manager
node_cover_hook -.->|"provides cover art"| node_cover_java
node_dsi -->|"installs touch sink"| node_touch
node_touch -->|"emits DPAD events"| node_dsi
node_parking -->|"updates parking state"| node_pdc_guard

click node_hook "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/hook/main.c"
click node_rgd_hook "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/hook/routeguidance/rgd_hook.c"
click node_java_app "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/core/CarPlayApp.java"
click node_bus "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/bus/CarplayBus.java"
click node_route "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/rgd/RouteGuidance.java"
click node_bap "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/rgd/BAPBridge.java"
click node_cluster_service "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/de/audi/tghu/navi/app/cluster/ClusterService.java"
click node_gated "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/rgd/GatedCombiService.java"
click node_renderer_client "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/rgd/RendererServer.java"
click node_renderer_server "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/maneuver_render/server.c"
click node_engine "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/maneuver_render/main.c"
click node_scene "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/maneuver_render/scene/scene.cpp"
click node_combi_map "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/de/esolutions/hmi/widgets/audi/evo/high/widgets/CombiMapController.java"
click node_layer "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/cluster/ClusterLayerController.java"
click node_display_manager "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/de/audi/tghu/fwhmi/DisplayManagerMIB2High.java"
click node_cover_hook "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/hook/coverart/coverart_hook.c"
click node_cover_java "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/coverart/CoverArt.java"
click node_touch "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/input/TouchpadController.java"
click node_dsi "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/de/audi/app/terminalmode/dsi/carplay/CarplayDSILifecycleController.java"
click node_parking "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/de/audi/app/earlyfunc/evo/parking/ParkingSystemControllerComponentEvo.java"
click node_pdc_guard "https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/pdc/PdcSmallStageGuard.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_rgd_hook,node_route,node_bap,node_cluster_service,node_gated,node_renderer_client,node_renderer_server,node_engine,node_scene toneBlue
class node_combi_map,node_layer,node_display_manager toneAmber
class node_hook,node_java_app,node_bus,node_dsi toneMint
class node_cover_hook,node_cover_java,node_touch,node_parking,node_pdc_guard toneRose
class node_phone toneIndigo
```

## Components

### Route guidance

- [Route guidance hook](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/hook/routeguidance/rgd_hook.c): `hook/routeguidance/rgd_hook.c`
- [Route guidance](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/rgd/RouteGuidance.java): `java_patch/com/luka/carplay/rgd/RouteGuidance.java`
- [BAP bridge](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/rgd/BAPBridge.java): `java_patch/com/luka/carplay/rgd/BAPBridge.java`
- [Cluster navigation](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/de/audi/tghu/navi/app/cluster/ClusterService.java): `java_patch/de/audi/tghu/navi/app/cluster/ClusterService.java`
- [Native update gate](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/rgd/GatedCombiService.java): `java_patch/com/luka/carplay/rgd/GatedCombiService.java`
- [Renderer transport](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/rgd/RendererServer.java): `java_patch/com/luka/carplay/rgd/RendererServer.java`
- [Renderer TCP server](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/maneuver_render/server.c): `maneuver_render/server.c`
- [Maneuver engine](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/maneuver_render/main.c): `maneuver_render/main.c`
- [Scene rendering](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/maneuver_render/scene/scene.cpp): `maneuver_render/scene/scene.cpp`

### Cluster display

- [Cluster map controller](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/de/esolutions/hmi/widgets/audi/evo/high/widgets/CombiMapController.java): `java_patch/de/esolutions/hmi/widgets/audi/evo/high/widgets/CombiMapController.java`
- [Cluster layer policy](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/cluster/ClusterLayerController.java): `java_patch/com/luka/carplay/cluster/ClusterLayerController.java`
- [Display contexts](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/de/audi/tghu/fwhmi/DisplayManagerMIB2High.java): `java_patch/de/audi/tghu/fwhmi/DisplayManagerMIB2High.java`

### CarPlay integration

- [Hook framework](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/hook/main.c): `hook/main.c`
- [CarPlay app](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/core/CarPlayApp.java): `java_patch/com/luka/carplay/core/CarPlayApp.java`
- [Java bus](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/bus/CarplayBus.java): `java_patch/com/luka/carplay/bus/CarplayBus.java`
- [CarPlay DSI lifecycle](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/de/audi/app/terminalmode/dsi/carplay/CarplayDSILifecycleController.java): `java_patch/de/audi/app/terminalmode/dsi/carplay/CarplayDSILifecycleController.java`

### Cluster features

- [Cover-art hook](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/hook/coverart/coverart_hook.c): `hook/coverart/coverart_hook.c`
- [Cover-art handling](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/coverart/CoverArt.java): `java_patch/com/luka/carplay/coverart/CoverArt.java`
- [Touchpad controller](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/input/TouchpadController.java): `java_patch/com/luka/carplay/input/TouchpadController.java`
- [Parking controller](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/de/audi/app/earlyfunc/evo/parking/ParkingSystemControllerComponentEvo.java): `java_patch/de/audi/app/earlyfunc/evo/parking/ParkingSystemControllerComponentEvo.java`
- [PDC small-stage guard](https://github.com/luka-dev/mib2q-carplay-rgi/blob/main/java_patch/com/luka/carplay/pdc/PdcSmallStageGuard.java): `java_patch/com/luka/carplay/pdc/PdcSmallStageGuard.java`

### Other components

- **iPhone navigation**

## Connections

- iPhone navigation → Route guidance hook: sends guidance
- Hook framework → Route guidance hook: registers module
- Route guidance hook → Java bus: forwards updates
- CarPlay app → Java bus: initializes
- Java bus → Route guidance: delivers messages
- Route guidance → BAP bridge: maps guidance
- Route guidance → Renderer transport: sends maneuvers
- BAP bridge → Cluster navigation: updates cluster
- Cluster navigation → Native update gate: routes native updates
- Renderer transport → Renderer TCP server: sends commands
- Renderer TCP server → Maneuver engine: dispatches commands
- Maneuver engine → Scene rendering: renders scene
- Cluster map controller → Cluster layer policy: updates geometry
- Cluster layer policy → Display contexts: reapplies layout
- Cover-art hook → Cover-art handling: provides cover art
- CarPlay DSI lifecycle → Touchpad controller: installs touch sink
- Touchpad controller → CarPlay DSI lifecycle: emits DPAD events
- Parking controller → PDC small-stage guard: updates parking state
