237 lines
5.4 KiB
Markdown
237 lines
5.4 KiB
Markdown
# Car UI
|
||
|
||
Интерфейс автомобильной мультимедийной системы для Raspberry Pi 4B с сенсорным дисплеем.
|
||
|
||
Приложение разработано на Python с использованием PySide6 / Qt 6 и рассчитано
|
||
на работу как в обычном Desktop Environment во время разработки, так и напрямую
|
||
через Qt EGLFS / DRM/KMS в production-режиме.
|
||
|
||
<p align="center">
|
||
<img src="docs/images/car-ui-hardware.png" width="700" alt="Car UI reference hardware">
|
||
</p>
|
||
|
||
> 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.
|