osmith has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-bsc/+/32369 )
Change subject: CSD: support non-transparent data rates ......................................................................
CSD: support non-transparent data rates
Implement gsm0808_data_rate_non_transp_to_gsm0408 and add GSM48_CMODE_DATA_43k5 to all related switch statements, as it can be returned from gsm0808_data_rate_non_transp_to_gsm0408. All other GSM48_CMODE_DATA_* are already in the switch statements.
Related: OS#4393 Change-Id: Ib5f4bdf17a9833f65a0b623a033da838a2594d68 --- M src/osmo-bsc/abis_rsl.c M src/osmo-bsc/assignment_fsm.c M src/osmo-bsc/data_rate_pref.c M src/osmo-bsc/gsm_data.c M src/osmo-bsc/lchan_rtp_fsm.c M src/osmo-bsc/lchan_select.c 6 files changed, 43 insertions(+), 4 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/69/32369/1
diff --git a/src/osmo-bsc/abis_rsl.c b/src/osmo-bsc/abis_rsl.c index 37f0e81..c2b3bd9 100644 --- a/src/osmo-bsc/abis_rsl.c +++ b/src/osmo-bsc/abis_rsl.c @@ -456,6 +456,7 @@ case GSM48_CMODE_SPEECH_AMR: cm->chan_rate = RSL_CMOD_SP_GSM3; break; + case GSM48_CMODE_DATA_43k5: case GSM48_CMODE_DATA_32k0: case GSM48_CMODE_DATA_29k0: case GSM48_CMODE_DATA_14k5: @@ -2697,6 +2698,7 @@ int ipacc_payload_type(enum gsm48_chan_mode tch_mode, enum gsm_chan_t type) { switch (gsm48_chan_mode_to_non_vamos(tch_mode)) { + case GSM48_CMODE_DATA_43k5: case GSM48_CMODE_DATA_32k0: case GSM48_CMODE_DATA_29k0: case GSM48_CMODE_DATA_14k5: diff --git a/src/osmo-bsc/assignment_fsm.c b/src/osmo-bsc/assignment_fsm.c index b631767..1cb96e5 100644 --- a/src/osmo-bsc/assignment_fsm.c +++ b/src/osmo-bsc/assignment_fsm.c @@ -363,6 +363,7 @@ case GSM48_CMODE_DATA_14k5: case GSM48_CMODE_DATA_29k0: case GSM48_CMODE_DATA_32k0: + case GSM48_CMODE_DATA_43k5: case GSM48_CMODE_SPEECH_EFR: /* these services all explicitly require a TCH/F */ return type == GSM_LCHAN_TCH_F; @@ -380,6 +381,7 @@ static int chan_mode_to_ch_indctr(enum gsm48_chan_mode chan_mode) { switch (gsm48_chan_mode_to_non_vamos(chan_mode)) { + case GSM48_CMODE_DATA_43k5: case GSM48_CMODE_DATA_32k0: case GSM48_CMODE_DATA_29k0: case GSM48_CMODE_DATA_14k5: diff --git a/src/osmo-bsc/data_rate_pref.c b/src/osmo-bsc/data_rate_pref.c index 2c98169..977c53c 100644 --- a/src/osmo-bsc/data_rate_pref.c +++ b/src/osmo-bsc/data_rate_pref.c @@ -76,10 +76,27 @@ } }
-static int gsm0808_data_rate_non_transp_to_gsm0408(enum gsm0808_data_rate_non_transp rate) +static int gsm0808_data_rate_non_transp_to_gsm0408(enum gsm0808_data_rate_non_transp rate, bool full_rate) { - LOGP(DMSC, LOGL_ERROR, "%s is not implemented\n", __func__); /* FIXME */ - return -1; + switch (rate) { + case GSM0808_DATA_RATE_NON_TRANSP_12000_6000: + if (full_rate) + return GSM48_CMODE_DATA_12k0; + return GSM48_CMODE_DATA_6k0; + case GSM0808_DATA_RATE_NON_TRANSP_43k5: + return GSM48_CMODE_DATA_43k5; + case GSM0808_DATA_RATE_NON_TRANSP_29k0: + return GSM48_CMODE_DATA_29k0; + case GSM0808_DATA_RATE_NON_TRANSP_14k5: + return GSM48_CMODE_DATA_14k5; + case GSM0808_DATA_RATE_NON_TRANSP_12k0: + return GSM48_CMODE_DATA_12k0; + case GSM0808_DATA_RATE_NON_TRANSP_6k0: + return GSM48_CMODE_DATA_6k0; + default: + LOGP(DMSC, LOGL_ERROR, "Unsupported non-transparent data rate 0x%x\n", rate); + return -1; + } }
static int gsm0808_data_rate_non_transp_to_gsm0858(enum gsm0808_data_rate_non_transp rate, bool full_rate) @@ -146,7 +163,7 @@ return -1; ch_mode_rate->data_rate.nt = rc;
- rc = gsm0808_data_rate_non_transp_to_gsm0408(ct->data_rate); + rc = gsm0808_data_rate_non_transp_to_gsm0408(ct->data_rate, full_rate); if (rc == -1) return -1; ch_mode_rate->chan_mode = rc; diff --git a/src/osmo-bsc/gsm_data.c b/src/osmo-bsc/gsm_data.c index 1e132f4..fc3148c 100644 --- a/src/osmo-bsc/gsm_data.c +++ b/src/osmo-bsc/gsm_data.c @@ -1034,6 +1034,7 @@ case GSM48_CMODE_SPEECH_EFR: case GSM48_CMODE_SPEECH_AMR: return RSL_CMOD_SPD_SPEECH; + case GSM48_CMODE_DATA_43k5: case GSM48_CMODE_DATA_32k0: case GSM48_CMODE_DATA_29k0: case GSM48_CMODE_DATA_14k5: diff --git a/src/osmo-bsc/lchan_rtp_fsm.c b/src/osmo-bsc/lchan_rtp_fsm.c index 8b6faad..fa398bf 100644 --- a/src/osmo-bsc/lchan_rtp_fsm.c +++ b/src/osmo-bsc/lchan_rtp_fsm.c @@ -871,6 +871,7 @@ static enum mgcp_codecs chan_mode_to_mgcp_codec(enum gsm48_chan_mode chan_mode, bool full_rate) { switch (gsm48_chan_mode_to_non_vamos(chan_mode)) { + case GSM48_CMODE_DATA_43k5: case GSM48_CMODE_DATA_32k0: case GSM48_CMODE_DATA_29k0: case GSM48_CMODE_DATA_14k5: diff --git a/src/osmo-bsc/lchan_select.c b/src/osmo-bsc/lchan_select.c index 9e0da86..8b9b81a 100644 --- a/src/osmo-bsc/lchan_select.c +++ b/src/osmo-bsc/lchan_select.c @@ -184,6 +184,7 @@ /* fall through */ case GSM48_CMODE_SPEECH_V1: case GSM48_CMODE_SPEECH_AMR: + case GSM48_CMODE_DATA_43k5: case GSM48_CMODE_DATA_32k0: case GSM48_CMODE_DATA_29k0: case GSM48_CMODE_DATA_14k5: