# lanye-z/mib2q-carplay-rgi-cn architecture

> Architecture diagram of the GitHub repository lanye-z/mib2q-carplay-rgi-cn, 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/lanye-z/mib2q-carplay-rgi-cn
- Repository: https://github.com/lanye-z/mib2q-carplay-rgi-cn

## Overview

This repository modifies Audi MIB2Q firmware behavior to improve CarPlay route guidance in the virtual cockpit. The main workflow carries CarPlay/iAP2 maneuver data through the native hook and Java route-guidance logic, maps it to BAP and renderer commands, then displays the maneuver in the cluster. Separate branches handle Amap V38 metadata and state tracking, native-navigation handoff, and cover art. The README documents these capabilities; sampled source confirms renderer TCP command handling and route-guidance gating, but several subsystem links are based on documentation rather than inspected implementations.

Main entry points: [`java_patch/com/luka/carplay/routeguidance/GatedCombiService.java`](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/GatedCombiService.java) (BAP route gate), [`java_patch/com/luka/carplay/routeguidance/RouteGuidance.java`](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/RouteGuidance.java) (Route guidance), [`java_patch/com/luka/carplay/routeguidance/BAPBridge.java`](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/BAPBridge.java) (BAP bridge), [`c_hook/routeguidance/rgd_hook.c`](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_hook/routeguidance/rgd_hook.c) (Guidance hook)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_capture["Data Capture"]
  node_native_hook["Native hook<br/>[main.c]"]
  node_rgd_hook["Guidance hook<br/>[rgd_hook.c]"]
  node_coverart["Cover art hook<br/>[coverart_hook.c]"]
  node_metadata["Native metadata<br/>[rgd_tlv.c]"]
end

subgraph group_guidance["Guidance Logic"]
  node_java_hook["Java hook<br/>[CarPlayHook.java]"]
  node_rgd_java["Route guidance<br/>[RouteGuidance.java]"]
  node_amap["Amap state machine"]
  node_amap_compat["Amap V38 compatibility<br/>[AmapV38Compat.java]"]
  node_maneuver_map["Maneuver mapping"]
end

subgraph group_display["Cluster Display"]
  node_bap["BAP bridge<br/>[BAPBridge.java]"]
  node_renderer_server["Renderer server<br/>[server.c]"]
  node_renderer["Maneuver renderer<br/>[main.c]"]
end

subgraph group_integration["Vehicle Integration"]
  node_gate["BAP route gate"]
  node_cluster["Cluster service"]
  node_lifecycle["Device lifecycle"]
  node_cursor["Touchpad control"]
end

node_carplay(("CarPlay navigation"))
node_iap2(("iAP2 stream"))
node_stock_nav(("Stock navigation"))

node_carplay -->|"sends guidance"| node_iap2
node_iap2 -->|"supplies packets"| node_rgd_hook
node_native_hook -->|"registers hook"| node_rgd_hook
node_rgd_hook -->|"emits metadata"| node_metadata
node_metadata -->|"provides state"| node_amap_compat
node_java_hook -->|"dispatches guidance"| node_rgd_java
node_rgd_java -->|"selects Amap logic"| node_amap
node_amap -->|"uses compatibility"| node_amap_compat
node_rgd_java -->|"maps maneuvers"| node_maneuver_map
node_maneuver_map -->|"provides display data"| node_bap
node_bap -->|"sends TCP commands"| node_renderer_server
node_renderer_server -->|"delivers commands"| node_renderer
node_renderer -->|"renders guidance"| node_cluster
node_bap -->|"updates route guidance"| node_gate
node_gate -->|"delegates when ungated"| node_cluster
node_lifecycle -->|"reports device state"| node_java_hook
node_lifecycle -->|"controls handoff"| node_gate
node_gate -->|"releases native guidance"| node_stock_nav
node_coverart -.->|"handles artwork"| node_carplay

