From 6313ded5834546f7fd00869475611c0ec3998b6c Mon Sep 17 00:00:00 2001
From: laurent <laurent.thomas@open-cells.com>
Date: Mon, 12 Aug 2019 21:32:46 +0200
Subject: [PATCH] UE primary sync ok, DU upper layers disabled, UE DCI decoding
 nok (partial)

---
 executables/main-fs6.c          |  5 +++++
 executables/main-ocp.c          | 11 ++++++-----
 executables/split_headers.h     |  1 +
 executables/transport_split.c   |  3 +--
 targets/COMMON/create_tasks.c   |  5 ++++-
 targets/RT/USER/lte-softmodem.c |  6 ++++--
 6 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/executables/main-fs6.c b/executables/main-fs6.c
index ace3f7fd1..cc94ea42f 100644
--- a/executables/main-fs6.c
+++ b/executables/main-fs6.c
@@ -485,6 +485,8 @@ void phy_procedures_eNB_TX_process(uint8_t *bufferZone, int nbBlocks, PHY_VARS_e
   eNB->pdcch_vars[subframe&1].num_pdcch_symbols=hDL(bufferZone)->num_pdcch_symbols;
   eNB->pdcch_vars[subframe&1].num_dci=hDL(bufferZone)->num_dci;
   uint8_t num_mdci = eNB->mpdcch_vars[subframe&1].num_dci = hDL(bufferZone)->num_mdci;
+  eNB->pbch_configured=true;
+  memcpy(eNB->pbch_pdu,hDL(bufferZone)->pbch_pdu, 4);
 
   // Remove all scheduled DL, we will populate from the CU sending
   for (int UE_id=0; UE_id<NUMBER_OF_UE_MAX; UE_id++) {
@@ -684,6 +686,8 @@ void phy_procedures_eNB_TX_extract(uint8_t *bufferZone, PHY_VARS_eNB *eNB, L1_rx
   uint8_t num_pdcch_symbols = eNB->pdcch_vars[subframe&1].num_pdcch_symbols;
   uint8_t num_dci           = eNB->pdcch_vars[subframe&1].num_dci;
   uint8_t num_mdci          = eNB->mpdcch_vars[subframe&1].num_dci;
+  memcpy(hDL(bufferZone)->pbch_pdu,eNB->pbch_pdu,4);
+
   LOG_D(PHY,"num_pdcch_symbols %"PRIu8",number dci %"PRIu8"\n",num_pdcch_symbols, num_dci);
 
   if (NFAPI_MODE==NFAPI_MONOLITHIC || NFAPI_MODE==NFAPI_MODE_PNF) {
@@ -691,6 +695,7 @@ void phy_procedures_eNB_TX_extract(uint8_t *bufferZone, PHY_VARS_eNB *eNB, L1_rx
     hDL(bufferZone)->num_dci=num_dci;
     hDL(bufferZone)->num_mdci=num_mdci;
     hDL(bufferZone)->amp=AMP;
+    LOG_D(PHY, "pbch configured: %d\n", eNB->pbch_configured);
   }
 
   if (do_meas==1) stop_meas(&eNB->dlsch_common_and_dci);
diff --git a/executables/main-ocp.c b/executables/main-ocp.c
index 3f6d057d8..432ec6025 100644
--- a/executables/main-ocp.c
+++ b/executables/main-ocp.c
@@ -109,9 +109,10 @@ void init_RU_proc(RU_t *ru) {
 
   if (fs6) {
     if ( strncasecmp(fs6,"cu", 2) == 0 )
-      threadCreate(&t,  cu_fs6, (void *)ru, "MainCu", -1, OAI_PRIORITY_RT_MAX);
-    else if ( strncasecmp(fs6,"du", 2) == 0 )
-      threadCreate(&t,  du_fs6, (void *)ru, "MainDu", -1, OAI_PRIORITY_RT_MAX);
+      threadCreate(&t, cu_fs6, (void *)ru, "MainCu", -1, OAI_PRIORITY_RT_MAX);
+    else if ( strncasecmp(fs6,"du", 2) == 0 ) {
+      threadCreate(&t, du_fs6, (void *)ru, "MainDu", -1, OAI_PRIORITY_RT_MAX);
+    }
     else
       AssertFatal(false, "environement variable fs6 is not cu or du");
   } else
@@ -638,8 +639,8 @@ void rx_rf(RU_t *ru,int *frame,int *subframe) {
   } else {
     if (proc->timestamp_rx - old_ts != fp->samples_per_tti) {
       LOG_E(HW,"impossible shift in RFSIM\n");
-      ru->ts_offset += (proc->timestamp_rx - old_ts - fp->samples_per_tti);
-      proc->timestamp_rx = ts-ru->ts_offset;
+      //ru->ts_offset += (proc->timestamp_rx - old_ts - fp->samples_per_tti);
+      //proc->timestamp_rx = ts-ru->ts_offset;
     }
   }
 
diff --git a/executables/split_headers.h b/executables/split_headers.h
index 59909e524..42202d546 100644
--- a/executables/split_headers.h
+++ b/executables/split_headers.h
@@ -52,6 +52,7 @@ typedef struct {
 } fs6_ul_t;
 
 typedef struct {
+  uint8_t pbch_pdu[4];
   int num_pdcch_symbols;
   int num_dci;
   DCI_ALLOC_t dci_alloc[32];
diff --git a/executables/transport_split.c b/executables/transport_split.c
index 38cd9c343..c9d848ef1 100644
--- a/executables/transport_split.c
+++ b/executables/transport_split.c
@@ -155,7 +155,6 @@ int sendSubFrame(UDPsock_t *sock, void *bufferZone, ssize_t secondHeaderSize, ui
     nbBlocks--;
   } while (nbBlocks);
 
-  LOG_D(HW,"Sent: TS: %lu, frame: %d, subframe: %d\n",
-        UDPheader->timestamp, *(((int *)UDPheader)+1), *(((int *)UDPheader)+2));
+  LOG_D(HW,"Sent: TS: %lu\n", UDPheader->timestamp);
   return 0;
 }
diff --git a/targets/COMMON/create_tasks.c b/targets/COMMON/create_tasks.c
index cfc2bc221..58be63a84 100644
--- a/targets/COMMON/create_tasks.c
+++ b/targets/COMMON/create_tasks.c
@@ -49,6 +49,9 @@ int create_tasks(uint32_t enb_nb) {
   int rc;
 
   if (enb_nb == 0) return 0;
+  bool fs6Du=false;
+  if ( getenv("fs6") != NULL && strncasecmp( getenv("fs6"), "du", 2) == 0 )
+	  fs6Du=true;
 
   LOG_I(ENB_APP, "Creating ENB_APP eNB Task\n");
   rc = itti_create_task (TASK_ENB_APP, eNB_app_task, NULL);
@@ -64,7 +67,7 @@ int create_tasks(uint32_t enb_nb) {
   }
 
 
-  if (EPC_MODE_ENABLED && !NODE_IS_DU(type)) {
+  if (EPC_MODE_ENABLED && !NODE_IS_DU(type) && !fs6Du ) {
     rc = itti_create_task(TASK_S1AP, s1ap_eNB_task, NULL);
     AssertFatal(rc >= 0, "Create task for S1AP failed\n");
     if (!(get_softmodem_params()->emulate_rf)){
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 109c0afdd..85862f943 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -593,8 +593,10 @@ int main( int argc, char **argv ) {
     
     /* initializes PDCP and sets correct RLC Request/PDCP Indication callbacks
      * for monolithic/F1 modes */
-    if ( getenv("fs6") == NULL || strncasecmp( getenv("fs6"), "du", 2) != 0 )
-      init_pdcp();
+    //if ( getenv("fs6") != NULL && strncasecmp( getenv("fs6"), "du", 2) == 0 )
+    //RC.rrc[0]->node_type=ngran_eNB_DU;
+    
+    init_pdcp();
     
     if (create_tasks(1) < 0) {
       printf("cannot create ITTI tasks\n");
-- 
2.26.2