fixeria has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmocore/+/32026 )


Change subject: gsm0808: handle new enum gsm48_chan_mode speech/data values
......................................................................

gsm0808: handle new enum gsm48_chan_mode speech/data values

Change-Id: I87d977228b1e039c2876941d1c6df1f69d1a54d4
Related: OS#1572
---
M include/osmocom/gsm/gsm0808_utils.h
1 file changed, 66 insertions(+), 28 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/26/32026/1

diff --git a/include/osmocom/gsm/gsm0808_utils.h 
b/include/osmocom/gsm/gsm0808_utils.h
index 18f3ebe..85244a5 100644
--- a/include/osmocom/gsm/gsm0808_utils.h
+++ b/include/osmocom/gsm/gsm0808_utils.h
@@ -188,37 +188,34 @@
 static inline enum gsm0808_permitted_speech gsm0808_permitted_speech(enum 
gsm_chan_t type,
                                                                     enum 
gsm48_chan_mode mode)
 {
-       switch (mode) {
-       case GSM48_CMODE_SPEECH_V1:
-               switch (type) {
-               case GSM_LCHAN_TCH_F:
-                       return GSM0808_PERM_FR1;
-               case GSM_LCHAN_TCH_H:
-                       return GSM0808_PERM_HR1;
-               default:
-                       return 0;
-               }
-       case GSM48_CMODE_SPEECH_EFR:
-               switch (type) {
-               case GSM_LCHAN_TCH_F:
-                       return GSM0808_PERM_FR2;
-               case GSM_LCHAN_TCH_H:
-                       return GSM0808_PERM_HR2;
-               default:
-                       return 0;
-               }
-       case GSM48_CMODE_SPEECH_AMR:
-               switch (type) {
-               case GSM_LCHAN_TCH_F:
-                       return GSM0808_PERM_FR3;
-               case GSM_LCHAN_TCH_H:
-                       return GSM0808_PERM_HR3;
-               default:
-                       return 0;
-               }
+#define MODE_TYPE(mode, type) ((mode << 16) | type)
+
+       switch (MODE_TYPE(mode, type)) {
+       case MODE_TYPE(GSM48_CMODE_SPEECH_V1, GSM_LCHAN_TCH_F):
+               return GSM0808_PERM_FR1;
+       case MODE_TYPE(GSM48_CMODE_SPEECH_V1, GSM_LCHAN_TCH_H):
+               return GSM0808_PERM_HR1;
+       case MODE_TYPE(GSM48_CMODE_SPEECH_EFR, GSM_LCHAN_TCH_F):
+               return GSM0808_PERM_FR2;
+       case MODE_TYPE(GSM48_CMODE_SPEECH_EFR, GSM_LCHAN_TCH_H):
+               return GSM0808_PERM_HR2; /* (deprecated) */
+       case MODE_TYPE(GSM48_CMODE_SPEECH_AMR, GSM_LCHAN_TCH_F):
+               return GSM0808_PERM_FR3;
+       case MODE_TYPE(GSM48_CMODE_SPEECH_AMR, GSM_LCHAN_TCH_H):
+               return GSM0808_PERM_HR3;
+       case MODE_TYPE(GSM48_CMODE_SPEECH_V4, GSM_LCHAN_TCH_F):
+               return GSM0808_PERM_FR4;
+       case MODE_TYPE(GSM48_CMODE_SPEECH_V4, GSM_LCHAN_TCH_H):
+               return GSM0808_PERM_HR4;
+       case MODE_TYPE(GSM48_CMODE_SPEECH_V5, GSM_LCHAN_TCH_F):
+               return GSM0808_PERM_FR5; /* FR only */
+       case MODE_TYPE(GSM48_CMODE_SPEECH_V6, GSM_LCHAN_TCH_H):
+               return GSM0808_PERM_HR6; /* HR only */
        default:
                return 0;
        }
+
+#undef MODE_TYPE
 }

 /*! Return 3GPP TS 48.008 3.2.2.33 Chosen Channel. */
@@ -230,6 +227,9 @@
        case GSM48_CMODE_SPEECH_V1:
        case GSM48_CMODE_SPEECH_EFR:
        case GSM48_CMODE_SPEECH_AMR:
+       case GSM48_CMODE_SPEECH_V4:
+       case GSM48_CMODE_SPEECH_V5:
+       case GSM48_CMODE_SPEECH_V6:
                channel_mode = 0x9;
                break;
        case GSM48_CMODE_SIGN:
@@ -247,6 +247,33 @@
        case GSM48_CMODE_DATA_3k6:
                channel_mode = 0xd;
                break;
+       case GSM48_CMODE_DATA_29k0:
+               channel_mode = 0x1;
+               break;
+       case GSM48_CMODE_DATA_32k0:
+               channel_mode = 0x2;
+               break;
+       case GSM48_CMODE_DATA_43k5:
+               channel_mode = 0x3;
+               break;
+       case GSM48_CMODE_DATA_43k5_14k5:
+               channel_mode = 0x4;
+               break;
+       case GSM48_CMODE_DATA_29k0_14k5:
+               channel_mode = 0x5;
+               break;
+       case GSM48_CMODE_DATA_43k5_29k0:
+               channel_mode = 0x6;
+               break;
+       case GSM48_CMODE_DATA_14k5_43k5:
+               channel_mode = 0x7;
+               break;
+       case GSM48_CMODE_DATA_14k5_29k0:
+               channel_mode = 0xa;
+               break;
+       case GSM48_CMODE_DATA_29k0_43k5:
+               channel_mode = 0xf;
+               break;
        default:
                return 0;
        }
@@ -264,6 +291,7 @@
        case GSM_LCHAN_TCH_H:
                channel = 0x9;
                break;
+       /* TODO: more than 1 TCHs? */
        default:
                return 0;
        }

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/32026
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I87d977228b1e039c2876941d1c6df1f69d1a54d4
Gerrit-Change-Number: 32026
Gerrit-PatchSet: 1
Gerrit-Owner: fixeria <[email protected]>
Gerrit-MessageType: newchange

Reply via email to