# Car UI
Интерфейс автомобильной мультимедийной системы для Raspberry Pi 4B с сенсорным дисплеем.
Приложение разработано на Python с использованием PySide6 / Qt 6 и рассчитано
на работу как в обычном Desktop Environment во время разработки, так и напрямую
через Qt EGLFS / DRM/KMS в production-режиме.
> Current reference hardware. The product image is temporary and will be
> replaced with a photo of the final prototype.
## Reference hardware
Текущая конфигурация:
- Raspberry Pi 4 Model B (4 GB RAM);
- 7" IPS touchscreen (1024×600);
- HDMI video / USB touch.
Подробное описание аппаратной конфигурации:
[`docs/hardware.md`](docs/hardware.md)
## Architecture
В production-режиме полноценный Desktop Environment не используется.
```text
Raspberry Pi 4B
↓
Debian 13 (Trixie)
↓
systemd
↓
multi-user.target
↓
tty1
↓
car-ui.service
↓
Qt EGLFS
↓
DRM/KMS
↓
Car UI
```
Bluetooth подготавливается отдельным `bt-unblock.service`, который снимает RFKill-блокировку перед запуском Car UI.
## Project structure
```text
car_ui/
├── assets/ # Ресурсы приложения
├── audio/ # Работа с аудио
├── controllers/ # Контроллеры приложения
├── docs/ # Документация
├── screens/ # Экраны интерфейса
├── scripts/ # Build / run / deploy scripts
├── services/ # Сервисы приложения
├── system_configs/ # systemd units и системная конфигурация
├── themes/ # Темы интерфейса
├── ui/ # UI-компоненты
│
├── car_ui.spec # Конфигурация PyInstaller
├── main.py # Entry point
├── requirements.txt # Python-зависимости
└── README.md
```
## Quick start
### Development
Подготовить окружение и собрать проект:
```bash
./scripts/build.sh
```
`build.sh` автоматически:
- создаёт `.venv`, если окружение отсутствует;
- устанавливает зависимости из `requirements.txt`;
- собирает приложение через PyInstaller.
Для запуска исходного кода:
```bash
./scripts/run.sh
```
Логи прямого запуска сохраняются в:
```text
debug.log
```
### Build
Собрать standalone-приложение:
```bash
./scripts/build.sh
```
Результат сборки:
```text
dist/car_ui/
├── car_ui
└── _internal/
```
PyInstaller использует конфигурацию:
```text
car_ui.spec
```
### Deploy
Установить готовую сборку в систему:
```bash
sudo ./scripts/deploy.sh
```
Приложение устанавливается в:
```text
/opt/car_ui/
```
Production systemd service запускает:
```text
/opt/car_ui/car_ui
```
## Production and Development modes
Car UI поддерживает два режима работы системы.
### Car mode
Используется для штатной работы магнитолы:
```text
multi-user.target
↓
tty1
↓
Qt EGLFS
↓
Car UI
```
Desktop Environment при этом не запускается.
### Development mode
Для разработки используется обычный:
```text
graphical.target
↓
Desktop Environment
↓
scripts/run.sh
```
Инструкции по настройке и переключению режимов находятся в:
[`docs/auto-start.md`](docs/auto-start.md)
## First system setup
Инструкция по подготовке чистой Debian 13 (Trixie), установке системных зависимостей, сборке и первоначальному развёртыванию:
[`docs/first-system-setup.md`](docs/first-system-setup.md)
## Configuration
Конфигурация UI хранится в:
```text
~/.config/car_ui/ui.conf
```
## Marker files
В корне проекта могут использоваться специальные marker-файлы.
### `reset`
Сигнал приложению выполнить сброс до заводских настроек.
Создать:
```bash
touch reset
```
Удалить:
```bash
rm reset
```
### `dev_mode_enable`
Включает режим разработчика приложения.
Создать:
```bash
touch dev_mode_enable
```
Удалить:
```bash
rm dev_mode_enable
```
## Documentation
Основная документация проекта находится в `docs/`:
- [`first-system-setup.md`](docs/first-system-setup.md) — подготовка чистой системы;
- [`auto-start.md`](docs/auto-start.md) — systemd, автоматический запуск и переключение Car / Development mode.