diff options
author | Oliver Smith <osmith@sysmocom.de> | 2023-04-19 14:06:44 +0200 |
---|---|---|
committer | Oliver Smith <osmith@sysmocom.de> | 2023-04-20 11:02:31 +0200 |
commit | 712343c3210825f26c48f789069c08376a07d34d (patch) | |
tree | c1d8ce659e2aba338d2101429ab06aba378da96a | |
parent | d128791919b5a19d4bd12b63b0962b6196bb23a8 (diff) |
CSD: support non-transparent data rates
Implement gsm0808_data_rate_non_transp_to_gsm0408.
Related: OS#4393
Change-Id: Ib5f4bdf17a9833f65a0b623a033da838a2594d68
-rw-r--r-- | src/osmo-bsc/data_rate_pref.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/src/osmo-bsc/data_rate_pref.c b/src/osmo-bsc/data_rate_pref.c index 443fea72d..44a733fb2 100644 --- a/src/osmo-bsc/data_rate_pref.c +++ b/src/osmo-bsc/data_rate_pref.c @@ -72,10 +72,23 @@ static int gsm0808_data_rate_transp_to_gsm0408(enum gsm0808_data_rate_transp rat } } -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_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) @@ -142,7 +155,7 @@ int match_data_rate_pref(struct channel_mode_and_rate *ch_mode_rate, 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; |