Commit 9ce7f945 authored by Laurent Thomas's avatar Laurent Thomas

record/replay for 5G, nrscope bug fix

parent f5a22a74
...@@ -1318,7 +1318,7 @@ int main ( int argc, char **argv ) { ...@@ -1318,7 +1318,7 @@ int main ( int argc, char **argv ) {
// end of CI modifications // end of CI modifications
//getchar(); //getchar();
if(IS_SOFTMODEM_DOFORMS) if(IS_SOFTMODEM_DOSCOPE)
load_softscope("enb", NULL); load_softscope("enb", NULL);
itti_wait_tasks_end(); itti_wait_tasks_end();
...@@ -1327,7 +1327,7 @@ int main ( int argc, char **argv ) { ...@@ -1327,7 +1327,7 @@ int main ( int argc, char **argv ) {
// stop threads // stop threads
if (RC.nb_inst == 0 || !NODE_IS_CU(node_type)) { if (RC.nb_inst == 0 || !NODE_IS_CU(node_type)) {
if(IS_SOFTMODEM_DOFORMS) if(IS_SOFTMODEM_DOSCOPE)
end_forms(); end_forms();
LOG_I(ENB_APP,"stopping MODEM threads\n"); LOG_I(ENB_APP,"stopping MODEM threads\n");
......
...@@ -89,7 +89,7 @@ static int DEFBFW[] = {0x00007fff}; ...@@ -89,7 +89,7 @@ static int DEFBFW[] = {0x00007fff};
#include "s1ap_eNB.h" #include "s1ap_eNB.h"
#include "SIMULATION/ETH_TRANSPORT/proto.h" #include "SIMULATION/ETH_TRANSPORT/proto.h"
#include <openair1/PHY/TOOLS/phy_scope_interface.h>
#include "T.h" #include "T.h"
...@@ -1593,7 +1593,8 @@ void *ru_thread( void *param ) { ...@@ -1593,7 +1593,8 @@ void *ru_thread( void *param ) {
for (aa=0;aa<ru->nb_rx;aa++) for (aa=0;aa<ru->nb_rx;aa++)
memcpy((void*)RC.gNB[0]->common_vars.rxdataF[aa], memcpy((void*)RC.gNB[0]->common_vars.rxdataF[aa],
(void*)ru->common.rxdataF[aa], fp->symbols_per_slot*fp->ofdm_symbol_size*sizeof(int32_t)); (void*)ru->common.rxdataF[aa], fp->symbols_per_slot*fp->ofdm_symbol_size*sizeof(int32_t));
if (IS_SOFTMODEM_DOSCOPE && RC.gNB[0]->scopeData)
((scopeData_t*)RC.gNB[0]->scopeData)->slotFunc(ru->common.rxdataF[0],proc->tti_rx, RC.gNB[0]->scopeData);
// 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);
......
...@@ -900,7 +900,7 @@ if(!IS_SOFTMODEM_NOS1) ...@@ -900,7 +900,7 @@ if(!IS_SOFTMODEM_NOS1)
printf("RC.nb_RU:%d\n", RC.nb_RU); printf("RC.nb_RU:%d\n", RC.nb_RU);
// once all RUs are ready initialize the rest of the gNBs ((dependence on final RU parameters after configuration) // once all RUs are ready initialize the rest of the gNBs ((dependence on final RU parameters after configuration)
printf("ALL RUs ready - init gNBs\n"); printf("ALL RUs ready - init gNBs\n");
if(IS_SOFTMODEM_DOFORMS) { if(IS_SOFTMODEM_DOSCOPE) {
sleep(1); sleep(1);
scopeParms_t p; scopeParms_t p;
p.argc=&argc; p.argc=&argc;
......
...@@ -551,7 +551,7 @@ int main( int argc, char **argv ) { ...@@ -551,7 +551,7 @@ int main( int argc, char **argv ) {
configure_linux(); configure_linux();
mlockall(MCL_CURRENT | MCL_FUTURE); mlockall(MCL_CURRENT | MCL_FUTURE);
if(IS_SOFTMODEM_DOFORMS) { if(IS_SOFTMODEM_DOSCOPE) {
load_softscope("nr",PHY_vars_UE_g[0][0]); load_softscope("nr",PHY_vars_UE_g[0][0]);
} }
......
...@@ -996,7 +996,7 @@ int main( int argc, char **argv ) { ...@@ -996,7 +996,7 @@ int main( int argc, char **argv ) {
(void *)NULL, "time_meas", -1, OAI_PRIORITY_RT_LOW); (void *)NULL, "time_meas", -1, OAI_PRIORITY_RT_LOW);
} }
if(IS_SOFTMODEM_DOFORMS) { if(IS_SOFTMODEM_DOSCOPE) {
scopeParms_t tmp= {&argc, argv, &ru, RC.gNB[0]}; scopeParms_t tmp= {&argc, argv, &ru, RC.gNB[0]};
load_softscope("nr",&tmp); load_softscope("nr",&tmp);
} }
......
...@@ -140,7 +140,7 @@ void get_common_options(uint32_t execmask) { ...@@ -140,7 +140,7 @@ void get_common_options(uint32_t execmask) {
} }
if (do_forms) { if (do_forms) {
set_softmodem_optmask(SOFTMODEM_DOFORMS_BIT); set_softmodem_optmask(SOFTMODEM_DOSCOPE_BIT);
} }
if(parallel_config != NULL) set_parallel_conf(parallel_config); if(parallel_config != NULL) set_parallel_conf(parallel_config);
......
...@@ -188,7 +188,7 @@ extern "C" ...@@ -188,7 +188,7 @@ extern "C"
#define SOFTMODEM_RFSIM_BIT (1<<10) #define SOFTMODEM_RFSIM_BIT (1<<10)
#define SOFTMODEM_BASICSIM_BIT (1<<11) #define SOFTMODEM_BASICSIM_BIT (1<<11)
#define SOFTMODEM_SIML1_BIT (1<<12) #define SOFTMODEM_SIML1_BIT (1<<12)
#define SOFTMODEM_DOFORMS_BIT (1<<15) #define SOFTMODEM_DOSCOPE_BIT (1<<15)
#define SOFTMODEM_RECPLAY_BIT (1<<16) #define SOFTMODEM_RECPLAY_BIT (1<<16)
#define SOFTMODEM_ENB_BIT (1<<20) #define SOFTMODEM_ENB_BIT (1<<20)
#define SOFTMODEM_GNB_BIT (1<<21) #define SOFTMODEM_GNB_BIT (1<<21)
...@@ -204,7 +204,7 @@ extern "C" ...@@ -204,7 +204,7 @@ extern "C"
#define IS_SOFTMODEM_RFSIM ( get_softmodem_optmask() & SOFTMODEM_RFSIM_BIT) #define IS_SOFTMODEM_RFSIM ( get_softmodem_optmask() & SOFTMODEM_RFSIM_BIT)
#define IS_SOFTMODEM_BASICSIM ( get_softmodem_optmask() & SOFTMODEM_BASICSIM_BIT) #define IS_SOFTMODEM_BASICSIM ( get_softmodem_optmask() & SOFTMODEM_BASICSIM_BIT)
#define IS_SOFTMODEM_SIML1 ( get_softmodem_optmask() & SOFTMODEM_SIML1_BIT) #define IS_SOFTMODEM_SIML1 ( get_softmodem_optmask() & SOFTMODEM_SIML1_BIT)
#define IS_SOFTMODEM_DOFORMS ( get_softmodem_optmask() & SOFTMODEM_DOFORMS_BIT) #define IS_SOFTMODEM_DOSCOPE ( get_softmodem_optmask() & SOFTMODEM_DOSCOPE_BIT)
#define IS_SOFTMODEM_IQPLAYER ( get_softmodem_optmask() & SOFTMODEM_RECPLAY_BIT) #define IS_SOFTMODEM_IQPLAYER ( get_softmodem_optmask() & SOFTMODEM_RECPLAY_BIT)
#define IS_SOFTMODEM_ENB_BIT ( get_softmodem_optmask() & SOFTMODEM_ENB_BIT) #define IS_SOFTMODEM_ENB_BIT ( get_softmodem_optmask() & SOFTMODEM_ENB_BIT)
#define IS_SOFTMODEM_GNB_BIT ( get_softmodem_optmask() & SOFTMODEM_GNB_BIT) #define IS_SOFTMODEM_GNB_BIT ( get_softmodem_optmask() & SOFTMODEM_GNB_BIT)
......
This diff is collapsed.
...@@ -33,13 +33,7 @@ ...@@ -33,13 +33,7 @@
//#include "PHY/impl_defs_top.h" //#include "PHY/impl_defs_top.h"
#include "PHY/defs_nr_UE.h" #include "PHY/defs_nr_UE.h"
typedef struct { #include <openair1/PHY/TOOLS/phy_scope_interface.h>
int *argc;
char **argv;
RU_t *ru;
PHY_VARS_gNB *gNB;
} scopeParms_t;
extern RAN_CONTEXT_t RC; extern RAN_CONTEXT_t RC;
#endif #endif
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include "phy_scope_interface.h" #include "phy_scope_interface.h"
#define SOFTSCOPE_ENDFUNC_IDX 0 #define SOFTSCOPE_ENDFUNC_IDX 0
static loader_shlibfunc_t scope_fdesc[]= {{"end_forms",NULL}}; static loader_shlibfunc_t scope_fdesc[]= {{"end_forms",NULL}};
int load_softscope(char *exectype, void *initarg) { int load_softscope(char *exectype, void *initarg) {
......
...@@ -29,7 +29,26 @@ ...@@ -29,7 +29,26 @@
* \note * \note
* \warning * \warning
*/ */
#ifndef __PHY_SCOPE_INTERFACE_H__
#define __PHY_SCOPE_INTERFACE_H__
#include <openair1/PHY/defs_gNB.h>
typedef struct {
int *argc;
char **argv;
RU_t *ru;
PHY_VARS_gNB *gNB;
} scopeParms_t;
typedef struct scopeData_s {
int *argc;
char **argv;
RU_t *ru;
PHY_VARS_gNB *gNB;
int32_t * rxdataF;
void (*slotFunc)(int32_t* data, int slot, void * scopeData);
} scopeData_t;
int load_softscope(char *exectype, void *initarg); int load_softscope(char *exectype, void *initarg);
int end_forms(void) ; int end_forms(void) ;
#endif
...@@ -68,8 +68,10 @@ int read_recplayconfig(recplay_conf_t **recplay_conf, recplay_state_t **recplay_ ...@@ -68,8 +68,10 @@ int read_recplayconfig(recplay_conf_t **recplay_conf, recplay_state_t **recplay_
*recplay_conf=NULL; *recplay_conf=NULL;
} }
if (u_sf_replay == 1) return RECPLAY_REPLAYMODE; if (u_sf_replay == 1)
else if (u_sf_record == 1) return RECPLAY_RECORDMODE; return RECPLAY_REPLAYMODE;
else if (u_sf_record == 1)
return RECPLAY_RECORDMODE;
return 0; return 0;
} }
...@@ -80,7 +82,7 @@ int read_recplayconfig(recplay_conf_t **recplay_conf, recplay_state_t **recplay_ ...@@ -80,7 +82,7 @@ int read_recplayconfig(recplay_conf_t **recplay_conf, recplay_state_t **recplay_
*/ */
void iqrecorder_end(openair0_device *device) { void iqrecorder_end(openair0_device *device) {
if (device->recplay_state != NULL) { // subframes store if (device->recplay_state != NULL) { // subframes store
iqfile_header_t fh = {device->type,device->openair0_cfg->tx_sample_advance, device->openair0_cfg->rx_bw,OAIIQFILE_ID}; iqfile_header_t fh = {device->type,device->openair0_cfg->tx_sample_advance, device->openair0_cfg->rx_bw,0,OAIIQFILE_ID};
recplay_state_t *rs = device->recplay_state; recplay_state_t *rs = device->recplay_state;
recplay_conf_t *rc = device->openair0_cfg[0].recplay_conf; recplay_conf_t *rc = device->openair0_cfg[0].recplay_conf;
rs->pFile = fopen (rc->u_sf_filename,"wb+"); rs->pFile = fopen (rc->u_sf_filename,"wb+");
...@@ -91,16 +93,20 @@ void iqrecorder_end(openair0_device *device) { ...@@ -91,16 +93,20 @@ void iqrecorder_end(openair0_device *device) {
unsigned int i = 0; unsigned int i = 0;
unsigned int modu = 0; unsigned int modu = 0;
if ((modu = rs->nb_samples % 10) != 0) { if ((modu = rs->nbSamplesBlocks % 10) != 0) {
rs->nb_samples -= modu; // store entire number of frames rs->nbSamplesBlocks -= modu; // store entire number of frames
} }
fh.nbSamplesBlocks=rs->nbSamplesBlocks;
LOG_I(HW,"Writing file header to %s \n", rc->u_sf_filename ); LOG_I(HW,"Writing file header to %s \n", rc->u_sf_filename );
fwrite(&fh, sizeof(fh), 1, rs->pFile); fwrite(&fh, sizeof(fh), 1, rs->pFile);
LOG_UI(HW,"Writing %u subframes to %s \n",rs->nb_samples, rc->u_sf_filename ); LOG_UI(HW,"Writing %u subframes to %s \n",rs->nbSamplesBlocks, rc->u_sf_filename );
uint8_t *ptr=(uint8_t *)rs->ms_sample;
for (i = 0; i < rs->nb_samples; i++) { for (i = 0; i < rs->nbSamplesBlocks; i++) {
fwrite(rs->ms_sample+i, sizeof(unsigned char), sizeof(iqrec_t), rs->pFile); int blockBytes=sizeof(iqrec_t)+((iqrec_t *)ptr)->nbBytes;
fwrite(ptr, sizeof(unsigned char), blockBytes, rs->pFile);
ptr+=blockBytes;
} }
fclose (rs->pFile); fclose (rs->pFile);
...@@ -112,4 +118,4 @@ void iqrecorder_end(openair0_device *device) { ...@@ -112,4 +118,4 @@ void iqrecorder_end(openair0_device *device) {
rs->ms_sample = NULL; rs->ms_sample = NULL;
} }
} }
} }
\ No newline at end of file
...@@ -46,21 +46,22 @@ extern "C" ...@@ -46,21 +46,22 @@ extern "C"
#define BELL_LABS_IQ_HEADER 0xabababababababab #define BELL_LABS_IQ_HEADER 0xabababababababab
#define BELL_LABS_IQ_PER_SF 7680 // Up to 5MHz bw for now #define BELL_LABS_IQ_PER_SF 7680 // Up to 5MHz bw for now
#define BELL_LABS_IQ_BYTES_PER_SF (BELL_LABS_IQ_PER_SF * 4) #define BELL_LABS_IQ_BYTES_PER_SF (BELL_LABS_IQ_PER_SF * 4)
#define MAX_BELL_LABS_IQ_BYTES_PER_SF BELL_LABS_IQ_BYTES_PER_SF*10
#define OAIIQFILE_ID "OIQF" #define OAIIQFILE_ID {'O', 'I','Q','F'}
typedef struct { typedef struct {
uint64_t devtype; uint64_t devtype;
uint64_t tx_sample_advance; uint64_t tx_sample_advance;
double bw; double bw;
unsigned int nbSamplesBlocks;
char oaiid[4]; char oaiid[4];
} iqfile_header_t; } iqfile_header_t;
typedef struct { typedef struct {
int64_t header; int64_t header;
int64_t ts; int64_t ts;
int64_t rfu1; int64_t nbBytes;
int64_t rfu2; // pad for 256 bits alignement required by AVX2 int64_t rfu2; // pad for 256 bits alignement required by AVX2
unsigned char samples[BELL_LABS_IQ_BYTES_PER_SF]; // iq's for one subframe
} iqrec_t; } iqrec_t;
#define DEF_NB_SF 120000 // default nb of sf or ms to capture (2 minutes at 5MHz) #define DEF_NB_SF 120000 // default nb of sf or ms to capture (2 minutes at 5MHz)
#define DEF_SF_FILE "/tmp/iqfile" // default subframes file name #define DEF_SF_FILE "/tmp/iqfile" // default subframes file name
...@@ -114,14 +115,16 @@ typedef struct { ...@@ -114,14 +115,16 @@ typedef struct {
int use_mmap; // default is to use mmap int use_mmap; // default is to use mmap
size_t mapsize; size_t mapsize;
FILE *pFile; FILE *pFile;
int mmapfd; int fd;
int iqfd;
iqrec_t *ms_sample; // memory for all subframes iqrec_t *ms_sample; // memory for all subframes
unsigned int nb_samples; unsigned int nbSamplesBlocks;
uint8_t *currentPtr;
uint64_t currentTs;
unsigned int curSamplesBlock;
int64_t wrap_count;
size_t maxSizeBytes;
} recplay_state_t; } recplay_state_t;
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
This diff is collapsed.
...@@ -727,7 +727,7 @@ int main ( int argc, char **argv ) ...@@ -727,7 +727,7 @@ int main ( int argc, char **argv )
fflush(stderr); fflush(stderr);
// end of CI modifications // end of CI modifications
//getchar(); //getchar();
if(IS_SOFTMODEM_DOFORMS) if(IS_SOFTMODEM_DOSCOPE)
load_softscope("enb",NULL); load_softscope("enb",NULL);
itti_wait_tasks_end(); itti_wait_tasks_end();
oai_exit=1; oai_exit=1;
...@@ -735,7 +735,7 @@ int main ( int argc, char **argv ) ...@@ -735,7 +735,7 @@ int main ( int argc, char **argv )
// stop threads // stop threads
if (RC.nb_inst == 0 || !NODE_IS_CU(node_type)) { if (RC.nb_inst == 0 || !NODE_IS_CU(node_type)) {
if(IS_SOFTMODEM_DOFORMS) if(IS_SOFTMODEM_DOSCOPE)
end_forms(); end_forms();
LOG_I(ENB_APP,"stopping MODEM threads\n"); LOG_I(ENB_APP,"stopping MODEM threads\n");
......
...@@ -758,7 +758,7 @@ int main( int argc, char **argv ) { ...@@ -758,7 +758,7 @@ int main( int argc, char **argv ) {
PHY_vars_UE_g[0][0]->no_timing_correction = 1; PHY_vars_UE_g[0][0]->no_timing_correction = 1;
} }
if(IS_SOFTMODEM_DOFORMS) if(IS_SOFTMODEM_DOSCOPE)
load_softscope("ue",NULL); load_softscope("ue",NULL);
config_check_unknown_cmdlineopt(CONFIG_CHECKALLSECTIONS); config_check_unknown_cmdlineopt(CONFIG_CHECKALLSECTIONS);
...@@ -783,7 +783,7 @@ int main( int argc, char **argv ) { ...@@ -783,7 +783,7 @@ int main( int argc, char **argv ) {
printf("oai_exit=%d\n",oai_exit); printf("oai_exit=%d\n",oai_exit);
// stop threads // stop threads
if(IS_SOFTMODEM_DOFORMS) if(IS_SOFTMODEM_DOSCOPE)
end_forms(); end_forms();
printf("stopping MODEM threads\n"); printf("stopping MODEM threads\n");
......
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