diff --git a/tools/chatgui-android/doc/ARCHITECTURE.md b/tools/chatgui-android/doc/ARCHITECTURE.md index a2490abce..cfbb4dcda 100644 --- a/tools/chatgui-android/doc/ARCHITECTURE.md +++ b/tools/chatgui-android/doc/ARCHITECTURE.md @@ -243,6 +243,22 @@ true только при удалении последнего владельц набора: это позволяет отменить хвост передачи после release. Null снимает всех. Агрегатор не управляет VAD, аудио или таймерами; их владелец — RadioAudioEngine. +Ручные talkBegin/talkEnd/cancelTalk в RadioAudioEngine проверяют main-поток до +изменения владельцев/таймера. Неактивная рация отказывает с WARN; отсутствие +RECORD_AUDIO запрашивает разрешение без сохранения удержания. После выдачи +пользователь нажимает снова. Принятый PTT — асинхронный запрос, не подтверждение +первого PCM/TX: эти этапы видны отдельно в логах capture/native и transmittingGroup. + +Последний talkEnd оставляет 250 мс хвоста; новое нажатие снимает его таймер, +cancel последнего владельца снимает хвост сразу. Если postDelayed отказал, +ERROR содержит source/group/generation; движок немедленно снимает ручной запрос +и ставит согласование capture в io. Сообщение scheduled появляется только при +успешной постановке. Когда захват больше не нужен, подписка закрывается и native +capture останавливается. При работающем измерителе/автоматике захват сохраняется, +а отпускание PTT проходит общей очередью управления/PCM до native radioTalkEnd. +Снятие ручного PTT само по себе не выключает автоматическую передачу. +Stop/смена группы сбрасывает удержания и прежний хвост; io проверяет generation. + `RadioTalkState` хранит отдельный снимок говорящих для активной группы. Включение/ смена канала создаёт новый снимок, выключение устанавливает groupId=0. Событие 43 разбирается строго как 19 little-endian байтов: group/node/stream/on; ID ненулевые, @@ -419,6 +435,12 @@ audio focus, импульса/cancel вибрации и постановки т Для CallRingback/NotificationSound проверяются также запрет смены фазы при неосвобождённом loop, независимость перекрывающихся сигналов, очистка без установленных callbacks и повтор release при выключенном звуке/ошибке create. +RadioPttLifecycleTest использует настоящие RadioAudioEngine, MicrophoneCapture и +MediaAudioController с host-границами Android/JNI. Проверяется не только UI-флаг, +но и команда native capture stop либо упорядоченный radioTalkEnd при сохранённом +измерителе: отказ/обычный хвост таймера, повторное нажатие, независимые владельцы, +отмена, смена группы, RECORD_AUDIO и запрет фоновых PTT-вызовов. PCM-подписки и +workers настоящие; звукового оборудования, DSP и сетевой передачи в модели нет. На Linux `:app:testDebugUnitTest` также запускает 25 fault-сценариев настоящего JNI logger через `:app:testJniLog`; окружение и границы модели: `tests/jni_log/README.md`. Проверки native bridge/standby доступны в `tests/Makefile.am`;