aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax <msuraev@sysmocom.de>2016-06-23 17:59:51 +0200
committerHarald Welte <laforge@gnumonks.org>2016-06-23 20:01:02 +0000
commitc03d3ae7af27edc035316f9d21aab5437f934b07 (patch)
tree8c5d9f2629b8a7c7eb766a6a270779973766b0d6
parent5c0d88e69d16426d8e7af5bf4b7866aa33132064 (diff)
DTXu: move copy-pasted code to common part
Abstract code for checking/setting lchan's UL SID flag and RTP Marker into generic function and use it for LC15 and sysmoBTS. Change-Id: Ica5392e92bab29164711163e7b01adb174272883 Related: OS#1750
-rw-r--r--include/osmo-bts/msg_utils.h1
-rw-r--r--src/common/msg_utils.c11
-rw-r--r--src/osmo-bts-litecell15/tch.c22
-rw-r--r--src/osmo-bts-sysmo/tch.c22
4 files changed, 20 insertions, 36 deletions
diff --git a/include/osmo-bts/msg_utils.h b/include/osmo-bts/msg_utils.h
index 73f8c96..591d194 100644
--- a/include/osmo-bts/msg_utils.h
+++ b/include/osmo-bts/msg_utils.h
@@ -20,6 +20,7 @@ enum {
OML_MSG_TYPE_OSMO,
};
+void lchan_set_marker(bool t, struct gsm_lchan *lchan);
void save_last_sid(struct gsm_lchan *lchan, uint8_t *l1_payload, size_t length,
uint32_t fn, bool update);
bool dtx_sched_optional(struct gsm_lchan *lchan, uint32_t fn);
diff --git a/src/common/msg_utils.c b/src/common/msg_utils.c
index 6f42f73..4c0a2cc 100644
--- a/src/common/msg_utils.c
+++ b/src/common/msg_utils.c
@@ -86,6 +86,17 @@ static int check_manuf(struct msgb *msg, struct abis_om_hdr *omh, size_t msg_siz
return type;
}
+/* update lchan SID status */
+void lchan_set_marker(bool t, struct gsm_lchan *lchan)
+{
+ if (t)
+ lchan->tch.ul_sid = true;
+ else if (lchan->tch.ul_sid) {
+ lchan->tch.ul_sid = false;
+ lchan->rtp_tx_marker = true;
+ }
+}
+
/* store the last SID frame in lchan context */
void save_last_sid(struct gsm_lchan *lchan, uint8_t *l1_payload, size_t length,
uint32_t fn, bool update)
diff --git a/src/osmo-bts-litecell15/tch.c b/src/osmo-bts-litecell15/tch.c
index ec43c10..b061fe9 100644
--- a/src/osmo-bts-litecell15/tch.c
+++ b/src/osmo-bts-litecell15/tch.c
@@ -108,12 +108,7 @@ static struct msgb *l1_to_rtppayload_fr(uint8_t *l1_payload, uint8_t payload_len
cur = msgb_put(msg, GSM_FR_BYTES);
memcpy(cur, l1_payload, GSM_FR_BYTES);
- if (osmo_fr_check_sid(l1_payload, payload_len))
- lchan->tch.ul_sid = true;
- else if (lchan->tch.ul_sid) {
- lchan->tch.ul_sid = false;
- lchan->rtp_tx_marker = true;
- }
+ lchan_set_marker(osmo_fr_check_sid(l1_payload, payload_len), lchan);
return msg;
}
@@ -151,12 +146,8 @@ static struct msgb *l1_to_rtppayload_efr(uint8_t *l1_payload,
uint8_t cmr;
int8_t sti, cmi;
osmo_amr_rtp_dec(l1_payload, payload_len, &cmr, &cmi, &ft, &bfi, &sti);
- if (ft == AMR_GSM_EFR_SID)
- lchan->tch.ul_sid = true;
- else if (lchan->tch.ul_sid) {
- lchan->tch.ul_sid = false;
- lchan->rtp_tx_marker = true;
- }
+ lchan_set_marker(ft == AMR_GSM_EFR_SID, lchan);
+
return msg;
}
@@ -187,12 +178,7 @@ static struct msgb *l1_to_rtppayload_hr(uint8_t *l1_payload, uint8_t payload_len
cur = msgb_put(msg, GSM_HR_BYTES);
memcpy(cur, l1_payload, GSM_HR_BYTES);
- if (osmo_hr_check_sid(l1_payload, payload_len))
- lchan->tch.ul_sid = true;
- else if (lchan->tch.ul_sid) {
- lchan->tch.ul_sid = false;
- lchan->rtp_tx_marker = true;
- }
+ lchan_set_marker(osmo_hr_check_sid(l1_payload, payload_len), lchan);
return msg;
}
diff --git a/src/osmo-bts-sysmo/tch.c b/src/osmo-bts-sysmo/tch.c
index 17469f0..527f9e1 100644
--- a/src/osmo-bts-sysmo/tch.c
+++ b/src/osmo-bts-sysmo/tch.c
@@ -118,12 +118,7 @@ static struct msgb *l1_to_rtppayload_fr(uint8_t *l1_payload, uint8_t payload_len
cur[0] |= 0xD0;
#endif /* USE_L1_RTP_MODE */
- if (osmo_fr_check_sid(l1_payload, payload_len))
- lchan->tch.ul_sid = true;
- else if (lchan->tch.ul_sid) {
- lchan->tch.ul_sid = false;
- lchan->rtp_tx_marker = true;
- }
+ lchan_set_marker(osmo_fr_check_sid(l1_payload, payload_len), lchan);
return msg;
}
@@ -182,12 +177,8 @@ static struct msgb *l1_to_rtppayload_efr(uint8_t *l1_payload,
uint8_t cmr;
int8_t sti, cmi;
osmo_amr_rtp_dec(l1_payload, payload_len, &cmr, &cmi, &ft, &bfi, &sti);
- if (ft == AMR_GSM_EFR_SID)
- lchan->tch.ul_sid = true;
- else if (lchan->tch.ul_sid) {
- lchan->tch.ul_sid = false;
- lchan->rtp_tx_marker = true;
- }
+ lchan_set_marker(ft == AMR_GSM_EFR_SID, lchan);
+
return msg;
}
@@ -230,12 +221,7 @@ static struct msgb *l1_to_rtppayload_hr(uint8_t *l1_payload, uint8_t payload_len
osmo_revbytebits_buf(cur, GSM_HR_BYTES);
#endif /* USE_L1_RTP_MODE */
- if (osmo_hr_check_sid(l1_payload, payload_len))
- lchan->tch.ul_sid = true;
- else if (lchan->tch.ul_sid) {
- lchan->tch.ul_sid = false;
- lchan->rtp_tx_marker = true;
- }
+ lchan_set_marker(osmo_hr_check_sid(l1_payload, payload_len), lchan);
return msg;
}