Commit a0f375f5 authored by Robert Schmidt's avatar Robert Schmidt

Merge remote-tracking branch 'origin/improve-scope-interface' into integration_2023_w29

parents 04dee38c f0e4f74a
...@@ -1252,8 +1252,13 @@ void *ru_thread( void *param ) { ...@@ -1252,8 +1252,13 @@ void *ru_thread( void *param ) {
clock_gettime(CLOCK_MONOTONIC,&ru->rt_ru_profiling.return_RU_feprx[rt_prof_idx]); clock_gettime(CLOCK_MONOTONIC,&ru->rt_ru_profiling.return_RU_feprx[rt_prof_idx]);
//LOG_M("rxdata.m","rxs",ru->common.rxdata[0],1228800,1,1); //LOG_M("rxdata.m","rxs",ru->common.rxdata[0],1228800,1,1);
LOG_D(PHY,"RU proc: frame_rx = %d, tti_rx = %d\n", proc->frame_rx, proc->tti_rx); LOG_D(PHY,"RU proc: frame_rx = %d, tti_rx = %d\n", proc->frame_rx, proc->tti_rx);
if (IS_SOFTMODEM_DOSCOPE && RC.gNB[0]->scopeData) gNBscopeCopy(RC.gNB[0],
((scopeData_t *)RC.gNB[0]->scopeData)->slotFunc(ru->common.rxdataF[0],proc->tti_rx, RC.gNB[0]->scopeData); gNBRxdataF,
ru->common.rxdataF[0],
sizeof(c16_t),
1,
gNB->frame_parms.samples_per_slot_wCP,
proc->tti_rx * gNB->frame_parms.samples_per_slot_wCP);
// Do PRACH RU processing // Do PRACH RU processing
int prach_id=find_nr_prach_ru(ru,proc->frame_rx,proc->tti_rx,SEARCH_EXIST); int prach_id=find_nr_prach_ru(ru,proc->frame_rx,proc->tti_rx,SEARCH_EXIST);
......
...@@ -993,7 +993,13 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue, ...@@ -993,7 +993,13 @@ int nr_pbch_channel_estimation(PHY_VARS_NR_UE *ue,
} }
if (dmrss == 2) if (dmrss == 2)
UEscopeCopy(ue, pbchDlChEstimateTime, (void*)dl_ch_estimates_time, sizeof(struct complex16), ue->frame_parms.nb_antennas_rx, ue->frame_parms.ofdm_symbol_size); UEscopeCopy(ue,
pbchDlChEstimateTime,
(void *)dl_ch_estimates_time,
sizeof(c16_t),
ue->frame_parms.nb_antennas_rx,
ue->frame_parms.ofdm_symbol_size,
0);
return(0); return(0);
} }
......
...@@ -745,7 +745,7 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, ...@@ -745,7 +745,7 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
log2_maxh, log2_maxh,
n_rb); // log2_maxh+I0_shift n_rb); // log2_maxh+I0_shift
UEscopeCopy(ue, pdcchRxdataF_comp, rxdataF_comp, sizeof(struct complex16), frame_parms->nb_antennas_rx, rx_size); UEscopeCopy(ue, pdcchRxdataF_comp, rxdataF_comp, sizeof(struct complex16), frame_parms->nb_antennas_rx, rx_size, 0);
if (frame_parms->nb_antennas_rx > 1) { if (frame_parms->nb_antennas_rx > 1) {
LOG_D(PHY,"we enter nr_pdcch_detection_mrc(frame_parms->nb_antennas_rx=%d)\n", frame_parms->nb_antennas_rx); LOG_D(PHY,"we enter nr_pdcch_detection_mrc(frame_parms->nb_antennas_rx=%d)\n", frame_parms->nb_antennas_rx);
...@@ -761,7 +761,7 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue, ...@@ -761,7 +761,7 @@ int32_t nr_rx_pdcch(PHY_VARS_NR_UE *ue,
s, s,
n_rb); n_rb);
UEscopeCopy(ue, pdcchLlr, llr, sizeof(int16_t), 1, llr_size); UEscopeCopy(ue, pdcchLlr, llr, sizeof(int16_t), 1, llr_size, 0);
#if T_TRACER #if T_TRACER
......
...@@ -259,7 +259,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -259,7 +259,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
int32_t *log2_maxh, int32_t *log2_maxh,
int rx_size_symbol, int rx_size_symbol,
int nbRx, int nbRx,
int32_t rxdataF_comp[][nbRx][rx_size_symbol], int32_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT], c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT],
int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT]) int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT])
{ {
...@@ -621,7 +621,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -621,7 +621,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
codeword_TB0, codeword_TB0,
codeword_TB1, codeword_TB1,
layer_llr); layer_llr);
// if (llr[0][0]) abort();
for (int i=0; i<NR_MAX_NB_LAYERS; i++) for (int i=0; i<NR_MAX_NB_LAYERS; i++)
free(layer_llr[i]); free(layer_llr[i]);
// Please keep it: useful for debugging // Please keep it: useful for debugging
...@@ -667,8 +667,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -667,8 +667,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
T_INT(frame_parms->symbols_per_slot), T_INT(frame_parms->symbols_per_slot),
T_BUFFER(&rxdataF_comp[gNB_id][0], 2 * /* ulsch[UE_id]->harq_processes[harq_pid]->nb_rb */ frame_parms->N_RB_UL * 12 * 2)); T_BUFFER(&rxdataF_comp[gNB_id][0], 2 * /* ulsch[UE_id]->harq_processes[harq_pid]->nb_rb */ frame_parms->N_RB_UL * 12 * 2));
#endif #endif
UEscopeCopy(ue, pdschRxdataF_comp, rxdataF_comp[0], sizeof(c16_t), nbRx, rx_size_symbol * NR_SYMBOLS_PER_SLOT, 0);
UEscopeCopy(ue, pdschRxdataF_comp, rxdataF_comp, sizeof(c16_t), nbRx, rx_size_symbol);
if (ue->phy_sim_pdsch_rxdataF_comp) if (ue->phy_sim_pdsch_rxdataF_comp)
for (int a = 0; a < nbRx; a++) { for (int a = 0; a < nbRx; a++) {
......
...@@ -486,8 +486,8 @@ int nr_rx_pbch(PHY_VARS_NR_UE *ue, ...@@ -486,8 +486,8 @@ int nr_rx_pbch(PHY_VARS_NR_UE *ue,
} }
// legacy code use int16, but it is complex16 // legacy code use int16, but it is complex16
UEscopeCopy(ue, pbchRxdataF_comp, pbch_unClipped, sizeof(struct complex16), frame_parms->nb_antennas_rx, pbch_e_rx_idx/2); UEscopeCopy(ue, pbchRxdataF_comp, pbch_unClipped, sizeof(struct complex16), frame_parms->nb_antennas_rx, pbch_e_rx_idx / 2, 0);
UEscopeCopy(ue, pbchLlr, pbch_e_rx, sizeof(int16_t), frame_parms->nb_antennas_rx, pbch_e_rx_idx); UEscopeCopy(ue, pbchLlr, pbch_e_rx, sizeof(int16_t), frame_parms->nb_antennas_rx, pbch_e_rx_idx, 0);
#ifdef DEBUG_PBCH #ifdef DEBUG_PBCH
write_output("rxdataF_comp.m","rxFcomp",rxdataF_comp[0],240*3,1,1); write_output("rxdataF_comp.m","rxFcomp",rxdataF_comp[0],240*3,1,1);
short *p = (short *)rxdataF_comp[0]); short *p = (short *)rxdataF_comp[0]);
......
...@@ -404,7 +404,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue, ...@@ -404,7 +404,7 @@ int nr_rx_pdsch(PHY_VARS_NR_UE *ue,
int32_t *log2_maxhrx_size_symbol, int32_t *log2_maxhrx_size_symbol,
int rx_size_symbol, int rx_size_symbol,
int nbRx, int nbRx,
int32_t rxdataF_comp[][nbRx][rx_size_symbol], int32_t rxdataF_comp[][nbRx][rx_size_symbol * NR_SYMBOLS_PER_SLOT],
c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT], c16_t ptrs_phase_per_slot[][NR_SYMBOLS_PER_SLOT],
int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT]); int32_t ptrs_re_per_slot[][NR_SYMBOLS_PER_SLOT]);
......
...@@ -1234,12 +1234,14 @@ void *nrUEQtscopeThread(void *arg) ...@@ -1234,12 +1234,14 @@ void *nrUEQtscopeThread(void *arg)
// gNB scope initialization // gNB scope initialization
void nrgNBinitQtScope(scopeParms_t *p) void nrgNBinitQtScope(scopeParms_t *p)
{ {
scopeData_t *scope = (scopeData_t *)malloc(sizeof(scopeData_t)); scopeData_t *scope = (scopeData_t *)calloc(1, sizeof(scopeData_t));
scope->gNB = p->gNB; scope->gNB = p->gNB;
scope->argc = p->argc; scope->argc = p->argc;
scope->argv = p->argv; scope->argv = p->argv;
scope->ru = p->ru; scope->ru = p->ru;
scope->copyData = copyData;
copyDataMutexInit(scope);
p->gNB->scopeData = scope; p->gNB->scopeData = scope;
...@@ -1250,11 +1252,10 @@ void nrgNBinitQtScope(scopeParms_t *p) ...@@ -1250,11 +1252,10 @@ void nrgNBinitQtScope(scopeParms_t *p)
// UE scope initialization // UE scope initialization
void nrUEinitQtScope(PHY_VARS_NR_UE *ue) void nrUEinitQtScope(PHY_VARS_NR_UE *ue)
{ {
scopeData_t *scope = (scopeData_t *)malloc(sizeof(scopeData_t)); scopeData_t *scope = (scopeData_t *)calloc(1, sizeof(scopeData_t));
scope->liveData = calloc(sizeof(scopeGraphData_t *), UEdataTypeNumberOfItems); scope->copyData = copyData;
scope->copyData = UEcopyData; copyDataMutexInit(scope);
UEcopyDataMutexInit();
ue->scopeData = scope; ue->scopeData = scope;
......
...@@ -501,7 +501,9 @@ static void timeResponse (OAIgraph_t *graph, scopeData_t *p, int nb_UEs) { ...@@ -501,7 +501,9 @@ static void timeResponse (OAIgraph_t *graph, scopeData_t *p, int nb_UEs) {
static void gNBfreqWaterFall (OAIgraph_t *graph, scopeData_t *p, int nb_UEs) { static void gNBfreqWaterFall (OAIgraph_t *graph, scopeData_t *p, int nb_UEs) {
NR_DL_FRAME_PARMS *frame_parms=&p->gNB->frame_parms; NR_DL_FRAME_PARMS *frame_parms=&p->gNB->frame_parms;
//use 1st antenna //use 1st antenna
genericWaterFall(graph, (scopeSample_t *)p->liveData, frame_parms->samples_per_frame_wCP, genericWaterFall(graph,
(scopeSample_t *)p->liveData[gNBRxdataF],
frame_parms->samples_per_frame_wCP,
frame_parms->slots_per_frame, frame_parms->slots_per_frame,
"X axis: Frequency domain, one subframe"); "X axis: Frequency domain, one subframe");
} }
...@@ -736,26 +738,19 @@ static void *scope_thread_gNB(void *arg) { ...@@ -736,26 +738,19 @@ static void *scope_thread_gNB(void *arg) {
} }
#endif #endif
static void copyRxdataF(int32_t *data, int slot, void *scopeData) {
scopeData_t *scope=(scopeData_t *)scopeData;
memcpy(((int32_t *)scope->liveData) + slot*scope->gNB->frame_parms.samples_per_slot_wCP,
data,
scope->gNB->frame_parms.samples_per_slot_wCP*sizeof(int32_t));
}
STATICFORXSCOPE void gNBinitScope(scopeParms_t *p) STATICFORXSCOPE void gNBinitScope(scopeParms_t *p)
{ {
AssertFatal(p->gNB->scopeData=malloc(sizeof(scopeData_t)),""); AssertFatal(p->gNB->scopeData = calloc(sizeof(scopeData_t), 1), "");
scopeData_t *scope=(scopeData_t *) p->gNB->scopeData; scopeData_t *scope=(scopeData_t *) p->gNB->scopeData;
scope->argc=p->argc; scope->argc=p->argc;
scope->argv=p->argv; scope->argv=p->argv;
scope->ru=p->ru; scope->ru=p->ru;
scope->gNB=p->gNB; scope->gNB=p->gNB;
scope->slotFunc=copyRxdataF; scope->copyData = copyData;
AssertFatal(scope->liveData= calloc(p->gNB->frame_parms.samples_per_frame_wCP*sizeof(int32_t),1),"");
#ifndef WEBSRVSCOPE #ifndef WEBSRVSCOPE
pthread_t forms_thread; pthread_t forms_thread;
threadCreate(&forms_thread, scope_thread_gNB, p->gNB->scopeData, "scope", -1, OAI_PRIORITY_RT_LOW); threadCreate(&forms_thread, scope_thread_gNB, p->gNB->scopeData, "scope", -1, OAI_PRIORITY_RT_LOW);
copyDataMutexInit(scope);
#endif #endif
} }
static void ueWaterFall (scopeGraphData_t **data, OAIgraph_t *graph, PHY_VARS_NR_UE *phy_vars_ue, int eNB_id, int UE_id) { static void ueWaterFall (scopeGraphData_t **data, OAIgraph_t *graph, PHY_VARS_NR_UE *phy_vars_ue, int eNB_id, int UE_id) {
...@@ -1140,14 +1135,13 @@ static void *nrUEscopeThread(void *arg) { ...@@ -1140,14 +1135,13 @@ static void *nrUEscopeThread(void *arg) {
STATICFORXSCOPE void nrUEinitScope(PHY_VARS_NR_UE *ue) STATICFORXSCOPE void nrUEinitScope(PHY_VARS_NR_UE *ue)
{ {
AssertFatal(ue->scopeData=malloc(sizeof(scopeData_t)),""); AssertFatal(ue->scopeData = calloc(sizeof(scopeData_t), 1), "");
scopeData_t *scope=(scopeData_t *) ue->scopeData; scopeData_t *scope=(scopeData_t *) ue->scopeData;
scope->copyData=UEcopyData; scope->copyData = copyData;
AssertFatal(scope->liveData=calloc(sizeof(scopeGraphData_t *), UEdataTypeNumberOfItems),"");
#ifndef WEBSRVSCOPE #ifndef WEBSRVSCOPE
pthread_t forms_thread; pthread_t forms_thread;
threadCreate(&forms_thread, nrUEscopeThread, ue, "scope", -1, OAI_PRIORITY_RT_LOW); threadCreate(&forms_thread, nrUEscopeThread, ue, "scope", -1, OAI_PRIORITY_RT_LOW);
UEcopyDataMutexInit(); copyDataMutexInit(scope);
#endif #endif
} }
......
...@@ -35,14 +35,12 @@ ...@@ -35,14 +35,12 @@
#include "phy_scope_interface.h" #include "phy_scope_interface.h"
#define SOFTSCOPE_ENDFUNC_IDX 0 #define SOFTSCOPE_ENDFUNC_IDX 0
#define THREAD_MEM 4
static loader_shlibfunc_t scope_fdesc[]= {{"end_forms",NULL}}; static loader_shlibfunc_t scope_fdesc[]= {{"end_forms",NULL}};
pthread_mutex_t UEcopyDataMutex; int copyDataMutexInit(scopeData_t *p)
{
int UEcopyDataMutexInit(void) { return pthread_mutex_init(&p->copyDataMutex, NULL);
return pthread_mutex_init(&UEcopyDataMutex, NULL);
} }
int load_softscope(char *exectype, void *initarg) { int load_softscope(char *exectype, void *initarg) {
...@@ -60,46 +58,44 @@ int end_forms(void) { ...@@ -60,46 +58,44 @@ int end_forms(void) {
return -1; return -1;
} }
void UEcopyData(PHY_VARS_NR_UE *ue, enum UEdataType type, void *dataIn, int elementSz, int colSz, int lineSz) { void copyData(void *scopeData, enum scopeDataType type, void *dataIn, int elementSz, int colSz, int lineSz, int offset)
// Local static copy of the scope data bufs {
// The active data buf is alterned to avoid interference between the Scope thread (display) and the Rx thread (data input) scopeData_t *tmp = (scopeData_t *)scopeData;
// Index of THREAD_MEM could be set to the number of Rx threads + 1. Rx slots could run asynchronous to each other.
// THREAD_MEM = 4 slot process running in parallel is an assumption. THREAD_MEM can be increased if scope appears inconsistent.
static scopeGraphData_t *copyDataBufs[UEdataTypeNumberOfItems][THREAD_MEM] = {0};
static int copyDataBufsIdx[UEdataTypeNumberOfItems] = {0};
scopeData_t *tmp = (scopeData_t *)ue->scopeData;
if (tmp) { if (tmp) {
// Begin of critical zone between UE Rx threads that might copy new data at the same time: // Begin of critical zone between UE Rx threads that might copy new data at the same time:
pthread_mutex_lock(&UEcopyDataMutex); pthread_mutex_lock(&tmp->copyDataMutex);
int newCopyDataIdx = (copyDataBufsIdx[type]<(THREAD_MEM-1))?copyDataBufsIdx[type]+1:0; scopeGraphData_t *oldData = ((scopeGraphData_t **)tmp->liveData)[type];
copyDataBufsIdx[type] = newCopyDataIdx; tmp->copyDataBufsIdx[type] = (tmp->copyDataBufsIdx[type] + 1) % COPIES_MEM;
pthread_mutex_unlock(&UEcopyDataMutex); int newCopyDataIdx = tmp->copyDataBufsIdx[type];
pthread_mutex_unlock(&tmp->copyDataMutex);
// End of critical zone between UE Rx threads // End of critical zone between UE Rx threads
int oldDataSz = oldData ? oldData->dataSize : 0;
int newSz = max(elementSz * colSz * (lineSz + offset), oldDataSz);
// New data will be copied in a different buffer than the live one // New data will be copied in a different buffer than the live one
scopeGraphData_t *copyData = copyDataBufs[type][newCopyDataIdx]; scopeGraphData_t *newData = tmp->copyDataBufs[type][newCopyDataIdx];
if (newData == NULL || newData->dataSize < newSz) {
if (copyData == NULL || copyData->dataSize < elementSz*colSz*lineSz) { scopeGraphData_t *ptr = (scopeGraphData_t *)realloc(newData, sizeof(scopeGraphData_t) + newSz);
scopeGraphData_t *ptr = (scopeGraphData_t*) realloc(copyData, sizeof(scopeGraphData_t) + elementSz*colSz*lineSz);
if (!ptr) { if (!ptr) {
LOG_E(PHY,"can't realloc\n"); LOG_E(PHY, "can't realloc\n");
return; return;
} else { } else {
copyData = ptr; tmp->copyDataBufs[type][newCopyDataIdx] = ptr;
if (!newData) // we have a new malloc
*ptr = (scopeGraphData_t){0};
newData = ptr;
newData->dataSize = newSz;
} }
} }
if (offset && oldDataSz) // we copy the previous buffer because we have as input only a part of
memcpy(newData + 1, oldData + 1, oldDataSz);
copyData->dataSize = elementSz*colSz*lineSz; newData->elementSz = elementSz;
copyData->elementSz = elementSz; newData->colSz = colSz;
copyData->colSz = colSz; newData->lineSz = lineSz + offset;
copyData->lineSz = lineSz; memcpy(((void *)(newData + 1)) + elementSz * colSz * offset, dataIn, elementSz * colSz * lineSz);
memcpy(copyData+1, dataIn, elementSz*colSz*lineSz);
copyDataBufs[type][newCopyDataIdx] = copyData;
// The new data just copied in the local static buffer becomes live now // The new data just copied becomes live now
((scopeGraphData_t **)tmp->liveData)[type] = copyData; ((scopeGraphData_t **)tmp->liveData)[type] = newData;
} }
} }
...@@ -57,7 +57,7 @@ typedef struct { ...@@ -57,7 +57,7 @@ typedef struct {
PHY_VARS_gNB *gNB; PHY_VARS_gNB *gNB;
} scopeParms_t; } scopeParms_t;
enum UEdataType { enum scopeDataType {
pbchDlChEstimateTime, pbchDlChEstimateTime,
pbchLlr, pbchLlr,
pbchRxdataF_comp, pbchRxdataF_comp,
...@@ -66,18 +66,11 @@ enum UEdataType { ...@@ -66,18 +66,11 @@ enum UEdataType {
pdschLlr, pdschLlr,
pdschRxdataF_comp, pdschRxdataF_comp,
commonRxdataF, commonRxdataF,
UEdataTypeNumberOfItems gNBRxdataF,
MAX_SCOPE_TYPES
}; };
typedef struct scopeData_s { #define COPIES_MEM 4
int *argc;
char **argv;
RU_t *ru;
PHY_VARS_gNB *gNB;
void *liveData;
void (*slotFunc)(int32_t *data, int slot, void *scopeData);
void (*copyData)(PHY_VARS_NR_UE *,enum UEdataType, void *data, int elementSz, int colSz, int lineSz);
} scopeData_t;
typedef struct { typedef struct {
int dataSize; int dataSize;
...@@ -86,12 +79,29 @@ typedef struct { ...@@ -86,12 +79,29 @@ typedef struct {
int lineSz; int lineSz;
} scopeGraphData_t; } scopeGraphData_t;
typedef struct scopeData_s {
int *argc;
char **argv;
RU_t *ru;
PHY_VARS_gNB *gNB;
scopeGraphData_t *liveData[MAX_SCOPE_TYPES];
void (*copyData)(void *, enum scopeDataType, void *data, int elementSz, int colSz, int lineSz, int offset);
pthread_mutex_t copyDataMutex;
scopeGraphData_t *copyDataBufs[MAX_SCOPE_TYPES][COPIES_MEM];
int copyDataBufsIdx[MAX_SCOPE_TYPES];
} scopeData_t;
int load_softscope(char *exectype, void *initarg); int load_softscope(char *exectype, void *initarg);
int end_forms(void) ; int end_forms(void) ;
int UEcopyDataMutexInit(void); int copyDataMutexInit(scopeData_t *);
void UEcopyData(PHY_VARS_NR_UE *ue, enum UEdataType type, void *dataIn, int elementSz, int colSz, int lineSz); void copyData(void *, enum scopeDataType type, void *dataIn, int elementSz, int colSz, int lineSz, int offset);
#define UEscopeCopy(ue, type, ...) if(ue->scopeData) ((scopeData_t*)ue->scopeData)->copyData(ue, type, ##__VA_ARGS__); #define UEscopeCopy(ue, type, ...) \
if (ue->scopeData) \
((scopeData_t *)ue->scopeData)->copyData((scopeData_t *)ue->scopeData, type, ##__VA_ARGS__);
#define gNBscopeCopy(gnb, type, ...) \
if (gnb->scopeData) \
((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)gNB->scopeData, type, ##__VA_ARGS__);
extended_kpi_ue* getKPIUE(); extended_kpi_ue* getKPIUE();
......
...@@ -1078,7 +1078,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, ...@@ -1078,7 +1078,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue,
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_OUT); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC_C, VCD_FUNCTION_OUT);
UEscopeCopy(ue, pdschLlr, llr[0], sizeof(int16_t), 1, rx_llr_size); UEscopeCopy(ue, pdschLlr, llr[0], sizeof(int16_t), 1, rx_llr_size, 0);
LOG_D(PHY, "DLSCH data reception at nr_slot_rx: %d\n", nr_slot_rx); LOG_D(PHY, "DLSCH data reception at nr_slot_rx: %d\n", nr_slot_rx);
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME(VCD_SIGNAL_DUMPER_FUNCTIONS_PDSCH_PROC, VCD_FUNCTION_IN);
...@@ -1179,7 +1179,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue, ...@@ -1179,7 +1179,7 @@ void pdsch_processing(PHY_VARS_NR_UE *ue,
LOG_D(PHY, "------FULL RX PROC [SFN %d]: %5.2f ------\n",nr_slot_rx,ue->phy_proc_rx.p_time/(cpuf*1000.0)); LOG_D(PHY, "------FULL RX PROC [SFN %d]: %5.2f ------\n",nr_slot_rx,ue->phy_proc_rx.p_time/(cpuf*1000.0));
LOG_D(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, nr_slot_rx); LOG_D(PHY," ****** end RX-Chain for AbsSubframe %d.%d ****** \n", frame_rx%1024, nr_slot_rx);
UEscopeCopy(ue, commonRxdataF, rxdataF, sizeof(int32_t), ue->frame_parms.nb_antennas_rx, rxdataF_sz); UEscopeCopy(ue, commonRxdataF, rxdataF, sizeof(int32_t), ue->frame_parms.nb_antennas_rx, rxdataF_sz, 0);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment