亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? meep6000.c

?? Atheros AP Test with Agilent N4010A source code
?? C
?? 第 1 頁 / 共 3 頁
字號:
                                 A_UINT16 tPdGainOverlap, A_INT16 *pMinCalPower, A_UINT16 * pPdGainBoundaries,
                                 A_UINT8 * pPDADCValues, A_UINT16 * xpdGainValues, A_UINT16 numXpdGains)
{
    LIB_DEV_INFO  *pLibDev = gLibInfo.pLibDevArray[devNum];
    A_BOOL    is2GHz = ((pLibDev->mode == MODE_11G) || (pLibDev->mode == MODE_11B));
    int       i, j, k;
    A_INT16   ss;         /* potentially -ve index for taking care of pdGainOverlap */
    A_UINT16  idxL, idxR, numPiers; /* Pier indexes */

    /* filled out Vpd table for all pdGains (chanL) */
    static A_UINT8   vpdTableL[AR6000_NUM_PD_GAINS][AR6000_MAX_PWR_RANGE_IN_HALF_DB];

    /* filled out Vpd table for all pdGains (chanR) */
    static A_UINT8   vpdTableR[AR6000_NUM_PD_GAINS][AR6000_MAX_PWR_RANGE_IN_HALF_DB];

    /* filled out Vpd table for all pdGains (interpolated) */
    static A_UINT8   vpdTableI[AR6000_NUM_PD_GAINS][AR6000_MAX_PWR_RANGE_IN_HALF_DB];

    A_UINT8   *pVpdL, *pVpdR, *pPwrL, *pPwrR;
    A_UINT8   minPwrT4[AR6000_NUM_PD_GAINS];
    A_UINT8   maxPwrT4[AR6000_NUM_PD_GAINS];
    A_UINT16  numVpd = 0;
    A_INT16   vpdStep;
    A_INT16   tmpVal;
    A_UINT16  sizeCurrVpdTable, maxIndex, tgtIndex;
    A_BOOL    match;

    /* Trim numPiers for the number of populated channel Piers */
    for (numPiers = 0; numPiers < availPiers; numPiers++) {
        if (bChans[numPiers] == AR6000_BCHAN_UNUSED) {
            break;
        }
    }

    /* Find pier indexes around the current channel */
    match = getLowerUpperIndex(FREQ2FBIN(freq, is2GHz), bChans,
                       numPiers, &idxL, &idxR);

    if (match) {
        /* Directly fill both vpd tables from the matching index */
        minPwrT4[0] = pRawDataSet[idxL].pwrPdg0[0];
        minPwrT4[1] = pRawDataSet[idxL].pwrPdg1[0];
        maxPwrT4[0] = pRawDataSet[idxL].pwrPdg0[3];
        maxPwrT4[1] = pRawDataSet[idxL].pwrPdg1[4];
        ar6000FillVpdTable(minPwrT4[0], maxPwrT4[0], pRawDataSet[idxL].pwrPdg0,
                           pRawDataSet[idxL].vpdPdg0, 4, vpdTableI[0]);
        ar6000FillVpdTable(minPwrT4[1], maxPwrT4[1], pRawDataSet[idxL].pwrPdg1,
                           pRawDataSet[idxL].vpdPdg1, 5, vpdTableI[1]);
    } else {
        for (i = 0; i < numXpdGains; i++) {
            if (i == 0) {
                numVpd = 4;
                pVpdL = pRawDataSet[idxL].vpdPdg0;
                pPwrL = pRawDataSet[idxL].pwrPdg0;
                pVpdR = pRawDataSet[idxR].vpdPdg0;
                pPwrR = pRawDataSet[idxR].pwrPdg0;
            } else {
                numVpd = 5;
                pVpdL = pRawDataSet[idxL].vpdPdg1;
                pPwrL = pRawDataSet[idxL].pwrPdg1;
                pVpdR = pRawDataSet[idxR].vpdPdg1;
                pPwrR = pRawDataSet[idxR].pwrPdg1;
            }

            /* Start Vpd interpolation from the max of the minimum powers */
            minPwrT4[i] = A_MAX(pPwrL[0], pPwrR[0]);

            /* End Vpd interpolation from the min of the max powers */
            maxPwrT4[i] = A_MIN(pPwrL[numVpd - 1], pPwrR[numVpd - 1]);
            assert(maxPwrT4[i] > minPwrT4[i]);

            /* Fill pier Vpds */
            ar6000FillVpdTable(minPwrT4[i], maxPwrT4[i], pPwrL, pVpdL, numVpd, vpdTableL[i]);
            ar6000FillVpdTable(minPwrT4[i], maxPwrT4[i], pPwrR, pVpdR, numVpd, vpdTableR[i]);

            /* Interpolate the final vpd */
            for (j = 0; j < (maxPwrT4[i] - minPwrT4[i]) / 2; j++) {
                vpdTableI[i][j] = interpolate(FREQ2FBIN(freq, is2GHz), bChans[idxL],
                                               bChans[idxR], vpdTableL[i][j], vpdTableR[i][j]);
            }
        }
    }
    *pMinCalPower = minPwrT4[0] / 2;

    k = 0; /* index for the final table */
    for (i = 0; i < numXpdGains; i++) {
        if (i == (numXpdGains - 1)) {
            pPdGainBoundaries[i] = maxPwrT4[i] / 2;
        } else {
            pPdGainBoundaries[i] = ((maxPwrT4[i] + minPwrT4[i+1]) / 4 );
        }
        pPdGainBoundaries[i] = A_MIN(63, pPdGainBoundaries[i]);

        /* Find starting index for this pdGain */
        if (i == 0) {
            ss = 0; /* for the first pdGain, start from index 0 */
        } else {
            ss = (pPdGainBoundaries[i-1] - (minPwrT4[i] / 2)) - tPdGainOverlap + 1;
        }
        vpdStep = (vpdTableI[i][1] - vpdTableI[i][0]);
        vpdStep = ((vpdStep < 1) ? 1 : vpdStep);
        /*
         *-ve ss indicates need to extrapolate data below for this pdGain
         */
        while ((ss < 0) && (k < (AR6000_NUM_PDADC_VALUES - 1))) {
            tmpVal = (vpdTableI[i][0] + ss * vpdStep);
            pPDADCValues[k++] = ((tmpVal < 0) ? 0 : tmpVal);
            ss++;
        }

        sizeCurrVpdTable = (maxPwrT4[i] - minPwrT4[i]) / 2;
        tgtIndex = pPdGainBoundaries[i] + tPdGainOverlap - (minPwrT4[i] / 2);
        maxIndex = (tgtIndex < sizeCurrVpdTable) ? tgtIndex : sizeCurrVpdTable;

        while ((ss < maxIndex) && (k < (AR6000_NUM_PDADC_VALUES - 1))) {
            pPDADCValues[k++] = vpdTableI[i][ss++];
        }

        vpdStep = (vpdTableI[i][sizeCurrVpdTable - 1] - vpdTableI[i][sizeCurrVpdTable - 2]);
        vpdStep = ((vpdStep < 1) ? 1 : vpdStep);
        /*
         * for last gain, pdGainBoundary == Pmax_t2, so will
         * have to extrapolate
         */
        if (tgtIndex > maxIndex) {  /* need to extrapolate above */
            while ((ss <= tgtIndex) && (k < (AR6000_NUM_PDADC_VALUES - 1))) {
                tmpVal = (vpdTableI[i][sizeCurrVpdTable - 1] +
                          (ss - maxIndex) * vpdStep);
                pPDADCValues[k++] = (tmpVal > 255) ? 255 : tmpVal;
                ss++;
            }
        }               /* extrapolated above */
    }                   /* for all pdGainUsed */

    /* Fill out pdGainBoundaries - only up to 2 allowed here, but hardware allows up to 4 */
    while (i < AR6000_PD_GAINS_IN_MASK) {
        pPdGainBoundaries[i] = pPdGainBoundaries[i-1];
        i++;
    }

    while (k < AR6000_NUM_PDADC_VALUES) {
        pPDADCValues[k] = pPDADCValues[k-1];
        k++;
    }
    return;
}

