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:

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

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: Ib5f4bdf17a9833f65a0b623a033da838a2594d68
Gerrit-Change-Number: 32369
Gerrit-PatchSet: 1
Gerrit-Owner: osmith <[email protected]>
Gerrit-MessageType: newchange

Reply via email to