{
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;
}
*
* @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);
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;
}
}
/**
- * @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;
}
**/
uint8_t schTmrExpiry(PTR cb, uint8_t tmrEvnt)
{
- DU_LOG("\nINFO --> SCH : Timer Event [%d] expired", tmrEvnt);
-
- struct timeval tp;
- gettimeofday(&tp, 0);
- time_t curtime = tp.tv_sec;
- struct tm *t = localtime(&curtime);
+#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);