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