# robertnisipeanu/idrive-apps architecture

> Architecture diagram of the GitHub repository robertnisipeanu/idrive-apps, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-10). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/robertnisipeanu/idrive-apps
- Repository: https://github.com/robertnisipeanu/idrive-apps

## Overview

This repository provides an iDrive app for enabling and managing CarPlay/Android Auto map patches, a native map-stream decoder, and a shared renderer for the instrument cluster and HUD. The principal workflow is: the driver configures the app, the app requests patching through the root helper, the native service decodes the captured map stream, and cluster-render displays it. The README documents HUD sizing, positioning, yielding, and error handling. Several app and native implementation files were not sampled, so links beyond documented behavior or indexed references are omitted.

Main entry points: [`native/waze-on-cluster/patch/patchd.js`](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/patchd.js) (Patch daemon), [`native/cluster-render/src/server.cpp`](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/src/server.cpp) (Client server), [`native/waze-on-cluster/src/main.cpp`](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/src/main.cpp) (Map service), [`apps/robertn_waze_cluster/src/robertn_waze_cluster.js`](https://github.com/robertnisipeanu/idrive-apps/blob/main/apps/robertn_waze_cluster/src/robertn_waze_cluster.js) (Waze app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Driver app"]
  node_app_ui["Waze app"]
  node_app_control["Patch control"]
  node_profile["Profile sync<br/>[profile_sync.js]"]
  node_qr["QR support<br/>[qr.js]"]
  node_locale["Localization<br/>[i18n.js]"]
end

subgraph group_patch["Head-unit patching"]
  node_patchd["Patch daemon<br/>[patchd.js]"]
  node_cp_patch["CarPlay patch<br/>[carplay_patch.js]"]
  node_aa_patch["Android Auto patch<br/>[aapd_patch.js]"]
  node_recovery["Boot recovery<br/>[recovery.js]"]
  node_patch_record[("Patch records<br/>[patch_record.js]")]
  node_head_unit["Unit compatibility<br/>[head_unit.js]"]
end

subgraph group_map["Map capture"]
  node_map_service["Map service<br/>[main.cpp]"]
  node_map_feeds["Stream feeds<br/>[map_feeds.cpp]"]
  node_video_producer["Video producer<br/>[video_producer.cpp]"]
  node_decoder["H.264 decoder<br/>[decoder_msdk.cpp]"]
  node_map_state["Map state<br/>[map_state.cpp]"]
end

subgraph group_render["Cluster rendering"]
  node_render_service["Render service<br/>[main.cpp]"]
  node_render_server["Client server<br/>[server.cpp]"]
  node_compositor["Compositor<br/>[compositor.cpp]"]
  node_slots["Display slots<br/>[slots.cpp]"]
  node_render_client["Native client<br/>[client.cpp]"]
  node_js_client["JavaScript client"]
end

node_driver(("Driver"))
node_head_unit_display(("Head-unit display"))

node_driver -->|"configures"| node_app_ui
node_app_ui -.->|"uses control"| node_app_control
node_app_ui -.->|"localizes"| node_locale
node_app_ui -.->|"uses QR"| node_qr
node_app_control -.->|"requests patching"| node_patchd
node_app_control -.->|"syncs profile"| node_profile
node_patchd -->|"dispatches"| node_cp_patch
node_patchd -->|"dispatches"| node_aa_patch
node_patchd -->|"dispatches"| node_recovery
node_patchd -->|"checks support"| node_head_unit
node_cp_patch -->|"records changes"| node_patch_record
node_aa_patch -->|"records changes"| node_patch_record
node_recovery -->|"checks records"| node_patch_record
node_map_service -->|"manages feeds"| node_map_feeds
node_map_service -->|"produces video"| node_video_producer
node_map_service -->|"tracks state"| node_map_state
node_video_producer -.->|"decodes frames"| node_decoder
node_map_service -->|"sends map"| node_render_service
node_render_client -->|"sends layers"| node_render_server
node_js_client -.->|"sends layers"| node_render_server
node_render_service -.->|"starts service"| node_render_server
node_render_server -.->|"composes layers"| node_compositor
node_render_server -.->|"uses slots"| node_slots
node_render_service -->|"draws cluster and HUD"| node_head_unit_display

click node_app_ui "https://github.com/robertnisipeanu/idrive-apps/blob/main/apps/robertn_waze_cluster/src/robertn_waze_cluster.js"
click node_app_control "https://github.com/robertnisipeanu/idrive-apps/blob/main/apps/robertn_waze_cluster/src/waze_cluster_control.js"
click node_profile "https://github.com/robertnisipeanu/idrive-apps/blob/main/apps/robertn_waze_cluster/src/profile_sync.js"
click node_qr "https://github.com/robertnisipeanu/idrive-apps/blob/main/apps/robertn_waze_cluster/src/qr.js"
click node_locale "https://github.com/robertnisipeanu/idrive-apps/blob/main/apps/robertn_waze_cluster/src/i18n.js"
click node_patchd "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/patchd.js"
click node_cp_patch "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/carplay_patch.js"
click node_aa_patch "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/aapd_patch.js"
click node_recovery "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/recovery.js"
click node_patch_record "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/patch_record.js"
click node_head_unit "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/head_unit.js"
click node_map_service "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/src/main.cpp"
click node_map_feeds "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/src/map_feeds.cpp"
click node_video_producer "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/src/video_producer.cpp"
click node_decoder "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/src/decoder_msdk.cpp"
click node_map_state "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/src/map_state.cpp"
click node_render_service "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/src/main.cpp"
click node_render_server "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/src/server.cpp"
click node_compositor "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/src/compositor.cpp"
click node_slots "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/src/slots.cpp"
click node_render_client "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/client/client.cpp"
click node_js_client "https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/js/cluster_render_client.js"

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_app_ui,node_app_control,node_profile,node_qr,node_locale toneBlue
class node_patchd,node_cp_patch,node_aa_patch,node_recovery,node_patch_record,node_head_unit toneAmber
class node_map_service,node_map_feeds,node_video_producer,node_decoder,node_map_state toneMint
class node_render_service,node_render_server,node_compositor,node_slots,node_render_client,node_js_client toneRose
class node_driver,node_head_unit_display toneIndigo
```

## Components

### Driver app

- [Waze app](https://github.com/robertnisipeanu/idrive-apps/blob/main/apps/robertn_waze_cluster/src/robertn_waze_cluster.js): `apps/robertn_waze_cluster/src/robertn_waze_cluster.js`
- [Patch control](https://github.com/robertnisipeanu/idrive-apps/blob/main/apps/robertn_waze_cluster/src/waze_cluster_control.js): `apps/robertn_waze_cluster/src/waze_cluster_control.js`
- [Profile sync](https://github.com/robertnisipeanu/idrive-apps/blob/main/apps/robertn_waze_cluster/src/profile_sync.js): `apps/robertn_waze_cluster/src/profile_sync.js`
- [QR support](https://github.com/robertnisipeanu/idrive-apps/blob/main/apps/robertn_waze_cluster/src/qr.js): `apps/robertn_waze_cluster/src/qr.js`
- [Localization](https://github.com/robertnisipeanu/idrive-apps/blob/main/apps/robertn_waze_cluster/src/i18n.js): `apps/robertn_waze_cluster/src/i18n.js`

### Head-unit patching

- [Patch daemon](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/patchd.js): `native/waze-on-cluster/patch/patchd.js`
- [CarPlay patch](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/carplay_patch.js): `native/waze-on-cluster/patch/carplay_patch.js`
- [Android Auto patch](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/aapd_patch.js): `native/waze-on-cluster/patch/aapd_patch.js`
- [Boot recovery](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/recovery.js): `native/waze-on-cluster/patch/recovery.js`
- [Patch records](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/patch_record.js): `native/waze-on-cluster/patch/patch_record.js`
- [Unit compatibility](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/patch/head_unit.js): `native/waze-on-cluster/patch/head_unit.js`

### Map capture

- [Map service](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/src/main.cpp): `native/waze-on-cluster/src/main.cpp`
- [Stream feeds](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/src/map_feeds.cpp): `native/waze-on-cluster/src/map_feeds.cpp`
- [Video producer](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/src/video_producer.cpp): `native/waze-on-cluster/src/video_producer.cpp`
- [H.264 decoder](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/src/decoder_msdk.cpp): `native/waze-on-cluster/src/decoder_msdk.cpp`
- [Map state](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/waze-on-cluster/src/map_state.cpp): `native/waze-on-cluster/src/map_state.cpp`

### Cluster rendering

- [Render service](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/src/main.cpp): `native/cluster-render/src/main.cpp`
- [Client server](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/src/server.cpp): `native/cluster-render/src/server.cpp`
- [Compositor](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/src/compositor.cpp): `native/cluster-render/src/compositor.cpp`
- [Display slots](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/src/slots.cpp): `native/cluster-render/src/slots.cpp`
- [Native client](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/client/client.cpp): `native/cluster-render/client/client.cpp`
- [JavaScript client](https://github.com/robertnisipeanu/idrive-apps/blob/main/native/cluster-render/js/cluster_render_client.js): `native/cluster-render/js/cluster_render_client.js`

### Other components

- **Driver**
- **Head-unit display**

## Connections

- Driver → Waze app: configures (evidence: `README.md`)
- Waze app → Patch control: uses control
- Waze app → Localization: localizes
- Waze app → QR support: uses QR
- Patch control → Patch daemon: requests patching
- Patch control → Profile sync: syncs profile
- Patch daemon → CarPlay patch: dispatches (evidence: `native/waze-on-cluster/patch/patchd.js`)
- Patch daemon → Android Auto patch: dispatches (evidence: `native/waze-on-cluster/patch/patchd.js`)
- Patch daemon → Boot recovery: dispatches (evidence: `native/waze-on-cluster/patch/patchd.js`)
- Patch daemon → Unit compatibility: checks support (evidence: `native/waze-on-cluster/patch/patchd.js`)
- CarPlay patch → Patch records: records changes (evidence: `native/waze-on-cluster/patch/carplay_patch.js`)
- Android Auto patch → Patch records: records changes (evidence: `native/waze-on-cluster/patch/aapd_patch.js`)
- Boot recovery → Patch records: checks records (evidence: `native/waze-on-cluster/patch/recovery.js`)
- Map service → Stream feeds: manages feeds (evidence: `native/waze-on-cluster/src/main.cpp`)
- Map service → Video producer: produces video (evidence: `native/waze-on-cluster/src/main.cpp`)
- Map service → Map state: tracks state (evidence: `native/waze-on-cluster/src/main.cpp`)
- Video producer → H.264 decoder: decodes frames
- Map service → Render service: sends map (evidence: `README.md`)
- Native client → Client server: sends layers
- JavaScript client → Client server: sends layers
- Render service → Client server: starts service
- Client server → Compositor: composes layers
- Client server → Display slots: uses slots
- Render service → Head-unit display: draws cluster and HUD (evidence: `README.md`)
