From 3622522664445d5c06e33ef1122c0960f1ff7df3 Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Tue, 3 Mar 2020 17:17:06 +0100 Subject: mobile: implement 'loopback' TCH frame I/O handler Use newly added audio / loopback config vty node to provide audio loopback from mobile app. Only FR is supported for now. Change-Id: Icd0b8d00c855db1a6ff5e35e10c8ff67b7ad5c83 --- src/host/layer23/src/mobile/voice.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/host/layer23/src/mobile/voice.c b/src/host/layer23/src/mobile/voice.c index 5106063e..4aae8aaa 100644 --- a/src/host/layer23/src/mobile/voice.c +++ b/src/host/layer23/src/mobile/voice.c @@ -36,18 +36,33 @@ static int gsm_recv_voice(struct osmocom_ms *ms, struct msgb *msg) { struct gsm_data_frame *mncc; + /* Drop the l1ctl_info_dl header */ + msgb_pull_to_l2(msg); + /* push mncc header in front of data */ + mncc = (struct gsm_data_frame *) + msgb_push(msg, sizeof(struct gsm_data_frame)); + mncc->callref = ms->mncc_entity.ref; + + /* FIXME: FR only! */ + switch (ms->rrlayer.cd_now.mode) { + case GSM48_CMODE_SPEECH_V1: + mncc->msg_type = GSM_TCHF_FRAME; + break; + default: + /* TODO: print error message here */ + goto exit_free; + } + + /* send voice frame back, if appropriate */ + if (ms->settings.audio.io_handler == AUDIO_IOH_LOOPBACK) + gsm_send_voice(ms, mncc); + /* distribute and then free */ if (ms->mncc_entity.mncc_recv && ms->mncc_entity.ref) { - /* Drop the l1ctl_info_dl header */ - msgb_pull_to_l2(msg); - /* push mncc header in front of data */ - mncc = (struct gsm_data_frame *) - msgb_push(msg, sizeof(struct gsm_data_frame)); - mncc->msg_type = GSM_TCHF_FRAME; - mncc->callref = ms->mncc_entity.ref; ms->mncc_entity.mncc_recv(ms, mncc->msg_type, mncc); } +exit_free: msgb_free(msg); return 0; } -- cgit v1.2.3