Document radio startup completion and independent cleanup contracts
This commit is contained in:
1 parent
2fd8a35230
commit
bb8518ab67
1 file changed
+34
@@ -259,6 +259,35 @@ capture останавливается. При работающем измери
|
||||
Снятие ручного PTT само по себе не выключает автоматическую передачу.
|
||||
Stop/смена группы сбрасывает удержания и прежний хвост; io проверяет generation.
|
||||
|
||||
Start/stop рации также вызываются на main. Start отвергает нулевую группу,
|
||||
проверяет размер буфера AudioTrack и выполняет на io сначала очистку прежних
|
||||
ресурсов, затем setup. Даже отказ первоначальной очистки завершает onReady(false)
|
||||
на main. Отложенный результат перепроверяет generation: он не подтверждает и
|
||||
не очищает новый запрос. Ошибка текущего запуска снимает activeGroup после
|
||||
callback, если callback не начал новый start/stop. Это позволяет restoreAfterCall
|
||||
сначала выключить native-членство неудачно восстановленной группы. Исключение
|
||||
пользовательского callback логируется и передаётся main-caller. Если main-очередь
|
||||
отвергла доставку, callback на io не вызывается, новые аудиоресурсы очищаются с ERROR.
|
||||
|
||||
Stop снимает логическое участие сразу; его Future завершается после io-очистки
|
||||
либо возвращает первый критический отказ. Ждать Future нужно вне main. Receiver,
|
||||
capture, output lease/AudioTrack и native DSP очищаются независимо. Перед остановкой
|
||||
DSP движок дожидается своих capture/play workers; interruption не пропускает join,
|
||||
флаг восстанавливается после очистки. Ссылка на отказавший receiver/lease/track
|
||||
сохраняется для следующего stop/start. При ошибке detach lease трек ещё принадлежит
|
||||
MediaAudioController и не получает release. Успешно очищенные ссылки сбрасываются;
|
||||
native audio stop остаётся идемпотентной завершающей попыткой после join.
|
||||
Новая группа не заменяет владельцев при неподтверждённой очистке.
|
||||
|
||||
Screen receiver удерживается до вызова registerReceiver, включая частичный отказ
|
||||
IPC. IllegalArgumentException от unregister подтверждает отсутствие регистрации;
|
||||
прочие ошибки сохраняют владельца. Доставленный после замены receiver проверяет
|
||||
identity и исходное поколение до изменения состояния экрана. Проверка settings ACK
|
||||
имеет собственный отменяемый Runnable: ACK, новая настройка и stop снимают его.
|
||||
Отказ постановки ACK-timeout логируется, захват по-прежнему ждёт подтверждения.
|
||||
Отказ таймера фоновой автоматики закрывает её окно; ручной PTT/измеритель могут
|
||||
сохранить захват в режиме OFF. Логи содержат группу, поколение, этап отказа и join.
|
||||
|
||||
`RadioTalkState` хранит отдельный снимок говорящих для активной группы. Включение/
|
||||
смена канала создаёт новый снимок, выключение устанавливает groupId=0. Событие 43
|
||||
разбирается строго как 19 little-endian байтов: group/node/stream/on; ID ненулевые,
|
||||
@@ -441,6 +470,11 @@ MediaAudioController с host-границами Android/JNI. Проверяет
|
||||
измерителе: отказ/обычный хвост таймера, повторное нажатие, независимые владельцы,
|
||||
отмена, смена группы, RECORD_AUDIO и запрет фоновых PTT-вызовов. PCM-подписки и
|
||||
workers настоящие; звукового оборудования, DSP и сетевой передачи в модели нет.
|
||||
RadioAudioLifecycleTest проверяет отказы регистрации/очистки receiver и AudioTrack,
|
||||
зависимость release от detach lease, interruption, ошибки native/start/settings,
|
||||
отложенные и повторно входящие callbacks, восстановление после звонка и отказы
|
||||
таймеров ACK/автоматики. Проверяется и сохранение владельцев после частичного
|
||||
эффекта API, и продолжение независимой очистки перед повторной попыткой.
|
||||
На Linux `:app:testDebugUnitTest` также запускает 25 fault-сценариев настоящего
|
||||
JNI logger через `:app:testJniLog`; окружение и границы модели: `tests/jni_log/README.md`.
|
||||
Проверки native bridge/standby доступны в `tests/Makefile.am`;
|
||||
|
||||
Reference in new issue
Block a user