diff --git a/lib/include/srslte/common/common.h b/lib/include/srslte/common/common.h index 7834cf576..6193bef43 100644 --- a/lib/include/srslte/common/common.h +++ b/lib/include/srslte/common/common.h @@ -57,6 +57,8 @@ #define TTIMOD_SZ 20 #define TTIMOD(tti) (tti % TTIMOD_SZ) +#define INVALID_TTI 10241 + #define PHICH_MAX_SF 6 // Maximum PHICH in a subframe (1 in FDD, > 1 in TDD, see table 9.1.2-1 36.213) #define ASYNC_DL_SCHED (FDD_HARQ_DELAY_UL_MS <= 4) diff --git a/srsenb/hdr/stack/rrc/rrc.h b/srsenb/hdr/stack/rrc/rrc.h index 1cdae7a56..8dc498418 100644 --- a/srsenb/hdr/stack/rrc/rrc.h +++ b/srsenb/hdr/stack/rrc/rrc.h @@ -149,6 +149,7 @@ private: void parse_ul_dcch(uint16_t rnti, uint32_t lcid, srslte::unique_byte_buffer_t pdu); void parse_ul_ccch(uint16_t rnti, srslte::unique_byte_buffer_t pdu); + uint32_t paging_tti = INVALID_TTI; srslte::byte_buffer_t byte_buf_paging; typedef struct { diff --git a/srsenb/src/stack/rrc/rrc.cc b/srsenb/src/stack/rrc/rrc.cc index 44f74d872..19716cd42 100644 --- a/srsenb/src/stack/rrc/rrc.cc +++ b/srsenb/src/stack/rrc/rrc.cc @@ -359,6 +359,14 @@ bool rrc::is_paging_opportunity(uint32_t tti, uint32_t* payload_len) { constexpr static int sf_pattern[4][4] = {{9, 4, -1, 0}, {-1, 9, -1, 4}, {-1, -1, -1, 5}, {-1, -1, -1, 9}}; + if (tti == paging_tti) { + *payload_len = byte_buf_paging.N_bytes; + rrc_log->debug("Sending paging to extra carriers. Payload len=%d, TTI=%d\n", *payload_len, tti); + return true; + } else { + paging_tti = INVALID_TTI; + } + if (pending_paging.empty()) { return false; } @@ -432,6 +440,7 @@ bool rrc::is_paging_opportunity(uint32_t tti, uint32_t* payload_len) N_bits); log_rrc_message("PCCH-Message", Tx, &byte_buf_paging, pcch_msg, pcch_msg.msg.c1().type().to_string()); + paging_tti = tti; // Store paging tti for other carriers return true; }