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

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

?? stats_routines.c

?? Atheros AP Test with Agilent N4010A source code
?? C
字號:
#ifdef __ATH_DJGPPDOS__
#include <unistd.h>
#ifndef EILSEQ  
    #define EILSEQ EIO
#endif	// EILSEQ

 #define __int64	long long
 #define HANDLE long
 typedef unsigned long DWORD;
 #define Sleep	delay
 #include <bios.h>
 #include <dir.h>
#endif	// #ifdef __ATH_DJGPPDOS__

#ifdef ECOS
#include "dk_common.h"
#endif

#include "wlantype.h"
#include "athreg.h"
#include "manlib.h"
#include "mdata.h"
#include <string.h>
#if defined (THIN_CLIENT_BUILD) || defined (WIN_CLIENT_BUILD)
#include "hwext.h"
#else
#include "errno.h"
#include "common_defs.h"
#include "mDevtbl.h"
#endif

#include "mConfig.h"

void getSignalStrengthStats
(
 SIG_STRENGTH_STATS *pStats,
 A_INT8			signalStrength
)
{
	//workaround -128 RSSI
	if(signalStrength == -128) {
		signalStrength = 0;
	}
	pStats->rxAccumSignalStrength += signalStrength;
	pStats->rxNumSigStrengthSamples++;
	pStats->rxAvrgSignalStrength = (A_INT8)
	(pStats->rxAccumSignalStrength/(A_INT32)pStats->rxNumSigStrengthSamples);
	
	/* max and min */
	if(signalStrength > pStats->rxMaxSigStrength)
		pStats->rxMaxSigStrength = signalStrength;
	
	if (signalStrength < pStats->rxMinSigStrength)
		pStats->rxMinSigStrength = signalStrength;
	return;
}


void fillRateThroughput
(
 TX_STATS_STRUCT *txStats,
 A_UINT32 descRate, 
 A_UINT32 dataBodyLen
)
{
	A_UINT32 descStartTime;
	A_UINT32 descEndTime;
	A_UINT32 bitsReceived;
	float newTxTime = 0;
	
	descStartTime = txStats[descRate].startTime;
	descEndTime = txStats[descRate].endTime;

	if(descStartTime < descEndTime) {
		bitsReceived = (txStats[descRate].goodPackets - txStats[descRate].firstPktGood)  \
			* (dataBodyLen + sizeof(MDK_PACKET_HEADER)) * 8;
		newTxTime = (float)((descEndTime - descStartTime) * 1024)/1000;  //puts the time in millisecs
		txStats[descRate].newThroughput = (A_UINT32)((float)bitsReceived / newTxTime);
	}
}

void extractTxStats
(
 TX_STATS_TEMP_INFO *pStatsInfo,
 TX_STATS_STRUCT *txStats
)
{
	A_UINT16 numRetries;

	/* first check for good packets */
	if (pStatsInfo->status1 & DESC_FRM_XMIT_OK) 
	{
		txStats[0].goodPackets ++;
		txStats[pStatsInfo->descRate].goodPackets ++;

		/* do any signal strength processig */
		getSignalStrengthStats(&(pStatsInfo->sigStrength[0]), 
			(A_INT8)((pStatsInfo->status2 >> BITS_TO_TX_SIG_STRENGTH) & SIG_STRENGTH_MASK));
		txStats[0].ackSigStrengthAvg = pStatsInfo->sigStrength[0].rxAvrgSignalStrength;
		txStats[0].ackSigStrengthMax = pStatsInfo->sigStrength[0].rxMaxSigStrength;
		txStats[0].ackSigStrengthMin = pStatsInfo->sigStrength[0].rxMinSigStrength;

		getSignalStrengthStats(&(pStatsInfo->sigStrength[pStatsInfo->descRate]), 
			(A_INT8)((pStatsInfo->status2 >> BITS_TO_TX_SIG_STRENGTH) & SIG_STRENGTH_MASK));
		txStats[pStatsInfo->descRate].ackSigStrengthAvg = pStatsInfo->sigStrength[pStatsInfo->descRate].rxAvrgSignalStrength;
		txStats[pStatsInfo->descRate].ackSigStrengthMax = pStatsInfo->sigStrength[pStatsInfo->descRate].rxMaxSigStrength;
		txStats[pStatsInfo->descRate].ackSigStrengthMin = pStatsInfo->sigStrength[pStatsInfo->descRate].rxMinSigStrength;
	}
	else
	{
		/* processess error statistics */
		if (pStatsInfo->status1 & DESC_FIFO_UNDERRUN)
		{
			txStats[0].underruns ++;
			txStats[pStatsInfo->descRate].underruns ++;
		}
		else if (pStatsInfo->status1 & DESC_EXCESS_RETIES)
		{
			txStats[0].excessiveRetries ++;
			txStats[pStatsInfo->descRate].excessiveRetries ++;
		}
	}

	/* count the number of retries */
	numRetries = (A_UINT16)((pStatsInfo->status1 >> BITS_TO_SHORT_RETRIES) & RETRIES_MASK);
	if (numRetries == 1) {
		txStats[0].shortRetry1++;
		txStats[pStatsInfo->descRate].shortRetry1++;
	}
	else if (numRetries == 2) {
		txStats[0].shortRetry2++;
		txStats[pStatsInfo->descRate].shortRetry2++;
	}
	else if (numRetries == 3) {
		txStats[0].shortRetry3++;
		txStats[pStatsInfo->descRate].shortRetry3++;
	}
	else if (numRetries == 4) {
		txStats[0].shortRetry4++;
		txStats[pStatsInfo->descRate].shortRetry4++;
	}
	else if (numRetries == 5) {
		txStats[0].shortRetry5++;
		txStats[pStatsInfo->descRate].shortRetry5++;
	}
	else if ((numRetries >= 6) && (numRetries <= 10)) {
		txStats[0].shortRetry6to10++;
		txStats[pStatsInfo->descRate].shortRetry6to10++;
	}
	else if ((numRetries >=11) && (numRetries <= 15)) {
		txStats[0].shortRetry11to15++;
		txStats[pStatsInfo->descRate].shortRetry11to15++;
	}
	else;

	numRetries = (A_UINT16)((pStatsInfo->status1 >> BITS_TO_LONG_RETRIES) & RETRIES_MASK);
	if (numRetries == 1) {
		txStats[0].longRetry1++;
		txStats[pStatsInfo->descRate].longRetry1++;
	}
	else if (numRetries == 2) {
		txStats[0].longRetry2++;
		txStats[pStatsInfo->descRate].longRetry2++;
	}
	else if (numRetries == 3) {
		txStats[0].longRetry3++;
		txStats[pStatsInfo->descRate].longRetry3++;
	}
	else if (numRetries == 4) {
		txStats[0].longRetry4++;
		txStats[pStatsInfo->descRate].longRetry4++;
	}
	else if (numRetries == 5) {
		txStats[0].longRetry5++;
		txStats[pStatsInfo->descRate].longRetry5++;
	}
	else if ((numRetries >= 6) && (numRetries <= 10)) {
		txStats[0].longRetry6to10++;
		txStats[pStatsInfo->descRate].longRetry6to10++;
	}
	else if ((numRetries >=11) && (numRetries <= 15)) {
		txStats[0].longRetry11to15++;
		txStats[pStatsInfo->descRate].longRetry11to15++;
	}
	else;

	return;
}



