예제 #1
0
파일: rate.c 프로젝트: Achotjan/FreeXperia
/************************************************************************
 *                        getMaxActiveRate                          *
 ************************************************************************
DESCRIPTION: Goes over an array of network rates and returns the max active rate

INPUT:      pRates      -   Rate array

OUTPUT:


RETURN:     Max active rate (in network units)

************************************************************************/
ENetRate rate_GetMaxActiveFromStr (TI_UINT8 *pRatesString, TI_UINT32 len, ENetRate eMaxRate)
{
	TI_UINT32   i;

	for (i = 0; i < len; i++)
	{
		if (NET_ACTIVE_RATE (pRatesString[i]) && rate_ValidateNet ((ENetRate)pRatesString[i]) == TI_OK)
		{
			eMaxRate = TI_MAX ((ENetRate)pRatesString[i], eMaxRate);
		}
	}

	return eMaxRate;
}
예제 #2
0
/**
 * \fn     scanResultTable_updateRates
 * \brief  Update a scan result table entry with rates information
 *
 * Called by the function 'updateSiteInfo()' in order to translate the rates received
 * in the beacon or probe response to rate used by the driver. Perfoms the following:
 *    -   Check the rates. validity. If rates are invalid, return
 *    -   Get the max active rate & max basic rate, if invalid, return
 *    -   Translate the max active rate and max basic rate from network rates to host rates.
 *        The max active & max basic rate are used by the driver from now on in all the processes:
 *        (selection, join, transmission, etc....)
 *
 * \param  hScanResultTable - handle to the scan result table object
 * \param  pSite - a pointer to the site entry to update
 * \param  pFrame - a pointer to the received frame
 * \return None
 * \sa     scanResultTable_UpdateSiteData
 */
void scanResultTable_updateRates(TI_HANDLE hScanResultTable, TSiteEntry *pSite, TScanFrameInfo *pFrame)
{
    TI_UINT8            maxBasicRate = 0, maxActiveRate = 0;
    TI_UINT32           bitMapExtSupp = 0;

    if (pFrame->parsedIEs->content.iePacket.pRates == NULL)
    {
        return;
    }

    /* Update the rate elements */
    maxBasicRate = rate_GetMaxBasicFromStr ((TI_UINT8 *)pFrame->parsedIEs->content.iePacket.pRates->rates,
                                            pFrame->parsedIEs->content.iePacket.pRates->hdr[1], maxBasicRate);
    maxActiveRate = rate_GetMaxActiveFromStr ((TI_UINT8 *)pFrame->parsedIEs->content.iePacket.pRates->rates,
                                              pFrame->parsedIEs->content.iePacket.pRates->hdr[1], maxActiveRate);

    if (pFrame->parsedIEs->content.iePacket.pExtRates)
    {
        maxBasicRate = rate_GetMaxBasicFromStr ((TI_UINT8 *)pFrame->parsedIEs->content.iePacket.pExtRates->rates,
                                                pFrame->parsedIEs->content.iePacket.pExtRates->hdr[1], maxBasicRate);
        maxActiveRate = rate_GetMaxActiveFromStr ((TI_UINT8 *)pFrame->parsedIEs->content.iePacket.pExtRates->rates,
                                                  pFrame->parsedIEs->content.iePacket.pExtRates->hdr[1], maxActiveRate);
    }

    if (maxActiveRate == 0)
    {
        maxActiveRate = maxBasicRate;
    }

    /* Now update it from network to host rates */
    pSite->maxBasicRate = rate_NetToDrv (maxBasicRate);
    pSite->maxActiveRate = rate_NetToDrv (maxActiveRate);
    if (pSite->maxActiveRate == DRV_RATE_INVALID)
   {
   }

    if (pSite->maxBasicRate != DRV_RATE_INVALID)
    {
        if (pSite->maxActiveRate != DRV_RATE_INVALID)
        {
            pSite->maxActiveRate = TI_MAX (pSite->maxActiveRate, pSite->maxBasicRate);
        }
    } else { /* in case some vendors don't specify basic rates */
        pSite->maxBasicRate = pSite->maxActiveRate;
    }

    /* build rates bit map */
    rate_NetStrToDrvBitmap (&pSite->rateMask.supportedRateMask,
                            pFrame->parsedIEs->content.iePacket.pRates->rates,
                            pFrame->parsedIEs->content.iePacket.pRates->hdr[1]);
    rate_NetBasicStrToDrvBitmap (&pSite->rateMask.basicRateMask,
                                 pFrame->parsedIEs->content.iePacket.pRates->rates,
                                 pFrame->parsedIEs->content.iePacket.pRates->hdr[1]);

    if (pFrame->parsedIEs->content.iePacket.pExtRates)
    {
        rate_NetStrToDrvBitmap (&bitMapExtSupp,
                                pFrame->parsedIEs->content.iePacket.pExtRates->rates,
                                pFrame->parsedIEs->content.iePacket.pExtRates->hdr[1]);

        pSite->rateMask.supportedRateMask |= bitMapExtSupp;

        rate_NetBasicStrToDrvBitmap (&bitMapExtSupp,
                                     pFrame->parsedIEs->content.iePacket.pExtRates->rates,
                                     pFrame->parsedIEs->content.iePacket.pExtRates->hdr[1]);

        pSite->rateMask.basicRateMask |= bitMapExtSupp;
    }
}