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)
rxp,
samples_per_slot,
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 );
......
......@@ -581,6 +581,16 @@ void ShowGnbScope(PHY_VARS_gNB *gNB, float t)
pusch_llr_plot->Draw(t, gNBPuschLlr, "PUSCH LLR");
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)
......@@ -751,6 +761,7 @@ extern "C" void imscope_autoinit(void *dataptr)
scope->copyDataUnsafeWithOffset = copyDataUnsafeWithOffset;
scope->unlockScopeData = unlockScopeData;
scope_params->gNB->scopeData = scope;
scope_params->ru->scopeData = scope;
} else {
PHY_VARS_NR_UE *ue = (PHY_VARS_NR_UE *)dataptr;
scopeData_t *scope = (scopeData_t *)calloc(1, sizeof(scopeData_t));
......
......@@ -75,6 +75,7 @@ enum scopeDataType {
gNBPuschLlr,
ueTimeDomainSamples,
ueTimeDomainSamplesBeforeSync,
gNbTimeDomainSamples,
EXTRA_SCOPE_TYPES
};
......@@ -129,12 +130,12 @@ void copyData(void *, enum scopeDataType type, void *dataIn, int elementSz, int
}
#define gNBscopeCopyWithMetadata(gnb, type, ...) \
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, ...) \
if (gnb->scopeData) { \
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) \
if (gnb->scopeData) \
......
......@@ -661,7 +661,8 @@ typedef struct RU_t_s {
/// number of cores for RU ThreadPool
int num_tpcores;
/// 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;
......
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