Rename TX_DELAY and FDD_HARQ_DELAY_MS

master
Xavier Arteaga 5 years ago committed by Xavier Arteaga
parent 65711d06dc
commit 76408b195e

@ -42,27 +42,24 @@
#define SRSLTE_N_MCH_LCIDS 32 #define SRSLTE_N_MCH_LCIDS 32
#define TX_DELAY 4 #define FDD_HARQ_DELAY_DL_MS 4
#define TX_DELAY_DL 4 #define FDD_HARQ_DELAY_UL_MS 4
#define MSG3_DELAY_MS 2 // Delay added to TX_DELAY #define MSG3_DELAY_MS 2 // Delay added to FDD_HARQ_DELAY_DL_MS
#define TTI_SUB(a, b) ((((a) + 10240) - (b)) % 10240) #define TTI_SUB(a, b) ((((a) + 10240) - (b)) % 10240)
#define TTI_ADD(a, b) (((a) + (b)) % 10240) #define TTI_ADD(a, b) (((a) + (b)) % 10240)
#define TTI_TX(tti) TTI_ADD(tti, TX_DELAY) #define TTI_TX(tti) TTI_ADD(tti, FDD_HARQ_DELAY_DL_MS)
// Use only in FDD mode!! #define TTI_RX(tti) (TTI_SUB(tti, FDD_HARQ_DELAY_UL_MS))
#define FDD_HARQ_DELAY_MS 4 #define TTI_RX_ACK(tti) (TTI_ADD(tti, FDD_HARQ_DELAY_UL_MS + FDD_HARQ_DELAY_DL_MS))
#define FDD_HARQ_DELAY_DL_MS 4
#define TTI_RX(tti) (TTI_SUB(tti, FDD_HARQ_DELAY_MS))
#define TTI_RX_ACK(tti) (TTI_ADD(tti, FDD_HARQ_DELAY_MS + TX_DELAY))
#define TTIMOD_SZ 20 #define TTIMOD_SZ 20
#define TTIMOD(tti) (tti % TTIMOD_SZ) #define TTIMOD(tti) (tti % TTIMOD_SZ)
#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 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_MS <= 4) #define ASYNC_DL_SCHED (FDD_HARQ_DELAY_UL_MS <= 4)
// Cat 4 UE - Max number of DL-SCH transport block bits received within a TTI // Cat 4 UE - Max number of DL-SCH transport block bits received within a TTI
// 3GPP 36.306 v15.4.0 Table 4.1.1 for Category 11 with 2 layers and 256QAM // 3GPP 36.306 v15.4.0 Table 4.1.1 for Category 11 with 2 layers and 256QAM

@ -160,7 +160,7 @@ typedef enum { SRSLTE_SF_NORM = 0, SRSLTE_SF_MBSFN } srslte_sf_t;
? (SRSLTE_CP_LEN_EXT(symbol_sz) - SRSLTE_CP_LEN_NORM(0, symbol_sz)) \ ? (SRSLTE_CP_LEN_EXT(symbol_sz) - SRSLTE_CP_LEN_NORM(0, symbol_sz)) \
: (2 * SRSLTE_CP_LEN_EXT(symbol_sz) - SRSLTE_CP_LEN_NORM(0, symbol_sz) - SRSLTE_CP_LEN_NORM(1, symbol_sz))) : (2 * SRSLTE_CP_LEN_EXT(symbol_sz) - SRSLTE_CP_LEN_NORM(0, symbol_sz) - SRSLTE_CP_LEN_NORM(1, symbol_sz)))
#define SRSLTE_FDD_NOF_HARQ (TX_DELAY + FDD_HARQ_DELAY_MS) #define SRSLTE_FDD_NOF_HARQ (FDD_HARQ_DELAY_DL_MS + FDD_HARQ_DELAY_UL_MS)
#define SRSLTE_MAX_HARQ_PROC 15 #define SRSLTE_MAX_HARQ_PROC 15
#define SRSLTE_NOF_LTE_BANDS 58 #define SRSLTE_NOF_LTE_BANDS 58

