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
diff --git a/src/rlc.cpp b/src/rlc.cpp
index 915da87..4ee5f61 100644
--- a/src/rlc.cpp
+++ b/src/rlc.cpp
@@ -146,6 +146,18 @@
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)
{