aboutsummaryrefslogtreecommitdiffstats
path: root/src/rlc.cpp
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2015-12-28 13:51:44 +0100
committerJacob Erlbeck <jerlbeck@sysmocom.de>2016-02-01 13:58:12 +0100
commit8f8197f3fde1bafa1d720d9f685288eb4cd36e23 (patch)
treef62d6d59fff8c23e86ff9ef14166db464015f2ec /src/rlc.cpp
parenta3a567e7655b9842c9542d2ba5d1bf5237b46af0 (diff)
rlc: Make WS and SNS variable
Currently the values for WS and SNS are fixed to 64 (WS) and 128 (SNS) which are the only values that can be used with GPRS. On the other hand, EGPRS requires an SNS of 2014 and a WS in the range of 64 to 1024. This commit adds member variables and setters to both window classes. By default, the GPRS values are being used. Sponsored-by: On-Waves ehf
Diffstat (limited to 'src/rlc.cpp')
-rw-r--r--src/rlc.cpp32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/rlc.cpp b/src/rlc.cpp
index f6d6f4aa..4f62f23c 100644
--- a/src/rlc.cpp
+++ b/src/rlc.cpp
@@ -55,6 +55,22 @@ void gprs_rlc_dl_window::reset()
m_v_b.reset();
}
+void gprs_rlc_dl_window::set_sns(uint16_t sns)
+{
+ OSMO_ASSERT(sns >= RLC_GPRS_SNS);
+ OSMO_ASSERT(sns <= RLC_MAX_SNS);
+ /* check for 2^n */
+ OSMO_ASSERT((sns & (-sns)) == sns);
+ m_sns = sns;
+}
+
+void gprs_rlc_dl_window::set_ws(uint16_t ws)
+{
+ OSMO_ASSERT(ws >= RLC_GPRS_SNS/2);
+ OSMO_ASSERT(ws <= RLC_MAX_SNS/2);
+ m_ws = ws;
+}
+
int gprs_rlc_dl_window::resend_needed()
{
for (uint16_t bsn = v_a(); bsn != v_s(); bsn = mod_sns(bsn + 1)) {
@@ -172,6 +188,22 @@ void gprs_rlc_v_n::reset()
m_v_n[i] = GPRS_RLC_UL_BSN_INVALID;
}
+void gprs_rlc_ul_window::set_sns(uint16_t sns)
+{
+ OSMO_ASSERT(sns >= RLC_GPRS_SNS);
+ OSMO_ASSERT(sns <= RLC_MAX_SNS);
+ /* check for 2^n */
+ OSMO_ASSERT((sns & (-sns)) == sns);
+ m_sns = sns;
+}
+
+void gprs_rlc_ul_window::set_ws(uint16_t ws)
+{
+ OSMO_ASSERT(ws >= RLC_GPRS_SNS/2);
+ OSMO_ASSERT(ws <= RLC_MAX_SNS/2);
+ m_ws = ws;
+}
+
/* Update the receive block bitmap */
void gprs_rlc_ul_window::update_rbb(char *rbb)
{