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.orgHarald 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