# sq00ky/supra-idrive6-android-auto architecture

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

- Interactive diagram: https://gitdiagram.com/sq00ky/supra-idrive6-android-auto
- Repository: https://github.com/sq00ky/supra-idrive6-android-auto

## Overview

NBT-AAD is native wireless Android Auto software for the Toyota Supra’s NBT Evo head unit. Its main workflow is phone connection and session handling, followed by projection video and audio delivery to the car; Bluetooth/DSI and vehicle/HMI integration support that experience. The daemon is the central runtime orchestrator, while a separate native iDrive plugin exposes controls and status. Several subsystem links are documented or visible in the source index, but unsampled call sites limit certainty about some dispatch details.

Main entry points: [`milestone-7/src/main.cpp`](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/main.cpp) (Daemon orchestration), [`milestone-7/src/audio/backend.hpp`](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/audio/backend.hpp) (Audio backends), [`milestone-7/rhmiapp/nbt_aad_app.cpp`](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/rhmiapp/nbt_aad_app.cpp) (iDrive plugin app), [`milestone-7/src/bluetooth_manager.cpp`](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/bluetooth_manager.cpp) (Bluetooth manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Daemon runtime"]
  node_daemon["Daemon orchestration<br/>[main.cpp]"]
  node_session["AA session<br/>[aa_session.cpp]"]
end

subgraph group_connectivity["Phone connectivity"]
  node_tcp["Wireless TCP<br/>[tcp_server.cpp]"]
  node_bluetooth["Bluetooth manager"]
  node_dsi["DSI client<br/>[dsi_client.cpp]"]
  node_wifi["Wi-Fi setup<br/>[wireless_setup.cpp]"]
end

subgraph group_projection["Media projection"]
  node_video["Video manager<br/>[video_manager.cpp]"]
  node_screen["QNX Screen<br/>[screen_video.h]"]
  node_audio["Audio backends<br/>[backend.hpp]"]
  node_a2i["A2I audio<br/>[a2i_audio.cpp]"]
  node_browseraudio["Browser audio<br/>[browser_audio.cpp]"]
  node_btaudio["Bluetooth audio<br/>[bt_audio.cpp]"]
end

subgraph group_vehicle["Vehicle integration"]
  node_most["MOST client<br/>[client.cpp]"]
  node_navigation["Navigation core<br/>[nav_core.cpp]"]
  node_j29["J29 display<br/>[j29_display.cpp]"]
end

subgraph group_interface["iDrive interface"]
  node_app["iDrive plugin app<br/>[nbt_aad_app.cpp]"]
  node_hmiservices["HMI services<br/>[hmi_services.cpp]"]
end

node_driver(("Phone"))
node_hmi(("iDrive HMI"))

node_driver -->|"connects wirelessly"| node_tcp
node_daemon -->|"starts server"| node_tcp
node_daemon -.->|"orchestrates sessions"| node_session
node_daemon -.->|"starts service"| node_bluetooth
node_bluetooth -->|"sends requests"| node_dsi
node_daemon -.->|"configures wireless"| node_wifi
node_daemon -->|"starts projection"| node_video
node_video -->|"posts frames"| node_screen
node_daemon -->|"starts backend"| node_audio
node_audio -.->|"selects backend"| node_a2i
node_audio -.->|"selects backend"| node_browseraudio
node_audio -.->|"selects backend"| node_btaudio
node_daemon -.->|"uses car messages"| node_most
node_daemon -.->|"uses navigation"| node_navigation
node_navigation -.->|"feeds display"| node_j29
node_hmi -->|"loads plugin app"| node_app
node_app -.->|"uses HMI services"| node_hmiservices
node_app -->|"reads daemon status"| node_daemon

click node_daemon "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/main.cpp"
click node_session "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/aa_session.cpp"
click node_tcp "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/tcp_server.cpp"
click node_bluetooth "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/bluetooth_manager.cpp"
click node_dsi "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/dsi_client.cpp"
click node_wifi "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/wireless_setup.cpp"
click node_video "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/video_manager.cpp"
click node_screen "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/include/screen_video.h"
click node_audio "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/audio/backend.hpp"
click node_a2i "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/audio/a2i_audio.cpp"
click node_browseraudio "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/audio/browser_audio.cpp"
click node_btaudio "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/audio/bt_audio.cpp"
click node_most "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/most/client.cpp"
click node_navigation "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/cluster/nav_core.cpp"
click node_j29 "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/cluster/j29_display.cpp"
click node_app "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/rhmiapp/nbt_aad_app.cpp"
click node_hmiservices "https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/plugin/hmi_services.cpp"

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_daemon,node_session toneBlue
class node_tcp,node_bluetooth,node_dsi,node_wifi toneAmber
class node_video,node_screen,node_audio,node_a2i,node_browseraudio,node_btaudio toneMint
class node_most,node_navigation,node_j29 toneRose
class node_app,node_hmiservices,node_driver,node_hmi toneIndigo
```

## Components

### Daemon runtime

- [Daemon orchestration](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/main.cpp): `milestone-7/src/main.cpp`
- [AA session](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/aa_session.cpp): `milestone-7/src/aa_session.cpp`

### Phone connectivity

- [Wireless TCP](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/tcp_server.cpp): `milestone-7/src/tcp_server.cpp`
- [Bluetooth manager](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/bluetooth_manager.cpp): `milestone-7/src/bluetooth_manager.cpp`
- [DSI client](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/dsi_client.cpp): `milestone-7/src/dsi_client.cpp`
- [Wi-Fi setup](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/wireless_setup.cpp): `milestone-7/src/wireless_setup.cpp`

### Media projection

- [Video manager](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/video_manager.cpp): `milestone-7/src/video_manager.cpp`
- [QNX Screen](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/include/screen_video.h): `milestone-7/include/screen_video.h`
- [Audio backends](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/audio/backend.hpp): `milestone-7/src/audio/backend.hpp`
- [A2I audio](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/audio/a2i_audio.cpp): `milestone-7/src/audio/a2i_audio.cpp`
- [Browser audio](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/audio/browser_audio.cpp): `milestone-7/src/audio/browser_audio.cpp`
- [Bluetooth audio](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/audio/bt_audio.cpp): `milestone-7/src/audio/bt_audio.cpp`

### Vehicle integration

- [MOST client](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/most/client.cpp): `milestone-7/src/most/client.cpp`
- [Navigation core](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/cluster/nav_core.cpp): `milestone-7/src/cluster/nav_core.cpp`
- [J29 display](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/src/cluster/j29_display.cpp): `milestone-7/src/cluster/j29_display.cpp`

### iDrive interface

- [iDrive plugin app](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/rhmiapp/nbt_aad_app.cpp): `milestone-7/rhmiapp/nbt_aad_app.cpp`
- [HMI services](https://github.com/sq00ky/supra-idrive6-android-auto/blob/main/milestone-7/plugin/hmi_services.cpp): `milestone-7/plugin/hmi_services.cpp`

### Other components

- **Phone**
- **iDrive HMI**

## Connections

- Phone → Wireless TCP: connects wirelessly
- Daemon orchestration → Wireless TCP: starts server (evidence: `milestone-7/src/main.cpp`)
- Daemon orchestration → AA session: orchestrates sessions
- Daemon orchestration → Bluetooth manager: starts service
- Bluetooth manager → DSI client: sends requests (evidence: `milestone-7/src/bluetooth_manager.cpp`)
- Daemon orchestration → Wi-Fi setup: configures wireless
- Daemon orchestration → Video manager: starts projection (evidence: `milestone-7/src/main.cpp`)
- Video manager → QNX Screen: posts frames (evidence: `milestone-7/src/video_manager.cpp`)
- Daemon orchestration → Audio backends: starts backend (evidence: `milestone-7/src/main.cpp`)
- Audio backends → A2I audio: selects backend
- Audio backends → Browser audio: selects backend
- Audio backends → Bluetooth audio: selects backend
- Daemon orchestration → MOST client: uses car messages
- Daemon orchestration → Navigation core: uses navigation
- Navigation core → J29 display: feeds display
- iDrive HMI → iDrive plugin app: loads plugin app (evidence: `milestone-7/rhmiapp/nbt_aad_app.cpp`)
- iDrive plugin app → HMI services: uses HMI services
- iDrive plugin app → Daemon orchestration: reads daemon status (evidence: `milestone-7/rhmiapp/nbt_aad_app.cpp`)
