⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmdtest.c

📁 Atheros AP Test with Agilent N4010A source code
💻 C
📖 第 1 页 / 共 5 页
字号:
	art_rxGetStats(devNum, 0, remoteStats, &rStats);
	uiPrintf("%3d", rStats.crcPackets); 
	if(rStats.crcPackets > testSetup.maxCRCAllowed) {
		if(remoteStats) {
			//means dut was doing transmit test
			reasonFailMask |= (MASK_LINKTEST_TX_CRC_ANTA << antennaMaskOffset);
		}
		else {
			//dut was doing a receive test
			reasonFailMask |= (MASK_LINKTEST_RX_CRC_ANTA << antennaMaskOffset);
		}
	}
	uiPrintf(" ");

	if(!((testMode == MODE_11B) || ((testMode == MODE_11G) && ((swDeviceID & 0xff) >= 0x0013)))) {
		uiPrintf("%3d", rStats.ppmAvg); 
		if((rStats.ppmAvg > testSetup.ppmMax) || (rStats.ppmAvg < testSetup.ppmMin)) {
			if(remoteStats) {
				//means dut was doing transmit test
				reasonFailMask |= (MASK_LINKTEST_TX_PPM_ANTA << antennaMaskOffset);
			}
			else {
				//dut was doing a receive test
				reasonFailMask |= (MASK_LINKTEST_RX_PPM_ANTA << antennaMaskOffset);
			}
		}
	}

	//print the RSSI for llg if needed
	if ((testMode == MODE_11G) &&
		((swDeviceID & 0xff) >= 0x0013) && (turbo != TURBO_ENABLE) && (rateMask > 0xff)) {
	    uiPrintf("\n ");
		for(j = 0; j < numLoops; j++) {
			art_rxGetStats(devNum, DataRate[j], remoteStats, &rStats);
			uiPrintf("(%2d)", rStats.DataSigStrengthAvg);
		}
		uiPrintf("       ");
	}
	return(reasonFailMask);
}



A_UINT32 broadcastTest
(
 A_UINT32 devNum,
 A_UINT32 testChannel,
 A_UINT32 testMode,
 A_UINT32 turbo,
 A_UINT16 antenna
)
{
	A_UCHAR  pattern[] = {0xaa, 0x55};
    RX_STATS_STRUCT rStats;
	A_UINT16 index;
	A_UINT32 i;
	A_BOOL	testFailed = 0;
	A_INT32 rssiThreshold;
	A_UINT32 reasonFailMask = 0;
	A_UINT16 antennaMaskOffset = 0;
	A_BOOL   enablePPM = 1;

	if(antenna == DESC_ANT_B) {
		//shift masks by 1 to get to the B antenna mask
		antennaMaskOffset = 1;
	}

	if((testMode == MODE_11B) || ((testMode == MODE_11G) && ((swDeviceID & 0xff) >= 0x0013))) {
		enablePPM = 0;
	}
	switch(testMode) {
	case MODE_11A:
		switch(antenna) {
		case DESC_ANT_A:
			rssiThreshold = testSetup.rssiThreshold11a_antA;
			break;

		case DESC_ANT_B:
			rssiThreshold = testSetup.rssiThreshold11a_antB;
			break;
		} //end switch antenna
		break;

	case MODE_11B:
		switch(antenna) {
		case DESC_ANT_A:
			rssiThreshold = testSetup.rssiThreshold11b_antA;
			break;

		case DESC_ANT_B:
			rssiThreshold = testSetup.rssiThreshold11b_antB;
			break;
		} //end switch antenna
		break;
	
	case MODE_11G:
		switch(antenna) {
		case DESC_ANT_A:
			rssiThreshold = testSetup.rssiThreshold11g_antA;
			break;

		case DESC_ANT_B:
			rssiThreshold = testSetup.rssiThreshold11g_antB;
			break;
		} //end switch antenna
		break;
	} //end switch mode

	//start the receive test
	art_setResetParams(devNum, configSetup.pCfgFile, (A_BOOL)configSetup.eepromLoad,
			(A_BOOL)configSetup.eepromHeaderLoad, (A_UCHAR)testMode, configSetup.use_init);		
	for(i = 0; i < testSetup.numIterations; i++) {
		art_resetDevice(devNum, dutStation, configSetup.beaconBSSID.octets, testChannel, turbo);
		art_setAntenna(devNum, configSetup.antenna);
		rxDataSetupFixedNumber(devNum, testSetup.numPackets, testSetup.packetSize, enablePPM);
		rxDataBeginFixedNumber(devNum, testSetup.beaconTimeout, 0, 0, pattern, 2);
		if (art_mdkErrNo!=0) {
			reasonFailMask |= MASK_COMMS_FAILURE;
			continue;
		}

		art_rxGetStats(devNum, 0, 0, &rStats);

		uiPrintf("\nReceived %d good packets on BSSID ", rStats.goodPackets);
		for (index = 0; index < 6; index++) {
			uiPrintf("%02x ", configSetup.beaconBSSID.octets[index]);
		}
		uiPrintf("RSSI = %d ", rStats.DataSigStrengthAvg);

		if(rStats.DataSigStrengthAvg < rssiThreshold) {
			uiPrintf("FAILED\n");
			testFailed = 1;
			reasonFailMask = MASK_BEACON_RSSI_ANTA << antennaMaskOffset;
		}
		else {
			uiPrintf("PASSED\n");
		}
	}

	if (testFailed) {
		uiPrintf("\nBeacon Test Failed. Error code %d \n", ERR_BEACON_RSSI_ANTA + antennaMaskOffset);
	}
	else {
		uiPrintf("\nBeacon Test Passed, return code 0\n");
	}

	//restore the mode
	art_setResetParams(devNum, configSetup.pCfgFile, (A_BOOL)configSetup.eepromLoad,
			(A_BOOL)configSetup.eepromHeaderLoad, (A_UCHAR)configSetup.mode, configSetup.use_init);		
	return(reasonFailMask);
}


