aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Smith <osmith@sysmocom.de>2023-04-19 14:06:44 +0200
committerOliver Smith <osmith@sysmocom.de>2023-04-20 11:02:31 +0200
commit712343c3210825f26c48f789069c08376a07d34d (patch)
treec1d8ce659e2aba338d2101429ab06aba378da96a
parentd128791919b5a19d4bd12b63b0962b6196bb23a8 (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.c21
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;