Merge "[Epic-ID: ODUHIGH-556][Task-ID: ODUHIGH-570] UL Candidate Sel and Res Alloc...
[o-du/l2.git] / src / 5gnrsch / sch_tmr.c
index d88b142..1a7fb3f 100644 (file)
@@ -37,32 +37,20 @@ bool schChkTmr(PTR cb, int16_t tmrEvnt)
 {
    switch (tmrEvnt)
    {
-      case EVENT_DL_TOTAL_PRB_USAGE_TMR:
-      {
-         if(((TotalPrbUsage *)cb)->periodTimer.tmrEvnt == EVENT_DL_TOTAL_PRB_USAGE_TMR)
+      case EVENT_STATISTICS_TMR:
          {
-             DU_LOG("\nDEBUG  -->  SCH : schChkTmr: Timer Evnt [%d] already running", tmrEvnt);
-             return TRUE;
+            if(((SchStatsGrp *)cb)->periodTimer.tmrEvnt == EVENT_STATISTICS_TMR)
+            {
+               DU_LOG("\nDEBUG  -->  SCH : schChkTmr: Timer Evnt [%d] already running", tmrEvnt);
+               return TRUE;
+            }
+            break;
          }
-         break;
-      }
-
-      case EVENT_UL_TOTAL_PRB_USAGE_TMR:
-      {
-         if(((TotalPrbUsage *)cb)->periodTimer.tmrEvnt == EVENT_UL_TOTAL_PRB_USAGE_TMR)
+      default:
          {
-             DU_LOG("\nDEBUG  -->  SCH : schChkTmr: Timer Evnt [%d] already running", tmrEvnt);
-             return TRUE;
+            DU_LOG("\nERROR  -->  SCH : schChkTmr: Invalid tmr Evnt [%d]", tmrEvnt);
          }
-         break;
-      }
-
-      default:
-      {
-         DU_LOG("\nERROR  -->  SCH : schChkTmr: Invalid tmr Evnt [%d]", tmrEvnt);
-      }
    }
-
    return FALSE;
 }
 
@@ -74,38 +62,30 @@ bool schChkTmr(PTR cb, int16_t tmrEvnt)
  *
  * @return  Void
 */
