// Return Value: BOOLEAN // - TRUE: RATRState is changed. BOOLEAN ODM_RAStateCheck( IN PVOID pDM_VOID, IN s4Byte RSSI, IN BOOLEAN bForceUpdate, OUT pu1Byte pRATRState ) { PDM_ODM_T pDM_Odm = (PDM_ODM_T)pDM_VOID; PODM_RATE_ADAPTIVE pRA = &pDM_Odm->RateAdaptive; const u1Byte GoUpGap = 5; u1Byte HighRSSIThreshForRA = pRA->HighRSSIThresh; u1Byte LowRSSIThreshForRA = pRA->LowRSSIThresh; u1Byte RATRState; // Threshold Adjustment: // when RSSI state trends to go up one or two levels, make sure RSSI is high enough. // Here GoUpGap is added to solve the boundary's level alternation issue. switch (*pRATRState) { case DM_RATR_STA_INIT: case DM_RATR_STA_HIGH: break; case DM_RATR_STA_MIDDLE: HighRSSIThreshForRA += GoUpGap; break; case DM_RATR_STA_LOW: HighRSSIThreshForRA += GoUpGap; LowRSSIThreshForRA += GoUpGap; break; default: ODM_RT_ASSERT(pDM_Odm, FALSE, ("wrong rssi level setting %d !", *pRATRState) ); break; } // Decide RATRState by RSSI. if(RSSI > HighRSSIThreshForRA) RATRState = DM_RATR_STA_HIGH; else if(RSSI > LowRSSIThreshForRA) RATRState = DM_RATR_STA_MIDDLE; else RATRState = DM_RATR_STA_LOW; if( *pRATRState!=RATRState || bForceUpdate) { ODM_RT_TRACE( pDM_Odm, ODM_COMP_RA_MASK, ODM_DBG_LOUD, ("RSSI Level %d -> %d\n", *pRATRState, RATRState) ); *pRATRState = RATRState; return TRUE; } return FALSE; }
/* * Return Value: BOOLEAN * - TRUE: RATRState is changed. */ BOOLEAN ODM_RAStateCheck(struct _rtw_dm *pDM_Odm, int32_t RSSI, BOOLEAN bForceUpdate, u8 *pRATRState) { struct rtl_priv *rtlpriv = pDM_Odm->rtlpriv; struct rate_adaptive *p_ra = &(rtlpriv->ra); PODM_RATE_ADAPTIVE pRA = &pDM_Odm->RateAdaptive; const u8 GoUpGap = 5; u8 HighRSSIThreshForRA = p_ra->high_rssi_thresh_for_ra; u8 LowRSSIThreshForRA = p_ra->low2high_rssi_thresh_for_ra40m; u8 RATRState; /* * Threshold Adjustment: * when RSSI state trends to go up one or two levels, make sure RSSI is high enough. * Here GoUpGap is added to solve the boundary's level alternation issue. */ switch (*pRATRState) { case DM_RATR_STA_INIT: case DM_RATR_STA_HIGH: break; case DM_RATR_STA_MIDDLE: HighRSSIThreshForRA += GoUpGap; break; case DM_RATR_STA_LOW: HighRSSIThreshForRA += GoUpGap; LowRSSIThreshForRA += GoUpGap; break; default: ODM_RT_ASSERT(pDM_Odm, FALSE, ("wrong rssi level setting %d !", *pRATRState)); break; } /* Decide RATRState by RSSI. */ if (RSSI > HighRSSIThreshForRA) RATRState = DM_RATR_STA_HIGH; else if (RSSI > LowRSSIThreshForRA) RATRState = DM_RATR_STA_MIDDLE; else RATRState = DM_RATR_STA_LOW; /* printk("==>%s,RATRState:0x%02x ,RSSI:%d \n",__FUNCTION__,RATRState,RSSI); */ if (*pRATRState != RATRState || bForceUpdate) { RT_TRACE(rtlpriv, ODM_COMP_RA_MASK, ODM_DBG_LOUD, "RSSI Level %d -> %d\n", *pRATRState, RATRState); *pRATRState = RATRState; return TRUE; } return FALSE; }