click node_native_hook "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_hook/main.c"
click node_rgd_hook "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_hook/routeguidance/rgd_hook.c"
click node_coverart "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_hook/coverart/coverart_hook.c"
click node_java_hook "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/CarPlayHook.java"
click node_rgd_java "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/RouteGuidance.java"
click node_amap "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/AmapRouteGuidance.java"
click node_amap_compat "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/AmapV38Compat.java"
click node_metadata "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_hook/routeguidance/rgd_tlv.c"
click node_maneuver_map "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/ManeuverMapper.java"
click node_bap "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/BAPBridge.java"
click node_gate "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/GatedCombiService.java"
click node_renderer_server "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_render/server.c"
click node_renderer "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_render/main.c"
click node_cluster "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/de/audi/tghu/navi/app/cluster/ClusterService.java"
click node_lifecycle "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/DeviceStateHandler.java"
click node_cursor "https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/cursor/CursorController.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_native_hook,node_rgd_hook,node_coverart,node_metadata toneBlue
class node_java_hook,node_rgd_java,node_amap,node_amap_compat,node_maneuver_map toneAmber
class node_bap,node_renderer_server,node_renderer toneMint
class node_gate,node_cluster,node_lifecycle,node_cursor toneRose
class node_carplay,node_iap2,node_stock_nav toneIndigo
```

## Components

### Data Capture

- [Native hook](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_hook/main.c): `c_hook/main.c`
- [Guidance hook](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_hook/routeguidance/rgd_hook.c): `c_hook/routeguidance/rgd_hook.c`
- [Cover art hook](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_hook/coverart/coverart_hook.c): `c_hook/coverart/coverart_hook.c`
- [Native metadata](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_hook/routeguidance/rgd_tlv.c): `c_hook/routeguidance/rgd_tlv.c`

### Guidance Logic

- [Java hook](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/CarPlayHook.java): `java_patch/com/luka/carplay/CarPlayHook.java`
- [Route guidance](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/RouteGuidance.java): `java_patch/com/luka/carplay/routeguidance/RouteGuidance.java`
- [Amap state machine](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/AmapRouteGuidance.java): `java_patch/com/luka/carplay/routeguidance/AmapRouteGuidance.java`
- [Amap V38 compatibility](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/AmapV38Compat.java): `java_patch/com/luka/carplay/routeguidance/AmapV38Compat.java`
- [Maneuver mapping](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/ManeuverMapper.java): `java_patch/com/luka/carplay/routeguidance/ManeuverMapper.java`

### Cluster Display

- [BAP bridge](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/BAPBridge.java): `java_patch/com/luka/carplay/routeguidance/BAPBridge.java`
- [Renderer server](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_render/server.c): `c_render/server.c`
- [Maneuver renderer](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/c_render/main.c): `c_render/main.c`

### Vehicle Integration

- [BAP route gate](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/routeguidance/GatedCombiService.java): `java_patch/com/luka/carplay/routeguidance/GatedCombiService.java`
- [Cluster service](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/de/audi/tghu/navi/app/cluster/ClusterService.java): `java_patch/de/audi/tghu/navi/app/cluster/ClusterService.java`
- [Device lifecycle](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/DeviceStateHandler.java): `java_patch/com/luka/carplay/DeviceStateHandler.java`
- [Touchpad control](https://github.com/lanye-z/mib2q-carplay-rgi-cn/blob/main/java_patch/com/luka/carplay/cursor/CursorController.java): `java_patch/com/luka/carplay/cursor/CursorController.java`

### Other components

- **CarPlay navigation**
- **iAP2 stream**
- **Stock navigation**

## Connections

- CarPlay navigation → iAP2 stream: sends guidance
- iAP2 stream → Guidance hook: supplies packets
- Native hook → Guidance hook: registers hook
- Guidance hook → Native metadata: emits metadata
- Native metadata → Amap V38 compatibility: provides state
- Java hook → Route guidance: dispatches guidance
- Route guidance → Amap state machine: selects Amap logic
- Amap state machine → Amap V38 compatibility: uses compatibility
- Route guidance → Maneuver mapping: maps maneuvers
- Maneuver mapping → BAP bridge: provides display data
- BAP bridge → Renderer server: sends TCP commands
- Renderer server → Maneuver renderer: delivers commands
- Maneuver renderer → Cluster service: renders guidance
- BAP bridge → BAP route gate: updates route guidance
- BAP route gate → Cluster service: delegates when ungated
- Device lifecycle → Java hook: reports device state
- Device lifecycle → BAP route gate: controls handoff
- BAP route gate → Stock navigation: releases native guidance
- Cover art hook → CarPlay navigation: handles artwork
