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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? mmaskphys.c

?? Atheros AP Test with Agilent N4010A source code
?? C
?? 第 1 頁 / 共 2 頁
字號:
// ported from trimmed oahu.pm in perl     -- P.Dua 11/02

// To Do list :
//      set goldDevNum, dutDevNum way upfront
//	fix mem_read calls
//	fix mem_write calls
#ifdef _WINDOWS
#include <windows.h>
#endif 
#include <stdio.h>
#ifdef WIN32 
#include <memory.h>
#include <conio.h>
#endif
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdarg.h>
#include "wlantype.h"   /* typedefs for A_UINT16 etc.. */
#include "athreg.h"
#include "manlib.h"     /* The Manufacturing Library */
#include "mConfig.h"
#ifdef ANWI
#include "mld_anwi.h"
#endif
#ifdef LINUX
#include "mld_linux.h"
#endif


#include "mMaskPhys.h"
#include "mMaskMath.h"

A_UINT32 CAP_DESC_PTR;
A_UINT32 CAP_DATA_PTR;	 


extern A_UINT32 goldDevNum;         // Needs to be set up at the begining. obviates having to pass around devNum to every call
extern A_UINT32 dutDevNum;          // Needs to be set up at the begining. probably never needed - DUT just transmits. 


// Routine to determine the start and stop indices
// of an n-point array based on the +/- % values
void slice (A_UINT32 n, double plus_pct, double minus_pct, 	A_UINT32 *beg, A_UINT32 *end) { 

	minus_pct = (minus_pct > 50) ? 50 : minus_pct;
	plus_pct = (plus_pct > 50) ? 50 : plus_pct;
	*beg = (n/2) - (A_UINT32)(n*minus_pct/100);
	*end = (n/2) + (A_UINT32)(n*plus_pct/100) - 1;
}

// Routine to reverse the least significant bits
A_INT32 bit_rev (A_INT32 val, A_INT32 bits) { 
	A_INT32 k,retval=0;
	
	for (k=0; k<bits; k++) {
		retval <<= 1;
		retval |= (val >> k) & 1;
	}
	return(retval);
}

// Routine to create an n-bit mask
A_UINT32 mask (A_UINT32 n) { 
    return((((1 << (n-1)) - 1) << 1) + 1);
}

// Routine to truncate a signed 32-bit to signed n-bit word
A_INT32 sign_ext (A_INT32 field, A_UINT32 wid) { 
    if ((field >> (wid-1)) == 1) {
        return(-1*((field ^ mask(wid)) + 1));
    }
    return(field);
}

// Routine to truncate a signed 32-bit to signed n-bit word
A_INT32 sign_trunc (A_INT32 signed_val, A_UINT32 wid) { 
    A_UINT32 neg      = (signed_val < 0) ? 1 : 0;
    A_UINT32 mask_wid     = mask(wid);
    A_UINT32 mantissa = mask(wid-1);

    A_UINT32 mag = neg ? -signed_val : signed_val;
    if (neg) { mantissa++; }
    if (mag > mantissa) { 
        printf( "\nIn function sign_trunc, Magnitude mag (%d) is larger than mantissa (%d)!\n", mag, mantissa);
	exit(0);
    } else {
        return(neg ? (mag ^ mask_wid)+1 : mag);
    }
}

// Routine to extract a field
A_UINT32 field_read (A_UINT32 base, A_UINT32 reg, A_UINT32 ofs, A_UINT32 bits) { 
	A_UINT32 addr = base+(reg<<2);
	A_UINT32 mask_bits = mask(bits);
	return ((REGR(goldDevNum, addr) >> ofs) & mask_bits);
}

// Routine to modify a field
void field_write (A_UINT32 base, A_UINT32 reg, A_UINT32 ofs, A_UINT32 bits, A_UINT32 unsignd) { 
	A_UINT32 addr = base+(reg<<2);
	A_UINT32 mask_bits = mask(bits);
	if (unsignd > mask_bits) { 
		printf( "\nIn function field_write, value for the field %d is larger than the mask (%d)!\n", unsignd, mask_bits); 
		exit(0);
	} else {
		REGW(goldDevNum, addr,(REGR(goldDevNum, addr) & ~(mask_bits<<ofs) | (unsignd<<ofs)));
	}
}

