# gsjsjzhznsz/xiaomivelasimulator architecture

> Architecture diagram of the GitHub repository gsjsjzhznsz/xiaomivelasimulator, 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/gsjsjzhznsz/xiaomivelasimulator
- Repository: https://github.com/gsjsjzhznsz/xiaomivelasimulator

## Overview

Xiaomi VELA Simulator is an Android app for running openvela/QEMU device images and inspecting simulated wearable software. The main workflow is selecting or editing a device template, obtaining a firmware image and QEMU runtime, starting a session, then viewing serial output or the guest display. Separate Workshop flows inspect .rpk quick-app packages and .bin watchface resources for device-shaped previews; they do not execute quick-app JavaScript. The graph reflects README-documented capabilities where implementation excerpts were unavailable, so some UI-to-manager wiring is intentionally left out.

Main entry points: [`app/src/main/java/com/vela/simulator/engine/QemuSession.kt`](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/engine/QemuSession.kt) (QEMU session), [`app/src/main/java/com/vela/simulator/ui/MainViewModel.kt`](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/ui/MainViewModel.kt) (App state), [`app/src/main/java/com/vela/simulator/ui/screens/WorkshopScreen.kt`](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/ui/screens/WorkshopScreen.kt) (Workshop screens), [`app/src/main/java/com/vela/simulator/MainActivity.kt`](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/MainActivity.kt) (App navigation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App UI"]
  node_activity["App navigation<br/>[MainActivity.kt]"]
  node_viewmodel["App state<br/>[MainViewModel.kt]"]
  node_screens["Device and run screens"]
  node_config[("App configuration<br/>[VelaConfig.kt]")]
  node_logs[("Application and session logs<br/>[FileLogger.kt]")]
end

subgraph group_devices["Devices and Images"]
  node_templates[("Device templates")]
  node_template_model["Template model<br/>[DeviceTemplate.kt]"]
  node_image_manager["Image download and import<br/>[ImageManager.kt]"]
end

subgraph group_simulation["Simulation I/O"]
  node_runtime["QEMU runtime setup<br/>[QemuRuntime.kt]"]
  node_args["QEMU arguments<br/>[QemuArgsBuilder.kt]"]
  node_session["QEMU session<br/>[QemuSession.kt]"]
  node_serial["Serial console<br/>[SerialConsole.kt]"]
  node_vnc["RFB display client<br/>[RfbClient.kt]"]
  node_display["Display geometry<br/>[DisplayGeometry.kt]"]
end

subgraph group_workshop["Workshop"]
  node_workshop_screen["Workshop screens<br/>[WorkshopScreen.kt]"]
  node_rpk["Quick-app package parser<br/>[RpkManager.kt]"]
  node_watchface["Watchface parser"]
  node_watch_preview["Device-shape preview<br/>[WatchPreview.kt]"]
  node_quickapp_screen["Quick-app preview<br/>[WorkshopScreen.kt]"]
  node_watchface_screen["Watchface preview<br/>[WatchfaceScreen.kt]"]
end

node_user(("Android user"))
node_qemu["QEMU process"]
node_network(("Download sources"))

node_user -->|"opens and navigates"| node_activity
node_activity -->|"uses app state"| node_viewmodel
node_activity -->|"displays"| node_screens
node_screens -->|"requests app actions"| node_viewmodel
node_screens -->|"reads and updates preferences"| node_config
node_viewmodel -->|"loads and saves templates"| node_templates
node_templates -->|"parses and serializes"| node_template_model
node_viewmodel -->|"requests image operations"| node_image_manager
node_image_manager -->|"downloads firmware"| node_network
node_viewmodel -->|"sets up runtime"| node_runtime
node_viewmodel -->|"starts and controls"| node_session
node_session -->|"validates kernel"| node_image_manager
node_session -->|"uses runtime paths"| node_runtime
node_session -->|"builds launch plan"| node_args
node_args -->|"reads device settings"| node_template_model
node_session -->|"launches and stops"| node_qemu
node_session -->|"connects and sends commands"| node_serial
node_session -->|"connects to display"| node_vnc
node_serial -->|"exchanges serial data"| node_qemu
node_vnc -->|"exchanges RFB events and frames"| node_qemu
node_screens -->|"presents session controls"| node_session
node_session -->|"records session output"| node_logs
node_activity -->|"records app events"| node_logs
node_workshop_screen -->|"imports and parses packages"| node_rpk
node_workshop_screen -->|"imports and parses watchfaces"| node_watchface
node_workshop_screen -->|"opens quick-app preview"| node_quickapp_screen
node_workshop_screen -->|"opens watchface preview"| node_watchface_screen
node_watchface_screen -->|"renders device shape"| node_watch_preview
node_quickapp_screen -->|"renders device shape"| node_watch_preview
node_watchface_screen -->|"shows parsed resources"| node_watchface
node_quickapp_screen -->|"shows package details"| node_rpk

click node_activity "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/MainActivity.kt"
click node_viewmodel "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/ui/MainViewModel.kt"
click node_screens "https://github.com/gsjsjzhznsz/xiaomivelasimulator/tree/main/app/src/main/java/com/vela/simulator/ui/screens"
click node_workshop_screen "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/ui/screens/WorkshopScreen.kt"
click node_config "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/config/VelaConfig.kt"
click node_templates "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/device/TemplateRepository.kt"
click node_template_model "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/device/DeviceTemplate.kt"
click node_image_manager "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/engine/ImageManager.kt"
click node_runtime "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/engine/QemuRuntime.kt"
click node_args "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/engine/QemuArgsBuilder.kt"
click node_session "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/engine/QemuSession.kt"
click node_serial "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/terminal/SerialConsole.kt"
click node_vnc "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/vnc/RfbClient.kt"
click node_display "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/vnc/DisplayGeometry.kt"
click node_rpk "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/quickapp/RpkManager.kt"
click node_watchface "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/watchface/WatchfaceManager.kt"
click node_watch_preview "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/ui/components/WatchPreview.kt"
click node_logs "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/util/FileLogger.kt"
click node_quickapp_screen "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/ui/screens/WorkshopScreen.kt"
click node_watchface_screen "https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/ui/screens/WatchfaceScreen.kt"

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_activity,node_viewmodel,node_screens,node_config,node_logs,node_user toneBlue
class node_templates,node_template_model,node_image_manager toneAmber
class node_runtime,node_args,node_session,node_serial,node_vnc,node_display toneMint
class node_workshop_screen,node_rpk,node_watchface,node_watch_preview,node_quickapp_screen,node_watchface_screen toneRose
class node_qemu,node_network toneIndigo
```

## Components

### App UI

- [App navigation](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/MainActivity.kt): `app/src/main/java/com/vela/simulator/MainActivity.kt`
- [App state](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/ui/MainViewModel.kt): `app/src/main/java/com/vela/simulator/ui/MainViewModel.kt`
- [Device and run screens](https://github.com/gsjsjzhznsz/xiaomivelasimulator/tree/main/app/src/main/java/com/vela/simulator/ui/screens): `app/src/main/java/com/vela/simulator/ui/screens`
- [App configuration](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/config/VelaConfig.kt): `app/src/main/java/com/vela/simulator/config/VelaConfig.kt`
- [Application and session logs](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/util/FileLogger.kt): `app/src/main/java/com/vela/simulator/util/FileLogger.kt`

### Devices and Images

- [Device templates](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/device/TemplateRepository.kt): `app/src/main/java/com/vela/simulator/device/TemplateRepository.kt`
- [Template model](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/device/DeviceTemplate.kt): `app/src/main/java/com/vela/simulator/device/DeviceTemplate.kt`
- [Image download and import](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/engine/ImageManager.kt): `app/src/main/java/com/vela/simulator/engine/ImageManager.kt`

### Simulation I/O

- [QEMU runtime setup](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/engine/QemuRuntime.kt): `app/src/main/java/com/vela/simulator/engine/QemuRuntime.kt`
- [QEMU arguments](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/engine/QemuArgsBuilder.kt): `app/src/main/java/com/vela/simulator/engine/QemuArgsBuilder.kt`
- [QEMU session](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/engine/QemuSession.kt): `app/src/main/java/com/vela/simulator/engine/QemuSession.kt`
- [Serial console](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/terminal/SerialConsole.kt): `app/src/main/java/com/vela/simulator/terminal/SerialConsole.kt`
- [RFB display client](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/vnc/RfbClient.kt): `app/src/main/java/com/vela/simulator/vnc/RfbClient.kt`
- [Display geometry](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/vnc/DisplayGeometry.kt): `app/src/main/java/com/vela/simulator/vnc/DisplayGeometry.kt`

### Workshop

- [Workshop screens](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/ui/screens/WorkshopScreen.kt): `app/src/main/java/com/vela/simulator/ui/screens/WorkshopScreen.kt`
- [Quick-app package parser](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/quickapp/RpkManager.kt): `app/src/main/java/com/vela/simulator/quickapp/RpkManager.kt`
- [Watchface parser](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/watchface/WatchfaceManager.kt): `app/src/main/java/com/vela/simulator/watchface/WatchfaceManager.kt`
- [Device-shape preview](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/ui/components/WatchPreview.kt): `app/src/main/java/com/vela/simulator/ui/components/WatchPreview.kt`
- [Quick-app preview](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/ui/screens/WorkshopScreen.kt): `app/src/main/java/com/vela/simulator/ui/screens/WorkshopScreen.kt`
- [Watchface preview](https://github.com/gsjsjzhznsz/xiaomivelasimulator/blob/main/app/src/main/java/com/vela/simulator/ui/screens/WatchfaceScreen.kt): `app/src/main/java/com/vela/simulator/ui/screens/WatchfaceScreen.kt`

### Other components

- **Android user**
- **QEMU process**
- **Download sources**

## Connections

- Android user → App navigation: opens and navigates
- App navigation → App state: uses app state
- App navigation → Device and run screens: displays
- Device and run screens → App state: requests app actions
- Device and run screens → App configuration: reads and updates preferences
- App state → Device templates: loads and saves templates
- Device templates → Template model: parses and serializes
- App state → Image download and import: requests image operations
- Image download and import → Download sources: downloads firmware
- App state → QEMU runtime setup: sets up runtime
- App state → QEMU session: starts and controls
- QEMU session → Image download and import: validates kernel
- QEMU session → QEMU runtime setup: uses runtime paths
- QEMU session → QEMU arguments: builds launch plan
- QEMU arguments → Template model: reads device settings
- QEMU session → QEMU process: launches and stops
- QEMU session → Serial console: connects and sends commands
- QEMU session → RFB display client: connects to display
- Serial console → QEMU process: exchanges serial data
- RFB display client → QEMU process: exchanges RFB events and frames
- Device and run screens → QEMU session: presents session controls
- QEMU session → Application and session logs: records session output
- App navigation → Application and session logs: records app events
- Workshop screens → Quick-app package parser: imports and parses packages
- Workshop screens → Watchface parser: imports and parses watchfaces
- Workshop screens → Quick-app preview: opens quick-app preview
- Workshop screens → Watchface preview: opens watchface preview
- Watchface preview → Device-shape preview: renders device shape
- Quick-app preview → Device-shape preview: renders device shape
- Watchface preview → Watchface parser: shows parsed resources
- Quick-app preview → Quick-app package parser: shows package details
