From 4d6e647aaae8d22c259392a39dafd596cc7cdc8c Mon Sep 17 00:00:00 2001
From: laurent <laurent.thomas@open-cells.com>
Date: Mon, 6 Jul 2020 14:07:46 +0200
Subject: [PATCH] fixes pushed also in develop

---
 executables/ocp-gnb.c                         | 12 +++++--
 .../PHY/CODING/nrPolar_tools/nr_polar_defs.h  |  2 +-
 .../CODING/nrPolar_tools/nr_polar_encoder.c   |  4 +--
 openair1/PHY/MODULATION/slot_fep_nr.c         |  4 +--
 openair1/PHY/NR_TRANSPORT/nr_dci.c            |  2 +-
 openair1/PHY/NR_TRANSPORT/nr_pbch.c           |  2 +-
 openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c       |  6 ++--
 openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c  |  2 +-
 openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c      |  1 +
 targets/ARCH/rfsimulator/simulator.c          | 32 ++++++++++++-------
 10 files changed, 42 insertions(+), 25 deletions(-)

diff --git a/executables/ocp-gnb.c b/executables/ocp-gnb.c
index 41f3b557e3..e2ee821425 100644
--- a/executables/ocp-gnb.c
+++ b/executables/ocp-gnb.c
@@ -40,6 +40,7 @@
 #include <executables/softmodem-common.h>
 #include <openair2/GNB_APP/gnb_app.h>
 #include <openair2/RRC/NR/nr_rrc_extern.h>
+#include <openair1/PHY/NR_TRANSPORT/nr_transport_proto.h>
 
 // should be in a shared lib
 #include <forms.h>
@@ -176,11 +177,16 @@ static inline int rxtx(PHY_VARS_gNB *gNB, gNB_L1_rxtx_proc_t *proc) {
   int rx_slot_type         = nr_slot_select(cfg,proc->frame_rx,proc->slot_rx);
 
   if (rx_slot_type == NR_UPLINK_SLOT || rx_slot_type == NR_MIXED_SLOT) {
-    // UE-specific RX processing for subframe n
-    // TODO: check if this is correct for PARALLEL_RU_L1_TRX_SPLIT
+    // Do PRACH RU processing
+    int prach_id=find_nr_prach(gNB,proc->frame_rx,proc->slot_rx,0,SEARCH_EXIST);
+    if (prach_id>=0) {
+      L1_nr_prach_procedures(gNB,proc->frame_rx,proc->slot_rx,&gNB->prach_vars.list[prach_id].pdu);
+      gNB->prach_vars.list[prach_id].frame=-1;
+    }
+    
     phy_procedures_gNB_uespec_RX(gNB, proc->frame_rx, proc->slot_rx);
   }
-
+  
   if (oai_exit) return(-1);
 
   // *****************************************
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h b/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
index 6e01a05d0f..1cf49a224d 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_defs.h
@@ -146,7 +146,7 @@ void polar_encoder_dci(uint32_t *in,
                        uint16_t n_RNTI);
 
 void polar_encoder_fast(uint64_t *A,
-                        uint32_t *out,
+                        void  *out,
                         int32_t crcmask,
                         uint8_t ones_flag,
                         t_nrPolar_params *polarParams);
diff --git a/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c b/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
index 70791302cc..f5697ace29 100644
--- a/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
+++ b/openair1/PHY/CODING/nrPolar_tools/nr_polar_encoder.c
@@ -408,7 +408,7 @@ void build_polar_tables(t_nrPolar_params *polarParams) {
 }
 
 void polar_encoder_fast(uint64_t *A,
-                        uint32_t *out,
+                        void *out,
                         int32_t crcmask,
                         uint8_t ones_flag,
                         t_nrPolar_params *polarParams) {
@@ -676,5 +676,5 @@ void polar_encoder_fast(uint64_t *A,
     }
   }
   memset((void*)out,0,polarParams->encoderLength>>3);
-  polar_rate_matching(polarParams,(void *)D,(void *)out);
+  polar_rate_matching(polarParams,(void *)D,out);
 }