/**************************************************************
 * getLowerUppderIndex
 *
 * Return indices surrounding the value in sorted integer lists.
 * Requirement: the input list must be monotonically increasing
 *     and populated up to the list size
 * Returns: match is set if an index in the array matches exactly
 *     or a the target is before or after the range of the array.
 */
static A_BOOL
getLowerUpperIndex(A_UINT8 target, A_UINT8 *pList, A_UINT16 listSize,
                   A_UINT16 *indexL, A_UINT16 *indexR)
{
    A_UINT16 i;

    /*
     * Check first and last elements for beyond ordered array cases.
     */
    if (target <= pList[0]) {
        *indexL = *indexR = 0;
        return TRUE;
    }
    if (target >= pList[listSize-1]) {
        *indexL = *indexR = listSize - 1;
        return TRUE;
    }

    /* look for value being near or between 2 values in list */
    for (i = 0; i < listSize - 1; i++) {
        /*
         * If value is close to the current value of the list
         * then target is not between values, it is one of the values
         */
        if (pList[i] == target) {
            *indexL = *indexR = i;
            return TRUE;
        }
        /*
         * Look for value being between current value and next value
         * if so return these 2 values
         */
        if (target < pList[i + 1]) {
            *indexL = i;
            *indexR = i + 1;
            return FALSE;
        }
    }
    assert(0);
    return FALSE;
}

