Clarify asynchronous radio signaling and wire identity contracts

This commit is contained in:
evgeny committed 2026-10-29 13:34:23 +01:00
1 parent cda411a57e
commit 6ec8950a85
2 files changed
+5 -2

No files matched your search

@@ -303,7 +303,10 @@ object NativeLib {
* true — копия принята очередью живого worker; применение асинхронно, stop/restart может отменить её.
* После SERVICE_STARTED монитор повторяет актуальное состояние. false — отказ с native-диагностикой. */
fun setPhoneState(state: Int, policy: Int): Boolean = nativeSetPhoneState(state, policy)
/* action: radio_call_action, результат — CHAT_EVT_RADIO_CALL (65). */
/** Адресное приглашение в рацию: action — radio_call_action (1..8), id — ненулевые uint64-биты Long.
* Для START (1) group/peer также ненулевые; прочие действия используют id.
* true — копия команды принята очередью живого uasync; результат сигналинга приходит событием 65
* (id/group/peer:8LE + phase/reason/incoming:1). false — отказ с native-логом; restart отменяет старые запросы. */
fun radioCall(id: Long, action: Int, group: Long = 0, peer: Long = 0): Boolean = nativeRadioCall(id, group, peer, action)
private external fun nativeRadioCall(id: Long, group: Long, peer: Long, action: Int): Boolean
@@ -57,7 +57,7 @@ object RadioCallController {
/** На main: занят также между принятым START и первым событием; ENDED-карточка не удерживает активность. */
fun busy(): Boolean = pendingStart != null || _state.value?.phase?.let { it != RadioCallPhase.ENDED } == true
/** На main запросить START ненулевым участнику/каналу. Резерв busy снимает первое событие либо reset/отказ очереди. */
/** На main запросить START с ненулевыми ID канала и участника. Busy снимает первое событие либо reset/отказ очереди. */
fun start(channel: String, peer: Long) {
checkMain()
if (!ready || !NativeLib.isReady() || busy() || CallController.state.value?.ongoing == true) {