From b37e234eccc3bd358eb03b46f3cbc1ef02ef5023 Mon Sep 17 00:00:00 2001
From: Raymond Knopp <florian.kaltenberger@eurecom.fr>
Date: Mon, 7 Mar 2016 21:59:30 +0100
Subject: [PATCH] added CQI request timer. CQI only requested periodically.
 MCS20 on UL works now.

---
 openair2/LAYER2/MAC/defs.h                |  1 +
 openair2/LAYER2/MAC/eNB_scheduler.c       |  2 ++
 openair2/LAYER2/MAC/eNB_scheduler_ulsch.c | 13 +++++++++++--
 targets/RT/USER/lte-softmodem.c           |  2 +-
 4 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/openair2/LAYER2/MAC/defs.h b/openair2/LAYER2/MAC/defs.h
index 405bb6ca95..078b4fde24 100644
--- a/openair2/LAYER2/MAC/defs.h
+++ b/openair2/LAYER2/MAC/defs.h
@@ -742,6 +742,7 @@ typedef struct {
   uint16_t      ta_timer;
   int16_t       ta_update;
   int32_t       context_active_timer;
+  int32_t       cqi_req_timer;
   int32_t       ul_inactivity_timer;
   int32_t       ul_failure_timer;
   int32_t       ra_pdcch_order_sent;
diff --git a/openair2/LAYER2/MAC/eNB_scheduler.c b/openair2/LAYER2/MAC/eNB_scheduler.c
index dbc094034b..5f68448e6b 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler.c
@@ -127,6 +127,8 @@ void eNB_dlsch_ulsch_scheduler(module_id_t module_idP,uint8_t cooperation_flag,
 
     // increment this, it is cleared when we receive an sdu
     eNB_mac_inst[module_idP].UE_list.UE_sched_ctrl[i].ul_inactivity_timer++;
+
+    eNB_mac_inst[module_idP].UE_list.UE_sched_ctrl[i].cqi_req_timer++;
     
     if (mac_xface->get_eNB_UE_stats(module_idP, CC_id, rnti)==NULL) {
       //      mac_remove_ue(module_idP, i, frameP, subframeP);
diff --git a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
index 1500711639..6953926101 100644
--- a/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
+++ b/openair2/LAYER2/MAC/eNB_scheduler_ulsch.c
@@ -873,7 +873,14 @@ void schedule_ulsch_rnti(module_id_t   module_idP,
           UE_template->ul_SR = 0;
           aggregation = process_ue_cqi(module_idP,UE_id); // =2 by default!!
           status = mac_eNB_get_rrc_status(module_idP,rnti);
-          cqi_req = (status < RRC_CONNECTED)? 0:1;
+	  if (status < RRC_CONNECTED)
+	    cqi_req = 0;
+	  else if (UE_list->UE_sched_ctrl[UE_id].cqi_req_timer>30) {
+	    cqi_req = 1;
+	    UE_list->UE_sched_ctrl[UE_id].cqi_req_timer=0;
+	  }
+	  else
+	    cqi_req = 0;
 
           //power control
           //compute the expected ULSCH RX power (for the stats)
@@ -918,7 +925,9 @@ void schedule_ulsch_rnti(module_id_t   module_idP,
 	    UE_list->eNB_UE_stats[CC_id][UE_id].target_rx_power=target_rx_power;
 	    UE_list->eNB_UE_stats[CC_id][UE_id].ulsch_mcs1=UE_template->pre_assigned_mcs_ul;
             mcs = cmin (UE_template->pre_assigned_mcs_ul, openair_daq_vars.target_ue_ul_mcs); // adjust, based on user-defined MCS
-
+	    if ((cqi_req==1) && (mcs==20)) {
+		mcs=19;
+	    }
             if (UE_template->pre_allocated_rb_table_index_ul >=0) {
               rb_table_index=UE_template->pre_allocated_rb_table_index_ul;
             } else {
diff --git a/targets/RT/USER/lte-softmodem.c b/targets/RT/USER/lte-softmodem.c
index 691542e277..aa0c440c20 100644
--- a/targets/RT/USER/lte-softmodem.c
+++ b/targets/RT/USER/lte-softmodem.c
@@ -318,7 +318,7 @@ static LTE_DL_FRAME_PARMS      *frame_parms[MAX_NUM_CCs];
 
 int multi_thread=1;
 uint32_t target_dl_mcs = 28; //maximum allowed mcs
-uint32_t target_ul_mcs = 19;
+uint32_t target_ul_mcs = 20;
 uint32_t timing_advance = 0;
 uint8_t exit_missed_slots=1;
 uint64_t num_missed_slots=0; // counter for the number of missed slots
-- 
GitLab