228 lines
5.1 KiB
Markdown
228 lines
5.1 KiB
Markdown
# Car UI
|
||
|
||
## Reference hardware
|
||
|
||
Текущая версия Car UI разрабатывается и тестируется на следующей конфигурации:
|
||
|
||
- Raspberry Pi 4B (4 GB RAM);
|
||
- 7" IPS touchscreen;
|
||
- разрешение 1024×600;
|
||
- HDMI для вывода изображения;
|
||
- USB для touchscreen input;
|
||
- встроенные динамики дисплея.
|
||
|
||
<p align="center">
|
||
<img src="docs/images/hardware-front.png" width="45%" alt="7 inch touchscreen front view">
|
||
<img src="docs/images/hardware-back.png" width="45%" alt="Raspberry Pi 4B mounted behind touchscreen">
|
||
</p>
|
||
|
||
## 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.
|