[MERGED] osmo-bts[master]: DTX: add support for AMR/HR

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Sat Jun 18 11:34:51 UTC 2016


Harald Welte has submitted this change and it was merged.

Change subject: DTX: add support for AMR/HR
......................................................................


DTX: add support for AMR/HR

Change-Id: Id744b67904011eb328b24c46a645b3eb53525c04
Fixes: OS#1562
---
M src/osmo-bts-litecell15/tch.c
M src/osmo-bts-sysmo/tch.c
2 files changed, 70 insertions(+), 2 deletions(-)

Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified



diff --git a/src/osmo-bts-litecell15/tch.c b/src/osmo-bts-litecell15/tch.c
index e92c57b..add7951 100644
--- a/src/osmo-bts-litecell15/tch.c
+++ b/src/osmo-bts-litecell15/tch.c
@@ -431,7 +431,7 @@
 	GsmL1_PhDataInd_t *data_ind = &l1p->u.phDataInd;
 	uint8_t payload_type = data_ind->msgUnitParam.u8Buffer[0];
 	uint8_t *payload = data_ind->msgUnitParam.u8Buffer + 1;
-	uint8_t payload_len;
+	uint8_t payload_len, sid_first[7] = {0};
 	struct msgb *rmsg = NULL;
 	struct gsm_lchan *lchan = &trx->ts[L1SAP_CHAN2TS(chan_nr)].lchan[l1sap_chan2ss(chan_nr)];
 
@@ -469,6 +469,32 @@
 		   frame and drop last SID */
 		lchan->rtp_tx_marker = true;
 		break;
+	case GsmL1_TchPlType_Amr_SidFirstP1:
+		if (lchan->type != GSM_LCHAN_TCH_H)
+			goto err_payload_match;
+		LOGP(DL1C, LOGL_DEBUG, "DTX: received SID_FIRST_P1 from L1 "
+		     "(%d bytes)\n", payload_len);
+		break;
+	case GsmL1_TchPlType_Amr_SidFirstP2:
+		if (lchan->type != GSM_LCHAN_TCH_H)
+			goto err_payload_match;
+		LOGP(DL1C, LOGL_DEBUG, "DTX: received SID_FIRST_P2 from L1 "
+		     "(%d bytes)\n", payload_len);
+		break;
+	case GsmL1_TchPlType_Amr_SidFirstInH:
+		if (lchan->type != GSM_LCHAN_TCH_H)
+			goto err_payload_match;
+		lchan->rtp_tx_marker = true;
+		LOGP(DL1C, LOGL_DEBUG, "DTX: received SID_FIRST_INH from L1 "
+		     "(%d bytes)\n", payload_len);
+		break;
+	case GsmL1_TchPlType_Amr_SidUpdateInH:
+		if (lchan->type != GSM_LCHAN_TCH_H)
+			goto err_payload_match;
+		lchan->rtp_tx_marker = true;
+		LOGP(DL1C, LOGL_DEBUG, "DTX: received SID_UPDATE_INH from L1 "
+		     "(%d bytes)\n", payload_len);
+		break;
 	default:
 		LOGP(DL1C, LOGL_NOTICE, "%s Rx Payload Type %s is unsupported\n",
 			gsm_lchan_name(lchan),
@@ -490,6 +516,14 @@
 	case GsmL1_TchPlType_Amr:
 		rmsg = l1_to_rtppayload_amr(payload, payload_len, lchan);
 		break;
+	case GsmL1_TchPlType_Amr_SidFirstP2:
+		/* L1 do not give us SID_FIRST data, just indication */
+		memcpy(sid_first, payload, payload_len);
+		int len = osmo_amr_rtp_enc(sid_first, 0, AMR_SID, AMR_GOOD);
+		if (len < 0)
+			return 0;
+		rmsg = l1_to_rtppayload_amr(sid_first, len, lchan);
+		break;
 	}
 
 	if (rmsg) {
diff --git a/src/osmo-bts-sysmo/tch.c b/src/osmo-bts-sysmo/tch.c
index a391fcc..e027408 100644
--- a/src/osmo-bts-sysmo/tch.c
+++ b/src/osmo-bts-sysmo/tch.c
@@ -523,7 +523,7 @@
 	GsmL1_PhDataInd_t *data_ind = &l1p->u.phDataInd;
 	uint8_t payload_type = data_ind->msgUnitParam.u8Buffer[0];
 	uint8_t *payload = data_ind->msgUnitParam.u8Buffer + 1;
-	uint8_t payload_len;
+	uint8_t payload_len, sid_first[7] = {0};
 	struct msgb *rmsg = NULL;
 	struct gsm_lchan *lchan = &trx->ts[L1SAP_CHAN2TS(chan_nr)].lchan[l1sap_chan2ss(chan_nr)];
 
@@ -563,6 +563,32 @@
 		   frame and drop last SID */
 		lchan->rtp_tx_marker = true;
 		break;
+	case GsmL1_TchPlType_Amr_SidFirstP1:
+		if (lchan->type != GSM_LCHAN_TCH_H)
+			goto err_payload_match;
+		LOGP(DL1C, LOGL_DEBUG, "DTX: received SID_FIRST_P1 from L1 "
+		     "(%d bytes)\n", payload_len);
+		break;
+	case GsmL1_TchPlType_Amr_SidFirstP2:
+		if (lchan->type != GSM_LCHAN_TCH_H)
+			goto err_payload_match;
+		LOGP(DL1C, LOGL_DEBUG, "DTX: received SID_FIRST_P2 from L1 "
+		     "(%d bytes)\n", payload_len);
+		break;
+	case GsmL1_TchPlType_Amr_SidFirstInH:
+		if (lchan->type != GSM_LCHAN_TCH_H)
+			goto err_payload_match;
+		lchan->rtp_tx_marker = true;
+		LOGP(DL1C, LOGL_DEBUG, "DTX: received SID_FIRST_INH from L1 "
+		     "(%d bytes)\n", payload_len);
+		break;
+	case GsmL1_TchPlType_Amr_SidUpdateInH:
+		if (lchan->type != GSM_LCHAN_TCH_H)
+			goto err_payload_match;
+		lchan->rtp_tx_marker = true;
+		LOGP(DL1C, LOGL_DEBUG, "DTX: received SID_UPDATE_INH from L1 "
+		     "(%d bytes)\n", payload_len);
+		break;
 	default:
 		LOGP(DL1C, LOGL_NOTICE, "%s Rx Payload Type %s is unsupported\n",
 			gsm_lchan_name(lchan),
@@ -586,6 +612,14 @@
 	case GsmL1_TchPlType_Amr:
 		rmsg = l1_to_rtppayload_amr(payload, payload_len, lchan);
 		break;
+	case GsmL1_TchPlType_Amr_SidFirstP2:
+		/* L1 do not give us SID_FIRST data, just indication */
+		memcpy(sid_first, payload, payload_len);
+		int len = osmo_amr_rtp_enc(sid_first, 0, AMR_SID, AMR_GOOD);
+		if (len < 0)
+			return 0;
+		rmsg = l1_to_rtppayload_amr(sid_first, len, lchan);
+		break;
 	}
 
 	if (rmsg) {

-- 
To view, visit https://gerrit.osmocom.org/324
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Id744b67904011eb328b24c46a645b3eb53525c04
Gerrit-PatchSet: 2
Gerrit-Project: osmo-bts
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder



More information about the gerrit-log mailing list