-void schStartTmr(SchCb *gCb, PTR cb, int16_t tmrEvnt, uint8_t timerValue)
+void schStartTmr(SchCb *gCb, PTR cb, int16_t tmrEvnt, uint16_t timerValue)
 {
-   TotalPrbUsage *dlTotalPrbUsage;
-   TotalPrbUsage *ulTotalPrbUsage;
+   SchStatsGrp *statsGrp = NULLP;
    CmTmrArg arg;
 
    arg.wait = 0;
 
-   DU_LOG("\nINFO   -->  SCH : Starting Timer Event [%d] with Wait Time [%d] ms", \
+#ifdef DEBUG_PRINT
+   DU_LOG("\nDEBUG   -->  SCH : Starting Timer Event [%d] with Wait Time [%d] ms", \
       tmrEvnt, timerValue);
+#endif      
    
    switch (tmrEvnt)
    {
-      case EVENT_DL_TOTAL_PRB_USAGE_TMR:
+      case EVENT_STATISTICS_TMR:
       {
-         dlTotalPrbUsage = ((TotalPrbUsage *)cb);
+         statsGrp = ((SchStatsGrp *)cb);
          TMR_CALCUATE_WAIT(arg.wait, timerValue, gCb->schTimersInfo.tmrRes);
 
-         arg.timers = &dlTotalPrbUsage->periodTimer;
-         arg.max = MAX_TOTAL_PRB_USAGE_TMR;
+         arg.timers = &statsGrp->periodTimer;
+         arg.max = MAX_NUM_TMR_PER_STATS_GRP;
          break;
       }
 
-      case EVENT_UL_TOTAL_PRB_USAGE_TMR:
-      {
-         ulTotalPrbUsage = ((TotalPrbUsage *)cb);
-         TMR_CALCUATE_WAIT(arg.wait, timerValue, gCb->schTimersInfo.tmrRes);
-
-         arg.timers = &ulTotalPrbUsage->periodTimer;
-         arg.max = MAX_TOTAL_PRB_USAGE_TMR;
-         break;
-      }
       default:
       {
          DU_LOG("\nERROR  -->  SCH : schStartTmr: Invalid tmr Evnt [%d]", tmrEvnt);
@@ -140,20 +120,16 @@ void schStopTmr(SchCb *gCb, PTR cb, uint8_t tmrType)
 
    arg.timers = NULLP;
 
-   DU_LOG("\nINFO   -->  SCH : Stopping Timer Event [%d]", tmrType);
+#ifdef DEBUG_PRINT
+   DU_LOG("\nDEBUG   -->  SCH : Stopping Timer Event [%d]", tmrType);
+#endif   
 
    switch (tmrType)
    {
-      case EVENT_DL_TOTAL_PRB_USAGE_TMR:
-         {
-            arg.timers  = &((TotalPrbUsage *)cb)->periodTimer;
-            arg.max = MAX_TOTAL_PRB_USAGE_TMR;
-            break;
-         }
-         case EVENT_UL_TOTAL_PRB_USAGE_TMR:
+      case EVENT_STATISTICS_TMR:
          {
-            arg.timers  = &((TotalPrbUsage *)cb)->periodTimer;
-            arg.max = MAX_TOTAL_PRB_USAGE_TMR;
+            arg.timers  = &((SchStatsGrp *)cb)->periodTimer;
+            arg.max = MAX_NUM_TMR_PER_STATS_GRP;
             break;
          }
 
@@ -179,56 +155,28 @@ void schStopTmr(SchCb *gCb, PTR cb, uint8_t tmrType)
 }
 
 /**
- * @brief Handler to process Timer expiry of DL Total PRB Usage calculation 
+ * @brief Handler for Statistics group timer expiry
  *
- * @param[in] cb        Control block depending on the type of the timer event.
- * @param[in] tmrEvnt   Timer event to be started
+ * @details
  *
- * @return  Bool indicating whether the timer is running or not
- *      -# ROK
- *      -# RFAILED
-*/
-uint8_t SchProcDlTotalPrbUsageTmrExp(TotalPrbUsage *dlTotalPrbUsage)
-{
-   uint8_t percentageOfTotalPrbUsed = 0;
-
-   if(dlTotalPrbUsage->totalPrbAvailForTx)
-      percentageOfTotalPrbUsed = ((dlTotalPrbUsage->numPrbUsedForTx * 100) / dlTotalPrbUsage->totalPrbAvailForTx);
-   //SchSendStatsIndToMac(dlTotalPrbUsage->schInst, SCH_DL_TOTAL_PRB_USAGE, percentageOfTotalPrbUsed);
-   
-   /* Restart Timer */
-   dlTotalPrbUsage->numPrbUsedForTx = 0;
-   dlTotalPrbUsage->totalPrbAvailForTx = 0;
-   schStartTmr(&schCb[dlTotalPrbUsage->schInst], (PTR)(dlTotalPrbUsage), EVENT_DL_TOTAL_PRB_USAGE_TMR, \
-      dlTotalPrbUsage->periodicity);
-
-   return ROK;
-}
-
-/**
- * @brief Handler to check if the timer is running
+ *     Function : SchProcStatisticsGrpTmrExp
  *
- * @param[in] cb        Control block depending on the type of the timer event.
- * @param[in] tmrEvnt   Timer event to be started
+ *     This function calculates and sends statistics of
+ *     the stats-group for which timer expired.
+ *     Once Statistics Indication is sent, timer for this
+ *     group is restarted.
  *
- * @return  Bool indicating whether the timer is running or not
+ *  @param[in]  Statistics group control block
+ *  @return  uint8_t
  *      -# ROK
- *      -# RFAILED
-*/
-uint8_t SchProcUlTotalPrbUsageTmrExp(TotalPrbUsage *ulTotalPrbUsage)
+ **/
+uint8_t SchProcStatisticsGrpTmrExp(SchStatsGrp *cb)
 {
-   uint8_t percentageOfTotalPrbUsed = 0;
-
-   if(ulTotalPrbUsage->totalPrbAvailForTx)
-      percentageOfTotalPrbUsed = ((ulTotalPrbUsage->numPrbUsedForTx * 100) / ulTotalPrbUsage->totalPrbAvailForTx);
-   //SchSendStatsIndToMac(ulTotalPrbUsage->schInst, SCH_UL_TOTAL_PRB_USAGE, percentageOfTotalPrbUsed);
-
-   /* Restart Timer */
-   ulTotalPrbUsage->numPrbUsedForTx = 0;
-   ulTotalPrbUsage->totalPrbAvailForTx = 0;
-   schStartTmr(&schCb[ulTotalPrbUsage->schInst], (PTR)(ulTotalPrbUsage), EVENT_UL_TOTAL_PRB_USAGE_TMR, \
-      ulTotalPrbUsage->periodicity);
-
+   if(schCalcAndSendGrpStats(cb) != ROK)
+   {
+      DU_LOG("\nERROR  -->  SCH : SchProcStatisticsGrpTmrExp: Fails to send group statistics");
+   }
+   schStartTmr(&schCb[cb->schInst], (PTR)(cb), EVENT_STATISTICS_TMR, cb->periodicity);
    return ROK;
 }
 
@@ -250,18 +198,22 @@ uint8_t SchProcUlTotalPrbUsageTmrExp(TotalPrbUsage *ulTotalPrbUsage)
  **/
 uint8_t schTmrExpiry(PTR cb, uint8_t tmrEvnt)
 {
+#ifdef DEBUG_PRINT
+   DU_LOG("\nDEBUG   -->  SCH : Timer Expired. Event [%d]", tmrEvnt);
+#endif
+
    switch (tmrEvnt)
    {
-      case EVENT_DL_TOTAL_PRB_USAGE_TMR:
-         {
-            SchProcDlTotalPrbUsageTmrExp((TotalPrbUsage*)cb);
-            break;
-         }
-      case EVENT_UL_TOTAL_PRB_USAGE_TMR:
+      case EVENT_STATISTICS_TMR:
          {
-            SchProcUlTotalPrbUsageTmrExp((TotalPrbUsage*)cb);
+#ifdef DEBUG_PRINT
+            DU_LOG("\nDEBUG   -->  SCH : Statistics Timer Expired for Subscription Id [%ld] GroupId [%d]", \
+                  ((SchStatsGrp*)cb)->subscriptionId, ((SchStatsGrp*)cb)->groupId);
+#endif
+            SchProcStatisticsGrpTmrExp((SchStatsGrp*)cb);
             break;
          }
+
       default:
          {
             DU_LOG("\nERROR  -->  DU : duStartTmr: Invalid tmr Evnt [%d]", tmrEvnt);