A_UINT32 throughputUpTest
(
 A_UINT32 devNum,
 A_UINT32 testChannel,
 A_UINT32 testMode,
 A_UINT32 turbo,
 A_UINT16 antenna,
 A_UINT16 goldAntenna
)
{
	// rxDataSetup
	A_UINT32 num_rx_desc = 50;
	A_UINT32 rx_length = 100;
	A_UINT32 enable_ppm = 0;
	A_UINT32 stats_mode =  ENABLE_STATS_RECEIVE; 

	// txrxDataBegin
	A_UINT32 start_timeout = 0;	// no wait time for transmit
	A_UINT32 complete_timeout = 25000;
	A_UINT32 compare = 0;
	A_UCHAR  pattern[] = {0xaa, 0x55};
	A_UINT32 broadcast = 0;
	
	A_UINT32 reasonFailMask = 0;
	A_UINT32 iterationFailMask = 0;
	A_UINT32 rateMask;
	A_UINT32 currentRate;
	A_UINT32 currentRateIndex;
	A_UINT32 numPackets;
//	A_UINT32 startTime = milliTime();

	//start the transmit test
//	uiPrintf("Good Packets        Throughput        RSSI    Result  Rate\n");
	uiPrintf("Good  Throughput  Good  RSSI  CRCs  Missed  Result  Rate\n");
	uiPrintf("(Tx)              (RX)  (RX)  (RX)\n");

	rateMask = testSetup.dataRateMaskTP;
	if(configSetup.enableXR) {
		rateMask &= 0xf80ff;
	}
	else if(((swDeviceID & 0xff) < 0x0013) || (testMode != MODE_11G)) { 
		rateMask &= 0xff;
	}
	if(testMode == MODE_11B) {
		rateMask &= 0xfd;
	}

	if((turbo == TURBO_ENABLE) && !configSetup.enableXR) {
		rateMask &= 0xff;
	}

	//send wakeup call to golden unit
	Sleep(1500);	
	dutSendWakeupCall(devNum, THROUGHPUT_UP_TEST, testChannel, testMode, turbo, goldAntenna, rateMask);

	Sleep(2000);	// delay between packet sends
	if(testMode == MODE_11B){
		numPackets = testSetup.numPacketsTP_CCK;
	}
	else {
		numPackets = testSetup.numPacketsTP;
	}
	art_setResetParams(devNum, configSetup.pCfgFile, (A_BOOL)configSetup.eepromLoad,
		(A_BOOL)configSetup.eepromHeaderLoad, (A_UCHAR)testMode, configSetup.use_init);		
	art_resetDevice(devNum, dutStation, bssID, testChannel, turbo);

	//set the txPower if needed
	forcePowerOrPcdac(devNum);
	
	art_txDataSetup(devNum, rateMask | RATE_GROUP, goldenStation, 
		numPackets, testSetup.packetSizeTP, pattern, 2, 0, configSetup.antenna, broadcast);
	if(art_mdkErrNo) {
		uiPrintf("Error: Unable to setup packets for throughput test\n");
		return(ERR_TEST_SETUP);
	}
	art_rxDataSetup(devNum, num_rx_desc, rx_length, enable_ppm);
	art_txrxDataBegin(devNum, start_timeout, complete_timeout, stats_mode, compare, pattern, 2);			
//	if(art_mdkErrNo) {
//		uiPrintf("Error: Throughput test did not complete\n");
//		return(ERR_TEST_SETUP);
//	}
				
//	for(i = 0; i < testSetup.numIterations; i++) {
//		uiPrintf("Starting transmit iteration number %d, out of %d\n", i, testSetup.numIterations);
		rateMask = testSetup.dataRateMaskTP;
		if(configSetup.enableXR) {
			rateMask &= 0xf80ff;
		}
		else if(((swDeviceID & 0xff) < 0x0013) || (testMode != MODE_11G)) { 
			rateMask &= 0xff;
		}
		if(testMode == MODE_11B) {
			rateMask &= 0xfd;
		}
		if((turbo == TURBO_ENABLE) && !configSetup.enableXR) {
			rateMask &= 0xff;
		}
		currentRate = 0x01;
		currentRateIndex = 0;
		while(rateMask) {
			if(currentRate & rateMask) {
				iterationFailMask = analyzeThroughputResults(devNum, currentRateIndex, testMode, turbo, 0, antenna, testChannel, "up");

				if(iterationFailMask) {
					reasonFailMask |= iterationFailMask;
					uiPrintf("      X:");
					printFailLetters(iterationFailMask);
				}
				else {
					uiPrintf("         ");
				}
				if(testMode != MODE_11B) {
					uiPrintf("  %s", DataRateStr[currentRateIndex]);
					if(turbo == TURBO_ENABLE) {
						uiPrintf(" turbo");
					}
					uiPrintf("\n");
				}
				else {
					uiPrintf("  %s\n", DataRate_11b[currentRateIndex]);
				}
				//uiPrintf("\n");
				rateMask = rateMask & ~currentRate;
			}
			currentRate = currentRate << 1;
			currentRateIndex++;
		}
		uiPrintf("\n");
//	}
	
	if(reasonFailMask) {
		uiPrintf("\nThroughput Test FAIL, due to: \n");
		printFailures(reasonFailMask);
		uiPrintf("\n");
	}
	else {
		uiPrintf("\nThroughput Test Pass, return code 0\n");
	}

	//restore the mode
	art_setResetParams(devNum, configSetup.pCfgFile, (A_BOOL)configSetup.eepromLoad,
			(A_BOOL)configSetup.eepromHeaderLoad, (A_UCHAR)configSetup.mode, configSetup.use_init);		
	if(configSetup.rangeLogging) {
		fprintf(rangeLogFileHandle, "\n");
	}
	return(reasonFailMask);
}

