diff --git a/tools/chatgui-android/router-tests/src/main/kotlin/com/utun/chat/data/RouterHostEnvironment.kt b/tools/chatgui-android/router-tests/src/main/kotlin/com/utun/chat/data/RouterHostEnvironment.kt index 3f02242c..70aacd02 100644 --- a/tools/chatgui-android/router-tests/src/main/kotlin/com/utun/chat/data/RouterHostEnvironment.kt +++ b/tools/chatgui-android/router-tests/src/main/kotlin/com/utun/chat/data/RouterHostEnvironment.kt @@ -34,6 +34,29 @@ object LogManager { /** Только host-тест: считает уведомления standby, не загружает JNI и не запускает ядро. */ object NativeLib { + data class RadioCommand(val kind: String, val group: Long) + val radioCommands: MutableList = Collections.synchronizedList(mutableListOf()) + @Volatile var radioRequest = 0L + @Volatile private var radioGroup = 0L + @Volatile private var radioMode = 0 + @Volatile private var radioTx = false + fun radioSetActive(group: Long, active: Boolean) { radioCommands.add(RadioCommand("active=$active", group)) } + fun radioConfigure(request: Long, settings: RadioAutoSettings): Boolean { radioRequest = request; return settings.valid() } + fun radioAudioStart(group: Long, channels: Int): Boolean { + radioGroup = group; radioCommands.add(RadioCommand("audio start", group)); return true + } + fun radioAudioStop() { radioTx = false; radioCommands.add(RadioCommand("audio stop", radioGroup)) } + fun radioAudioPull(group: Long, out: ShortArray, playedFrames: Long): Int = 0 + fun radioAudioFeed(group: Long, samples: ShortArray): Boolean = group == radioGroup + fun radioCaptureStart(group: Long, channels: Int, mode: Int): Boolean { + radioMode = mode; radioCommands.add(RadioCommand("capture start", group)); return true + } + fun radioCaptureStop() { radioTx = false; radioCommands.add(RadioCommand("capture stop", radioGroup)) } + fun radioCaptureDiscontinuity(group: Long) { radioCommands.add(RadioCommand("boundary", group)) } + fun radioAutoMode() = radioMode + fun radioTransmitting() = radioTx + fun radioTalkBegin(group: Long) { radioTx = true; radioCommands.add(RadioCommand("begin", group)) } + fun radioTalkEnd(group: Long) { radioTx = false; radioCommands.add(RadioCommand("end", group)) } data class LocalInvite(val peer: Long, val request: Long, val link: String) val localInvites = mutableListOf() var sendLocal: (LocalInvite) -> Boolean = { true } @@ -84,6 +107,8 @@ object NativeLib { /** Управляемая подготовка конфига: тест удерживает реальный worker, считает перекрытия и затем дожидается его завершения. */ class HostConfigProvider { + var radioSettings = RadioAutoSettings() + fun getRadioAutoSettings() = radioSettings var mediaProfile = MediaAudioProfile.AUTO var failMediaRead = false var failMediaWrite = false