From 4a04aeb2aada32731ad5ee138efe2cbbe32e38ef Mon Sep 17 00:00:00 2001
From: Xenofon Foukas <x.foukas@sms.ed.ac.uk>
Date: Tue, 1 Mar 2016 13:08:29 +0000
Subject: [PATCH] Fixed bug in decoding frame and subframe number from sfn_sf
 field

---
 .../LAYER2/MAC/eNB_agent_scheduler_dlsch_ue_remote.c   | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/openair2/LAYER2/MAC/eNB_agent_scheduler_dlsch_ue_remote.c b/openair2/LAYER2/MAC/eNB_agent_scheduler_dlsch_ue_remote.c
index 1818a64087..7f4ce23f9e 100644
--- a/openair2/LAYER2/MAC/eNB_agent_scheduler_dlsch_ue_remote.c
+++ b/openair2/LAYER2/MAC/eNB_agent_scheduler_dlsch_ue_remote.c
@@ -109,17 +109,17 @@ int get_sf_difference(mid_t mod_id, uint16_t sfn_sf) {
     return 0;
   }
   
-  uint16_t frame_mask = !((1<<4) - 1);
-  uint16_t frame = (sfn_sf & frame_mask) >> 4;
+  uint16_t frame_mask = ((1<<12) - 1);
+  uint16_t frame = (sfn_sf & (frame_mask << 4)) >> 4;
   
-  uint16_t sf_mask = !(((1<<12) - 1) << 4);
+  uint16_t sf_mask = ((1<<4) - 1);
   uint16_t subframe = (sfn_sf & sf_mask);
   
   if (frame == current_frame) {
     return subframe - current_subframe;
   } else if (frame > current_frame) {
     diff_in_subframes = 9 - current_subframe;
-    diff_in_subframes += subframe;
+    diff_in_subframes += (subframe + 1);
     diff_in_subframes += (frame-2) * 10;
     if (diff_in_subframes > SCHED_AHEAD_SUBFRAMES) {
       return -1;
@@ -128,7 +128,7 @@ int get_sf_difference(mid_t mod_id, uint16_t sfn_sf) {
     }
   } else { //frame < current_frame
     diff_in_subframes = 9 - current_subframe;
-    diff_in_subframes += subframe;
+    diff_in_subframes += (subframe + 1);
     if (frame > 0) {
       diff_in_subframes += (frame - 1) * 10;
     }
-- 
2.26.2