// Routine to read expected attenuation of tx-rx switch
A_UINT32 txrxatten () { 
    return (REGR(goldDevNum, 0x9848) >> 12) & 0x3f;
}

// Routine to read expected attenuation of beanie lna switch
A_UINT32 blnaatten_db_2ghz () { 
    return (REGR(goldDevNum, 0xa20c) >> 5) & 0x1f;
}

// Routine to read expected attenuation of beanie-sombrero switch
A_UINT32 bswatten_db_2ghz () { 
    return REGR(goldDevNum, 0xa20c) & 0x1f;
}

// Routine to configure most of the agc timing and level params
void adjust_agc (A_UINT32 switch_settling, A_UINT32 agc_settling, double coarse_high,  
		 double coarsepwr_const, double relpwr, A_UINT32 min_num_gain_change,
		 double total_desired, double pga_desired_size, double adc_desired_size) {

    A_UINT32 wrdata;
    
    wrdata = REGR(goldDevNum, 0x9844) & ~((0x7f<<7) | 0x7f);
    wrdata |= (switch_settling<<15) | agc_settling;
    REGW(goldDevNum, 0x9844, wrdata);
    
    wrdata = REGR(goldDevNum, 0x985c) & ~((0x7f<<15) | 0x7f);
    wrdata |= (sign_trunc((A_UINT32)(coarse_high*2),7)<<15) |  (sign_trunc((A_UINT32)(coarsepwr_const*2),7));
    REGW(goldDevNum, 0x985c, wrdata);
    
    wrdata = REGR(goldDevNum, 0x9858) & ~(0x3f<<6);
    wrdata |= (sign_trunc((A_UINT32)(relpwr*2),6)<<6);
    REGW(goldDevNum, 0x9858, wrdata);
    
    wrdata = REGR(goldDevNum, 0x9860) & ~(0x7<<3);
    wrdata |= (min_num_gain_change<<3);
    REGW(goldDevNum, 0x9860, wrdata);
    
    wrdata = REGR(goldDevNum, 0x9850) & ~((0xff<<20) | (0xff<<8) | 0xff);
    wrdata |= ((sign_trunc((A_UINT32)(total_desired*2),8)<<20) |
	       (sign_trunc((A_UINT32)(pga_desired_size*2),8)<<8) |
	       (sign_trunc((A_UINT32)(adc_desired_size*2),8)));
    REGW(goldDevNum, 0x9850, wrdata);
}

// Routine to force gain tables and switches (NOTE: values latch on rx_frame!!) 
void force_gain (A_UINT32 rfgain, A_UINT32 bbgain, A_UINT32 blnaatten_db_2ghz, 
		 A_UINT32 bswatten_db_2ghz, A_UINT32 txrxatten) {
    
    A_UINT32 blna_switch_2ghz = (blnaatten_db_2ghz!=0)?0:1;
    A_UINT32 bsw_switch_2ghz = (bswatten_db_2ghz!=0)?1:0;
    A_UINT32 rxtx_flag = (txrxatten!=0)?1:0;
    A_UINT32 wrdata;
    
    wrdata = REGR(goldDevNum, 0x9848) | (1<<23); // enable force rfgain, bbgain, rxtx_flag etc...
    REGW(goldDevNum, 0x9848,wrdata);
    wrdata = REGR(goldDevNum, 0x984c) & ~((0x7f<<25) | (0x7f<<18) | (0x1<<17));
    wrdata |= ((rfgain<<25) | (bbgain<<18) | (rxtx_flag<<17));
    REGW(goldDevNum, 0x984c,wrdata);
    wrdata = REGR(goldDevNum, 0xa20c) & ~((0x1<<25) | (0x1<<24));
    wrdata |= ((blna_switch_2ghz<<25) | (bsw_switch_2ghz<<24));
    REGW(goldDevNum, 0xa20c,wrdata);

	printf("snoop: force_gain: reg 18 = 0x%x\n", REGR(goldDevNum, 0x9848));
    
}

