mirror of https://github.com/PentHertz/srsLTE.git
Ignore PDSCH during cell selection
This commit is contained in:
parent
d59ebfce9d
commit
ad646f436c
|
@ -56,6 +56,8 @@ public:
|
||||||
|
|
||||||
srsran::phy_cfg_mbsfn_t mbsfn_config = {};
|
srsran::phy_cfg_mbsfn_t mbsfn_config = {};
|
||||||
|
|
||||||
|
std::atomic<bool> cell_is_selecting = {false};
|
||||||
|
|
||||||
// Secondary serving cell states
|
// Secondary serving cell states
|
||||||
scell::state cell_state;
|
scell::state cell_state;
|
||||||
|
|
||||||
|
|
|
@ -280,7 +280,12 @@ bool cc_worker::work_dl_regular()
|
||||||
// Decode PDSCH
|
// Decode PDSCH
|
||||||
decode_pdsch(ack_resource, &dl_action, dl_ack);
|
decode_pdsch(ack_resource, &dl_action, dl_ack);
|
||||||
|
|
||||||
// Informs Stack about the decoding status
|
// Informs Stack about the decoding status, send NACK if cell is in process of re-selection
|
||||||
|
if (phy->cell_is_selecting) {
|
||||||
|
for (uint32_t i = 0; i < SRSRAN_MAX_CODEWORDS; i++) {
|
||||||
|
dl_ack[i] = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
phy->stack->tb_decoded(cc_idx, mac_grant, dl_ack);
|
phy->stack->tb_decoded(cc_idx, mac_grant, dl_ack);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -306,6 +306,10 @@ bool phy::cell_select(phy_cell_t cell)
|
||||||
if (sfsync.cell_select_init(cell)) {
|
if (sfsync.cell_select_init(cell)) {
|
||||||
// Update PCI before starting the background command to make sure PRACH gets the updated value
|
// Update PCI before starting the background command to make sure PRACH gets the updated value
|
||||||
selected_cell.id = cell.pci;
|
selected_cell.id = cell.pci;
|
||||||
|
|
||||||
|
// Indicate workers that cell selection is in progress
|
||||||
|
common.cell_is_selecting = true;
|
||||||
|
|
||||||
cmd_worker_cell.add_cmd([this, cell]() {
|
cmd_worker_cell.add_cmd([this, cell]() {
|
||||||
// Wait SYNC transitions to IDLE
|
// Wait SYNC transitions to IDLE
|
||||||
sfsync.wait_idle();
|
sfsync.wait_idle();
|
||||||
|
@ -320,6 +324,10 @@ bool phy::cell_select(phy_cell_t cell)
|
||||||
selected_cell = sync_cell;
|
selected_cell = sync_cell;
|
||||||
}
|
}
|
||||||
stack->cell_select_complete(ret);
|
stack->cell_select_complete(ret);
|
||||||
|
|
||||||
|
// Indicate workers that cell selection has finished
|
||||||
|
common.cell_is_selecting = false;
|
||||||
|
|
||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue