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

📄 zdusbmp_dutdlg.cpp

📁 这个是无线网卡WirelessLAN 测试程序NDIS
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	while(mPAGain>0){
		//set PA gain
		if (!AdapterCtrl.Test_SetPAGain(pWLAdapterInfoIn, FALSE, mPAGain)) {
			return FALSE;
		}

		Sleep(750);

		///+++++++++++++++++++test command+++++++++++++++++++
		if (mParameterCtrl.mTestItem.ChPower){
			dfChannelPower = mGPIBCtrl.ReadCHP(mCh);
			if ( dfChannelPower < mParameterCtrl.mLimitParameter.TXPower - mParameterCtrl.mLimitParameter.CableLose){
					mPAGain = 0;
					break;		
			}
		}

		///+++++++++++++++++++test command+++++++++++++++++++
		if (mParameterCtrl.mTestItem.SideLobe){
			if (!mGPIBCtrl.CheckSidelobe(mCh))
			{
				mPAGain -= 1;
			}else{
				break;
			}
		}
	}

	
	if(mPAGain<=0){//test fail
		//stop Continuous TX mode
		if (!AdapterCtrl.Test_SetConTX(pWLAdapterInfoIn, true, 0)){
			return FALSE;
		}
		return FALSE;

	}else{

		//get set point
		//--------------------------------------------
		SetPoint = AdapterCtrl.Test_MeasTXPower(pWLAdapterInfoIn);
		if(SetPoint == 0){ 
			if (!AdapterCtrl.Test_SetConTX(pWLAdapterInfoIn, true, 0)){
				return FALSE;
			}
			return FALSE;
		}

		//set current SP and IT
		mE2promCtrl.mCurrEepromData.SetPoint[mCh] = (UCHAR)SetPoint;
		mE2promCtrl.mCurrEepromData.Integration[mCh] = UCHAR(mPAGain<<4 | mPAGain);
	}

	if (!AdapterCtrl.Test_SetConTX(pWLAdapterInfoIn, true, 0)){
		return FALSE;
	}

	return true;
}

bool CZDUSBMP_DUTDlg::CWTest(PWLADAPTERINFO pWLAdapterInfoIn)
{

	//set channel of SA and initial
	mGPIBCtrl.SetTestChannel(5);

	//set channel
	if (!AdapterCtrl.Test_SetChannel(pWLAdapterInfoIn, 5)){
		return FALSE;
	}
	//Set USA Filter
	if (!AdapterCtrl.Test_SetFilter(pWLAdapterInfoIn, 0)){
		return FALSE;
	}
	//Set NIC to Continuous TX Mode (CW mode).
	if (!AdapterCtrl.Test_SetConTX(pWLAdapterInfoIn, false, 1)){
		return FALSE;
	}

	double readval = mGPIBCtrl.ReadCWF();

	//leave Continuous TX Mode (CW mode)
	if (!AdapterCtrl.Test_SetConTX(pWLAdapterInfoIn, true, 1)){
		return FALSE;
	}

	//load default
	if (!AdapterCtrl.Test_SetScreamble(pWLAdapterInfoIn, 1)){
		return FALSE;
	}
	if (!AdapterCtrl.Test_SetCurrDataRate(pWLAdapterInfoIn, 3)){
		return FALSE;
	}

	if ( fabs( readval - 2.437 ) > mParameterCtrl.mLimitParameter.FreTol ){ 
		return FALSE;
	}else{
		return true; 
	}
}

bool CZDUSBMP_DUTDlg::TXPacketsTest(PWLADAPTERINFO pWLAdapterInfoIn, int mCh)
{
	TX_Total =0;

	//add golden control code
	//Set Golden on RX mode
	//++++++++++++++++++++++++++++++++++++++++++++++
	cTmpCmd = CMD_SNED_RX;
	dTmpCh = mCh;
	dTmpPower = 0;
	dTmpAnt = 0;
	dwTmpInterval = 0;
	dwTmpLength = 0;
	dwTmpTXAmount = mParameterCtrl.mTXPackageParameter.TXAmount;
	if (!SendCommand(CMD_CLASS_SEND))
		return FALSE;
	//++++++++++++++++++++++++++++++++++++++++++++++
	
	//Set Channel
	if (!AdapterCtrl.Test_SetChannel(pWLAdapterInfoIn, mCh)){
		return FALSE;
	}
	
	//set filter
	if (mCh==13){
		//Set Japan Filter
		if (!AdapterCtrl.Test_SetFilter(pWLAdapterInfoIn, 1)){
			return FALSE;
		}
	}else{
		//Set USA Filter
		if (!AdapterCtrl.Test_SetFilter(pWLAdapterInfoIn, 0)){
			return FALSE;
		}
	}
	
	TRXPackFinish = FALSE;

	//create TX handle
	m_htx = ZDTxCreate(pWLAdapterInfoIn);
	if (!m_htx){
		return FALSE;
	}

	//Set NIC to Continuous TX Mode.
	char dest[20];
	HexStrToBin("FFFFFFFFFFFF", dest, 6);
	ZDTxSend(m_htx, 0, dest, mParameterCtrl.mTXPackageParameter.Length-10, mParameterCtrl.mTXPackageParameter.TXAmount,
		mParameterCtrl.mTXPackageParameter.Interval, false, true, false, 0, SendPacketComplete, this);

	SetTimer(2001, 1, NULL);

	CString c;
	while (!TRXPackFinish){
		//display
		m_StateList.DeleteItem(m_StateList.GetItemCount()-1);
		c.Format("Channel %d : TX packets is %d", mCh+1, TX_Total);
		ShowString(m_StateList.GetItemCount()-1, 1, c);

		Sleep(100);

		PumpMessages();
	}

	//stop again
	KillTimer(2001);
	Sleep(10);
	ZDTxSendStop(m_htx);
	//close
	ZDTxClose(m_htx);


	//display again
	m_StateList.DeleteItem(m_StateList.GetItemCount()-1);
	c.Format("Channel %d : TX packets is %d", mCh+1, TX_Total);
	ShowString(m_StateList.GetItemCount()-1, 1, c);

	//add golden control code
	//if PER%<8 return treu; else fail.
	//request RX state; finish or not
	//++++++++++++++++++++++++++++++++++++++++++++++
	cTmpResult = CMD_REPLY_STATE;
	cTmpValue = CMD_REPLY_VALUE_RXFINISH;
	if (!SendCommand(CMD_CLASS_REPLY))
		return FALSE;
	//++++++++++++++++++++++++++++++++++++++++++++++

	return true;
}

bool CZDUSBMP_DUTDlg::RXPacketsTest(PWLADAPTERINFO pWLAdapterInfoIn, int mCh)
{
	RX_Total=0;
	Bad=0;
	PER=0;

	//Set Channel
	if (!AdapterCtrl.Test_SetChannel(pWLAdapterInfoIn, mCh)){
		return FALSE;
	}

	//set filter
	if (mCh==13){
		//Set Japan Filter
		if (!AdapterCtrl.Test_SetFilter(pWLAdapterInfoIn, 1)){
			return FALSE;
		}
	}else{
		//Set USA Filter
		if (!AdapterCtrl.Test_SetFilter(pWLAdapterInfoIn, 0)){
			return FALSE;
		}
	}
	

	TRXPackFinish = FALSE;

	AdapterCtrl.GetNICAdapterTally(pWLAdapterInfoIn, &StartTallyStruct);

	//add golden control code
	//Set Golden on TX mode
	//++++++++++++++++++++++++++++++++++++++++++++++
	cTmpCmd = CMD_SNED_TX;
	dTmpCh = mCh;
	//set golden sample about TX Output Power; default=0
	//This value must be set during the test by golden sample utility
	//We suggestion user have to calibrate it per channel before test
	dTmpPower = 0;	
	dTmpAnt = 0; 

	dwTmpInterval = mParameterCtrl.mTXPackageParameter.Interval;
	dwTmpLength = mParameterCtrl.mTXPackageParameter.Length;
	dwTmpTXAmount = mParameterCtrl.mTXPackageParameter.TXAmount;
	if (!SendCommand(CMD_CLASS_SEND))
		return FALSE;
	//++++++++++++++++++++++++++++++++++++++++++++++

	SetTimer(2002, 100, NULL);

	CString c;
	while (!TRXPackFinish){
		//display
		m_StateList.DeleteItem(m_StateList.GetItemCount()-1);
		c.Format("Channel %d : RX packets is %d; Fail packets is %d; PER is %7.4f;", mCh+1, RX_Total, Bad, PER);
		ShowString(m_StateList.GetItemCount()-1, 1, c);

		Sleep(100);

		PumpMessages();

		//add golden control code
		//++++++++++++++++++++++++++++++++++++++++++++++
		
		if (!SendCommand(CMD_CLASS_REPLY))
			continue;
		else{
			if (mCommuCtrl.mReplyCmd.cValue == CMD_REPLY_VALUE_TXFINISH)
				break;
		}
		//++++++++++++++++++++++++++++++++++++++++++++++

	}

	//stop again
	Sleep(110);
	KillTimer(2002);
	Sleep(10);

	//display again
	m_StateList.DeleteItem(m_StateList.GetItemCount()-1);
	c.Format("Channel %d : RX packets is %d; Fail packets is %d; PER is %7.4f;", mCh+1, RX_Total, Bad, PER);
	ShowString(m_StateList.GetItemCount()-1, 1, c);

	c.Format("%6.5f", PER);
	if (strtod(c, NULL)>mParameterCtrl.mLimitParameter.PER)
		return FALSE;
	else
		return true;
}

bool CZDUSBMP_DUTDlg::SendCommand(char cClass, char cBindwithCmd)
{
	CWinThread* pThread = new (CWinThread);
	DWORD dwRes;
	bool bReplyState;

	//test and connect to golden sample
	//clear data buffer for transmit
	mCommuCtrl.ClearSendBuff();

	//clear data buffer for transmit
	mCommuCtrl.SetHandle(cClass);
	switch(cClass){
	case CMD_CLASS_SEND:
		mCommuCtrl.SetSendCmd(cTmpCmd, dTmpCh, dTmpPower, dTmpAnt, dwTmpInterval, 
							dwTmpLength, dwTmpTXAmount);
		break;
	case CMD_CLASS_REPLY:
		mCommuCtrl.SetReplyCmd(cTmpResult, cTmpValue);
		break;
	case CMD_CLASS_BINDWITH:
		mCommuCtrl.SetBindwithCmd(cBindwithCmd);
		break;
	case CMD_CLASS_TEST:
	default:
		return FALSE;
		break;
	}

	while(1){
		//send MprConfigInterfaceGetInfo
		TRACE("Send command...\n");
		for (int i=0; i<25; i++){
			SendByteToCOMPort(&mCommuCtrl.OutBuff[i]);
		}

		ProcedureState = STATE_WAIT;

		//begine thread -- check command
		TRACE("Thread begin...\n");
		ThreadProcBegin = true;
		pThread = AfxBeginThread(CommandCheckThread, this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED);
		pThread->m_bAutoDelete = FALSE;
		pThread->ResumeThread();

		//wait for reply
		TRACE("Waiting for reply...\n");
		dwRes = WaitForSingleObjectEx( pThread->m_hThread, TIMEOUT, TRUE );
		if (dwRes == WAIT_TIMEOUT){

			ThreadProcBegin = FALSE;
			Sleep(300);
			bReplyState = FALSE;
			break;

		}else{

			if (ProcedureState == STATE_OVERTIMES){
				bReplyState = FALSE;
				break;
			}
			if (ProcedureState == STATE_RECEIVER_COMPLETE){
				if (mCommuCtrl.mReplyCmd.bIsSuccess == CMD_REPLY_SUCCESS){
					bReplyState = true;
				}else{
					bReplyState = FALSE;
				}
				break;
			}
		}

		PumpMessages();
	}

	TRACE("Leave Bindwith function code.\n");
	
	ProcedureState = STATE_IDLE;

	delete 	pThread;

	return bReplyState;
}

bool CZDUSBMP_DUTDlg::DownloadSetting(PWLADAPTERINFO pWLAdapterInfoIn)
{
	mE2promCtrl.LoadCurrData(0, mE2promCtrl.mCurrEepromData.MAC);
	mE2promCtrl.LoadCurrData(1, mE2promCtrl.mCurrEepromData.SN);
	mE2promCtrl.LoadCurrData(2, mE2promCtrl.mCurrEepromData.SetPoint);
	mE2promCtrl.LoadCurrData(3, mE2promCtrl.mCurrEepromData.Integration);

	if(AdapterCtrl.WL_WriteEEPROM(pWLAdapterInfoIn, mE2promCtrl.pDLTempBuf, EEPROM_SIZE_USB) == ZDNDIS_FAIL) {
		return FALSE; //write fail
	}else{
		return TRUE;
	}
}

bool CZDUSBMP_DUTDlg::StartTest()
{
	int i;
	CString c;


	//++++++++++++++++++++++++++++++++++++++++++++++++
	//channel power and side lobe test
	if (mParameterCtrl.mTestItem.ChPower && mParameterCtrl.mTestItem.SideLobe){
		ShowString(m_StateList.GetItemCount(), 1, " ");
		ShowString(m_StateList.GetItemCount(), 1, "Channel power and Side lobe test...");
		for (i=0; i<14; i++){

			//control process
			if (!bImplement) return FALSE;

			if (mParameterCtrl.mCalibrationSelect.TX[i]){
				c.Format("Channel %d", i);
				ShowString(m_StateList.GetItemCount(), 1, c);

				PumpMessages();

				ShowString(m_StateList.GetItemCount(), 1, c);
				if ( !ConTXTest(&AdapterCtrl.pAdapterInfo[0], i, (mE2promCtrl.mCurrEepromData.Integration[i] & 0xf)) ){
					c.Format("Channel %d -- FAIL", i);
					ShowString(m_StateList.GetItemCount()-1, 1, c);
					return FALSE;
				}else{
					c.Format("Channel %d -- PASS", i);
					ShowString(m_StateList.GetItemCount()-1, 1, c);
				}

			}else{
				c.Format("Channel %d doesn't test", i);
				ShowString(m_StateList.GetItemCount(), 1, c);
			}

			PumpMessages();

		}
	}


	//++++++++++++++++++++++++++++++++++++++++++++++++
	//carrier wave test
	if (mParameterCtrl.mTestItem.CW){
		ShowString(m_StateList.GetItemCount(), 1, " ");
		ShowString(m_StateList.GetItemCount(), 1, "Carrier Wave test...");

		//control process
		PumpMessages();
		if (!bImplement) return FALSE;

		//control process
		if (!bImplement) return FALSE;
	
		if ( !CWTest(&AdapterCtrl.pAdapterInfo[0]) ){
			ShowString(m_StateList.GetItemCount(), 1, "--FAIL--");
			return FALSE;
		}else{
			ShowString(m_StateList.GetItemCount(), 1, "--PASS--");
		}

	}


	//++++++++++++++++++++++++++++++++++++++++++++++++
	//carrier suppression test
/*	if (mParameterCtrl.mTestItem.CS){
		ShowString(m_StateList.GetItemCount(), 1, " ");
		ShowString(m_StateList.GetItemCount(), 1, "Carrier Suppression test...");

		//control process
		PumpMessages();
		if (!bImplement) return FALSE;

	}
*/

	//++++++++++++++++++++++++++++++++++++++++++++++++
	//Continue packets TX test
	if (mParameterCtrl.mTestItem.TXPackets){
		ShowString(m_StateList.GetItemCount(), 1, " ");
		ShowString(m_StateList.GetItemCount(), 1, "Continue packets TX test...");

		//control process
		PumpMessages();
		if (!bImplement) return FALSE;

		if ( !TXPacketsTest(&AdapterCtrl.pAdapterInfo[0], 5) ){
			ShowString(m_StateList.GetItemCount(), 1, "--FAIL--");
			return FALSE;
		}else{
			ShowString(m_StateList.GetItemCount(), 1, "--PASS--");
		}

	}

	//++++++++++++++++++++++++++++++++++++++++++++++++
	//Continue packets RX test
	if (mParameterCtrl.mTestItem.RXPackets){
		ShowString(m_StateList.GetItemCount(), 1, " ");
		ShowString(m_StateList.GetItemCount(), 1, "Continue packets RX test...");

		//control process
		PumpMessages();
		if (!bImplement) return FALSE;

		if ( !RXPacketsTest(&AdapterCtrl.pAdapterInfo[0], 5) ){
			ShowString(m_StateList.GetItemCount(), 1, "--FAIL--");
			return FALSE;
		}else{
			ShowString(m_StateList.GetItemCount(), 1, "--PASS--");
		}

	}

	//++++++++++++++++++++++++++++++++++++++++++++++++
	//Download setting
	if (mParameterCtrl.mTestItem.Download){
		ShowString(m_StateList.GetItemCount(), 1, " ");
		ShowString(m_StateList.GetItemCount(), 1, "Download setting...");

		//control process
		PumpMessages();
		if (!bImplement) return FALSE;

		if ( !DownloadSetting(&AdapterCtrl.pAdapterInfo[0]) ){
			ShowString(m_StateList.GetItemCount(), 1, "--FAIL--");
			return FALSE;
		}else{
			ShowString(m_StateList.GetItemCount(), 1, "--PASS--");
		}

	}

	return true;
}

void CZDUSBMP_DUTDlg::OnStopButton() 
{
	// TODO: Add your control notification handler code here
	bImplement = FALSE;
	m_StopButt.EnableWindow(FALSE);

	UpdateData(FALSE);
}

⌨️ 快捷键说明

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