// Routine to force gain tables and switches
void read_gain (A_UINT32 *rfgain,A_UINT32 *bbgain,A_UINT32 *blnaatten_db_2ghz, 
		A_UINT32 *bswatten_db_2ghz,A_UINT32 *txrxatten) {

    A_UINT32 blna_switch_2ghz,bsw_switch_2ghz,rxtx_flag;
    A_UINT32 rddata;

    rddata = REGR(goldDevNum, 0x984c);
    *rfgain = ((rddata >> 25) & 0x7f);  
    *bbgain = ((rddata >> 18) & 0x7f);  
    rxtx_flag = ((rddata >> 17) & 0x1);
    if (rxtx_flag!=0) {
	rddata = REGR(goldDevNum, 0x9848);
	*txrxatten = ((rddata >> 12) & 0x3f);
    } else {
      *txrxatten = 0;
    }

    rddata = REGR(goldDevNum, 0xa20c);
    blna_switch_2ghz = ((rddata >> 25) & 0x1);
    bsw_switch_2ghz = ((rddata >> 24) & 0x1);
    if (blna_switch_2ghz==0) {
	*blnaatten_db_2ghz = ((rddata >> 5) & 0x1f);
    } else {
      *blnaatten_db_2ghz = 0;
    }

    if (bsw_switch_2ghz!=0) {
	*bswatten_db_2ghz = (rddata & 0x1f);
    } else {
      *bswatten_db_2ghz = 0;
    }
}

// Routine to calculate the total gain - takes a gain array and mode (dk::mode 11a/b/g) as input 
double total_gain (A_UINT32 *gain, A_UINT32 mode) {
    if (mode == 0) {
        return (double)(gain[0]+ gain[1])/2.0 - gain[4];
    } else {
        return (double)( gain[0]+ gain[1])/2.0 - gain[2]- gain[3]- gain[4];
    }
}

// Routine to pad the rx buffer length to an integer multiple of 4
A_UINT32 pad_rx_buffer (A_UINT32 buf_len) { 
    return ((A_UINT32)((buf_len+3)/4))*4;
}

// Routine to report the most likely gain settings during descriptor consumption
void report_gain (A_UINT32 rx_desc_ptr, A_UINT32 desc_cnt, A_UINT32 *gain) { 
    A_UINT32 desc5 = rx_desc_ptr+(desc_cnt-1)*DESC_LEN+0x14 ;
    A_UINT32 k = 0;
    A_UINT32 start_time = milliTime();
    A_UINT32 *rfgain;
    A_UINT32 *bbgain;
    A_UINT32 *blna;
    A_UINT32 *xatten1;
    A_UINT32 *xatten2;

    A_BOOL   TIMED_OUT = FALSE;
    char  name[25];

//printf("snoop:report_gain: entered report_gain\n");

	rfgain = (A_UINT32 *) malloc(20*sizeof(A_UINT32));
	bbgain = (A_UINT32 *) malloc(20*sizeof(A_UINT32));
	blna = (A_UINT32 *) malloc(20*sizeof(A_UINT32));
	xatten1 = (A_UINT32 *) malloc(20*sizeof(A_UINT32));
	xatten2 = (A_UINT32 *) malloc(20*sizeof(A_UINT32));

//printf("snoop:report_gain: done with mallocs\n");

    while (((mem_read(desc5) & 0x1) != 0x1) && (!TIMED_OUT)) {
printf("snoop:report_gain: iteration %d : read_gain res", k);
	read_gain(&(rfgain[k]),&(bbgain[k]),&(blna[k]),&(xatten1[k]),&(xatten2[k]));
printf("ults are: %d, %d, %d, %d, %d\n", rfgain[k],bbgain[k],blna[k],xatten1[k],xatten2[k]);
        k++; 
	mSleep(10);

        if (milliTime() >= start_time+10000) { 
	    printf( "Timed out in report_gainf after 10s!\n"); 
	    TIMED_OUT = TRUE;
	}

	if (k>16) {
	    TIMED_OUT = TRUE;
	}
    }

printf("snoop:report_gain: out of the loop with k = %d\n", k);

    mem_write(desc5, 0x0);

    strcpy(name, "rfgain");
    gain[0] = mode(&(rfgain[0]), k, name);
printf("snoop:report_gain: rfgain mode = %d\n", gain[0]);
    strcpy(name, "bbgain");
    gain[1] = mode(&(bbgain[0]), k, name);
printf("snoop:report_gain: bbgain mode = %d\n", gain[1]);
    strcpy(name, "blna");
    gain[2] = mode(&(blna[0]), k, name);
printf("snoop:report_gain: blna mode = %d\n", gain[2]);
    strcpy(name, "xatten1");
    gain[3] = mode(&(xatten1[0]), k, name);
printf("snoop:report_gain: xatten1 mode = %d\n", gain[3]);
    strcpy(name, "xatten2");
    gain[4] = mode(&(xatten2[0]), k, name);
printf("snoop:report_gain: xatten2 mode = %d\n", gain[4]);


 free(rfgain); free(bbgain); free(blna); free(xatten1); free(xatten2);
}

