diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2015-12-28 13:51:44 +0100 |
---|---|---|
committer | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2016-02-01 13:58:12 +0100 |
commit | 8f8197f3fde1bafa1d720d9f685288eb4cd36e23 (patch) | |
tree | f62d6d59fff8c23e86ff9ef14166db464015f2ec /src/rlc.cpp | |
parent | a3a567e7655b9842c9542d2ba5d1bf5237b46af0 (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.cpp | 32 |
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) { |