diff options
author | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2015-08-26 13:22:28 +0200 |
---|---|---|
committer | Jacob Erlbeck <jerlbeck@sysmocom.de> | 2015-08-28 12:23:07 +0200 |
commit | af75ce8e15ec8584cbc96a0cd366a5df68b9dae8 (patch) | |
tree | 7ea2edb8781c6a92b068464144fe67ec4eda024a /src/bts.cpp | |
parent | be4a08b58ae17b44d2c02421d8346a1ccb63a6b9 (diff) |
l1: Use the FN of all data_ind/ra_ind DSP messages
Currently all of these messages are discarded if they are assumend to
be caused by noise. But even in these cases, the FN and TN values
which are added by the DSP are valid. So these can be used to update
the current_frame value.
The osmo-bts sets the fBFILevel of a physical channel to -200dB if it
is used for PDTCH or PACCH which is the case for all PDCH. This way
a data_ind or ra_ind message is already send at least once per block
period (4 frames) per PDCH. These messages are passed to either
handle_ph_data_ind or handle_ph_ra_ind even if they contain garbage
data.
The ra_ind messages are sometimes sent a few frames earlier than
data_ind messages using the same frame.
This commit adds calls to update the current_frame value based on all
of these messages before they are discarded. The FN taken from ra_ind
are passed with an increased max_delay (5) to compensate for early
ra_ind messages.
Sponsored-by: On-Waves ehf
Diffstat (limited to 'src/bts.cpp')
-rw-r--r-- | src/bts.cpp | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/src/bts.cpp b/src/bts.cpp index 456990a0..cfb43857 100644 --- a/src/bts.cpp +++ b/src/bts.cpp @@ -153,7 +153,7 @@ void BTS::set_current_frame_number(int fn) m_pollController.expireTimedout(m_cur_fn, max_delay); } -void BTS::set_current_block_frame_number(int fn) +void BTS::set_current_block_frame_number(int fn, unsigned max_delay) { int delay = 0; const int late_block_delay_thresh = 13; @@ -184,7 +184,7 @@ void BTS::set_current_block_frame_number(int fn) current_frame_number() == 0) m_cur_fn = fn; - m_pollController.expireTimedout(fn, 0); + m_pollController.expireTimedout(fn, max_delay); } int BTS::add_paging(uint8_t chan_needed, uint8_t *identity_lv) @@ -1120,8 +1120,6 @@ int gprs_rlcmac_pdch::rcv_block(uint8_t *data, uint8_t len, uint32_t fn, bitvec *block; int rc = 0; - bts()->set_current_block_frame_number(fn); - switch (payload) { case GPRS_RLCMAC_DATA_BLOCK: rc = rcv_data_block_acknowledged(data, len, meas); |