Commit b2c49fbc authored by Bartosz Podrygajlo's avatar Bartosz Podrygajlo

Add time-domain scope to gNB imscope.

parent 80f90b55
...@@ -622,6 +622,7 @@ static void rx_rf(RU_t *ru, int *frame, int *slot) ...@@ -622,6 +622,7 @@ static void rx_rf(RU_t *ru, int *frame, int *slot)
rxp, rxp,
samples_per_slot, samples_per_slot,
ru->nb_rx); ru->nb_rx);
gNBscopeCopy(ru, gNbTimeDomainSamples, rxp[0], sizeof(c16_t), 1, samples_per_slot, 0);
} }
VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 ); VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_READ, 0 );
......
...@@ -581,6 +581,16 @@ void ShowGnbScope(PHY_VARS_gNB *gNB, float t) ...@@ -581,6 +581,16 @@ void ShowGnbScope(PHY_VARS_gNB *gNB, float t)
pusch_llr_plot->Draw(t, gNBPuschLlr, "PUSCH LLR"); pusch_llr_plot->Draw(t, gNBPuschLlr, "PUSCH LLR");
ImGui::TreePop(); ImGui::TreePop();
} }
if (ImGui::TreeNode("Time domain samples")) {
static auto iq_data = new IQData();
static auto time_domain_iq = new IQHist("Time domain samples");
bool new_data = false;
if (time_domain_iq->ShouldReadData()) {
new_data = iq_data->TryCollect(&scope_array[gNbTimeDomainSamples], t, time_domain_iq->GetEpsilon());
}
time_domain_iq->Draw(iq_data, t, new_data);
ImGui::TreePop();
}
} }
void *imscope_thread(void *data_void_ptr) void *imscope_thread(void *data_void_ptr)
...@@ -751,6 +761,7 @@ extern "C" void imscope_autoinit(void *dataptr) ...@@ -751,6 +761,7 @@ extern "C" void imscope_autoinit(void *dataptr)
scope->copyDataUnsafeWithOffset = copyDataUnsafeWithOffset; scope->copyDataUnsafeWithOffset = copyDataUnsafeWithOffset;
scope->unlockScopeData = unlockScopeData; scope->unlockScopeData = unlockScopeData;
scope_params->gNB->scopeData = scope; scope_params->gNB->scopeData = scope;
scope_params->ru->scopeData = scope;
} else { } else {
PHY_VARS_NR_UE *ue = (PHY_VARS_NR_UE *)dataptr; PHY_VARS_NR_UE *ue = (PHY_VARS_NR_UE *)dataptr;
scopeData_t *scope = (scopeData_t *)calloc(1, sizeof(scopeData_t)); scopeData_t *scope = (scopeData_t *)calloc(1, sizeof(scopeData_t));
......
...@@ -75,6 +75,7 @@ enum scopeDataType { ...@@ -75,6 +75,7 @@ enum scopeDataType {
gNBPuschLlr, gNBPuschLlr,
ueTimeDomainSamples, ueTimeDomainSamples,
ueTimeDomainSamplesBeforeSync, ueTimeDomainSamplesBeforeSync,
gNbTimeDomainSamples,
EXTRA_SCOPE_TYPES EXTRA_SCOPE_TYPES
}; };
...@@ -129,12 +130,12 @@ void copyData(void *, enum scopeDataType type, void *dataIn, int elementSz, int ...@@ -129,12 +130,12 @@ void copyData(void *, enum scopeDataType type, void *dataIn, int elementSz, int
} }
#define gNBscopeCopyWithMetadata(gnb, type, ...) \ #define gNBscopeCopyWithMetadata(gnb, type, ...) \
if (gnb->scopeData) { \ if (gnb->scopeData) { \
((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)gNB->scopeData, type, ##__VA_ARGS__); \ ((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)gnb->scopeData, type, ##__VA_ARGS__); \
} }
#define gNBscopeCopy(gnb, type, ...) \ #define gNBscopeCopy(gnb, type, ...) \
if (gnb->scopeData) { \ if (gnb->scopeData) { \
metadata mt = {.slot = -1, .frame = -1}; \ metadata mt = {.slot = -1, .frame = -1}; \
((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)gNB->scopeData, type, ##__VA_ARGS__, &mt); \ ((scopeData_t *)gnb->scopeData)->copyData((scopeData_t *)gnb->scopeData, type, ##__VA_ARGS__, &mt); \
} }
#define GnbScopeUpdate(gnb, type, numElt) \ #define GnbScopeUpdate(gnb, type, numElt) \
if (gnb->scopeData) \ if (gnb->scopeData) \
......
...@@ -662,6 +662,7 @@ typedef struct RU_t_s { ...@@ -662,6 +662,7 @@ typedef struct RU_t_s {
int num_tpcores; int num_tpcores;
/// structure for analyzing high-level RT measurements /// structure for analyzing high-level RT measurements
rt_ru_profiling_t rt_ru_profiling; rt_ru_profiling_t rt_ru_profiling;
void* scopeData;
} RU_t; } RU_t;
......
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