diff options
author | Daniel Willmann <dwillmann@sysmocom.de> | 2013-11-27 17:08:35 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <holger@moiji-mobile.com> | 2013-12-12 10:59:56 +0100 |
commit | 8a31f9e016067991b426e0be7637dd38002f1c3e (patch) | |
tree | 356939ed571058eefa01b3b049948c06b2440908 /src/rlc.cpp | |
parent | 11f2d58dbd0f590da3612a9f587a23b92857436f (diff) |
rlc: Manage the received block bitmap in the ul_window
Added two methods to gprs_rlc_ul_window
* ssn() returns the starting sequence number
* update_rbb() returns an array of chars representing the state of the
received block bitmap. Each element is either 'I'nvalid or
'R'eceived. The rbb is generated from v_n
rbb[63] relates to BSN ssn-1
...
rbb[0] relates to BSN ssn-64
Diffstat (limited to 'src/rlc.cpp')
-rw-r--r-- | src/rlc.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/rlc.cpp b/src/rlc.cpp index 915da87f..4ee5f610 100644 --- a/src/rlc.cpp +++ b/src/rlc.cpp @@ -146,6 +146,18 @@ void gprs_rlc_v_n::reset() memset(m_v_n, 0x0, sizeof(m_v_n)); } +/* Update the receive block bitmap */ +void gprs_rlc_ul_window::update_rbb(const gprs_rlc_v_n *v_n, char *rbb) +{ + int i; + for (i=0; i < ws(); i++) { + if (v_n->is_received(ssn()-1-i)) + rbb[ws()-1-i] = 'R'; + else + rbb[ws()-1-i] = 'I'; + } +} + /* Raise V(R) to highest received sequence number not received. */ void gprs_rlc_ul_window::raise_v_r(const uint16_t bsn, gprs_rlc_v_n *v_n) { |