fixeria has uploaded this change for review.

View Change

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);

To view, visit change 30397. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I28a1ae1ed504748c33c64c86ca7d57a94c7c7c6d
Gerrit-Change-Number: 30397
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de>
Gerrit-MessageType: newchange