/**************************************************************
 * ar6000FillVpdTable
 *
 * Fill the Vpdlist for indices Pmax-Pmin
 * Note: pwrMin, pwrMax and Vpdlist are all in dBm * 4
 */
static A_BOOL
ar6000FillVpdTable(A_UINT8 pwrMin, A_UINT8 pwrMax, A_UINT8 *pPwrList,
                   A_UINT8 *pVpdList, A_UINT16 numIntercepts, A_UINT8 *pRetVpdList)
{
    A_UINT16  i, k;
    A_UINT8   currPwr = pwrMin;
    A_UINT16  idxL, idxR;

    assert(pwrMax > pwrMin);
    for (i = 0; i <= (pwrMax - pwrMin) / 2; i++) {
        getLowerUpperIndex(currPwr, pPwrList, numIntercepts,
                           &(idxL), &(idxR));
        if (idxR < 1)
            idxR = 1;           /* extrapolate below */
        if (idxL == numIntercepts - 1)
            idxL = numIntercepts - 2;   /* extrapolate above */
        if (pPwrList[idxL] == pPwrList[idxR])
            k = pVpdList[idxL];
        else
            k = ( ((currPwr - pPwrList[idxL]) * pVpdList[idxR] + (pPwrList[idxR] - currPwr) * pVpdList[idxL]) /
                  (pPwrList[idxR] - pPwrList[idxL]) );
        assert(k < 256);
        pRetVpdList[i] = (A_UINT8)k;
        currPwr += 2;               /* half dB steps */
    }

    return TRUE;
}

/**************************************************************************
 * interpolate
 *
 * Returns signed interpolated or the scaled up interpolated value
 */
static A_INT16
interpolate(A_UINT16 target, A_UINT16 srcLeft, A_UINT16 srcRight,
            A_INT16 targetLeft, A_INT16 targetRight)
{
    A_INT16 rv;

    if (srcRight == srcLeft) {
        rv = targetLeft;
    } else {
        rv = ((target - srcLeft) * targetRight +
              (srcRight - target) * targetLeft) / (srcRight - srcLeft);
    }
    return rv;
}

/**************************************************************************
 * fbin2freq
 *
 * Get channel value from binary representation held in eeprom
 * RETURNS: the frequency in MHz
 */
static A_UINT16
fbin2freq(A_UINT8 fbin, A_BOOL is2GHz)
{
    /*
     * Reserved value 0xFF provides an empty definition both as
     * an fbin and as a frequency - do not convert
     */
    if (fbin == AR6000_BCHAN_UNUSED) {
        return fbin;
    }

    return ((is2GHz) ? (2300 + fbin) : (4800 + 5 * fbin));
}

