diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bts.cpp | 6 | ||||
-rw-r--r-- | src/bts.h | 2 | ||||
-rw-r--r-- | src/pcu_l1_if.cpp | 11 | ||||
-rw-r--r-- | src/pcu_l1_if.h | 11 | ||||
-rw-r--r-- | src/sysmo_l1_if.c | 4 |
5 files changed, 25 insertions, 9 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); @@ -245,7 +245,7 @@ public: /** TODO: change the number to unsigned */ void set_current_frame_number(int frame_number); - void set_current_block_frame_number(int frame_number); + void set_current_block_frame_number(int frame_number, unsigned max_delay); int current_frame_number() const; /** add paging to paging queue(s) */ diff --git a/src/pcu_l1_if.cpp b/src/pcu_l1_if.cpp index 9d7d9c48..9d7dbee5 100644 --- a/src/pcu_l1_if.cpp +++ b/src/pcu_l1_if.cpp @@ -180,6 +180,17 @@ void pcu_l1if_tx_pch(bitvec * block, int plen, const char *imsi) pcu_tx_data_req(0, 0, PCU_IF_SAPI_PCH, 0, 0, 0, data, 23+3); } +extern "C" void pcu_rx_block_time(uint16_t arfcn, uint32_t fn, uint8_t ts_no) +{ + BTS::main_bts()->set_current_block_frame_number(fn, 0); +} + +extern "C" void pcu_rx_ra_time(uint16_t arfcn, uint32_t fn, uint8_t ts_no) +{ + /* access bursts may arrive some bursts earlier */ + BTS::main_bts()->set_current_block_frame_number(fn, 5); +} + extern "C" int pcu_rx_data_ind_pdtch(uint8_t trx_no, uint8_t ts_no, uint8_t *data, uint8_t len, uint32_t fn, struct pcu_l1_meas *meas) { diff --git a/src/pcu_l1_if.h b/src/pcu_l1_if.h index 59b9cba2..865c833d 100644 --- a/src/pcu_l1_if.h +++ b/src/pcu_l1_if.h @@ -122,15 +122,18 @@ int pcu_sock_send(struct msgb *msg); #endif #ifdef __cplusplus -extern "C" +extern "C" { #endif int pcu_rx_rts_req_pdtch(uint8_t trx, uint8_t ts, uint16_t arfcn, uint32_t fn, uint8_t block_nr); -#ifdef __cplusplus -extern "C" -#endif int pcu_rx_data_ind_pdtch(uint8_t trx, uint8_t ts, uint8_t *data, uint8_t len, uint32_t fn, struct pcu_l1_meas *meas); +void pcu_rx_block_time(uint16_t arfcn, uint32_t fn, uint8_t ts_no); +void pcu_rx_ra_time(uint16_t arfcn, uint32_t fn, uint8_t ts_no); + +#ifdef __cplusplus +} +#endif #endif // PCU_L1_IF_H diff --git a/src/sysmo_l1_if.c b/src/sysmo_l1_if.c index fc4b59b1..85727861 100644 --- a/src/sysmo_l1_if.c +++ b/src/sysmo_l1_if.c @@ -190,6 +190,8 @@ static int handle_ph_data_ind(struct femtol1_hdl *fl1h, osmo_hexdump(data_ind->msgUnitParam.u8Buffer, data_ind->msgUnitParam.u8Size)); + pcu_rx_block_time(data_ind->u16Arfcn, data_ind->u32Fn, data_ind->u8Tn); + /* * TODO: Add proper bad frame handling here. This could be used * to switch the used CS. Avoid a crash with the PCU right now @@ -237,6 +239,8 @@ static int handle_ph_ra_ind(struct femtol1_hdl *fl1h, GsmL1_PhRaInd_t *ra_ind) { uint8_t acc_delay; + pcu_rx_ra_time(ra_ind->u16Arfcn, ra_ind->u32Fn, ra_ind->u8Tn); + if (ra_ind->measParam.fLinkQuality < MIN_QUAL_RACH) return 0; |