diff --git a/openair1/PHY/MODULATION/slot_fep_nr.c b/openair1/PHY/MODULATION/slot_fep_nr.c
index 60ba3d7112..c24251dcf3 100644
--- a/openair1/PHY/MODULATION/slot_fep_nr.c
+++ b/openair1/PHY/MODULATION/slot_fep_nr.c
@@ -465,8 +465,8 @@ int nr_slot_fep_ul(NR_DL_FRAME_PARMS *frame_parms,
     dft(dftsize,(int16_t *)&rxdata[rxdata_offset-sample_offset],
         (int16_t *)&rxdataF[symbol * frame_parms->ofdm_symbol_size], 1);
 
-  LOG_T(PHY,"dft of size: %d done from %d (energy %d) to %d offsets (energy (%d)\n", 
-		  dftsize, 
+  LOG_T(PHY,"Ns: %d, symbol: %d dft of size: %d done from %d (energy %d) to %d offsets (energy (%d)\n", 
+		  Ns, symbol, dftsize, 
 		  rxdata_offset-sample_offset, signal_energy(&rxdata[rxdata_offset-sample_offset], dftsize),
 		  symbol * frame_parms->ofdm_symbol_size,  signal_energy(&rxdataF[symbol * frame_parms->ofdm_symbol_size], dftsize)
 		  );
diff --git a/openair1/PHY/NR_TRANSPORT/nr_dci.c b/openair1/PHY/NR_TRANSPORT/nr_dci.c
index 8508621ae5..6298de3c60 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_dci.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_dci.c
@@ -237,7 +237,7 @@ uint8_t nr_generate_dci_top(nfapi_nr_dl_tti_pdcch_pdu *pdcch_pdu,
 						   pdcch_pdu_rel15->dci_pdu.PayloadSizeBits[d], 
 						   pdcch_pdu_rel15->dci_pdu.AggregationLevel[d],
 						   0,NULL);
-    polar_encoder_fast((uint64_t*)pdcch_pdu_rel15->dci_pdu.Payload[d], encoder_output, n_RNTI,1,currentPtr);
+    polar_encoder_fast((uint64_t*)pdcch_pdu_rel15->dci_pdu.Payload[d], (void*)encoder_output, n_RNTI,1,currentPtr);
 #ifdef DEBUG_CHANNEL_CODING
     printf("polar rnti %x,length %d, L %d\n",n_RNTI, pdcch_pdu_rel15->dci_pdu.PayloadSizeBits[d],pdcch_pdu_rel15->dci_pdu.AggregationLevel[d]);
     printf("DCI PDU: [0]->0x%lx \t [1]->0x%lx\n",
diff --git a/openair1/PHY/NR_TRANSPORT/nr_pbch.c b/openair1/PHY/NR_TRANSPORT/nr_pbch.c
index f5a26aec80..bc33d93811 100644
--- a/openair1/PHY/NR_TRANSPORT/nr_pbch.c
+++ b/openair1/PHY/NR_TRANSPORT/nr_pbch.c
@@ -297,7 +297,7 @@ int nr_generate_pbch(NR_gNB_PBCH *pbch,
     a_reversed |= (((uint64_t)pbch->pbch_a_prime>>i)&1)<<(31-i);
 
   /// CRC, coding and rate matching
-  polar_encoder_fast (&a_reversed, (uint32_t *)pbch->pbch_e, 0, 0,
+  polar_encoder_fast (&a_reversed, (void*)pbch->pbch_e, 0, 0,
                       nr_polar_params( NR_POLAR_PBCH_MESSAGE_TYPE, NR_POLAR_PBCH_PAYLOAD_BITS, NR_POLAR_PBCH_AGGREGATION_LEVEL,0,NULL)
                      );
 #ifdef DEBUG_PBCH_ENCODING
diff --git a/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c b/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
index e1358602ce..823de0a63e 100644
--- a/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
+++ b/openair1/PHY/NR_UE_TRANSPORT/pucch_nr.c
@@ -962,7 +962,7 @@ void nr_generate_pucch2(PHY_VARS_NR_UE *ue,
   uint64_t b[16]; // limit to 1024-bit encoded length
   // M_bit is the number of bits of block b (payload after encoding)
   uint16_t M_bit;
-  nr_uci_encoding(payload,nr_bit,pucch_format2_nr,0,nrofSymbols,nrofPRB,1,0,0,&b,&M_bit);
+  nr_uci_encoding(payload,nr_bit,pucch_format2_nr,0,nrofSymbols,nrofPRB,1,0,0,(void*)b,&M_bit);
   /*
    * Implementing TS 38.211
    * Subclauses 6.3.2.5.1 Scrambling (PUCCH format 2)
@@ -1128,7 +1128,7 @@ void nr_generate_pucch3_4(PHY_VARS_NR_UE *ue,
   printf("\t [nr_generate_pucch3_4] start function at slot(nr_tti_tx)=%d with payload=%lu and nr_bit=%d\n", nr_tti_tx, payload, nr_bit);
 #endif
   // b is the block of bits transmitted on the physical channel after payload coding
-  uint64_t b;
+  uint64_t b[16];
   // M_bit is the number of bits of block b (payload after encoding)
   uint16_t M_bit;
   // parameter PUCCH-F4-preDFT-OCC-length set of {2,4} -> to use table -1 or -2
@@ -1153,7 +1153,7 @@ void nr_generate_pucch3_4(PHY_VARS_NR_UE *ue,
   //nrofPRB = 2; // only for test purposes
   if (fmt == pucch_format4_nr) nrofPRB = 1;
 
-  nr_uci_encoding(payload,nr_bit,fmt,is_pi_over_2_bpsk_enabled,nrofSymbols,nrofPRB,n_SF_PUCCH_s,intraSlotFrequencyHopping,add_dmrs,&b,&M_bit);
+  nr_uci_encoding(payload,nr_bit,fmt,is_pi_over_2_bpsk_enabled,nrofSymbols,nrofPRB,n_SF_PUCCH_s,intraSlotFrequencyHopping,add_dmrs,(void*)b,&M_bit);
   /*
    * Implementing TS 38.211
    * Subclauses 6.3.2.6.1 Scrambling (PUCCH formats 3 and 4)
diff --git a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
index 938d9f56f3..574125fe9f 100644
--- a/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
+++ b/openair2/LAYER2/NR_MAC_UE/nr_ue_procedures.c
@@ -272,7 +272,7 @@ int8_t nr_ue_decode_mib(module_id_t module_id,
   uint16_t frame_number_4lsb = 0;
   for (int i=0; i<4; i++)
     frame_number_4lsb |= ((extra_bits>>i)&1)<<(3-i);
-  uint8_t half_frame_bit = ( extra_bits >> 4 ) & 0x1;               //	extra bits[4]
+  //uint8_t half_frame_bit = ( extra_bits >> 4 ) & 0x1;               //	extra bits[4]
   uint8_t ssb_subcarrier_offset_msb = ( extra_bits >> 5 ) & 0x1;    //	extra bits[5]
   uint8_t ssb_subcarrier_offset = (uint8_t)mac->mib->ssb_SubcarrierOffset;
 
diff --git a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
index 9981dca7fd..62605aa604 100644
--- a/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
+++ b/openair2/LAYER2/PDCP_v10.1.0/pdcp_fifo.c
@@ -155,6 +155,7 @@ int pdcp_fifo_flush_sdus(const protocol_ctxt_t *const  ctxt_pP) {
       ret = sendmsg(nas_sock_fd[0],&nas_msg_tx,0);
     }  //  PDCP_USE_NETLINK
     
+    AssertFatal(ret >= 0,"[PDCP_FIFOS] pdcp_fifo_flush_sdus (errno: %d %s), nas_sock_fd[0]: %d\n", errno, strerror(errno), nas_sock_fd[0]);
 
     if( LOG_DEBUGFLAG(DEBUG_PDCP) )
       log_dump(PDCP, pdcpData, min(sizeToWrite,30) , LOG_DUMP_CHAR,
diff --git a/targets/ARCH/rfsimulator/simulator.c b/targets/ARCH/rfsimulator/simulator.c
index acda5aecf3..a26ad16a7b 100644
--- a/targets/ARCH/rfsimulator/simulator.c
+++ b/targets/ARCH/rfsimulator/simulator.c
@@ -148,11 +148,17 @@ void allocCirBuf(rfsimulator_state_t *bridge, int sock) {
     // Legacy changes directlty the variable channel_model->path_loss_dB place to place
     // while calling new_channel_desc_scm() with path losses = 0
     static bool init_done=false;
+
     if (!init_done) {
-      randominit(0);
+      uint64_t rand;
+      FILE *h=fopen("/dev/random","r");
+      fread(&rand,sizeof(rand),1,h);
+      fclose(h);
+      randominit(rand);
       tableNor(0);
       init_done=true;
     }
+
     ptr->channel_model=new_channel_desc_scm(bridge->tx_num_channels,bridge->rx_num_channels,
                                             bridge->channelmod,
                                             bridge->sample_rate,
@@ -375,6 +381,7 @@ static int rfsimulator_write_internal(rfsimulator_state_t *t, openair0_timestamp
   if (t->lastWroteTS > timestamp+nsamps)
     LOG_E(HW,"Not supported to send Tx out of order (same in USRP) %lu, %lu\n",
           t->lastWroteTS, timestamp);
+
   t->lastWroteTS=timestamp+nsamps;
 
   if (!alreadyLocked)
@@ -476,20 +483,22 @@ static bool flushInput(rfsimulator_state_t *t, int timeout, int nsamps_for_initi
           b->trashingPacket=true;
         } else if ( b->lastReceivedTS < b->th.timestamp) {
           int nbAnt= b->th.nbAnt;
+
           if ( b->th.timestamp-b->lastReceivedTS < CirSize ) {
-          for (uint64_t index=b->lastReceivedTS; index < b->th.timestamp; index++ ) {
-            for (int a=0; a < nbAnt; a++) {
-              b->circularBuf[(index*nbAnt+a)%CirSize].r = 0;
-              b->circularBuf[(index*nbAnt+a)%CirSize].i = 0;
+            for (uint64_t index=b->lastReceivedTS; index < b->th.timestamp; index++ ) {
+              for (int a=0; a < nbAnt; a++) {
+                b->circularBuf[(index*nbAnt+a)%CirSize].r = 0;
+                b->circularBuf[(index*nbAnt+a)%CirSize].i = 0;
+              }
             }
-          }
           } else {
-	    memset(b->circularBuf, 0, sampleToByte(CirSize,1));
-	  }
+            memset(b->circularBuf, 0, sampleToByte(CirSize,1));
+          }
+
           if (b->lastReceivedTS != 0 && b->th.timestamp-b->lastReceivedTS > 50 )
             LOG_W(HW,"UEsock: %d gap of: %ld in reception\n", fd, b->th.timestamp-b->lastReceivedTS );
-          b->lastReceivedTS=b->th.timestamp;
 
+          b->lastReceivedTS=b->th.timestamp;
         } else if ( b->lastReceivedTS > b->th.timestamp && b->th.size == 1 ) {
           LOG_W(HW,"Received Rx/Tx synchro out of order\n");
           b->trashingPacket=true;
@@ -649,8 +658,9 @@ int rfsimulator_read(openair0_device *device, openair0_timestamp *ptimestamp, vo
         else { // no channel modeling
           sample_t *out=(sample_t *)samplesVoid[a];
           const int64_t base=t->nextTimestamp*nbAnt+a;
+
           for ( int i=0; i < nsamps; i++ ) {
-	    const int idx=(i*nbAnt+base)%CirSize;
+            const int idx=(i*nbAnt+base)%CirSize;
             out[i].r+=ptr->circularBuf[idx].r;
             out[i].i+=ptr->circularBuf[idx].i;
           }
@@ -691,7 +701,7 @@ int rfsimulator_set_freq(openair0_device *device, openair0_config_t *openair0_cf
 int rfsimulator_set_gains(openair0_device *device, openair0_config_t *openair0_cfg) {
   return 0;
 }
-int rfsimulator_write_init(openair0_device *device){
+int rfsimulator_write_init(openair0_device *device) {
   return 0;
 }
 __attribute__((__visibility__("default")))
-- 
2.26.2