void getAR6000Struct(
 A_UINT32 devNum,
 void **ppReturnStruct,     //return ptr to struct asked for
 A_UINT32 *pNumBytes        //return the size of the structure
)
{
    LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
    
    *ppReturnStruct = pLibDev->ar6kEep;
    *pNumBytes = sizeof(AR6K_EEPROM);
    return;
}

void
ar6000GetPowerPerRateTable(A_UINT32 devNum, A_UINT16 freq, A_INT16 *pRatesPower)
{
    LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNum];
    A_UINT16 cfgCtl = pLibDev->ar6kEep->baseEepHeader.regDmn & 0xFF;
    A_UINT16 twiceAntennaReduction = (cfgCtl = 0x10) ? 6 : 0;
    A_UINT16 powerLimit = AR6000_MAX_RATE_POWER;

    switch (pLibDev->mode) {
    case MODE_11A:
        cfgCtl |= CTL_11A;
        break;
    case MODE_11G:
    case MODE_11O:
        cfgCtl |= CTL_11G;
        break;
    case MODE_11B:
        cfgCtl |= CTL_11B;
        break;
    default:
        assert(0);
    }

    assert(pRatesPower);
    ar6000SetPowerPerRateTable(devNum, freq, (A_UINT16 *)pRatesPower, cfgCtl, twiceAntennaReduction, powerLimit);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人在线网站| 亚洲欧美日韩在线播放| 老司机午夜精品| 欧美日韩国产成人在线91 | 欧美午夜精品久久久久久超碰| 国产免费成人在线视频| 国产一区不卡视频| 欧美精品一区二区三区蜜臀| 久久99热国产| 久久综合色综合88| 国产伦精一区二区三区| 久久精品亚洲国产奇米99| 国产麻豆9l精品三级站| 久久青草国产手机看片福利盒子| 激情文学综合网| 久久久不卡网国产精品一区| 国产福利一区二区三区在线视频| 国产亚洲短视频| 不卡欧美aaaaa| 亚洲丝袜自拍清纯另类| 色老汉一区二区三区| 一区二区久久久| 欧美亚洲综合另类| 日韩精品乱码av一区二区| 欧美一卡2卡三卡4卡5免费| 久久精品国产一区二区| 欧美成人官网二区| 国产精品一级黄| 国产精品―色哟哟| 91猫先生在线| 亚洲成人av资源| 日韩一级黄色大片| 国产一区美女在线| 中文乱码免费一区二区| jizz一区二区| 亚洲图片有声小说| 91精品福利在线一区二区三区| 久久99精品久久久久久国产越南| 久久精品水蜜桃av综合天堂| 国产suv一区二区三区88区| 一区在线播放视频| 欧美区在线观看| 激情都市一区二区| 国产精品第四页| 欧美日韩一区二区在线观看| 久久精品国内一区二区三区| 日本一区二区在线不卡| 91精品办公室少妇高潮对白| 秋霞电影一区二区| 中文乱码免费一区二区| 欧美日韩国产综合草草| 激情综合色播五月| 亚洲丝袜自拍清纯另类| 日韩一卡二卡三卡| 成+人+亚洲+综合天堂| 一个色综合av| 精品久久久久久久久久久院品网| 成人午夜在线视频| 午夜精品成人在线| 国产欧美中文在线| 欧美日韩免费在线视频| 国产剧情一区在线| 亚洲午夜免费福利视频| 精品国产一区久久| 日本韩国精品一区二区在线观看| 久久国产尿小便嘘嘘| 亚洲免费大片在线观看| 日韩亚洲欧美中文三级| 99视频精品在线| 另类小说图片综合网| 中文字幕第一区综合| 欧美精品99久久久**| 成人黄色小视频在线观看| 五月天一区二区三区| 国产精品欧美综合在线| 8v天堂国产在线一区二区| av一区二区不卡| 久久av中文字幕片| 亚洲一区国产视频| 亚洲国产精品精华液ab| 555夜色666亚洲国产免| 99精品视频一区二区三区| 精品亚洲欧美一区| 亚洲aⅴ怡春院| 一色桃子久久精品亚洲| 久久色在线视频| 欧美精品三级日韩久久| 91美女片黄在线观看| 国产一区二区三区久久久| 午夜视频久久久久久| 成人免费视频在线观看| 久久亚洲春色中文字幕久久久| 欧美日韩一区三区| 91麻豆国产自产在线观看| 国产一区二区三区在线观看免费 | 91网上在线视频| 国产一区二区三区黄视频| 日韩和欧美一区二区三区| 亚洲男人电影天堂| 欧美激情综合五月色丁香| 日韩精品一区二区三区在线播放| 欧美午夜寂寞影院| 91丝袜高跟美女视频| 国产激情一区二区三区| 久久99国产精品成人| 日日噜噜夜夜狠狠视频欧美人 | 国产精品自在欧美一区| 天天影视网天天综合色在线播放| 亚洲欧美一区二区久久| 国产精品无人区| 久久精品人人做人人爽97| 日韩欧美的一区| 69久久99精品久久久久婷婷| 欧美亚洲免费在线一区| 色婷婷av一区二区| 91免费看片在线观看| 99久久久免费精品国产一区二区| 成人一区二区三区视频在线观看 | 五月天视频一区| 伊人开心综合网| 亚洲欧美日韩国产综合| 成人欧美一区二区三区视频网页 | 久久久99精品久久| 精品国产乱码久久久久久牛牛 | 欧美体内she精视频| 色噜噜狠狠成人中文综合| 91在线视频免费观看| www.成人网.com| 97成人超碰视| 91亚洲精品一区二区乱码| 91麻豆产精品久久久久久| 99久久久国产精品免费蜜臀| 99精品久久99久久久久| 97久久精品人人爽人人爽蜜臀| www.日韩在线| 色综合视频在线观看| 色婷婷精品大视频在线蜜桃视频 | 成人国产一区二区三区精品| 国产二区国产一区在线观看| 国产91丝袜在线播放0| 精品一区二区免费在线观看| 韩国理伦片一区二区三区在线播放 | 久久久国产精华| 欧美国产一区在线| 亚洲欧洲美洲综合色网| 亚洲视频图片小说| 亚洲一区在线观看免费| 三级一区在线视频先锋| 免费在线观看成人| 激情六月婷婷久久| 粉嫩一区二区三区在线看| www.亚洲精品| 欧美色爱综合网| 日韩三级.com| 国产亚洲短视频| 国产精品久久久久久久久动漫| 亚洲欧美日韩系列| 亚洲国产你懂的| 久久精品国产一区二区三区免费看| 国产精品 日产精品 欧美精品| 成人午夜免费视频| 色妹子一区二区| 欧美日韩精品一区二区| 日韩欧美国产午夜精品| 欧美极品美女视频| 一片黄亚洲嫩模| 麻豆91在线播放免费| 国产成人免费视频一区| 色综合天天综合在线视频| 91.xcao| 欧美国产成人在线| 亚洲影院免费观看| 久久av老司机精品网站导航| av日韩在线网站| 欧美午夜一区二区三区免费大片| 日韩区在线观看| 日韩美女久久久| 午夜精品福利一区二区三区蜜桃| 韩国成人在线视频| 色婷婷综合久久久久中文一区二区 | 在线看不卡av| 精品久久久久久久久久久久久久久久久 | 国产精品拍天天在线| 亚洲一卡二卡三卡四卡五卡| 久久精品国产秦先生| 99国产麻豆精品| 欧美一区永久视频免费观看| 欧美高清一级片在线观看| 日韩中文字幕av电影| 国产福利91精品一区| 精品视频资源站| 国产欧美日韩三级| 午夜伦欧美伦电影理论片| 国产suv精品一区二区6| 91精品欧美综合在线观看最新| 国产欧美精品在线观看| 亚洲国产日韩综合久久精品| 国产一区二区在线观看视频| 欧美在线综合视频| 国产亲近乱来精品视频|