// Routine to report the status information after descriptor consumption
double report_status (A_UINT32 rx_desc_ptr, A_UINT32 desc_cnt) { 

    A_UINT32 j = 0;
    A_UINT32 k = 0;
    A_UINT32 *retval;
	A_UINT32 return_val;
    A_UINT32 datalen = 0;
    A_UINT32 tmp_ptr = 0;
    A_UINT32 desc5 = 0;
    A_UINT32 done = 0;
    A_UINT32 frrxok = 0;
    A_UINT32 crcerr = 0;
    A_UINT32 fifooverrun = 0;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲免费高清视频在线| 欧美一区二区三区白人| 91麻豆国产在线观看| 色婷婷久久一区二区三区麻豆| 色菇凉天天综合网| 7777精品伊人久久久大香线蕉的| 精品国产123| 亚洲视频 欧洲视频| 午夜a成v人精品| 国产另类ts人妖一区二区| 99久久国产免费看| 制服丝袜亚洲精品中文字幕| 久久久精品国产免大香伊| 国产精品久久久久久亚洲毛片 | 国产乱码精品一品二品| 91小视频免费看| 日韩欧美中文字幕制服| 国产精品久久久久婷婷二区次| 亚洲aⅴ怡春院| 春色校园综合激情亚洲| 欧美日韩国产首页在线观看| 国产视频一区在线播放| 亚洲国产精品欧美一二99| 国产精品综合视频| 欧美日韩精品欧美日韩精品一| 久久理论电影网| 亚洲国产精品久久久久秋霞影院| 国产精品一区二区在线看| 欧美在线一区二区| 国产欧美1区2区3区| 亚洲成人www| 成人18精品视频| 欧美一区二区三区日韩| 亚洲女同女同女同女同女同69| 久久成人精品无人区| 色综合一区二区三区| 久久久久亚洲蜜桃| 污片在线观看一区二区| gogogo免费视频观看亚洲一| 日韩欧美成人午夜| 香蕉乱码成人久久天堂爱免费| 成人av网站在线| 精品播放一区二区| 五月激情综合色| 在线视频欧美精品| 国产精品你懂的在线欣赏| 久久99久久久欧美国产| 欧美日韩高清不卡| 欧美在线不卡视频| 国产精品电影一区二区| 久久99精品久久久久久久久久久久| 日韩二区三区四区| 色琪琪一区二区三区亚洲区| 久久色在线观看| 蜜桃久久av一区| 欧美色网站导航| 亚洲精品免费在线播放| 丁香六月久久综合狠狠色| 精品国产乱码久久| 麻豆国产91在线播放| 欧美日韩不卡一区二区| 亚洲精品大片www| 97久久精品人人做人人爽50路| 国产欧美日本一区视频| 国产精品一区免费在线观看| 精品久久国产字幕高潮| 久久精品国产亚洲高清剧情介绍| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 欧美一区二区在线看| 亚洲愉拍自拍另类高清精品| eeuss鲁片一区二区三区在线观看| 久久久亚洲精华液精华液精华液| 裸体健美xxxx欧美裸体表演| 69堂国产成人免费视频| 欧美国产日韩精品免费观看| 亚洲国产综合色| 粉嫩av一区二区三区粉嫩| 337p粉嫩大胆色噜噜噜噜亚洲| 男女性色大片免费观看一区二区| 在线成人午夜影院| 91麻豆免费观看| 日韩理论片一区二区| 91在线观看免费视频| 亚洲手机成人高清视频| 91在线精品一区二区三区| 日韩毛片一二三区| 色猫猫国产区一区二在线视频| 一区二区三区精品在线观看| 色综合久久久久| 亚洲自拍都市欧美小说| 51精品国自产在线| 久久精品免费观看| 久久你懂得1024| 91亚洲午夜精品久久久久久| 亚洲综合在线观看视频| 欧美欧美午夜aⅴ在线观看| 日韩不卡免费视频| 久久免费精品国产久精品久久久久| 国产精品一区二区三区99| 国产精品久久久久久久久晋中| 91碰在线视频| 婷婷开心激情综合| 精品久久久久久综合日本欧美| 国产成人免费高清| 中文字幕日本不卡| 亚洲福利视频一区二区| 亚洲摸摸操操av| 亚洲激情自拍偷拍| 欧美日韩国产精品成人| 美女一区二区在线观看| 欧美人狂配大交3d怪物一区| 在线观看www91| 国产精品一区在线观看乱码| 国产日韩欧美电影| 一本高清dvd不卡在线观看| 亚洲综合男人的天堂| 日韩视频永久免费| 国产电影一区二区三区| 国产精品不卡视频| 欧美日韩不卡一区| 国产精品伊人色| 一区二区成人在线| 欧美人妖巨大在线| 高清shemale亚洲人妖| 亚洲一二三级电影| 久久不见久久见免费视频7| 国产午夜亚洲精品羞羞网站| 在线观看av一区二区| 狠狠色综合日日| 亚洲免费观看高清| 久久青草欧美一区二区三区| 91黄色小视频| 国产一区不卡精品| 亚洲国产日韩a在线播放| 国产亚洲精品aa| 欧美精品 国产精品| 成人av在线观| 久久99蜜桃精品| 亚洲成人综合视频| 国产精品免费视频观看| 日韩欧美一级片| 91成人免费电影| 国产成人丝袜美腿| 视频一区欧美日韩| 亚洲欧美偷拍卡通变态| 精品处破学生在线二十三| 欧美日韩精品一区二区三区蜜桃 | 欧美艳星brazzers| 国产福利不卡视频| 日本 国产 欧美色综合| 亚洲精品国产一区二区三区四区在线| 日韩视频在线一区二区| 欧美在线你懂得| av激情亚洲男人天堂| 国产剧情在线观看一区二区| 天天做天天摸天天爽国产一区| **网站欧美大片在线观看| 久久日韩粉嫩一区二区三区| 欧美精品1区2区3区| 欧美在线一区二区| 日本精品裸体写真集在线观看 | 久久精品夜色噜噜亚洲aⅴ| 欧美另类变人与禽xxxxx| 色综合久久久久综合| 国产成人小视频| 极品销魂美女一区二区三区| 五月婷婷综合在线| 亚洲国产aⅴ成人精品无吗| 亚洲视频一区在线观看| 中文字幕免费在线观看视频一区| 久久影视一区二区| 精品日韩一区二区三区| 欧美一区二区在线观看| 欧美一级艳片视频免费观看| 欧美日韩一区在线观看| 在线免费不卡电影| 色狠狠一区二区三区香蕉| 91免费观看国产| 99这里只有精品| 99国产欧美另类久久久精品| 懂色中文一区二区在线播放| 国产福利视频一区二区三区| 国模一区二区三区白浆| 国产乱码精品一品二品| 国产精品18久久久久久久久久久久| 狠狠色2019综合网| 国产综合久久久久久久久久久久| 精品一区二区三区在线视频| 国产资源在线一区| 国产美女精品人人做人人爽 | 久久精品人人做人人综合| 精品毛片乱码1区2区3区| 精品国产精品网麻豆系列| 精品久久久久久亚洲综合网| 2020国产成人综合网| 久久久精品一品道一区| 欧美激情综合在线| 国产精品盗摄一区二区三区| 日韩一区欧美一区| 一区二区三区精品在线观看|