mirror of https://github.com/PentHertz/srsLTE.git
gNb creates PUSCH decode PDU
This commit is contained in:
parent
ac39607c22
commit
3ae131b336
|
@ -242,7 +242,6 @@ public:
|
|||
struct pusch_t {
|
||||
uint32_t pid = 0; ///< HARQ process ID
|
||||
srsran_sch_cfg_nr_t sch = {}; ///< PUSCH configuration
|
||||
std::array<uint8_t*, SRSRAN_MAX_TB> data = {}; ///< Data pointer
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -272,11 +271,19 @@ public:
|
|||
};
|
||||
|
||||
struct pusch_info_t {
|
||||
uint16_t rnti;
|
||||
// Context
|
||||
uint16_t rnti; ///< UE temporal identifier
|
||||
uint32_t pid = 0; ///< HARQ process ID
|
||||
|
||||
// SCH and UCI payload information
|
||||
srsran_pusch_res_nr_t pusch_data;
|
||||
srsran_uci_cfg_nr_t uci_cfg; ///< Provides UCI configuration, so stack does not need to keep the pending state
|
||||
// ... add signal measurements here
|
||||
|
||||
// Actual SCH PDU
|
||||
srsran::unique_byte_buffer_t pdu = nullptr;
|
||||
|
||||
// PUSCH signal measurements
|
||||
// ...
|
||||
};
|
||||
|
||||
struct rach_info_t {
|
||||
|
|
|
@ -549,11 +549,18 @@ static int sch_nr_decode(srsran_sch_nr_t* q,
|
|||
return SRSRAN_ERROR_INVALID_INPUTS;
|
||||
}
|
||||
|
||||
// Protect softbuffer access
|
||||
if (!tb->softbuffer.rx) {
|
||||
ERROR("Missing softbuffer!");
|
||||
return SRSRAN_ERROR;
|
||||
}
|
||||
|
||||
// Protect PDU access
|
||||
if (!res->payload) {
|
||||
ERROR("Missing payload pointer!");
|
||||
return SRSRAN_ERROR;
|
||||
}
|
||||
|
||||
int8_t* input_ptr = e_bits;
|
||||
uint32_t nof_iter_sum = 0;
|
||||
|
||||
|
|
|
@ -11,16 +11,15 @@
|
|||
*/
|
||||
|
||||
#include "srsenb/hdr/phy/nr/slot_worker.h"
|
||||
#include <srsran/common/common.h>
|
||||
#include "srsran/common/buffer_pool.h"
|
||||
#include "srsran/common/common.h"
|
||||
|
||||
namespace srsenb {
|
||||
namespace nr {
|
||||
slot_worker::slot_worker(srsran::phy_common_interface& common_,
|
||||
stack_interface_phy_nr& stack_,
|
||||
srslog::basic_logger& logger_) :
|
||||
common(common_),
|
||||
stack(stack_),
|
||||
logger(logger_)
|
||||
common(common_), stack(stack_), logger(logger_)
|
||||
{
|
||||
// Do nothing
|
||||
}
|
||||
|
@ -203,12 +202,13 @@ bool slot_worker::work_ul()
|
|||
|
||||
// For each PUSCH...
|
||||
for (stack_interface_phy_nr::pusch_t& pusch : ul_sched.pusch) {
|
||||
// Get payload PDU
|
||||
// Prepare PUSCH
|
||||
stack_interface_phy_nr::pusch_info_t pusch_info = {};
|
||||
pusch_info.uci_cfg = pusch.sch.uci;
|
||||
pusch_info.pid = pusch.pid;
|
||||
pusch_info.pusch_data.tb[0].payload = pusch.data[0];
|
||||
pusch_info.pusch_data.tb[1].payload = pusch.data[1];
|
||||
pusch_info.pdu = srsran::make_byte_buffer();
|
||||
pusch_info.pusch_data.tb[0].payload = pusch_info.pdu->data();
|
||||
pusch_info.pusch_data.tb[1].payload = pusch_info.pdu->data();
|
||||
|
||||
// Decode PUSCH
|
||||
if (srsran_gnb_ul_get_pusch(&gnb_ul, &ul_slot_cfg, &pusch.sch, &pusch.sch.grant, &pusch_info.pusch_data) <
|
||||
|
@ -369,7 +369,10 @@ bool slot_worker::set_common_cfg(const srsran_carrier_nr_t& carrier, const srsra
|
|||
|
||||
// Set gNb UL carrier
|
||||
if (srsran_gnb_ul_set_carrier(&gnb_ul, &carrier) < SRSRAN_SUCCESS) {
|
||||
logger.error("Error setting UL carrier");
|
||||
logger.error("Error setting UL carrier (pci=%d, nof_prb=%d, max_mimo_layers=%d)",
|
||||
carrier.pci,
|
||||
carrier.nof_prb,
|
||||
carrier.max_mimo_layers);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -283,13 +283,7 @@ int mac_nr::get_ul_sched(const srsran_slot_cfg_t& slot_cfg, ul_sched_t& ul_sched
|
|||
pusch_slot++;
|
||||
}
|
||||
|
||||
int ret = sched.get_ul_sched(pusch_slot, 0, ul_sched);
|
||||
for (pusch_t& pusch : ul_sched.pusch) {
|
||||
pusch.data[0] = nullptr; // FIXME: add ptr to data to be filled
|
||||
pusch.data[1] = nullptr;
|
||||
}
|
||||
|
||||
return SRSRAN_SUCCESS;
|
||||
return sched.get_ul_sched(pusch_slot, 0, ul_sched);
|
||||
}
|
||||
|
||||
int mac_nr::pucch_info(const srsran_slot_cfg_t& slot_cfg, const mac_interface_phy_nr::pucch_info_t& pucch_info)
|
||||
|
|
|
@ -264,7 +264,8 @@ private:
|
|||
}
|
||||
|
||||
// Set softbuffer
|
||||
pusch_cfg.grant.tb[0].softbuffer.rx = &rx_harq_proc[slot_cfg.idx].get_softbuffer(dci.ndi);
|
||||
pusch_cfg.grant.tb[0].softbuffer.rx =
|
||||
&rx_harq_proc[slot_cfg.idx].get_softbuffer(dci.ndi, pusch_cfg.grant.tb[0].tbs);
|
||||
|
||||
// Push scheduling results
|
||||
dl_sched.pdcch_ul.push_back(pdcch);
|
||||
|
@ -464,11 +465,6 @@ public:
|
|||
if (not use_dummy_sched) {
|
||||
int ret = sched->get_ul_sched(pusch_slot, 0, ul_sched);
|
||||
|
||||
for (pusch_t& pusch : ul_sched.pusch) {
|
||||
pusch.data[0] = rx_harq_proc[pusch.pid].get_tb(pusch.sch.grant.tb[0].tbs).data();
|
||||
pusch.data[1] = nullptr;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -495,10 +491,6 @@ public:
|
|||
|
||||
// Schedule PUSCH
|
||||
if (has_pusch) {
|
||||
// Generate data
|
||||
pusch.data[0] = rx_harq_proc[pusch.pid].get_tb(pusch.sch.grant.tb[0].tbs).data();
|
||||
pusch.data[1] = nullptr;
|
||||
|
||||
// Put UCI configuration in PUSCH config
|
||||
if (not phy_cfg.get_pusch_uci_cfg(slot_cfg, uci_cfg, pusch.sch)) {
|
||||
logger.error("Error setting UCI configuration in PUSCH");
|
||||
|
|
|
@ -41,17 +41,12 @@ public:
|
|||
|
||||
~dummy_rx_harq_proc() { srsran_softbuffer_rx_free(&softbuffer); }
|
||||
|
||||
srsran::byte_buffer_t& get_tb(uint32_t tbs_)
|
||||
{
|
||||
tbs = tbs_;
|
||||
return data;
|
||||
}
|
||||
|
||||
srsran_softbuffer_rx_t& get_softbuffer(uint32_t ndi_)
|
||||
srsran_softbuffer_rx_t& get_softbuffer(uint32_t ndi_, uint32_t tbs_)
|
||||
{
|
||||
if (ndi != ndi_ || first) {
|
||||
srsran_softbuffer_rx_reset(&softbuffer);
|
||||
ndi = ndi_;
|
||||
tbs = tbs_;
|
||||
first = false;
|
||||
}
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ public:
|
|||
void new_grant_dl(const uint32_t cc_idx, const mac_nr_grant_dl_t& grant, tb_action_dl_t* action) override
|
||||
{
|
||||
action->tb.enabled = true;
|
||||
action->tb.softbuffer = &rx_harq_proc[grant.pid].get_softbuffer(grant.ndi);
|
||||
action->tb.softbuffer = &rx_harq_proc[grant.pid].get_softbuffer(grant.ndi, grant.tbs);
|
||||
}
|
||||
void tb_decoded(const uint32_t cc_idx, const mac_nr_grant_dl_t& grant, tb_action_dl_result_t result) override {}
|
||||
void new_grant_ul(const uint32_t cc_idx, const mac_nr_grant_ul_t& grant, tb_action_ul_t* action) override
|
||||
|
|
Loading…
Reference in New Issue