@ -118,7 +118,7 @@ int main(int argc, char** argv)
int ret = SRSLTE_SUCCESS; int ret = SRSLTE_SUCCESS;
// Simulation Constants // Simulation Constants
const uint32_t nof_workers = FDD_HARQ_DELAY_MS; const uint32_t nof_workers = FDD_HARQ_DELAY_UL_MS;
const uint32_t nof_tti = 10240; const uint32_t nof_tti = 10240;
const float enable_probability = 0.9f; const float enable_probability = 0.9f;
srslte_random_t random_gen = srslte_random_init(1234); srslte_random_t random_gen = srslte_random_init(1234);

@ -33,7 +33,7 @@
namespace srsenb { namespace srsenb {
struct sched_ue_carrier { struct sched_ue_carrier {
const static int SCHED_MAX_HARQ_PROC = TX_DELAY_DL + FDD_HARQ_DELAY_DL_MS; const static int SCHED_MAX_HARQ_PROC = FDD_HARQ_DELAY_UL_MS + FDD_HARQ_DELAY_DL_MS;
sched_ue_carrier(const sched_interface::ue_cfg_t& cfg_, sched_ue_carrier(const sched_interface::ue_cfg_t& cfg_,
const sched_cell_params_t& cell_cfg_, const sched_cell_params_t& cell_cfg_,

@ -176,7 +176,7 @@ cf_t* cc_worker::get_buffer_tx(uint32_t antenna_idx)
void cc_worker::set_tti(uint32_t tti_) void cc_worker::set_tti(uint32_t tti_)
{ {
tti_rx = tti_; tti_rx = tti_;
tti_tx_dl = TTI_ADD(tti_rx, FDD_HARQ_DELAY_MS); tti_tx_dl = TTI_ADD(tti_rx, FDD_HARQ_DELAY_UL_MS);
tti_tx_ul = TTI_RX_ACK(tti_rx); tti_tx_ul = TTI_RX_ACK(tti_rx);
} }

@ -121,7 +121,7 @@ cf_t* sf_worker::get_buffer_rx(uint32_t cc_idx, uint32_t antenna_idx)
void sf_worker::set_time(uint32_t tti_, uint32_t tx_worker_cnt_, srslte_timestamp_t tx_time_) void sf_worker::set_time(uint32_t tti_, uint32_t tx_worker_cnt_, srslte_timestamp_t tx_time_)
{ {
tti_rx = tti_; tti_rx = tti_;
tti_tx_dl = TTI_ADD(tti_rx, FDD_HARQ_DELAY_MS); tti_tx_dl = TTI_ADD(tti_rx, FDD_HARQ_DELAY_UL_MS);
tti_tx_ul = TTI_RX_ACK(tti_rx); tti_tx_ul = TTI_RX_ACK(tti_rx);
t_tx_dl = TTIMOD(tti_tx_dl); t_tx_dl = TTIMOD(tti_tx_dl);

@ -139,7 +139,7 @@ void txrx::run_thread()
/* Compute TX time: Any transmission happens in TTI+4 thus advance 4 ms the reception time */ /* Compute TX time: Any transmission happens in TTI+4 thus advance 4 ms the reception time */
srslte_timestamp_copy(&tx_time, &rx_time); srslte_timestamp_copy(&tx_time, &rx_time);
srslte_timestamp_add(&tx_time, 0, FDD_HARQ_DELAY_MS * 1e-3); srslte_timestamp_add(&tx_time, 0, FDD_HARQ_DELAY_UL_MS * 1e-3);
Debug("Setting TTI=%d, tx_mutex=%d, tx_time=%ld:%f to worker %d\n", Debug("Setting TTI=%d, tx_mutex=%d, tx_time=%ld:%f to worker %d\n",
tti, tti,

@ -40,7 +40,7 @@ namespace sched_utils {
uint32_t tti_subtract(uint32_t tti1, uint32_t tti2) uint32_t tti_subtract(uint32_t tti1, uint32_t tti2)
{ {
return (tti1 + 10240 - tti2) % 10240; return TTI_SUB(tti1, tti2);
} }
uint32_t max_tti(uint32_t tti1, uint32_t tti2) uint32_t max_tti(uint32_t tti1, uint32_t tti2)
@ -378,7 +378,7 @@ int sched::dl_sched(uint32_t tti, uint32_t cc_idx, sched_interface::dl_sched_res
} }
std::lock_guard<std::mutex> lock(sched_mutex); std::lock_guard<std::mutex> lock(sched_mutex);
uint32_t tti_rx = sched_utils::tti_subtract(tti, TX_DELAY_DL); uint32_t tti_rx = sched_utils::tti_subtract(tti, FDD_HARQ_DELAY_UL_MS);
last_tti = sched_utils::max_tti(last_tti, tti_rx); last_tti = sched_utils::max_tti(last_tti, tti_rx);
if (cc_idx < carrier_schedulers.size()) { if (cc_idx < carrier_schedulers.size()) {
@ -401,7 +401,7 @@ int sched::ul_sched(uint32_t tti, uint32_t cc_idx, srsenb::sched_interface::ul_s
std::lock_guard<std::mutex> lock(sched_mutex); std::lock_guard<std::mutex> lock(sched_mutex);
// Compute scheduling Result for tti_rx // Compute scheduling Result for tti_rx
uint32_t tti_rx = sched_utils::tti_subtract(tti, TX_DELAY_DL + FDD_HARQ_DELAY_DL_MS); uint32_t tti_rx = sched_utils::tti_subtract(tti, FDD_HARQ_DELAY_UL_MS + FDD_HARQ_DELAY_DL_MS);
if (cc_idx < carrier_schedulers.size()) { if (cc_idx < carrier_schedulers.size()) {
const sf_sched_result& tti_sched = carrier_schedulers[cc_idx]->generate_tti_result(tti_rx); const sf_sched_result& tti_sched = carrier_schedulers[cc_idx]->generate_tti_result(tti_rx);

@ -48,10 +48,10 @@ const char* alloc_outcome_t::to_string() const
tti_params_t::tti_params_t(uint32_t tti_rx_) : tti_params_t::tti_params_t(uint32_t tti_rx_) :
tti_rx(tti_rx_), tti_rx(tti_rx_),
sf_idx_tx_dl(TTI_ADD(tti_rx, TX_DELAY_DL) % 10), sf_idx_tx_dl(TTI_ADD(tti_rx, FDD_HARQ_DELAY_UL_MS) % 10),
tti_tx_dl(TTI_ADD(tti_rx, TX_DELAY_DL)), tti_tx_dl(TTI_ADD(tti_rx, FDD_HARQ_DELAY_UL_MS)),
tti_tx_ul(TTI_ADD(tti_rx, (TX_DELAY_DL + FDD_HARQ_DELAY_DL_MS))), tti_tx_ul(TTI_ADD(tti_rx, (FDD_HARQ_DELAY_UL_MS + FDD_HARQ_DELAY_DL_MS))),
sfn_tx_dl(TTI_ADD(tti_rx, TX_DELAY_DL) / 10) sfn_tx_dl(TTI_ADD(tti_rx, FDD_HARQ_DELAY_UL_MS) / 10)
{ {
} }

@ -205,7 +205,7 @@ rbgmask_t dl_harq_proc::get_rbgmask() const
bool dl_harq_proc::has_pending_retx(uint32_t tb_idx, uint32_t tti_tx_dl) const bool dl_harq_proc::has_pending_retx(uint32_t tb_idx, uint32_t tti_tx_dl) const
{ {
uint32_t tti_diff = srslte_tti_interval(tti_tx_dl, tti); uint32_t tti_diff = srslte_tti_interval(tti_tx_dl, tti);
return (tti_diff < (10240 / 2)) and (tti_diff >= TX_DELAY_DL + FDD_HARQ_DELAY_DL_MS) and return (tti_diff < (10240 / 2)) and (tti_diff >= FDD_HARQ_DELAY_UL_MS + FDD_HARQ_DELAY_DL_MS) and
has_pending_retx_common(tb_idx); has_pending_retx_common(tb_idx);
} }
@ -364,8 +364,8 @@ ul_harq_proc* harq_entity::get_ul_harq(uint32_t tti_tx_ul)
void harq_entity::reset_pending_data(uint32_t tti_rx) void harq_entity::reset_pending_data(uint32_t tti_rx)
{ {
uint32_t tti_tx_ul = TTI_ADD(tti_rx, (TX_DELAY_DL + FDD_HARQ_DELAY_DL_MS)); uint32_t tti_tx_ul = TTI_ADD(tti_rx, (FDD_HARQ_DELAY_UL_MS + FDD_HARQ_DELAY_DL_MS));
uint32_t tti_tx_dl = TTI_ADD(tti_rx, TX_DELAY_DL); uint32_t tti_tx_dl = TTI_ADD(tti_rx, FDD_HARQ_DELAY_UL_MS);
// Reset ACK state of UL Harq // Reset ACK state of UL Harq
get_ul_harq(tti_tx_ul)->reset_pending_data(); get_ul_harq(tti_tx_ul)->reset_pending_data();

@ -187,7 +187,7 @@ int test_scell_activation(test_scell_activation_params params)
// Event: Wait for UE to receive and ack CE. Send cqi==0, which should not activate the SCell // Event: Wait for UE to receive and ack CE. Send cqi==0, which should not activate the SCell
uint32_t cqi = 0; uint32_t cqi = 0;
for (uint32_t i = 0; i < TX_DELAY_DL; ++i) { for (uint32_t i = 0; i < FDD_HARQ_DELAY_UL_MS; ++i) {
tester.dl_cqi_info(tester.tti_info.tti_params.tti_rx, rnti1, 1, cqi); tester.dl_cqi_info(tester.tti_info.tti_params.tti_rx, rnti1, 1, cqi);
generator.step_tti(); generator.step_tti();
} }

@ -780,7 +780,7 @@ int common_sched_tester::schedule_acks()
while (it != to_ack.end() and it->first < ack_data.tti) { while (it != to_ack.end() and it->first < ack_data.tti) {
if (it->second.rnti == ack_data.rnti and it->second.dl_harq.get_id() == ack_data.dl_harq.get_id() and if (it->second.rnti == ack_data.rnti and it->second.dl_harq.get_id() == ack_data.dl_harq.get_id() and
it->second.ue_cc_idx == ack_data.ue_cc_idx) { it->second.ue_cc_idx == ack_data.ue_cc_idx) {
CONDERROR(it->second.tti + TX_DELAY_DL + FDD_HARQ_DELAY_DL_MS > ack_data.tti, CONDERROR(it->second.tti + FDD_HARQ_DELAY_UL_MS + FDD_HARQ_DELAY_DL_MS > ack_data.tti,
"The retx dl harq id=%d was transmitted too soon\n", "The retx dl harq id=%d was transmitted too soon\n",
ack_data.dl_harq.get_id()); ack_data.dl_harq.get_id());
auto toerase_it = it++; auto toerase_it = it++;
@ -802,7 +802,7 @@ int common_sched_tester::schedule_acks()
ack_data.ue_cc_idx = ue_db[ack_data.rnti].get_cell_index(ccidx).second; ack_data.ue_cc_idx = ue_db[ack_data.rnti].get_cell_index(ccidx).second;
ack_data.ul_harq = *ue_db[ack_data.rnti].get_ul_harq(tti_info.tti_params.tti_tx_ul, ack_data.ue_cc_idx); ack_data.ul_harq = *ue_db[ack_data.rnti].get_ul_harq(tti_info.tti_params.tti_tx_ul, ack_data.ue_cc_idx);
ack_data.tti_tx_ul = tti_info.tti_params.tti_tx_ul; ack_data.tti_tx_ul = tti_info.tti_params.tti_tx_ul;
ack_data.tti_ack = tti_info.tti_params.tti_tx_ul + FDD_HARQ_DELAY_MS; ack_data.tti_ack = tti_info.tti_params.tti_tx_ul + FDD_HARQ_DELAY_UL_MS;
if (ack_data.ul_harq.nof_retx(0) == 0) { if (ack_data.ul_harq.nof_retx(0) == 0) {
ack_data.ack = randf() > sim_args0.P_retx; ack_data.ack = randf() > sim_args0.P_retx;
} else { } else {

@ -33,8 +33,8 @@ struct tti_counter {
tti_counter() = default; tti_counter() = default;
void set_start_tti(uint32_t tti_) { counter = tti_; } void set_start_tti(uint32_t tti_) { counter = tti_; }
uint32_t tti_rx() const { return counter % 10240u; } uint32_t tti_rx() const { return counter % 10240u; }
tti_counter tic_tx_dl() const { return tti_counter{counter + TX_DELAY_DL}; } tti_counter tic_tx_dl() const { return tti_counter{counter + FDD_HARQ_DELAY_UL_MS}; }
tti_counter tic_tx_ul() const { return tti_counter{counter + TX_DELAY_DL + FDD_HARQ_DELAY_DL_MS}; } tti_counter tic_tx_ul() const { return tti_counter{counter + FDD_HARQ_DELAY_UL_MS + FDD_HARQ_DELAY_DL_MS}; }
bool operator==(const tti_counter& other) const { return counter == other.counter; } bool operator==(const tti_counter& other) const { return counter == other.counter; }
bool operator!=(const tti_counter& other) const { return counter != other.counter; } bool operator!=(const tti_counter& other) const { return counter != other.counter; }
bool operator<(const tti_counter& other) const { return counter < other.counter; } bool operator<(const tti_counter& other) const { return counter < other.counter; }

@ -577,7 +577,7 @@ public:
// Schedule grant // Schedule grant
if (sched) { if (sched) {
uint32_t tti_pdcch = TTI_SUB(tti, TX_DELAY); uint32_t tti_pdcch = TTI_SUB(tti, FDD_HARQ_DELAY_DL_MS);
uint32_t location_idx = (tti_pdcch + 1) % nof_locations[tti_pdcch % SRSLTE_NOF_SF_X_FRAME]; uint32_t location_idx = (tti_pdcch + 1) % nof_locations[tti_pdcch % SRSLTE_NOF_SF_X_FRAME];
srslte_dci_location_t location = dci_locations[tti_pdcch % SRSLTE_NOF_SF_X_FRAME][location_idx]; srslte_dci_location_t location = dci_locations[tti_pdcch % SRSLTE_NOF_SF_X_FRAME][location_idx];
@ -636,7 +636,7 @@ public:
tti_dl_info_t& tti_dl_ack = tti_dl_info_ack_queue.front(); tti_dl_info_t& tti_dl_ack = tti_dl_info_ack_queue.front();
// Calculate ACK TTI // Calculate ACK TTI
tti_dl_sched.tti = TTI_ADD(tti_dl_sched.tti, TX_DELAY); tti_dl_sched.tti = TTI_ADD(tti_dl_sched.tti, FDD_HARQ_DELAY_DL_MS);
// Assert that ACKs have been received // Assert that ACKs have been received
TESTASSERT(tti_dl_sched.tti == tti_dl_ack.tti); TESTASSERT(tti_dl_sched.tti == tti_dl_ack.tti);
@ -795,11 +795,11 @@ public:
} }
// Push HARQ delay to radio // Push HARQ delay to radio
for (uint32_t i = 0; i < TX_DELAY; i++) { for (uint32_t i = 0; i < FDD_HARQ_DELAY_DL_MS; i++) {
radio->write_rx(buffers, sf_len); radio->write_rx(buffers, sf_len);
sf_ul_cfg.tti = TTI_ADD(sf_ul_cfg.tti, 1); // Advance UL TTI too sf_ul_cfg.tti = TTI_ADD(sf_ul_cfg.tti, 1); // Advance UL TTI too
} }
for (uint32_t i = 0; i < FDD_HARQ_DELAY_MS; i++) { for (uint32_t i = 0; i < FDD_HARQ_DELAY_UL_MS; i++) {
radio->write_rx(buffers, sf_len); radio->write_rx(buffers, sf_len);
} }
} }

@ -219,7 +219,7 @@ private:
uint32_t grant_cc_idx; uint32_t grant_cc_idx;
srslte_dci_dl_t dl_dci; srslte_dci_dl_t dl_dci;
} pending_dl_grant_t; } pending_dl_grant_t;
pending_dl_grant_t pending_dl_grant[FDD_HARQ_DELAY_MS][SRSLTE_MAX_CARRIERS] = {}; pending_dl_grant_t pending_dl_grant[FDD_HARQ_DELAY_UL_MS][SRSLTE_MAX_CARRIERS] = {};
srslte_cell_t cell = {}; srslte_cell_t cell = {};

@ -259,7 +259,7 @@ uint32_t phy_common::ul_pidof(uint32_t tti, srslte_tdd_config_t* tdd_config)
// Computes SF->TTI at which PHICH will be received according to 9.1.2 of 36.213 // Computes SF->TTI at which PHICH will be received according to 9.1.2 of 36.213
#define tti_phich(sf) \ #define tti_phich(sf) \
(sf->tti + (cell.frame_type == SRSLTE_FDD ? FDD_HARQ_DELAY_MS : k_phich[sf->tdd_config.sf_config][sf->tti % 10])) (sf->tti + (cell.frame_type == SRSLTE_FDD ? FDD_HARQ_DELAY_UL_MS : k_phich[sf->tdd_config.sf_config][sf->tti % 10]))
// Here SF->TTI is when PUSCH is transmitted // Here SF->TTI is when PUSCH is transmitted
void phy_common::set_ul_pending_ack(srslte_ul_sf_cfg_t* sf, void phy_common::set_ul_pending_ack(srslte_ul_sf_cfg_t* sf,
@ -319,14 +319,14 @@ bool phy_common::is_any_ul_pending_ack()
// Computes SF->TTI at which PUSCH will be transmitted according to Section 8 of 36.213 // Computes SF->TTI at which PUSCH will be transmitted according to Section 8 of 36.213
#define tti_pusch_hi(sf) \ #define tti_pusch_hi(sf) \
(sf->tti + \ (sf->tti + \
(cell.frame_type == SRSLTE_FDD ? FDD_HARQ_DELAY_MS \ (cell.frame_type == SRSLTE_FDD ? FDD_HARQ_DELAY_UL_MS \
: I_phich ? 7 : k_pusch[sf->tdd_config.sf_config][sf->tti % 10]) + \ : I_phich ? 7 : k_pusch[sf->tdd_config.sf_config][sf->tti % 10]) + \
(TX_DELAY - FDD_HARQ_DELAY_MS)) (FDD_HARQ_DELAY_DL_MS - FDD_HARQ_DELAY_UL_MS))
#define tti_pusch_gr(sf) \ #define tti_pusch_gr(sf) \
(sf->tti + \ (sf->tti + \
(cell.frame_type == SRSLTE_FDD ? FDD_HARQ_DELAY_MS \ (cell.frame_type == SRSLTE_FDD ? FDD_HARQ_DELAY_UL_MS \
: dci->ul_idx == 1 ? 7 : k_pusch[sf->tdd_config.sf_config][sf->tti % 10]) + \ : dci->ul_idx == 1 ? 7 : k_pusch[sf->tdd_config.sf_config][sf->tti % 10]) + \
(TX_DELAY - FDD_HARQ_DELAY_MS)) (FDD_HARQ_DELAY_DL_MS - FDD_HARQ_DELAY_UL_MS))
// SF->TTI is at which Format0 dci is received // SF->TTI is at which Format0 dci is received
void phy_common::set_ul_pending_grant(srslte_dl_sf_cfg_t* sf, uint32_t cc_idx, srslte_dci_ul_t* dci) void phy_common::set_ul_pending_grant(srslte_dl_sf_cfg_t* sf, uint32_t cc_idx, srslte_dci_ul_t* dci)
@ -427,10 +427,10 @@ void phy_common::set_dl_pending_grant(uint32_t tti,
const srslte_dci_dl_t* dl_dci) const srslte_dci_dl_t* dl_dci)
{ {
std::lock_guard<std::mutex> lock(pending_dl_grant_mutex); std::lock_guard<std::mutex> lock(pending_dl_grant_mutex);
if (!pending_dl_grant[tti % FDD_HARQ_DELAY_MS][cc_idx].enable) { if (!pending_dl_grant[tti % FDD_HARQ_DELAY_UL_MS][cc_idx].enable) {
pending_dl_grant[tti % FDD_HARQ_DELAY_MS][cc_idx].dl_dci = *dl_dci; pending_dl_grant[tti % FDD_HARQ_DELAY_UL_MS][cc_idx].dl_dci = *dl_dci;
pending_dl_grant[tti % FDD_HARQ_DELAY_MS][cc_idx].grant_cc_idx = grant_cc_idx; pending_dl_grant[tti % FDD_HARQ_DELAY_UL_MS][cc_idx].grant_cc_idx = grant_cc_idx;
pending_dl_grant[tti % FDD_HARQ_DELAY_MS][cc_idx].enable = true; pending_dl_grant[tti % FDD_HARQ_DELAY_UL_MS][cc_idx].enable = true;
} else { } else {
Warning("set_dl_pending_grant: cc=%d already exists\n", cc_idx); Warning("set_dl_pending_grant: cc=%d already exists\n", cc_idx);
} }
@ -439,16 +439,16 @@ void phy_common::set_dl_pending_grant(uint32_t tti,
bool phy_common::get_dl_pending_grant(uint32_t tti, uint32_t cc_idx, uint32_t* grant_cc_idx, srslte_dci_dl_t* dl_dci) bool phy_common::get_dl_pending_grant(uint32_t tti, uint32_t cc_idx, uint32_t* grant_cc_idx, srslte_dci_dl_t* dl_dci)
{ {
std::lock_guard<std::mutex> lock(pending_dl_grant_mutex); std::lock_guard<std::mutex> lock(pending_dl_grant_mutex);
if (pending_dl_grant[tti % FDD_HARQ_DELAY_MS][cc_idx].enable) { if (pending_dl_grant[tti % FDD_HARQ_DELAY_UL_MS][cc_idx].enable) {
// Read grant // Read grant
if (dl_dci) { if (dl_dci) {
*dl_dci = pending_dl_grant[tti % FDD_HARQ_DELAY_MS][cc_idx].dl_dci; *dl_dci = pending_dl_grant[tti % FDD_HARQ_DELAY_UL_MS][cc_idx].dl_dci;
} }
if (grant_cc_idx) { if (grant_cc_idx) {
*grant_cc_idx = pending_dl_grant[tti % FDD_HARQ_DELAY_MS][cc_idx].grant_cc_idx; *grant_cc_idx = pending_dl_grant[tti % FDD_HARQ_DELAY_UL_MS][cc_idx].grant_cc_idx;
} }
// Reset read flag // Reset read flag
pending_dl_grant[tti % FDD_HARQ_DELAY_MS][cc_idx].enable = false; pending_dl_grant[tti % FDD_HARQ_DELAY_UL_MS][cc_idx].enable = false;
return true; return true;
} else { } else {
return false; return false;
@ -493,8 +493,8 @@ bool phy_common::get_dl_pending_ack(srslte_ul_sf_cfg_t* sf, uint32_t cc_idx, srs
for (uint32_t i = 0; i < M; i++) { for (uint32_t i = 0; i < M; i++) {
uint32_t k = uint32_t k =
(cell.frame_type == SRSLTE_FDD) ? FDD_HARQ_DELAY_MS : das_table[sf->tdd_config.sf_config][sf->tti % 10].K[i]; (cell.frame_type == SRSLTE_FDD) ? FDD_HARQ_DELAY_UL_MS : das_table[sf->tdd_config.sf_config][sf->tti % 10].K[i];
uint32_t pdsch_tti = TTI_SUB(sf->tti, k + (TX_DELAY - FDD_HARQ_DELAY_MS)); uint32_t pdsch_tti = TTI_SUB(sf->tti, k + (FDD_HARQ_DELAY_DL_MS - FDD_HARQ_DELAY_UL_MS));
if (pending_dl_ack[TTIMOD(pdsch_tti)][cc_idx].enable) { if (pending_dl_ack[TTIMOD(pdsch_tti)][cc_idx].enable) {
ack->m[i].present = true; ack->m[i].present = true;
ack->m[i].k = k; ack->m[i].k = k;

@ -487,7 +487,7 @@ void sync::run_thread()
srslte_timestamp_t rx_time, tx_time; srslte_timestamp_t rx_time, tx_time;
srslte_ue_sync_get_last_timestamp(&ue_sync, &rx_time); srslte_ue_sync_get_last_timestamp(&ue_sync, &rx_time);
srslte_timestamp_copy(&tx_time, &rx_time); srslte_timestamp_copy(&tx_time, &rx_time);
srslte_timestamp_add(&tx_time, 0, TX_DELAY * 1e-3 - time_adv_sec); srslte_timestamp_add(&tx_time, 0, FDD_HARQ_DELAY_DL_MS * 1e-3 - time_adv_sec);
worker->set_prach(prach_ptr ? &prach_ptr[prach_sf_cnt * SRSLTE_SF_LEN_PRB(cell.nof_prb)] : NULL, worker->set_prach(prach_ptr ? &prach_ptr[prach_sf_cnt * SRSLTE_SF_LEN_PRB(cell.nof_prb)] : NULL,
prach_power); prach_power);

@ -667,7 +667,7 @@ public:
return is_bsr; return is_bsr;
} }
uint32_t get_pid(const uint32_t tti_) { return tti_ % (2 * FDD_HARQ_DELAY_MS); } uint32_t get_pid(const uint32_t tti_) { return tti_ % SRSLTE_FDD_NOF_HARQ; }
bool get_ndi_for_new_ul_tx(const uint32_t tti_) bool get_ndi_for_new_ul_tx(const uint32_t tti_)
{ {
@ -1207,8 +1207,8 @@ private:
uint16_t crnti = TTCN3_CRNTI; uint16_t crnti = TTCN3_CRNTI;
int force_lcid = -1; int force_lcid = -1;
srslte::timer_handler timers; srslte::timer_handler timers;
bool last_dl_ndi[2 * FDD_HARQ_DELAY_MS] = {}; bool last_dl_ndi[SRSLTE_FDD_NOF_HARQ] = {};
bool last_ul_ndi[2 * FDD_HARQ_DELAY_MS] = {}; bool last_ul_ndi[SRSLTE_FDD_NOF_HARQ] = {};
// For events/actions that need to be carried out in a specific TTI // For events/actions that need to be carried out in a specific TTI
typedef std::vector<move_task_t> task_list_t; typedef std::vector<move_task_t> task_list_t;

Loading…
Cancel
Save