A_UINT32 throughputDownTest
(
 A_UINT32 devNum,
 A_UINT32 testChannel,
 A_UINT32 testMode,
 A_UINT32 turbo,
 A_UINT16 antenna,
 A_UINT16 goldAntenna
)
{
	// rxDataSetup
	A_UINT32 num_rx_desc = 50;
	A_UINT32 rx_length = 100;
	A_UINT32 enable_ppm = 0;
	A_UINT32 stats_mode =  ENABLE_STATS_RECEIVE; 

	// txrxDataBegin
	A_UINT32 start_timeout = 5000;	
	A_UINT32 complete_timeout = 15000;
	A_UINT32 compare = 0;
	A_UCHAR  pattern[] = {0xaa, 0x55};
	A_UINT32 broadcast = 0;
	
	A_UINT32 reasonFailMask = 0;
	A_UINT32 iterationFailMask = 0;
	A_UINT32 rateMask;
	A_UINT32 currentRate;
	A_UINT32 currentRateIndex;
	A_UINT32 numPackets;
	A_UINT32 mask;
	A_UINT32 numRates;

	//start the transmit test
//	uiPrintf("Good Packets        Throughput        RSSI    Result  Rate\n");
	uiPrintf("Good  Throughput  Good  RSSI  CRCs  Missed  Result  Rate\n");
	uiPrintf("(Tx)              (RX)  (RX)  (RX)\n");
	Sleep(1500);

	rateMask = testSetup.dataRateMaskTP;
	if(configSetup.enableXR) {
		rateMask &= 0xf80ff;
	}
	else if(((swDeviceID & 0xff) < 0x0013) || (testMode != MODE_11G)) { 
		rateMask &= 0xff;
	}
	if(testMode == MODE_11B) {
		rateMask &= 0xfd;
	}

	if((turbo == TURBO_ENABLE) && !configSetup.enableXR) {
		rateMask &= 0xff;
	}

	//send wakeup call to golden unit
	dutSendWakeupCall(devNum, THROUGHPUT_DOWN_TEST, testChannel, testMode, turbo, goldAntenna, rateMask);
	art_setResetParams(devNum, configSetup.pCfgFile, (A_BOOL)configSetup.eepromLoad,
		(A_BOOL)configSetup.eepromHeaderLoad, (A_UCHAR)testMode, configSetup.use_init);		
	if(testMode == MODE_11B){
		numPackets = testSetup.numPacketsTP_CCK;
	}
	else {
     	numPackets = testSetup.numPacketsTP;
	}
	art_resetDevice(devNum, dutStation, bssID, testChannel, turbo);

	mask = 0x80000;
	numRates = 0;
	while(mask) {
		if(mask & rateMask) {
			numRates++;
		}
		mask >>= 1;
	}
	#ifdef _DEBUG 
		printf(" F2_DEF_ANT Antenna =%x F2_STA_ID1)=%x\n",REGR(devNum, 0x8058),REGR(devNum, F2_STA_ID1));
	#endif
	art_setAntenna(devNum,antenna);
	#ifdef _DEBUG 
		printf(" Antenna =%x REGR(devNum, F2_STA_ID1)=%x\n",REGR(devNum, 0x8058),REGR(devNum, F2_STA_ID1));
	#endif
	art_rxDataSetup(devNum, (numPackets * numRates) + 40, testSetup.packetSizeTP, enable_ppm);
	#ifdef _DEBUG 
    	printf("ELSE  Antenna =%x REGR(devNum, F2_STA_ID1)=%x\n",REGR(devNum, 0x8058),REGR(devNum, F2_STA_ID1));
	#endif
	if(art_mdkErrNo) {
		uiPrintf("Error: Unable to setup packets for throughput test\n");
		return(ERR_TEST_SETUP);
	}
	art_rxDataStart(devNum);
	art_rxDataComplete(devNum, start_timeout, complete_timeout, stats_mode, 0, pattern, 2);
	//	if(art_mdkErrNo) {
//		uiPrintf("Error: Throughput test did not complete\n");
//		return(ERR_TEST_SETUP);
//	}
				
//	for(i = 0; i < testSetup.numIterations; i++) {
//		uiPrintf("Starting transmit iteration number %d, out of %d\n", i, testSetup.numIterations);
		rateMask = testSetup.dataRateMaskTP;
		if(configSetup.enableXR) {
			rateMask &= 0xf80ff;
		}
		else if(((swDeviceID & 0xff) < 0x0013) || (testMode != MODE_11G)) { 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -