Changed a few names. Initial UE PHY itf draft

This commit is contained in:
ismagom 2015-03-19 16:42:31 +01:00
parent 6d51de5ed6
commit 7b8a00ce9b
25 changed files with 219 additions and 259 deletions

View File

@ -139,7 +139,7 @@ int main(int argc, char **argv) {
srslte_ue_sync_t ue_sync; srslte_ue_sync_t ue_sync;
srslte_ue_mib_t ue_mib; srslte_ue_mib_t ue_mib;
void *uhd; void *uhd;
srs_ue_dl_t ue_dl; srslte_ue_dl_t ue_dl;
srslte_ofdm_t fft; srslte_ofdm_t fft;
srslte_chest_dl_t chest; srslte_chest_dl_t chest;
uint32_t nframes=0; uint32_t nframes=0;
@ -194,7 +194,7 @@ int main(int argc, char **argv) {
fprintf(stderr, "Error initiating ue_sync\n"); fprintf(stderr, "Error initiating ue_sync\n");
return -1; return -1;
} }
if (srs_ue_dl_init(&ue_dl, cell)) { if (srslte_ue_dl_init(&ue_dl, cell)) {
fprintf(stderr, "Error initiating UE downlink processing module\n"); fprintf(stderr, "Error initiating UE downlink processing module\n");
return -1; return -1;
} }
@ -204,7 +204,7 @@ int main(int argc, char **argv) {
} }
/* Configure downlink receiver for the SI-RNTI since will be the only one we'll use */ /* Configure downlink receiver for the SI-RNTI since will be the only one we'll use */
srs_ue_dl_set_rnti(&ue_dl, SRSLTE_SIRNTI); srslte_ue_dl_set_rnti(&ue_dl, SRSLTE_SIRNTI);
/* Initialize subframe counter */ /* Initialize subframe counter */
sf_cnt = 0; sf_cnt = 0;
@ -259,7 +259,7 @@ int main(int argc, char **argv) {
case DECODE_SIB: case DECODE_SIB:
/* We are looking for SI Blocks, search only in appropiate places */ /* We are looking for SI Blocks, search only in appropiate places */
if ((srslte_ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) { if ((srslte_ue_sync_get_sfidx(&ue_sync) == 5 && (sfn%2)==0)) {
n = srs_ue_dl_decode_rnti_rv(&ue_dl, sf_buffer, data, srslte_ue_sync_get_sfidx(&ue_sync), SRSLTE_SIRNTI, n = srslte_ue_dl_decode_rnti_rv(&ue_dl, sf_buffer, data, srslte_ue_sync_get_sfidx(&ue_sync), SRSLTE_SIRNTI,
((int) ceilf((float)3*(((sfn)/2)%4)/2))%4); ((int) ceilf((float)3*(((sfn)/2)%4)/2))%4);
if (n < 0) { if (n < 0) {
fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); fprintf(stderr, "Error decoding UE DL\n");fflush(stdout);

View File

@ -314,7 +314,7 @@ uint32_t prbset_to_bitmask() {
} }
int update_radl(uint32_t sf_idx) { int update_radl(uint32_t sf_idx) {
srslte_srslte_ra_dl_alloc_t prb_alloc; srslte_ra_dl_alloc_t prb_alloc;
bzero(&ra_dl, sizeof(srslte_ra_pdsch_t)); bzero(&ra_dl, sizeof(srslte_ra_pdsch_t));
ra_dl.harq_process = 0; ra_dl.harq_process = 0;

View File

@ -218,7 +218,7 @@ extern float mean_exec_time;
enum receiver_state { DECODE_MIB, DECODE_PDSCH} state; enum receiver_state { DECODE_MIB, DECODE_PDSCH} state;
srs_ue_dl_t ue_dl; srslte_ue_dl_t ue_dl;
srslte_ue_sync_t ue_sync; srslte_ue_sync_t ue_sync;
prog_args_t prog_args; prog_args_t prog_args;
@ -326,13 +326,13 @@ int main(int argc, char **argv) {
#endif #endif
} }
if (srs_ue_dl_init(&ue_dl, cell)) { // This is the User RNTI if (srslte_ue_dl_init(&ue_dl, cell)) { // This is the User RNTI
fprintf(stderr, "Error initiating UE downlink processing module\n"); fprintf(stderr, "Error initiating UE downlink processing module\n");
exit(-1); exit(-1);
} }
/* Configure downlink receiver for the SI-RNTI since will be the only one we'll use */ /* Configure downlink receiver for the SI-RNTI since will be the only one we'll use */
srs_ue_dl_set_rnti(&ue_dl, prog_args.rnti); srslte_ue_dl_set_rnti(&ue_dl, prog_args.rnti);
/* Initialize subframe counter */ /* Initialize subframe counter */
sf_cnt = 0; sf_cnt = 0;
@ -398,9 +398,9 @@ int main(int argc, char **argv) {
} }
if (decode_pdsch) { if (decode_pdsch) {
if (prog_args.rnti != SRSLTE_SIRNTI) { if (prog_args.rnti != SRSLTE_SIRNTI) {
n = srs_ue_dl_decode(&ue_dl, sf_buffer, data_packed, srslte_ue_sync_get_sfidx(&ue_sync)); n = srslte_ue_dl_decode(&ue_dl, sf_buffer, data_packed, srslte_ue_sync_get_sfidx(&ue_sync));
} else { } else {
n = srs_ue_dl_decode_rnti_rv(&ue_dl, sf_buffer, data_packed, srslte_ue_sync_get_sfidx(&ue_sync), SRSLTE_SIRNTI, n = srslte_ue_dl_decode_rnti_rv(&ue_dl, sf_buffer, data_packed, srslte_ue_sync_get_sfidx(&ue_sync), SRSLTE_SIRNTI,
((int) ceilf((float)3*(((sfn)/2)%4)/2))%4); ((int) ceilf((float)3*(((sfn)/2)%4)/2))%4);
} }
if (n < 0) { if (n < 0) {
@ -490,7 +490,7 @@ int main(int argc, char **argv) {
sf_cnt++; sf_cnt++;
} // Main loop } // Main loop
srs_ue_dl_free(&ue_dl); srslte_ue_dl_free(&ue_dl);
srslte_ue_sync_free(&ue_sync); srslte_ue_sync_free(&ue_sync);
#ifndef DISABLE_UHD #ifndef DISABLE_UHD

View File

@ -184,7 +184,7 @@ enum receiver_state { DECODE_MIB, SEND_PRACH, RECV_RAR, RECV_CONNSETUP} state;
#define NOF_PRACH_SEQUENCES 52 #define NOF_PRACH_SEQUENCES 52
srs_ue_dl_t ue_dl; srslte_ue_dl_t ue_dl;
srslte_ue_ul_t ue_ul; srslte_ue_ul_t ue_ul;
srslte_ue_sync_t ue_sync; srslte_ue_sync_t ue_sync;
srslte_prach_t prach; srslte_prach_t prach;
@ -413,7 +413,7 @@ int main(int argc, char **argv) {
} }
bzero(ul_signal, sizeof(cf_t) * SRSLTE_SF_LEN_PRB(cell.nof_prb)); bzero(ul_signal, sizeof(cf_t) * SRSLTE_SF_LEN_PRB(cell.nof_prb));
if (srs_ue_dl_init(&ue_dl, cell)) { if (srslte_ue_dl_init(&ue_dl, cell)) {
fprintf(stderr, "Error initiating UE downlink processing module\n"); fprintf(stderr, "Error initiating UE downlink processing module\n");
exit(-1); exit(-1);
} }
@ -522,7 +522,7 @@ int main(int argc, char **argv) {
if ((sfn == rar_window_start && srslte_ue_sync_get_sfidx(&ue_sync) > 3) || sfn > rar_window_start) { if ((sfn == rar_window_start && srslte_ue_sync_get_sfidx(&ue_sync) > 3) || sfn > rar_window_start) {
printf("Looking for RAR in sfn: %d sf_idx: %d\n", sfn, srslte_ue_sync_get_sfidx(&ue_sync)); printf("Looking for RAR in sfn: %d sf_idx: %d\n", sfn, srslte_ue_sync_get_sfidx(&ue_sync));
n = srs_ue_dl_decode_rnti(&ue_dl, sf_buffer, data_rx, srslte_ue_sync_get_sfidx(&ue_sync), ra_rnti); n = srslte_ue_dl_decode_rnti(&ue_dl, sf_buffer, data_rx, srslte_ue_sync_get_sfidx(&ue_sync), ra_rnti);
if (n < 0) { if (n < 0) {
fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); fprintf(stderr, "Error decoding UE DL\n");fflush(stdout);
} else if (n > 0) { } else if (n > 0) {
@ -636,7 +636,7 @@ int main(int argc, char **argv) {
//srslte_verbose=SRSLTE_VERBOSE_NONE; //srslte_verbose=SRSLTE_VERBOSE_NONE;
} }
printf("Looking for ConnectionSetup in sfn: %d sf_idx: %d, RNTI: %d\n", sfn, srslte_ue_sync_get_sfidx(&ue_sync),rar_msg.temp_c_rnti); printf("Looking for ConnectionSetup in sfn: %d sf_idx: %d, RNTI: %d\n", sfn, srslte_ue_sync_get_sfidx(&ue_sync),rar_msg.temp_c_rnti);
n = srs_ue_dl_decode_rnti(&ue_dl, sf_buffer, data_rx, srslte_ue_sync_get_sfidx(&ue_sync), rar_msg.temp_c_rnti); n = srslte_ue_dl_decode_rnti(&ue_dl, sf_buffer, data_rx, srslte_ue_sync_get_sfidx(&ue_sync), rar_msg.temp_c_rnti);
if (n < 0) { if (n < 0) {
fprintf(stderr, "Error decoding UE DL\n");fflush(stdout); fprintf(stderr, "Error decoding UE DL\n");fflush(stdout);
} else if (n > 0) { } else if (n > 0) {
@ -669,7 +669,7 @@ int main(int argc, char **argv) {
sf_cnt++; sf_cnt++;
} // Main loop } // Main loop
srs_ue_dl_free(&ue_dl); srslte_ue_dl_free(&ue_dl);
srslte_ue_sync_free(&ue_sync); srslte_ue_sync_free(&ue_sync);
srslte_ue_mib_free(&ue_mib); srslte_ue_mib_free(&ue_mib);

View File

@ -47,8 +47,8 @@ typedef struct SRSLTE_API {
srslte_ra_mcs_t mcs; srslte_ra_mcs_t mcs;
uint32_t rv; uint32_t rv;
uint32_t sf_idx; uint32_t sf_idx;
srslte_srslte_ra_dl_alloc_t dl_alloc; srslte_ra_dl_alloc_t dl_alloc;
srslte_srslte_ra_ul_alloc_t ul_alloc; srslte_ra_ul_alloc_t ul_alloc;
srslte_cell_t cell; srslte_cell_t cell;
uint32_t nof_re; // Number of RE per subframe uint32_t nof_re; // Number of RE per subframe
@ -72,13 +72,13 @@ SRSLTE_API int srslte_harq_setup_dl(srslte_harq_t *p,
srslte_ra_mcs_t mcs, srslte_ra_mcs_t mcs,
uint32_t rv, uint32_t rv,
uint32_t sf_idx, uint32_t sf_idx,
srslte_srslte_ra_dl_alloc_t *prb_alloc); srslte_ra_dl_alloc_t *prb_alloc);
SRSLTE_API int srslte_harq_setup_ul(srslte_harq_t *p, SRSLTE_API int srslte_harq_setup_ul(srslte_harq_t *p,
srslte_ra_mcs_t mcs, srslte_ra_mcs_t mcs,
uint32_t rv, uint32_t rv,
uint32_t sf_idx, uint32_t sf_idx,
srslte_srslte_ra_ul_alloc_t *prb_alloc); srslte_ra_ul_alloc_t *prb_alloc);
SRSLTE_API void srslte_harq_reset(srslte_harq_t *p); SRSLTE_API void srslte_harq_reset(srslte_harq_t *p);

View File

@ -52,6 +52,11 @@ typedef _Complex float cf_t;
#define SRSLTE_PHICH_NORM_NSF 4 #define SRSLTE_PHICH_NORM_NSF 4
#define SRSLTE_PHICH_EXT_NSF 2 #define SRSLTE_PHICH_EXT_NSF 2
typedef struct SRSLTE_API {
uint32_t ngroup;
uint32_t nseq;
}srslte_phich_alloc_t;
/* phich object */ /* phich object */
typedef struct SRSLTE_API { typedef struct SRSLTE_API {
srslte_cell_t cell; srslte_cell_t cell;

View File

@ -83,14 +83,14 @@ typedef struct SRSLTE_API {
srslte_ra_prb_slot_t slot[2]; srslte_ra_prb_slot_t slot[2];
uint32_t lstart; uint32_t lstart;
uint32_t re_sf[SRSLTE_NSUBFRAMES_X_FRAME]; uint32_t re_sf[SRSLTE_NSUBFRAMES_X_FRAME];
} srslte_srslte_ra_dl_alloc_t; } srslte_ra_dl_alloc_t;
typedef struct SRSLTE_API { typedef struct SRSLTE_API {
uint32_t n_prb[2]; uint32_t n_prb[2];
uint32_t n_prb_tilde[2]; uint32_t n_prb_tilde[2];
uint32_t L_prb; uint32_t L_prb;
uint32_t freq_hopping; uint32_t freq_hopping;
} srslte_srslte_ra_ul_alloc_t; } srslte_ra_ul_alloc_t;
typedef struct SRSLTE_API { typedef struct SRSLTE_API {
uint16_t rnti; uint16_t rnti;
@ -100,7 +100,7 @@ typedef struct SRSLTE_API {
srslte_ra_type1_t type1_alloc; srslte_ra_type1_t type1_alloc;
srslte_ra_type2_t type2_alloc; srslte_ra_type2_t type2_alloc;
}; };
srslte_srslte_ra_dl_alloc_t prb_alloc; srslte_ra_dl_alloc_t prb_alloc;
uint32_t mcs_idx; uint32_t mcs_idx;
srslte_ra_mcs_t mcs; srslte_ra_mcs_t mcs;
uint32_t harq_process; uint32_t harq_process;
@ -120,13 +120,13 @@ typedef struct SRSLTE_API {
SRSLTE_RA_PUSCH_HOP_TYPE2 = 3 SRSLTE_RA_PUSCH_HOP_TYPE2 = 3
} freq_hop_fl; } freq_hop_fl;
srslte_srslte_ra_ul_alloc_t prb_alloc; srslte_ra_ul_alloc_t prb_alloc;
srslte_ra_type2_t type2_alloc; srslte_ra_type2_t type2_alloc;
uint32_t mcs_idx; uint32_t mcs_idx;
srslte_ra_mcs_t mcs; srslte_ra_mcs_t mcs;
uint32_t rv_idx; // If set to non-zero, a retransmission is requested with the same modulation uint32_t rv_idx; // If set to non-zero, a retransmission is requested with the same modulation
// than before (SRSLTE_DCI_FORMAT0 message, see also 8.6.1 in 36.2313). // than before (SRSLTE_DCI_FORMAT0 message, see also 8.6.1 in 36.2313).
bool ndi; bool ndi;
bool cqi_request; bool cqi_request;
@ -136,16 +136,16 @@ SRSLTE_API void srslte_ra_prb_fprint(FILE *f,
srslte_ra_prb_slot_t *prb, srslte_ra_prb_slot_t *prb,
uint32_t nof_prb); uint32_t nof_prb);
SRSLTE_API int srslte_ra_dl_alloc(srslte_srslte_ra_dl_alloc_t *prb, SRSLTE_API int srslte_ra_dl_alloc(srslte_ra_dl_alloc_t *prb,
srslte_ra_pdsch_t *ra, srslte_ra_pdsch_t *ra,
uint32_t nof_prb); uint32_t nof_prb);
SRSLTE_API int srslte_ra_ul_alloc(srslte_srslte_ra_ul_alloc_t *prb, SRSLTE_API int srslte_ra_ul_alloc(srslte_ra_ul_alloc_t *prb,
srslte_ra_pusch_t *ra, srslte_ra_pusch_t *ra,
uint32_t n_rb_ho, uint32_t n_rb_ho,
uint32_t nof_prb); uint32_t nof_prb);
SRSLTE_API void srslte_ra_dl_alloc_re(srslte_srslte_ra_dl_alloc_t *prb_dist, SRSLTE_API void srslte_ra_dl_alloc_re(srslte_ra_dl_alloc_t *prb_dist,
uint32_t nof_prb, uint32_t nof_prb,
uint32_t nof_ports, uint32_t nof_ports,
uint32_t nof_ctrl_symbols, uint32_t nof_ctrl_symbols,
@ -165,7 +165,7 @@ SRSLTE_API int srslte_ra_mcs_from_idx_ul(uint32_t mcs_idx,
uint32_t nof_prb, uint32_t nof_prb,
srslte_ra_mcs_t *mcs); srslte_ra_mcs_t *mcs);
SRSLTE_API int srslte_srslte_ra_tbs_from_idx_format1c(uint32_t tbs_idx); SRSLTE_API int srslte_ra_tbs_from_idx_format1c(uint32_t tbs_idx);
SRSLTE_API int srslte_ra_tbs_from_idx(uint32_t tbs_idx, SRSLTE_API int srslte_ra_tbs_from_idx(uint32_t tbs_idx,
uint32_t n_prb); uint32_t n_prb);

View File

@ -76,54 +76,54 @@ typedef struct SRSLTE_API {
uint64_t nof_detected; uint64_t nof_detected;
uint16_t current_rnti; uint16_t current_rnti;
}srs_ue_dl_t; }srslte_ue_dl_t;
/* This function shall be called just after the initial synchronization */ /* This function shall be called just after the initial synchronization */
SRSLTE_API int srs_ue_dl_init(srs_ue_dl_t *q, SRSLTE_API int srslte_ue_dl_init(srslte_ue_dl_t *q,
srslte_cell_t cell); srslte_cell_t cell);
SRSLTE_API void srs_ue_dl_free(srs_ue_dl_t *q); SRSLTE_API void srslte_ue_dl_free(srslte_ue_dl_t *q);
SRSLTE_API int srs_ue_dl_decode_fft_estimate(srs_ue_dl_t *q, SRSLTE_API int srslte_ue_dl_decode_fft_estimate(srslte_ue_dl_t *q,
cf_t *input, cf_t *input,
uint32_t sf_idx, uint32_t sf_idx,
uint32_t *cfi); uint32_t *cfi);
SRSLTE_API int srs_ue_dl_decode_rnti_rv_packet(srs_ue_dl_t *q, SRSLTE_API int srslte_ue_dl_decode_rnti_rv_packet(srslte_ue_dl_t *q,
srslte_dci_msg_t *dci_msg, srslte_dci_msg_t *dci_msg,
uint8_t *data, uint8_t *data,
uint32_t cfi, uint32_t cfi,
uint32_t sf_idx, uint32_t sf_idx,
uint16_t rnti, uint16_t rnti,
uint32_t rvidx); uint32_t rvidx);
SRSLTE_API int srs_ue_dl_find_ul_dci(srs_ue_dl_t *q, SRSLTE_API int srslte_ue_dl_find_ul_dci(srslte_ue_dl_t *q,
srslte_dci_msg_t *dci_msg, srslte_dci_msg_t *dci_msg,
uint32_t cfi, uint32_t cfi,
uint32_t sf_idx,
uint16_t rnti);
SRSLTE_API int srs_ue_dl_decode(srs_ue_dl_t * q,
cf_t *input,
uint8_t *data,
uint32_t sf_idx);
SRSLTE_API int srs_ue_dl_decode_rnti(srs_ue_dl_t * q,
cf_t *input,
uint8_t *data,
uint32_t sf_idx,
uint16_t rnti);
SRSLTE_API int srs_ue_dl_decode_rnti_rv(srs_ue_dl_t * q,
cf_t *input,
uint8_t * data,
uint32_t sf_idx, uint32_t sf_idx,
uint16_t rnti, uint16_t rnti);
uint32_t rvidx);
SRSLTE_API void srs_ue_dl_reset(srs_ue_dl_t *q); SRSLTE_API int srslte_ue_dl_decode(srslte_ue_dl_t * q,
cf_t *input,
uint8_t *data,
uint32_t sf_idx);
SRSLTE_API void srs_ue_dl_set_rnti(srs_ue_dl_t *q, SRSLTE_API int srslte_ue_dl_decode_rnti(srslte_ue_dl_t * q,
uint16_t rnti); cf_t *input,
uint8_t *data,
uint32_t sf_idx,
uint16_t rnti);
SRSLTE_API int srslte_ue_dl_decode_rnti_rv(srslte_ue_dl_t * q,
cf_t *input,
uint8_t * data,
uint32_t sf_idx,
uint16_t rnti,
uint32_t rvidx);
SRSLTE_API void srslte_ue_dl_reset(srslte_ue_dl_t *q);
SRSLTE_API void srslte_ue_dl_set_rnti(srslte_ue_dl_t *q,
uint16_t rnti);
#endif #endif

View File

@ -1,6 +0,0 @@
class srslte_ue_mac_itf
{
public:
virtual void ready_to_send() = 0;
};

View File

@ -25,139 +25,103 @@
* *
*/ */
#include "ue_mac_itf.h" #include "srslte/srslte.h"
#include "srslte/utils/queue.h" #include "srslte/utils/queue.h"
#ifndef UEPHY_H #ifndef UEPHY_H
#define UEPHY_H #define UEPHY_H
#define SYNC_MODE_CV 0
#define SYNC_MODE_CALLBACK 1
#define SYNC_MODE SYNC_MODE_CV
namespace srslte {
typedef _Complex float cf_t; typedef _Complex float cf_t;
class srslte_ue_phy class ue_phy
{ {
public: public:
class pdcch_ul_search : public queue::element { typedef enum {DOWNLINK, UPLINK} direction_t;
typedef enum {
PDCCH_UL_SEARCH_CRNTI = 0,
PDCCH_UL_SEARCH_RA_PROC,
PDCCH_UL_SEARCH_SPS,
PDCCH_UL_SEARCH_TEMPORAL,
PDCCH_UL_SEARCH_TPC_PUSCH,
PDCCH_UL_SEARCH_TPC_PUCCH
} pdcch_ul_search_t;
typedef enum {
PDCCH_DL_SEARCH_CRNTI = 0,
PDCCH_DL_SEARCH_SIRNTI,
PDCCH_DL_SEARCH_PRNTI,
PDCCH_DL_SEARCH_RARNTI,
PDCCH_DL_SEARCH_TEMPORAL,
PDCCH_DL_SEARCH_SPS
} pdcch_dl_search_t;
/* Uplink/Downlink scheduling grant generated by a successfully decoded PDCCH */
class sched_grant {
public: public:
set_crnti(uint16_t rnti);
set_crnti_ra_procedure(uint16_t rnti);
set_sps_crnti(uint16_t rnti);
set_temporal_crnti(uint16_t rnti);
set_tpc_pusch(uint16_t rnti);
set_tpc_pucch(uint16_t rnti);
private:
uint16_t rnti;
bool is_crnti = false;
bool is_crnti_ra_procedure = false;
bool is_sps_crnti = false;
bool is_t_crnti = false;
bool is_tpc_pusch = false;
bool is_tpc_pucch = false;
};
class dl_search : public queue::element {
public:
set_crnti(uint16_t rnti);
set_crnti_ra_procedure(uint16_t rnti);
set_sps_crnti(uint16_t rnti);
set_temporal_crnti(uint16_t rnti);
set_tpc_pusch(uint16_t rnti);
set_tpc_pucch(uint16_t rnti);
private:
uint16_t rnti;
bool is_crnti = false;
bool is_crnti_ra_procedure = false;
bool is_sps_crnti = false;
bool is_t_crnti = false;
bool is_tpc_pusch = false;
bool is_tpc_pucch = false;
};
class ul_allocation {
};
class ul_assignment : public queue::element {
public:
ul_assignment(uint32_t nof_prb, uint32_t max_ulsch_bits);
void set_allocation(ul_allocation allocation);
uint8_t* get_ulsch_buffer();
cf_t* get_signal_buffer();
void set_uci_data();
void generate_signal();
private:
cf_t* signal_buffer = NULL;
uint8_t* ulsch_buffer;
ul_allocation allocation;
};
class dl_allocation {
};
class dl_assignment : public queue::element {
public:
void set_allocation(dl_allocation allocation);
private:
dl_allocation allocation;
};
class phich_assignment {
};
class phich_assignment : public queue::element {
public:
phich_assignment();
void set_allocation(phich_assignment assignment);
private:
phich_assignment assignment;
};
class dl_tb : public queue::element {
public:
dl_tb(uint32_t max_dlsch_bits);
uint16_t get_rnti(); uint16_t get_rnti();
bool is_srslte_crc_valid(); uint32_t get_rv();
uint8_t* get_dlsch_payload(); void set_rv(uint32_t rv);
bool get_ndi();
bool get_cqi_request();
uint32_t get_harq_process();
private: private:
uint8_t* dlsch_buffer; union {
uint16_t rnti; srslte_ra_pusch_t ul_grant;
bool srslte_crc_result; srslte_ra_pdsch_t dl_grant;
};
direction_t dir;
}; };
class dl_grant : public queue::element {
/* Uplink scheduling assignment. The MAC instructs the PHY to prepare an UL packet (PUSCH or PUCCH)
* for transmission. The MAC must call generate_pusch() to set the packet ready for transmission
*/
class ul_buffer : public queue::element {
public: public:
dl_allocation get_allocation(); ul_buffer(srslte_cell_t cell);
void generate_pusch(sched_grant pusch_grant, uint8_t *payload, srslte_uci_data_t uci_data);
void generate_pucch(srslte_uci_data_t uci_data);
private: private:
dl_allocation allocation; srslte_ue_ul_t ue_ul;
bool signal_generated = false;
cf_t* signal_buffer = NULL;
uint32_t tti = 0;
}; };
class ul_grant : public queue::element { /* Class for the processing of Downlink buffers. The MAC obtains a buffer for a given TTI and then
* gets ul/dl scheduling grants and/or processes phich/pdsch channels
*/
class dl_buffer : public queue::element {
public: public:
ul_allocation get_allocation(); dl_buffer(srslte_cell_t cell);
sched_grant get_ul_grant(pdcch_ul_search_t mode, uint32_t rnti);
sched_grant get_dl_grant(pdcch_dl_search_t mode, uint32_t rnti);
bool decode_phich(srslte_phich_alloc_t assignment);
bool decode_pdsch(sched_grant pdsch_grant, uint8_t *payload); // returns true or false for CRC OK/KO
private: private:
ul_allocation allocation; srslte_ue_dl_t ue_dl;
srslte_phich_t phich;
cf_t *signal_buffer = NULL;
bool sf_symbols_and_ce_done = false;
bool pdcch_llr_extracted = false;
uint32_t tti = 0;
}; };
class ul_ack : public queue::element {
public:
bool get_ack();
private:
bool ack;
};
class rx_buffer : public queue::element { #if SYNC_MODE==SYNC_MODE_CALLBACK
public: typedef (*ue_phy_tti_clock_fcn_t) (void);
rx_buffer(uint32_t nof_prb); ue_phy(ue_phy_tti_clock_fcn_t tti_clock_callback);
cf_t* get_signal_buffer(); #else
private: ue_phy();
uint32_t nof_prb; #endif
cf_t* signal_buffer;
};
ue_phy(ue_mac_itf *mac);
~ue_phy(); ~ue_phy();
void measure(); // TBD void measure(); // TBD
@ -168,35 +132,30 @@ public:
void send_prach(/* prach_cfg_t in prach.h with power, seq idx, etc */); void send_prach(/* prach_cfg_t in prach.h with power, seq idx, etc */);
void set_param(); void set_param();
pdcch_ul_search* get_pdcch_ul_search(uint32_t tti); uint32_t get_tti();
dl_search* get_dl_search(uint32_t tti); #if SYNC_MODE==SYNC_MODE_CV
ul_assignment* get_ul_assignment(uint32_t tti); std::condition_variable tti_cv;
dl_assignment* get_dl_assignment(uint32_t tti); std::mutex tti_mutex;
phich_assignment* get_phich_assignment(uint32_t tti); #endif
dl_tb* get_dl_tb(uint32_t tti);
dl_grant* get_dl_grant(uint32_t tti); ul_buffer get_ul_buffer(uint32_t tti);
ul_grant* get_ul_grant(uint32_t tti); dl_buffer get_dl_buffer(uint32_t tti);
ul_ack* get_ul_ack(uint32_t tti);
private: private:
enum { enum {
IDLE, MEASURE, RX_BCH, RXTX IDLE, MEASURE, RX_BCH, RXTX
} phy_state; } phy_state;
bool srslte_prach_initiated = false; bool prach_initiated = false;
bool prach_ready_to_send = false; bool prach_ready_to_send = false;
srslte_prach_t prach;
queue pdcch_ul_search; queue ul_buffer_queue;
queue dl_search; queue dl_buffer_queue;
queue ul_assignment;
queue dl_assignment;
queue phich_assignment;
queue dl_tb;
queue dl_grant;
queue ul_grant;
queue ul_grant;
queue rx_buffer;
pthread_t radio_thread;
void *radio_handler;
}; };
}
#endif #endif

View File

@ -123,7 +123,7 @@ SRSLTE_API int srslte_ue_sync_get_buffer(srslte_ue_sync_t *q,
SRSLTE_API void srslte_ue_sync_reset(srslte_ue_sync_t *q); SRSLTE_API void srslte_ue_sync_reset(srslte_ue_sync_t *q);
SRSLTE_API void ue_srslte_sync_set_N_id_2(srslte_ue_sync_t *q, SRSLTE_API void srslte_ue_sync_set_N_id_2(srslte_ue_sync_t *q,
uint32_t N_id_2); uint32_t N_id_2);
SRSLTE_API void srslte_ue_sync_decode_sss_on_track(srslte_ue_sync_t *q, SRSLTE_API void srslte_ue_sync_decode_sss_on_track(srslte_ue_sync_t *q,

View File

@ -25,12 +25,12 @@
* *
*/ */
#include "ue_mac_itf.h"
#ifndef QUEUE_H #ifndef QUEUE_H
#define QUEUE_H #define QUEUE_H
class srslte_queue namespace srslte {
class queue
{ {
public: public:
@ -81,4 +81,6 @@ private:
}; };
}
#endif #endif

View File

@ -756,7 +756,7 @@ int dci_format1Cs_unpack(srslte_dci_msg_t *msg, srslte_ra_pdsch_t *data, uint32_
data->type2_alloc.riv = riv; data->type2_alloc.riv = riv;
data->mcs_idx = srslte_bit_unpack(&y, 5); data->mcs_idx = srslte_bit_unpack(&y, 5);
data->mcs.tbs = srslte_srslte_ra_tbs_from_idx_format1c(data->mcs_idx); data->mcs.tbs = srslte_ra_tbs_from_idx_format1c(data->mcs_idx);
data->mcs.mod = SRSLTE_MOD_QPSK; data->mcs.mod = SRSLTE_MOD_QPSK;
msg->nof_bits = (y - msg->data); msg->nof_bits = (y - msg->data);

View File

@ -180,7 +180,7 @@ void srslte_harq_reset(srslte_harq_t *q) {
} }
bzero(&q->mcs, sizeof(srslte_ra_mcs_t)); bzero(&q->mcs, sizeof(srslte_ra_mcs_t));
bzero(&q->cb_segm, sizeof(srslte_harq_cbsegm_t)); bzero(&q->cb_segm, sizeof(srslte_harq_cbsegm_t));
bzero(&q->dl_alloc, sizeof(srslte_srslte_ra_dl_alloc_t)); bzero(&q->dl_alloc, sizeof(srslte_ra_dl_alloc_t));
} }
static int harq_setup_common(srslte_harq_t *q, srslte_ra_mcs_t mcs, uint32_t rv, uint32_t sf_idx) { static int harq_setup_common(srslte_harq_t *q, srslte_ra_mcs_t mcs, uint32_t rv, uint32_t sf_idx) {
@ -199,7 +199,7 @@ static int harq_setup_common(srslte_harq_t *q, srslte_ra_mcs_t mcs, uint32_t rv,
return SRSLTE_SUCCESS; return SRSLTE_SUCCESS;
} }
int srslte_harq_setup_dl(srslte_harq_t *q, srslte_ra_mcs_t mcs, uint32_t rv, uint32_t sf_idx, srslte_srslte_ra_dl_alloc_t *dl_alloc) { int srslte_harq_setup_dl(srslte_harq_t *q, srslte_ra_mcs_t mcs, uint32_t rv, uint32_t sf_idx, srslte_ra_dl_alloc_t *dl_alloc) {
int ret = SRSLTE_ERROR_INVALID_INPUTS; int ret = SRSLTE_ERROR_INVALID_INPUTS;
if (q != NULL && if (q != NULL &&
@ -210,7 +210,7 @@ int srslte_harq_setup_dl(srslte_harq_t *q, srslte_ra_mcs_t mcs, uint32_t rv, uin
if (ret) { if (ret) {
return ret; return ret;
} }
memcpy(&q->dl_alloc, dl_alloc, sizeof(srslte_srslte_ra_dl_alloc_t)); memcpy(&q->dl_alloc, dl_alloc, sizeof(srslte_ra_dl_alloc_t));
// Number of symbols, RE and bits per subframe for DL // Number of symbols, RE and bits per subframe for DL
q->nof_re = q->dl_alloc.re_sf[q->sf_idx]; q->nof_re = q->dl_alloc.re_sf[q->sf_idx];
@ -223,7 +223,7 @@ int srslte_harq_setup_dl(srslte_harq_t *q, srslte_ra_mcs_t mcs, uint32_t rv, uin
return ret; return ret;
} }
int srslte_harq_setup_ul(srslte_harq_t *q, srslte_ra_mcs_t mcs, uint32_t rv, uint32_t sf_idx, srslte_srslte_ra_ul_alloc_t *ul_alloc) { int srslte_harq_setup_ul(srslte_harq_t *q, srslte_ra_mcs_t mcs, uint32_t rv, uint32_t sf_idx, srslte_ra_ul_alloc_t *ul_alloc) {
int ret = SRSLTE_ERROR_INVALID_INPUTS; int ret = SRSLTE_ERROR_INVALID_INPUTS;
if (q != NULL && if (q != NULL &&
@ -234,7 +234,7 @@ int srslte_harq_setup_ul(srslte_harq_t *q, srslte_ra_mcs_t mcs, uint32_t rv, uin
if (ret) { if (ret) {
return ret; return ret;
} }
memcpy(&q->ul_alloc, ul_alloc, sizeof(srslte_srslte_ra_ul_alloc_t)); memcpy(&q->ul_alloc, ul_alloc, sizeof(srslte_ra_ul_alloc_t));
// Number of symbols, RE and bits per subframe for UL // Number of symbols, RE and bits per subframe for UL
q->nof_symb = 2*(SRSLTE_CP_NSYMB(q->cell.cp)-1); q->nof_symb = 2*(SRSLTE_CP_NSYMB(q->cell.cp)-1);

View File

@ -58,7 +58,7 @@ extern int indices_ptr;
#endif #endif
int srslte_pdsch_cp(srslte_pdsch_t *q, cf_t *input, cf_t *output, srslte_srslte_ra_dl_alloc_t *prb_alloc, int srslte_pdsch_cp(srslte_pdsch_t *q, cf_t *input, cf_t *output, srslte_ra_dl_alloc_t *prb_alloc,
uint32_t nsubframe, bool put) { uint32_t nsubframe, bool put) {
uint32_t s, n, l, lp, lstart, lend, nof_refs; uint32_t s, n, l, lp, lstart, lend, nof_refs;
bool is_pbch, is_sss; bool is_pbch, is_sss;
@ -179,7 +179,7 @@ int srslte_pdsch_cp(srslte_pdsch_t *q, cf_t *input, cf_t *output, srslte_srslte_
* 36.211 10.3 section 6.3.5 * 36.211 10.3 section 6.3.5
*/ */
int srslte_pdsch_put(srslte_pdsch_t *q, cf_t *symbols, cf_t *sf_symbols, int srslte_pdsch_put(srslte_pdsch_t *q, cf_t *symbols, cf_t *sf_symbols,
srslte_srslte_ra_dl_alloc_t *prb_alloc, uint32_t subframe) { srslte_ra_dl_alloc_t *prb_alloc, uint32_t subframe) {
return srslte_pdsch_cp(q, symbols, sf_symbols, prb_alloc, subframe, true); return srslte_pdsch_cp(q, symbols, sf_symbols, prb_alloc, subframe, true);
} }
@ -191,7 +191,7 @@ int srslte_pdsch_put(srslte_pdsch_t *q, cf_t *symbols, cf_t *sf_symbols,
* 36.211 10.3 section 6.3.5 * 36.211 10.3 section 6.3.5
*/ */
int srslte_pdsch_get(srslte_pdsch_t *q, cf_t *sf_symbols, cf_t *symbols, int srslte_pdsch_get(srslte_pdsch_t *q, cf_t *sf_symbols, cf_t *symbols,
srslte_srslte_ra_dl_alloc_t *prb_alloc, uint32_t subframe) { srslte_ra_dl_alloc_t *prb_alloc, uint32_t subframe) {
return srslte_pdsch_cp(q, sf_symbols, symbols, prb_alloc, subframe, false); return srslte_pdsch_cp(q, sf_symbols, symbols, prb_alloc, subframe, false);
} }

View File

@ -122,9 +122,9 @@ void srslte_ra_prb_fprint(FILE *f, srslte_ra_prb_slot_t *prb, uint32_t nof_prb)
} }
/** Compute PRB allocation for Uplink as defined in 8.1 and 8.4 of 36.213 */ /** Compute PRB allocation for Uplink as defined in 8.1 and 8.4 of 36.213 */
int srslte_ra_ul_alloc(srslte_srslte_ra_ul_alloc_t *prb_dist, srslte_ra_pusch_t *ra, uint32_t n_rb_ho, uint32_t nof_prb) { int srslte_ra_ul_alloc(srslte_ra_ul_alloc_t *prb_dist, srslte_ra_pusch_t *ra, uint32_t n_rb_ho, uint32_t nof_prb) {
bzero(prb_dist, sizeof(srslte_srslte_ra_ul_alloc_t)); bzero(prb_dist, sizeof(srslte_ra_ul_alloc_t));
prb_dist->L_prb = ra->type2_alloc.L_crb; prb_dist->L_prb = ra->type2_alloc.L_crb;
uint32_t n_prb_1 = ra->type2_alloc.RB_start; uint32_t n_prb_1 = ra->type2_alloc.RB_start;
uint32_t n_rb_pusch = 0; uint32_t n_rb_pusch = 0;
@ -184,7 +184,7 @@ int srslte_ra_ul_alloc(srslte_srslte_ra_ul_alloc_t *prb_dist, srslte_ra_pusch_t
} }
/* Computes the number of RE for each PRB in the prb_dist structure */ /* Computes the number of RE for each PRB in the prb_dist structure */
void srslte_ra_dl_alloc_re(srslte_srslte_ra_dl_alloc_t *prb_dist, uint32_t nof_prb, uint32_t nof_ports, void srslte_ra_dl_alloc_re(srslte_ra_dl_alloc_t *prb_dist, uint32_t nof_prb, uint32_t nof_ports,
uint32_t nof_ctrl_symbols, srslte_cp_t cp) { uint32_t nof_ctrl_symbols, srslte_cp_t cp) {
uint32_t i, j, s; uint32_t i, j, s;
@ -205,13 +205,13 @@ void srslte_ra_dl_alloc_re(srslte_srslte_ra_dl_alloc_t *prb_dist, uint32_t nof_p
} }
/** Compute PRB allocation for Downlink as defined in 7.1.6 of 36.213 */ /** Compute PRB allocation for Downlink as defined in 7.1.6 of 36.213 */
int srslte_ra_dl_alloc(srslte_srslte_ra_dl_alloc_t *prb_dist, srslte_ra_pdsch_t *ra, uint32_t nof_prb) { int srslte_ra_dl_alloc(srslte_ra_dl_alloc_t *prb_dist, srslte_ra_pdsch_t *ra, uint32_t nof_prb) {
int i, j; int i, j;
uint32_t bitmask; uint32_t bitmask;
uint32_t P = srslte_ra_type0_P(nof_prb); uint32_t P = srslte_ra_type0_P(nof_prb);
uint32_t n_rb_rbg_subset, n_rb_type1; uint32_t n_rb_rbg_subset, n_rb_type1;
bzero(prb_dist, sizeof(srslte_srslte_ra_dl_alloc_t)); bzero(prb_dist, sizeof(srslte_ra_dl_alloc_t));
switch (ra->alloc_type) { switch (ra->alloc_type) {
case SRSLTE_RA_ALLOC_TYPE0: case SRSLTE_RA_ALLOC_TYPE0:
bitmask = ra->type0_alloc.rbg_bitmask; bitmask = ra->type0_alloc.rbg_bitmask;
@ -487,7 +487,7 @@ int srslte_ra_mcs_from_idx_ul(uint32_t mcs_idx, uint32_t nof_prb, srslte_ra_mcs_
} }
/* Downlink Transport Block size for Format 1C as defined in 7.1.7.2.2-1 on 36.213 */ /* Downlink Transport Block size for Format 1C as defined in 7.1.7.2.2-1 on 36.213 */
int srslte_srslte_ra_tbs_from_idx_format1c(uint32_t tbs_idx) { int srslte_ra_tbs_from_idx_format1c(uint32_t tbs_idx) {
if (tbs_idx < 32) { if (tbs_idx < 32) {
return tbs_format1c_table[tbs_idx]; return tbs_format1c_table[tbs_idx];
} else { } else {
@ -603,7 +603,7 @@ void srslte_ra_pdsch_fprint(FILE *f, srslte_ra_pdsch_t *ra, uint32_t nof_prb) {
break; break;
} }
srslte_srslte_ra_dl_alloc_t alloc; srslte_ra_dl_alloc_t alloc;
srslte_ra_dl_alloc(&alloc, ra, nof_prb); srslte_ra_dl_alloc(&alloc, ra, nof_prb);
for (int s = 0; s < 2; s++) { for (int s = 0; s < 2; s++) {
fprintf(f, " - PRB Bitmap Assignment %dst slot:\n", s); fprintf(f, " - PRB Bitmap Assignment %dst slot:\n", s);

View File

@ -47,7 +47,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
srslte_sch_t dlsch; srslte_sch_t dlsch;
uint8_t *trblkin; uint8_t *trblkin;
srslte_ra_mcs_t mcs; srslte_ra_mcs_t mcs;
srslte_srslte_ra_dl_alloc_t prb_alloc; srslte_ra_dl_alloc_t prb_alloc;
srslte_harq_t harq_process; srslte_harq_t harq_process;
uint32_t rv; uint32_t rv;

View File

@ -132,7 +132,7 @@ int main(int argc, char **argv) {
int ret = -1; int ret = -1;
struct timeval t[3]; struct timeval t[3];
srslte_ra_mcs_t mcs; srslte_ra_mcs_t mcs;
srslte_srslte_ra_dl_alloc_t prb_alloc; srslte_ra_dl_alloc_t prb_alloc;
srslte_harq_t harq_process; srslte_harq_t harq_process;
uint32_t rv; uint32_t rv;

View File

@ -58,7 +58,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
cf_t *input_fft, *input_signal; cf_t *input_fft, *input_signal;
int nof_re; int nof_re;
srslte_ra_mcs_t mcs; srslte_ra_mcs_t mcs;
srslte_srslte_ra_dl_alloc_t dl_alloc; srslte_ra_dl_alloc_t dl_alloc;
srslte_harq_t harq_process; srslte_harq_t harq_process;
uint32_t rv; uint32_t rv;
uint32_t rnti32; uint32_t rnti32;

View File

@ -109,8 +109,8 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
return; return;
} }
srslte_srslte_ra_ul_alloc_t prb_alloc; srslte_ra_ul_alloc_t prb_alloc;
bzero(&prb_alloc, sizeof(srslte_srslte_ra_ul_alloc_t)); bzero(&prb_alloc, sizeof(srslte_ra_ul_alloc_t));
prb_alloc.L_prb = mexutils_read_f(p, &prbset); prb_alloc.L_prb = mexutils_read_f(p, &prbset);
prb_alloc.n_prb[0] = prbset[0]; prb_alloc.n_prb[0] = prbset[0];
prb_alloc.n_prb[1] = prbset[0]; prb_alloc.n_prb[1] = prbset[0];

View File

@ -136,7 +136,7 @@ int main(int argc, char **argv) {
int ret = -1; int ret = -1;
struct timeval t[3]; struct timeval t[3];
srslte_ra_mcs_t mcs; srslte_ra_mcs_t mcs;
srslte_srslte_ra_ul_alloc_t prb_alloc; srslte_ra_ul_alloc_t prb_alloc;
srslte_harq_t harq_process; srslte_harq_t harq_process;
parse_args(argc,argv); parse_args(argc,argv);
@ -144,7 +144,7 @@ int main(int argc, char **argv) {
mcs.tbs = tbs; mcs.tbs = tbs;
mcs.mod = modulation; mcs.mod = modulation;
bzero(&prb_alloc, sizeof(srslte_srslte_ra_ul_alloc_t)); bzero(&prb_alloc, sizeof(srslte_ra_ul_alloc_t));
if (srslte_pusch_init(&pusch, cell)) { if (srslte_pusch_init(&pusch, cell)) {
fprintf(stderr, "Error creating PDSCH object\n"); fprintf(stderr, "Error creating PDSCH object\n");

View File

@ -49,7 +49,7 @@ void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
srslte_sch_t ulsch; srslte_sch_t ulsch;
uint8_t *trblkin; uint8_t *trblkin;
srslte_ra_mcs_t mcs; srslte_ra_mcs_t mcs;
srslte_srslte_ra_ul_alloc_t prb_alloc; srslte_ra_ul_alloc_t prb_alloc;
srslte_harq_t harq_process; srslte_harq_t harq_process;
uint32_t rv; uint32_t rv;
srslte_uci_data_t uci_data; srslte_uci_data_t uci_data;

View File

@ -218,7 +218,7 @@ int srslte_ue_cellsearch_scan_N_id_2(srslte_ue_cellsearch_t * q, uint32_t N_id_2
{ {
ret = SRSLTE_SUCCESS; ret = SRSLTE_SUCCESS;
ue_srslte_sync_set_N_id_2(&q->ue_sync, N_id_2); srslte_ue_sync_set_N_id_2(&q->ue_sync, N_id_2);
srslte_ue_sync_reset(&q->ue_sync); srslte_ue_sync_reset(&q->ue_sync);
do { do {

View File

@ -38,7 +38,7 @@
#define MAX_CANDIDATES 64 #define MAX_CANDIDATES 64
int srs_ue_dl_init(srs_ue_dl_t *q, int srslte_ue_dl_init(srslte_ue_dl_t *q,
srslte_cell_t cell) srslte_cell_t cell)
{ {
int ret = SRSLTE_ERROR_INVALID_INPUTS; int ret = SRSLTE_ERROR_INVALID_INPUTS;
@ -48,7 +48,7 @@ int srs_ue_dl_init(srs_ue_dl_t *q,
{ {
ret = SRSLTE_ERROR; ret = SRSLTE_ERROR;
bzero(q, sizeof(srs_ue_dl_t)); bzero(q, sizeof(srslte_ue_dl_t));
q->cell = cell; q->cell = cell;
q->pkt_errors = 0; q->pkt_errors = 0;
@ -107,12 +107,12 @@ int srs_ue_dl_init(srs_ue_dl_t *q,
clean_exit: clean_exit:
if (ret == SRSLTE_ERROR) { if (ret == SRSLTE_ERROR) {
srs_ue_dl_free(q); srslte_ue_dl_free(q);
} }
return ret; return ret;
} }
void srs_ue_dl_free(srs_ue_dl_t *q) { void srslte_ue_dl_free(srslte_ue_dl_t *q) {
if (q) { if (q) {
srslte_ofdm_tx_free(&q->fft); srslte_ofdm_tx_free(&q->fft);
srslte_chest_dl_free(&q->chest); srslte_chest_dl_free(&q->chest);
@ -132,7 +132,7 @@ void srs_ue_dl_free(srs_ue_dl_t *q) {
} }
} }
bzero(q, sizeof(srs_ue_dl_t)); bzero(q, sizeof(srslte_ue_dl_t));
} }
} }
@ -141,12 +141,12 @@ void srs_ue_dl_free(srs_ue_dl_t *q) {
* to execute, so shall be called once the final C-RNTI has been allocated for the session. * to execute, so shall be called once the final C-RNTI has been allocated for the session.
* For the connection procedure, use srslte_pusch_encode_rnti() or srslte_pusch_decode_rnti() functions * For the connection procedure, use srslte_pusch_encode_rnti() or srslte_pusch_decode_rnti() functions
*/ */
void srs_ue_dl_set_rnti(srs_ue_dl_t *q, uint16_t rnti) { void srslte_ue_dl_set_rnti(srslte_ue_dl_t *q, uint16_t rnti) {
q->current_rnti = rnti; q->current_rnti = rnti;
srslte_pdsch_set_rnti(&q->pdsch, rnti); srslte_pdsch_set_rnti(&q->pdsch, rnti);
} }
void srs_ue_dl_reset(srs_ue_dl_t *q) { void srslte_ue_dl_reset(srslte_ue_dl_t *q) {
srslte_harq_reset(&q->harq_process[0]); srslte_harq_reset(&q->harq_process[0]);
} }
@ -160,18 +160,18 @@ const uint32_t nof_common_formats = 2;
* - OFDM demodulation * - OFDM demodulation
* - Channel estimation * - Channel estimation
* - PCFICH decoding * - PCFICH decoding
* - PDCCH decoding: Find DCI for RNTI given by previous call to srs_ue_dl_set_rnti() * - PDCCH decoding: Find DCI for RNTI given by previous call to srslte_ue_dl_set_rnti()
* - PDSCH decoding: Decode TB scrambling with RNTI given by srs_ue_dl_set_rnti() * - PDSCH decoding: Decode TB scrambling with RNTI given by srslte_ue_dl_set_rnti()
*/ */
int srs_ue_dl_decode(srs_ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx) { int srslte_ue_dl_decode(srslte_ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx) {
return srs_ue_dl_decode_rnti_rv(q, input, data, sf_idx, q->current_rnti, 0); return srslte_ue_dl_decode_rnti_rv(q, input, data, sf_idx, q->current_rnti, 0);
} }
int srs_ue_dl_decode_rnti(srs_ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint16_t rnti) { int srslte_ue_dl_decode_rnti(srslte_ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint16_t rnti) {
return srs_ue_dl_decode_rnti_rv(q, input, data, sf_idx, rnti, 0); return srslte_ue_dl_decode_rnti_rv(q, input, data, sf_idx, rnti, 0);
} }
int srs_ue_dl_decode_fft_estimate(srs_ue_dl_t *q, cf_t *input, uint32_t sf_idx, uint32_t *cfi) { int srslte_ue_dl_decode_fft_estimate(srslte_ue_dl_t *q, cf_t *input, uint32_t sf_idx, uint32_t *cfi) {
float cfi_corr; float cfi_corr;
if (input && q && cfi && sf_idx < SRSLTE_NSUBFRAMES_X_FRAME) { if (input && q && cfi && sf_idx < SRSLTE_NSUBFRAMES_X_FRAME) {
@ -208,7 +208,7 @@ int srs_ue_dl_decode_fft_estimate(srs_ue_dl_t *q, cf_t *input, uint32_t sf_idx,
} }
} }
int srs_ue_dl_decode_rnti_rv_packet(srs_ue_dl_t *q, srslte_dci_msg_t *dci_msg, uint8_t *data, int srslte_ue_dl_decode_rnti_rv_packet(srslte_ue_dl_t *q, srslte_dci_msg_t *dci_msg, uint8_t *data,
uint32_t cfi, uint32_t sf_idx, uint16_t rnti, uint32_t rvidx) uint32_t cfi, uint32_t sf_idx, uint16_t rnti, uint32_t rvidx)
{ {
int ret = SRSLTE_ERROR; int ret = SRSLTE_ERROR;
@ -245,7 +245,7 @@ int srs_ue_dl_decode_rnti_rv_packet(srs_ue_dl_t *q, srslte_dci_msg_t *dci_msg, u
return ret; return ret;
} }
int srs_ue_dl_find_ul_dci(srs_ue_dl_t *q, srslte_dci_msg_t *dci_msg, uint32_t cfi, uint32_t sf_idx, uint16_t rnti) int srslte_ue_dl_find_ul_dci(srslte_ue_dl_t *q, srslte_dci_msg_t *dci_msg, uint32_t cfi, uint32_t sf_idx, uint16_t rnti)
{ {
srslte_dci_location_t locations[MAX_CANDIDATES]; srslte_dci_location_t locations[MAX_CANDIDATES];
uint32_t nof_locations = srslte_pdcch_ue_locations(&q->pdcch, locations, MAX_CANDIDATES, sf_idx, cfi, rnti); uint32_t nof_locations = srslte_pdcch_ue_locations(&q->pdcch, locations, MAX_CANDIDATES, sf_idx, cfi, rnti);
@ -260,7 +260,7 @@ int srs_ue_dl_find_ul_dci(srs_ue_dl_t *q, srslte_dci_msg_t *dci_msg, uint32_t cf
return srslte_crc_rem == rnti; return srslte_crc_rem == rnti;
} }
int srs_ue_dl_decode_rnti_rv(srs_ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint16_t rnti, uint32_t rvidx) int srslte_ue_dl_decode_rnti_rv(srslte_ue_dl_t *q, cf_t *input, uint8_t *data, uint32_t sf_idx, uint16_t rnti, uint32_t rvidx)
{ {
uint32_t cfi, i; uint32_t cfi, i;
srslte_dci_msg_t dci_msg; srslte_dci_msg_t dci_msg;
@ -271,7 +271,7 @@ int srs_ue_dl_decode_rnti_rv(srs_ue_dl_t *q, cf_t *input, uint8_t *data, uint32_
uint32_t nof_formats; uint32_t nof_formats;
srslte_dci_format_t *formats = NULL; srslte_dci_format_t *formats = NULL;
if ((ret = srs_ue_dl_decode_fft_estimate(q, input, sf_idx, &cfi)) < 0) { if ((ret = srslte_ue_dl_decode_fft_estimate(q, input, sf_idx, &cfi)) < 0) {
return ret; return ret;
} }
@ -300,7 +300,7 @@ int srs_ue_dl_decode_rnti_rv(srs_ue_dl_t *q, cf_t *input, uint8_t *data, uint32_
if (srslte_crc_rem == rnti) { if (srslte_crc_rem == rnti) {
found_dci++; found_dci++;
ret = srs_ue_dl_decode_rnti_rv_packet(q, &dci_msg, data, cfi, sf_idx, rnti, rvidx); ret = srslte_ue_dl_decode_rnti_rv_packet(q, &dci_msg, data, cfi, sf_idx, rnti, rvidx);
} }
} }
} }

View File

@ -228,7 +228,7 @@ void srslte_ue_sync_decode_sss_on_track(srslte_ue_sync_t *q, bool enabled) {
q->decode_sss_on_track = enabled; q->decode_sss_on_track = enabled;
} }
void ue_srslte_sync_set_N_id_2(srslte_ue_sync_t *q, uint32_t N_id_2) { void srslte_ue_sync_set_N_id_2(srslte_ue_sync_t *q, uint32_t N_id_2) {
if (!q->file_mode) { if (!q->file_mode) {
srslte_ue_sync_reset(q); srslte_ue_sync_reset(q);
srslte_sync_set_N_id_2(&q->strack, N_id_2); srslte_sync_set_N_id_2(&q->strack, N_id_2);