fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/30397 )
Change subject: mobile: add missing TCH MNCC messages and handle them ......................................................................
mobile: add missing TCH MNCC messages and handle them
Change-Id: I28a1ae1ed504748c33c64c86ca7d57a94c7c7c6d Related: OS#5599 --- M src/host/layer23/include/osmocom/bb/mobile/mncc.h M src/host/layer23/src/mobile/gsm48_cc.c M src/host/layer23/src/mobile/mncc_sock.c M src/host/layer23/src/mobile/voice.c 4 files changed, 24 insertions(+), 7 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/97/30397/1
diff --git a/src/host/layer23/include/osmocom/bb/mobile/mncc.h b/src/host/layer23/include/osmocom/bb/mobile/mncc.h index c373412..ebc58a5 100644 --- a/src/host/layer23/include/osmocom/bb/mobile/mncc.h +++ b/src/host/layer23/include/osmocom/bb/mobile/mncc.h @@ -104,6 +104,9 @@
#define GSM_TCHF_FRAME 0x0300 #define GSM_TCHF_FRAME_EFR 0x0301 +#define GSM_TCHH_FRAME 0x0302 +#define GSM_TCH_FRAME_AMR 0x0303 +#define GSM_BAD_FRAME 0x03ff
#define GSM_MAX_FACILITY 128 #define GSM_MAX_SSVERSION 128 diff --git a/src/host/layer23/src/mobile/gsm48_cc.c b/src/host/layer23/src/mobile/gsm48_cc.c index 503c9fd..1be53ba 100644 --- a/src/host/layer23/src/mobile/gsm48_cc.c +++ b/src/host/layer23/src/mobile/gsm48_cc.c @@ -1966,6 +1966,10 @@
switch (msg_type) { case GSM_TCHF_FRAME: + case GSM_TCHF_FRAME_EFR: + case GSM_TCHH_FRAME: + case GSM_TCH_FRAME_AMR: + case GSM_BAD_FRAME: return gsm_send_voice_frame(ms, arg); case MNCC_LCHAN_MODIFY: return 0; diff --git a/src/host/layer23/src/mobile/mncc_sock.c b/src/host/layer23/src/mobile/mncc_sock.c index 856b2c5..9f9858a 100644 --- a/src/host/layer23/src/mobile/mncc_sock.c +++ b/src/host/layer23/src/mobile/mncc_sock.c @@ -48,9 +48,15 @@ if (state->conn_bfd.fd < 0) { LOGP(DMNCC, LOGL_ERROR, "mncc_sock receives %s for external CC app " "but socket is gone\n", get_mncc_name(msg_type)); - if (msg_type != GSM_TCHF_FRAME - && msg_type != GSM_TCHF_FRAME_EFR - && msg_type != MNCC_REL_IND) { + switch (msg_type) { + case MNCC_REL_IND: + case GSM_TCHF_FRAME: + case GSM_TCHF_FRAME_EFR: + case GSM_TCHH_FRAME: + case GSM_TCH_FRAME_AMR: + case GSM_BAD_FRAME: + break; + default: /* release the request */ struct gsm_mncc mncc_out; memset(&mncc_out, 0, sizeof(mncc_out)); diff --git a/src/host/layer23/src/mobile/voice.c b/src/host/layer23/src/mobile/voice.c index 4b5f792..1159fbb 100644 --- a/src/host/layer23/src/mobile/voice.c +++ b/src/host/layer23/src/mobile/voice.c @@ -82,14 +82,18 @@ struct msgb *nmsg; int len;
- switch (ms->rrlayer.cd_now.mode) { - case GSM48_CMODE_SPEECH_V1: - /* FIXME: FR only, check for TCH/F (FR) and TCH/H (HR) */ + switch (frame->msg_type) { + case GSM_TCHF_FRAME: len = GSM_FR_BYTES; break; - case GSM48_CMODE_SPEECH_EFR: + case GSM_TCHF_FRAME_EFR: len = GSM_EFR_BYTES; break; + case GSM_TCHH_FRAME: + len = GSM_HR_BYTES; + break; + /* TODO: case GSM_TCH_FRAME_AMR (variable length) */ + /* TODO: case GSM_BAD_FRAME (empty?) */ default: LOGP(DL1C, LOGL_ERROR, "%s(): msg_type=0x%02x: not implemented\n", __func__, frame->msg_type);