diff options
Diffstat (limited to 'src/gprs_ms.cpp')
-rw-r--r-- | src/gprs_ms.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/gprs_ms.cpp b/src/gprs_ms.cpp index 9126543e..9c8b62a6 100644 --- a/src/gprs_ms.cpp +++ b/src/gprs_ms.cpp @@ -25,6 +25,7 @@ #include "tbf.h" #include "gprs_debug.h" #include "gprs_codel.h" +#include "pcu_utils.h" #include <time.h> @@ -762,6 +763,28 @@ uint8_t GprsMs::ul_slots() const return slots; } +uint8_t GprsMs::current_pacch_slots() const +{ + uint8_t slots = 0; + + if (!m_dl_tbf && !m_ul_tbf) + return 0; + + /* see TS 44.060, 8.1.1.2.2 */ + if (m_dl_tbf && !m_ul_tbf) + slots = m_dl_tbf->dl_slots(); + else if (!m_dl_tbf && m_ul_tbf) + slots = m_ul_tbf->ul_slots(); + else + slots = m_ul_tbf->ul_slots() & m_dl_tbf->dl_slots(); + + /* Assume a multislot class 1 device */ + /* TODO: For class 2 devices, this could be removed */ + slots = pcu_lsb(slots); + + return slots; +} + void GprsMs::set_reserved_slots(gprs_rlcmac_trx *trx, uint8_t ul_slots, uint8_t dl_slots) { |