void fillTxStats
(
 A_UINT32 devNumIndex, 
 A_UINT32 descAddress,
 A_UINT32 numDesc,
 A_UINT32 dataBodyLen,
 A_UINT32 txTime,
 TX_STATS_STRUCT *txStats
)
{
	TX_STATS_TEMP_INFO	statsInfo;
	A_UINT32 i, statsLoop, tempRate;
	A_UINT32 bitsReceived;
	A_UINT32 descStartTime = 0;
	A_UINT32 descTempTime = 0;
	A_UINT32 descMidTime = 0;
	A_UINT32 descEndTime = 0;
	float    newTxTime = 0;
	A_UINT16 firstPktGood = 0;
	A_UINT32 lastDescRate = 0;
//	A_UINT32 descRate;

#ifdef _TIME_PROFILE
A_UINT32 start,end;
    start = milliTime();
#endif
#ifdef THIN_CLIENT_BUILD
#else
	LIB_DEV_INFO *pLibDev = gLibInfo.pLibDevArray[devNumIndex];
#endif

#ifndef MALLOC_ABSENT
	memset(txStats, 0, sizeof(TX_STATS_STRUCT) * STATS_BINS);
	// traverse the descriptor list and get the stats from each one
	memset(&statsInfo, 0, sizeof(TX_STATS_TEMP_INFO));
#else
	A_MEMSET(txStats, 0, sizeof(TX_STATS_STRUCT) * STATS_BINS);
	// traverse the descriptor list and get the stats from each one
	A_MEMSET(&statsInfo, 0, sizeof(TX_STATS_TEMP_INFO));
#endif

	for(statsLoop = 0; statsLoop < STATS_BINS; statsLoop++) {
		statsInfo.sigStrength[statsLoop].rxMinSigStrength = 127;
	}

	statsInfo.descToRead = descAddress;
	for (i = 0; i < numDesc; i++) {
#if defined (THIN_CLIENT_BUILD) || defined (WIN_CLIENT_BUILD)

#if defined(AR5523)
	    tempRate = (hwMemRead32(devNumIndex, (statsInfo.descToRead + FOURTH_CONTROL_WORD)) >> BITS_TO_TX_DATA_RATE0) & VENICE_DATA_RATE_MASK;
		statsInfo.descRate = descRate2bin(tempRate);
	    statsInfo.status1 = hwMemRead32(devNumIndex, statsInfo.descToRead + FIRST_VENICE_STATUS_WORD);
	    statsInfo.status2 = hwMemRead32(devNumIndex, statsInfo.descToRead + SECOND_VENICE_STATUS_WORD);
#endif

#if defined(AR6000)
	    tempRate = (hwMemRead32(devNumIndex, (statsInfo.descToRead + FOURTH_CONTROL_WORD)) >> BITS_TO_TX_DATA_RATE0) & VENICE_DATA_RATE_MASK;
	    statsInfo.descRate = descRate2bin(tempRate);
	    statsInfo.status1 = hwMemRead32(devNumIndex, statsInfo.descToRead + FIRST_FALCON_TX_STATUS_WORD);
	    statsInfo.status2 = hwMemRead32(devNumIndex, statsInfo.descToRead + SECOND_FALCON_TX_STATUS_WORD);
#endif

#else
	 if (isDragon(devNumIndex)) {
        A_UINT32 words[6];
		pLibDev->devMap.OSmemRead(devNumIndex, statsInfo.descToRead + FOURTH_CONTROL_WORD, 
					(A_UCHAR *)&(words), sizeof(words));

	    tempRate = (words[0]>> BITS_TO_TX_DATA_RATE0) & VENICE_DATA_RATE_MASK;
		statsInfo.descRate = descRate2bin(statsInfo.descRate);
        memcpy(&(statsInfo.status1), &words[4], 8);
     }
	 else {
		statsInfo.descRate = ar5kInitData[pLibDev->ar5kInitIndex].pMacAPI->txGetDescRate(devNumIndex, statsInfo.descToRead);
		statsInfo.descRate = descRate2bin(statsInfo.descRate);
		pLibDev->devMap.OSmemRead(devNumIndex, statsInfo.descToRead + pLibDev->txDescStatus1, 
					(A_UCHAR *)&(statsInfo.status1), sizeof(statsInfo.status1));
		pLibDev->devMap.OSmemRead(devNumIndex, statsInfo.descToRead + pLibDev->txDescStatus2, 
						(A_UCHAR *)&(statsInfo.status2), sizeof(statsInfo.status2));
	 }
#endif


		if (statsInfo.status2 & DESC_DONE) {
	
			extractTxStats(&statsInfo, txStats);
			if(i == 0) {
				descStartTime = (statsInfo.status1 >> 16) & 0xffff;
				descMidTime = descStartTime;
				if(statsInfo.status1 & DESC_FRM_XMIT_OK) {
					firstPktGood = 1; //need to remove the 1st packet from new throughput calculation
					txStats[statsInfo.descRate].firstPktGood = 1;
				}

				//update the rate start time
				txStats[statsInfo.descRate].startTime = descStartTime;
				txStats[statsInfo.descRate].endTime = descStartTime;
			}
			else if ( i == numDesc - 1) {
				descEndTime = descEndTime + ((statsInfo.status1 >> 16) & 0xffff);
				if(descEndTime < descMidTime) {
					descEndTime += 0x10000;
				}
				//update the end time for the current rate
				txStats[statsInfo.descRate].endTime = descEndTime;
				fillRateThroughput(txStats, lastDescRate, dataBodyLen);
			}
			else {
				descTempTime = (statsInfo.status1 >> 16) & 0xffff;
				if (descTempTime < descMidTime) {
					descMidTime = 0x10000 + descTempTime;
				}
				else {
					descMidTime = descTempTime;
				}
				txStats[statsInfo.descRate].endTime = descTempTime;
				if(lastDescRate != statsInfo.descRate) {
					//this is the next rate so update the time
					txStats[statsInfo.descRate].startTime = descTempTime;

					//update the throughput on the last rate
					if(statsInfo.status1 & DESC_FRM_XMIT_OK) {
						//need to remove the 1st packet from new throughput calculation
						txStats[statsInfo.descRate].firstPktGood = 1;
					}

					fillRateThroughput(txStats, lastDescRate, dataBodyLen);
				}
			}
				
		}
		else {
			//assume that if find a descriptor that is not done, then
			//none of the rest of the descriptors will be done, since assume
			//tx has completed by time get to here
#if defined (THIN_CLIENT_BUILD) 
			uiPrintf("Device Number %d:txGetStats: found a descriptor that is not done,  \
				stopped gathering stats %08lx %08lx\n", devNumIndex, statsInfo.status1, statsInfo.status2);
#else
#if defined (WIN_CLIENT_BUILD)
			printf("Device Number %d:txGetStats: found a descriptor that is not done,  \
				stopped gathering stats %08lx %08lx\n", devNumIndex, statsInfo.status1, statsInfo.status2);
#else 
			mError(devNumIndex, EIO, 
				"Device Number %d:txGetStats: found a descriptor that is not done, stopped gathering stats %08lx %08lx\n", devNumIndex,
				statsInfo.status1, statsInfo.status2);
#endif
#endif
			break;
		}

		lastDescRate = statsInfo.descRate;
		statsInfo.descToRead += sizeof(MDK_ATHEROS_DESC);		
	}

	if (txTime == 0) {
//		mError(devNumIndex, EINVAL, "Device Number %d:transmit time is zero, not calculating throughput\n", devNumIndex);
	}
	else {
		//calculate the throughput
		bitsReceived = txStats[0].goodPackets * (dataBodyLen + sizeof(MDK_PACKET_HEADER)) * 8;
		txStats[0].throughput = bitsReceived / txTime;
	}

	if(descStartTime < descEndTime) {
		bitsReceived = (txStats[0].goodPackets - firstPktGood) * (dataBodyLen + sizeof(MDK_PACKET_HEADER)) * 8;
		newTxTime = (float)((descEndTime - descStartTime) * 1024)/1000;  //puts the time in millisecs
		txStats[0].newThroughput = (A_UINT32)((float)bitsReceived / newTxTime);
	}
		
#ifdef _TIME_PROFILE
 end = milliTime();
 printf("fill tx stats time = %d\n", (end-start));
#endif

	return;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品久久久久久久久久久免费看 | 欧美调教femdomvk| 欧洲一区在线观看| 亚洲男人的天堂在线观看| 成人免费毛片片v| 亚洲欧美日韩久久| 在线一区二区三区做爰视频网站| 一区二区在线观看免费视频播放| 欧美日韩一级黄| 日本免费新一区视频| 欧美zozozo| 成人精品一区二区三区四区| 亚洲精品国产成人久久av盗摄| 欧美日韩国产精品自在自线| 久久精品国产精品亚洲综合| 久久久久国产精品免费免费搜索 | 国产在线精品一区二区不卡了| 精品粉嫩aⅴ一区二区三区四区| 国产成人综合网站| 夜夜嗨av一区二区三区四季av| 91精品国产综合久久婷婷香蕉| 国产一区二区在线电影| 国产精品卡一卡二卡三| 欧美剧情片在线观看| 国产精品自拍三区| 一区二区三区自拍| 精品国产乱码久久久久久免费| eeuss鲁片一区二区三区在线观看| 亚洲在线中文字幕| 久久理论电影网| 欧美综合一区二区三区| 激情丁香综合五月| 亚洲一二三区不卡| 久久精品一区二区三区不卡牛牛| 日本丶国产丶欧美色综合| 久久国产综合精品| 亚洲欧美一区二区三区国产精品 | 首页亚洲欧美制服丝腿| 国产偷国产偷亚洲高清人白洁| 欧美日韩在线免费视频| 国产麻豆精品95视频| 亚洲一区二区五区| 欧美激情一区二区三区在线| 欧美疯狂性受xxxxx喷水图片| 成人动漫一区二区在线| 久久成人久久爱| 亚洲成人久久影院| 18欧美亚洲精品| 久久网这里都是精品| 欧美一卡在线观看| 欧美在线综合视频| 本田岬高潮一区二区三区| 老汉av免费一区二区三区| 亚洲综合999| 国产精品动漫网站| 国产欧美一区二区三区在线看蜜臀 | 美洲天堂一区二卡三卡四卡视频| 中文字幕一区二区三区精华液 | 国产在线国偷精品产拍免费yy| 亚洲一区二区三区视频在线播放 | 在线观看av一区| 99久久国产综合精品女不卡| 国产毛片一区二区| 久88久久88久久久| 男人的天堂亚洲一区| 午夜精品久久久久久久99水蜜桃 | 香蕉av福利精品导航| 亚洲黄色在线视频| 亚洲欧美另类久久久精品2019| 欧美国产乱子伦| 国产免费观看久久| 国产精品无人区| 国产精品水嫩水嫩| 国产亚洲精品aa午夜观看| 久久久www成人免费无遮挡大片| 26uuu国产一区二区三区| 亚洲自拍偷拍九九九| 亚洲一区在线观看网站| 亚洲综合精品自拍| 亚洲成a人v欧美综合天堂 | 欧美日韩国产系列| 欧美色图免费看| 欧美日韩在线播放| 91精品国产综合久久精品app| 日本丰满少妇一区二区三区| 欧美在线一二三| 欧美男人的天堂一二区| 欧美日韩国产一级二级| 5月丁香婷婷综合| 欧美成人艳星乳罩| 久久久久久日产精品| 国产精品乱人伦中文| 一区二区日韩av| 日本欧美肥老太交大片| 精品无码三级在线观看视频| 国内成人自拍视频| 成人爽a毛片一区二区免费| 91丨porny丨国产入口| 欧美天天综合网| 精品国产免费久久 | 国产日韩欧美不卡在线| 一色桃子久久精品亚洲| 亚洲精品视频在线| 日韩精品久久久久久| 国产在线一区二区| 一本色道亚洲精品aⅴ| 这里只有精品免费| 欧美国产一区在线| 亚洲成av人片在线观看无码| 国产在线日韩欧美| 91丝袜美女网| 日韩一区二区三区观看| 中文字幕一区二区在线播放| 日本视频一区二区三区| 成人涩涩免费视频| 91精品婷婷国产综合久久性色| 久久五月婷婷丁香社区| 亚洲在线视频一区| 国产成人精品免费一区二区| 欧美性猛交xxxxxx富婆| 久久日一线二线三线suv| 亚洲黄一区二区三区| 精品影视av免费| 91久久久免费一区二区| 久久久久久久综合日本| 亚洲福利视频三区| 成人免费va视频| 日韩欧美国产综合一区| 亚洲精品大片www| 国产成人综合在线| 日韩欧美精品在线| 亚洲国产婷婷综合在线精品| 国产美女精品在线| 91精品国产色综合久久ai换脸| 亚洲欧洲精品一区二区三区不卡| 精品一区二区影视| 欧美色涩在线第一页| 中文字幕在线一区| 久久国产免费看| 欧美人成免费网站| 亚洲精品精品亚洲| 风间由美性色一区二区三区| 欧美一区二区美女| 亚洲午夜精品久久久久久久久| 成人av在线播放网址| 久久久一区二区三区| 日本不卡高清视频| 欧美日本在线播放| 洋洋av久久久久久久一区| 91亚洲国产成人精品一区二区三| 亚洲激情在线激情| 91性感美女视频| 亚洲三级久久久| 94色蜜桃网一区二区三区| 国产精品美女久久久久aⅴ国产馆| 狠狠色狠狠色综合系列| 日韩精品中文字幕在线不卡尤物| 亚洲成人黄色影院| 欧美巨大另类极品videosbest | 精品一区精品二区高清| 制服丝袜激情欧洲亚洲| 亚洲网友自拍偷拍| 欧美性大战久久久久久久蜜臀| 亚洲欧美另类小说| 在线亚洲一区二区| 亚洲一区二区视频| 欧美日韩极品在线观看一区| 亚洲国产欧美一区二区三区丁香婷| 一本一道久久a久久精品综合蜜臀| 日韩毛片精品高清免费| 91视频一区二区三区| 一区二区成人在线视频| 欧美午夜影院一区| 午夜精品久久久| 欧美成人a视频| 国产精品一卡二卡在线观看| 国产欧美一区二区三区在线老狼| 成人妖精视频yjsp地址| 自拍偷拍国产亚洲| 欧美日韩国产免费| 看片网站欧美日韩| 中文字幕免费观看一区| 99re视频精品| 午夜精品久久久久久久久久久| 日韩亚洲电影在线| 国内精品伊人久久久久影院对白| 欧美激情在线观看视频免费| 91免费精品国自产拍在线不卡| 一区二区三区蜜桃| 欧美一区二区三区色| 国产麻豆日韩欧美久久| 亚洲欧美一区二区久久| 欧美一级夜夜爽| 成人一级片网址| 五月婷婷久久丁香| 欧美高清在线视频| 欧美日韩国产片| 欧美日韩一区二区在线视频| 精品在线视频一区| 亚洲免费观看高清|