bump v0.44.0-dev
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# 2026-06-06 — Полевой тест и финальная проверка ELM
|
||||
|
||||
## Контекст
|
||||
Выезд к машине. Приложение показывает "No ELM", хотя сторонние приложения (Torque, Car Scanner) подключаются нормально.
|
||||
|
||||
## Найденные баги (и их исправления)
|
||||
|
||||
### 1. 🔴 КРИТИЧЕСКИЙ: `checkDevice()` не вызывал `connectAndInit()`
|
||||
**Файл:** `ElmChecker.kt:69`
|
||||
**Симптом:** Кнопка "🔌 ELM" показывала ❌ ELM не отвечает
|
||||
**Причина:** В ходе рефакторинга `checkDevice()` был вынесен как отдельный метод, но вызов `connectAndInit()` был убран. AT-команды слались в никуда — BT-сокет не открывался.
|
||||
**Исправление:** Вернул `if (!connectAndInit()) return null` в начало `checkDevice()`.
|
||||
**Коммит:** `6a33048`
|
||||
|
||||
### 2. 🟡 `connect()` не идемпотентный
|
||||
**Файл:** `ElmChecker.kt:189`
|
||||
**Проблема:** Повторный вызов `connect()` пытался открыть новый сокет поверх уже открытого → IOException.
|
||||
**Исправление:** Добавлена проверка `if (socket?.isConnected == true) return` в начале `connect()`.
|
||||
**Коммит:** `739afa9`
|
||||
|
||||
### 3. 🟡 `run()` — двойной connect
|
||||
**Файл:** `ElmChecker.kt:133`
|
||||
**Проблема:** `run()` вызывал `connectAndInit()`, затем `checkDevice()` тоже вызывал `connectAndInit()` → двойное подключение.
|
||||
**Исправление:** Убрал `connectAndInit()` из `run()`, так как `checkDevice()` сам подключается.
|
||||
**Статус:** `run()` сейчас не используется в продакшене (UI вызывает методы по отдельности), но исправлен на будущее.
|
||||
**Коммит:** `739afa9`
|
||||
|
||||
## Архитектура вызовов (финальная)
|
||||
|
||||
Три пути в UI:
|
||||
|
||||
### Путь 1: 🔌 ELM → 🚗 ЭБУ
|
||||
```
|
||||
checkElm() → findElmDevice() → ElmChecker(dev, bt).checkDevice()
|
||||
→ connectAndInit() → connect() → elm.init()
|
||||
→ ATI, AT@1, AT@2, ATDP, ATRV, ATAT1
|
||||
→ возвращает DeviceInfo
|
||||
→ checker сохранён в elmChecker (сокет НЕ закрыт)
|
||||
|
||||
checkEcu() → elmChecker.checkEcu()
|
||||
→ send("0100"), send("0902")
|
||||
→ возвращает EcuData
|
||||
→ сокет остаётся открытым (GC закроет)
|
||||
```
|
||||
|
||||
### Путь 2: ⚠️ DTC
|
||||
```
|
||||
scanDtc() → findElmDevice() → NEW ElmChecker(dev, bt).scanDtc()
|
||||
→ connectAndInit() → connect() → elm.init()
|
||||
→ send("03"), send("07") → parseDtcCodes()
|
||||
→ disconnect() ← сокет ЗАКРЫВАЕТСЯ
|
||||
→ возвращает List<String>
|
||||
```
|
||||
|
||||
### Путь 3: run() (не используется)
|
||||
```
|
||||
run() → checkDevice() → connectAndInit() → ... → checkEcu() → disconnect()
|
||||
```
|
||||
|
||||
## Текущее состояние
|
||||
- Версия: **v0.42.0-dev**
|
||||
- APK: https://obdai.ru/elmer.apk
|
||||
- BT permissions: Android 12+ запрашиваются в onCreate()
|
||||
- Сервер: работает, ping ОК
|
||||
- Тесты: 133 шт (118 pass, 1 expected fail SQLite)
|
||||
|
||||
## Не исправлено (потенциальные проблемы)
|
||||
- После 🔌ELM → 🚗ЭБУ сокет не закрывается. Если потом нажать ⚠️DTC, создаётся второй сокет к тому же устройству. Некоторые ELM-клоны не держат два соединения.
|
||||
- Нет таймаута на `checkElm()` — если ELM завис, поток висит бесконечно.
|
||||
Reference in New Issue
Block a user