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

📄 zdusbmp_dutdlg.cpp

📁 这个是无线网卡WirelessLAN 测试程序NDIS
💻 CPP
📖 第 1 页 / 共 3 页
字号:
		if (RX_Total >= mParameterCtrl.mTXPackageParameter.TXAmount){ 
			TRXPackFinish = true;
			KillTimer(2002);
		}

		break;

	case 3001: //Test
		KillTimer(3001);
		if (!StartTest()){
			//control process
			PumpMessages();
			if (!bImplement){
				m_StartButt.EnableWindow(true);
				UpdateData(FALSE);
				return;
			}

			ShowString(m_StateList.GetItemCount(), 1, "!!!!!!!!!!!!!!TEST FAIL!!!!!!!!!!!!!!");
			c.Format("DUT is fail!!!\nDo you want to change next device?");
		}else{
			//control process
			PumpMessages();
			if (!bImplement){
				m_StartButt.EnableWindow(true);
				UpdateData(FALSE);
				return;
			}

			ShowString(m_StateList.GetItemCount(), 1, "++++++++++++++ PASS ++++++++++++++");
			c.Format("Test finish.\nDo you want to change next device?");
		}

		if (AfxMessageBox(c, MB_YESNO, MB_ICONQUESTION) == IDYES ){
			//clear current data
			mE2promCtrl.ClearCurrData(4);

			//copy temp data to current daya
			mE2promCtrl.mCurrEepromData = mtmpEEData;

			//add MAC and SN
			if (!mE2promCtrl.AddMACAddress()){
				ShowString(m_StateList.GetItemCount(), 1, " ");
				ShowString(m_StateList.GetItemCount(), 1, "MAC address overflow!!!", FALSE);
				AfxMessageBox("MAC address overflow!!!\nMass Production tool will stop!!!");
				break;
			}
			if (!mE2promCtrl.AddSerialNumber()){
				ShowString(m_StateList.GetItemCount(), 1, " ");
				ShowString(m_StateList.GetItemCount(), 1, "Serial number overflow!!!", FALSE);
				AfxMessageBox("Serial number overflow!!!\nMass Production tool will stop!!!");
				break;
			}

			//copy MAC and SN for add function
			memcpy(mE2promCtrl.mCurrEepromData.MAC, mE2promCtrl.CurrentMAC, 6);
			memcpy(mE2promCtrl.mCurrEepromData.SN, mE2promCtrl.CurrentSN, 12);

			//decrease amount
			//-------------------------------------------------------
			if (Amount_Low>0){
				Amount_Low--;
			}else if(Amount_Med>0 && Amount_Low==0){
				Amount_Med--;
				Amount_Low=0XFFFFFF;
			}else if(Amount_Hig>0 && Amount_Med==0 && Amount_Low==0){
				Amount_Hig--;
				Amount_Med=0XFFFFFF;
				Amount_Low=0XFFFFFF;
			}
			m_Amount.Format("%0X%06X%06X", Amount_Hig, Amount_Med, Amount_Low);
			UpdateData(FALSE);

			//check test amount
			if (Amount_Low==0 && Amount_Med==0 && Amount_Hig==0){
				ShowString(m_StateList.GetItemCount(), 1, " ");
				ShowString(m_StateList.GetItemCount(), 1, "Finish: Mass Production tool will stop!!!", FALSE);
				AfxMessageBox("Calibration is finish, Mass Production tool will stop!!!");
				return;
			}

			PumpMessages();

			ShowString(m_StateList.GetItemCount(), 1, "Detect DUT...", FALSE);
			SetTimer(4001, 100, NULL);
		}

		break;

	case 4001:
		KillTimer(4001);
		//control process
		PumpMessages();
		if (!bImplement){
			m_StartButt.EnableWindow(true);
			UpdateData(FALSE);
			return;
		}

		if(!OpenAdapter())
			SetTimer(4001, 100, NULL);
		else
			SetTimer(3001, 1, NULL);

		break;
	}
	
	CDialog::OnTimer(nIDEvent);
}

void CZDUSBMP_DUTDlg::ShowString(int dItem, int dImage, CString strBuff, bool bClear)
{

	//initial 
	LV_COLUMN lvcolumn;

	if (bClear){
		m_StateList.DeleteAllItems();
		m_StateList.DeleteColumn(0);

		lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
		lvcolumn.fmt = LVCFMT_LEFT;
		lvcolumn.pszText = _T("");
		lvcolumn.iSubItem = 0;
		lvcolumn.cx = 467;
		m_StateList.InsertColumn(0, &lvcolumn);
	}

	//Load values
	LV_ITEM lvitem;

	if (m_ShowDetial){
		lvitem.mask = LVIF_TEXT | LVIF_IMAGE;
		lvitem.iItem = dItem;
		lvitem.iSubItem = 0;
		lvitem.pszText = strBuff.GetBuffer(strBuff.GetLength());
		lvitem.iImage = dImage;//1

		m_StateList.InsertItem(&lvitem);
	}

}

void CZDUSBMP_DUTDlg::OnStartButton() 
{
	// TODO: Add your control notification handler code here
	ShowString(m_StateList.GetItemCount(),1,"-------------S T A R E-----------", true);
	ShowString(m_StateList.GetItemCount(),1,"Check environment...");
	if (!bComPortPresent || !bInstrumentPresent){
		ShowString(m_StateList.GetItemCount(),1,"The instrument and COM port do not exist!!!");
		return;
	}
	if (ProcedureState != STATE_IDLE){
		ShowString(m_StateList.GetItemCount(),1,"The program is running!!!");
		return;
	}

	ShowString(m_StateList.GetItemCount(),1,"Initiate SA...");
	mGPIBCtrl.InitSA();

	//OPEN ADAPTER
	ShowString(m_StateList.GetItemCount(),1,"Open and initiate DUT...");
	if (!OpenAdapter()){
	//	ShowString(m_StateList.GetItemCount(),1,"Can't find any usable network");
		return;
	}

	//set parameter for test -- mE2promCtrl
	GetEEData();
	mE2promCtrl.mCurrEepromData = mtmpEEData;

	//copy MAC and SN for add function
	memcpy(mE2promCtrl.CurrentMAC, mE2promCtrl.mCurrEepromData.MAC, 6);
	memcpy(mE2promCtrl.CurrentSN, mE2promCtrl.mCurrEepromData.SN, 12);

	//
	int a = m_Amount.GetLength();
	if(a>12){
		Amount_Hig = strtol(m_Amount.Mid(0, a-12), NULL, 16);
		Amount_Med = strtol(m_Amount.Mid(a-12, 6), NULL, 16);
		Amount_Low = strtol(m_Amount.Mid(a-6, 6), NULL, 16);
	}else if(a>6 && a<=12){
		Amount_Hig = 0;
		Amount_Med = strtol(m_Amount.Mid(0, a-6), NULL, 16);
		Amount_Low = strtol(m_Amount.Mid(a-6, 6), NULL, 16);
	}else{
		Amount_Hig = 0;
		Amount_Med = 0;
		Amount_Low = strtol(m_Amount.Mid(0, 6), NULL, 16);
	}
	if (Amount_Low==0 && Amount_Med==0 && Amount_Hig==0){
		ShowString(m_StateList.GetItemCount(),1,"The Amount value is invalid");
		return;
	}

	//
	bImplement = true;
	m_StopButt.EnableWindow(true);
	m_StartButt.EnableWindow(FALSE);
	SetTimer(3001, 1, NULL);
}

bool CZDUSBMP_DUTDlg::InitNIC(PWLADAPTERINFO pWLAdapterInfoIn, int Anteena)
{
	//set P-BSSID mode and any SSID
	if (!AdapterCtrl.Test_SetTestMode(pWLAdapterInfoIn)){
	//	m_StateBarCtrl.SetWindowText("Can't change test mode!!!");
		return false;
	}
	
	//get ALC
//	m_ALCEnable = AdapterCtrl.QueryWL_ContiTxPowerControlStatus(pWLAdapterInfoIn);
//	if (m_ALCEnable == ZDNDIS_FAIL) return false;


	//set channel 6
//	if (!AdapterCtrl.Test_SetChannel(pWLAdapterInfoIn, 5)){
//		m_StateBarCtrl.SetWindowText("Channel set fail!!!");
//		return false;
//	}

	//Get PA gain of channel 6
//	m_PAGain = AdapterCtrl.Test_GetPAGain(pWLAdapterInfoIn, FALSE);
//	if (!m_PAGain){
//		m_StateBarCtrl.SetWindowText("PA gain get fail!!!");
//		return false;
//	}
//	m_PAGain--;


	//Get PA gain of channel 6
//	m_TXPower = AdapterCtrl.Test_GetTXPower(pWLAdapterInfoIn);


	//set Antenna
	if (!AdapterCtrl.Test_SetAntenna(pWLAdapterInfoIn, Anteena)){
	//	m_StateBarCtrl.SetWindowText("Antenna set fail!!!");
		return false;
	}
	

//	//set USA Band Filter
//	if (!AdapterCtrl.Test_SetFilter(pWLAdapterInfoIn, 0)){
//		m_StateBarCtrl.SetWindowText("Filter set fail!!!");
//		return false;
//	}



	//set data rate 11MHz
	if (!AdapterCtrl.Test_SetCurrDataRate(pWLAdapterInfoIn, 3)){
	//	m_StateBarCtrl.SetWindowText("Data rate set fail!!!");
		return false;
	}


	//set Screamble enable
	if (!AdapterCtrl.Test_SetScreamble(pWLAdapterInfoIn, 1)){
	//	m_StateBarCtrl.SetWindowText("Screamble set fail!!!");
		return false;
	}


	//set Spreading enable
	if (!AdapterCtrl.Test_SetSpreading(pWLAdapterInfoIn, 1)){
	//	m_StateBarCtrl.SetWindowText("Spreading set fail!!!");
		return false;
	}


	// Read IQ Level
//	UINT	uData;
//	if(AdapterCtrl.ReadPHYRegister(pWLAdapterInfoIn, 47, &uData) != 0){
//		m_StateBarCtrl.SetWindowText("IQ Level get fail!!!");
//		return false;
//	} else {
//		m_TXIQLevel = uData;
//		m_TXIQLevel--;
//	}

	return true;
}

HANDLE CZDUSBMP_DUTDlg::ZDTxCreate(PWLADAPTERINFO pWLAdapterInfoIn)
{
	CTx* ptx = new CTx();

	if (ptx->Create(pWLAdapterInfoIn->hNICAdapterDevice))
		return ptx;

	return NULL;
}

void CZDUSBMP_DUTDlg::ZDTxClose(HANDLE handle)
{
	CTx* ptx = (CTx*) handle;

	if (ptx)
		delete ptx;
}

bool CZDUSBMP_DUTDlg::ZDTxSend(	HANDLE handle, 
								int pattern, 
								const char* RemoteMAC, 
								int PacketLen, 
								DWORD PacketNum, 
								int Interval, 
  								bool EnableChecklost,
								bool EnableCRC,
								bool EnableCheckHeader,
								UCHAR sequence,
								AFX_THREADPROC CompletionRoutine,
								LPVOID pParam
								)
{
	CTx* ptx = (CTx*) handle;

	return ptx->DoContinueSend(	pattern, 
								RemoteMAC, 
								PacketLen, 
								PacketNum, 
								Interval,
  								EnableChecklost,
								EnableCRC,
								EnableCheckHeader,
								sequence,
								CompletionRoutine,
								pParam
								);
}

bool CZDUSBMP_DUTDlg::ZDTxSendStop(HANDLE handle)
{
	CTx* ptx = (CTx*) handle;
	
	return ptx->DoStopContinueSend();
}

DWORD CZDUSBMP_DUTDlg::ZDTxGetPacketSent(HANDLE handle)
{
	CTx* ptx = (CTx*) handle;
	
	return ptx->GetPacketsSent();
}

DWORD CZDUSBMP_DUTDlg::ZDTxGetSendDuration(HANDLE handle)
{
	CTx* ptx = (CTx*) handle;
	
	return ptx->GetSentDuration();
}

bool CZDUSBMP_DUTDlg::ZDTxIsSending(HANDLE handle)
{
	CTx* ptx = (CTx*) handle;
	
	return ptx->IsSending();
}

bool CZDUSBMP_DUTDlg::ZDTxSetPattern( HANDLE handle,
					 const char *ptr,
					 int size
					 )
{
	CTx* ptx = (CTx*) handle;
	
	return ptx->SetUserDefinedPattern(ptr, size);
}

DWORD64 CZDUSBMP_DUTDlg::ZDTxGetTotalBytes(HANDLE handle)
{
	CTx* ptx = (CTx*) handle;

	return ptx->GetTotalBytes();
}

// The following functions are used by ZDRas

BOOL CZDUSBMP_DUTDlg::ZDRasTR_PacketSendEx(
	              HANDLE       hAdapterDevice,
                  PBYTE        lpSendBuffer,
                  DWORD        nSendBufferSize,
                  LPDWORD      lpBytesReturned,   // Required For Windows 95 Implementation
                  LPOVERLAPPED lpOverlapped,
                  PVOID        lpCompletionRoutine
                  )
{
    return W32N_PacketSendEx(
                  hAdapterDevice,
                  lpSendBuffer,
                  nSendBufferSize,
                  lpBytesReturned,   // Required For Windows 95 Implementation
                  lpOverlapped,
                  lpCompletionRoutine
                  );
}

BOOL CZDUSBMP_DUTDlg::ZDRasTR_PacketReadEx(
                  HANDLE       hAdapterDevice,
                  PZDRAS_PACKET pZDRasPacket,
                  LPDWORD      lpBytesReturned,
                  LPOVERLAPPED lpOverlapped,
                  PVOID        lpCompletionRoutine
                  )
{
    return W32N_PacketReadEx(
                  hAdapterDevice,
                  (PW32N_PACKET) pZDRasPacket,
                  lpBytesReturned,
                  lpOverlapped,
                  lpCompletionRoutine
                  );
}

DWORD CZDUSBMP_DUTDlg::ZDRasTR_GetLastError()
{
    return W32N_GetLastError();
}

UINT CZDUSBMP_DUTDlg::SendPacketComplete(LPVOID pParam)
{
	CZDUSBMP_DUTDlg *pCDialogTx = (CZDUSBMP_DUTDlg *)pParam;

	pCDialogTx->TRXPackFinish = true;
	
	pCDialogTx->KillTimer(2001);

	pCDialogTx->TX_Total = pCDialogTx->ZDTxGetPacketSent(pCDialogTx->m_htx);

	return 0;
}


UINT CZDUSBMP_DUTDlg::CommandCheckThread(LPVOID pParam)
{
	CZDUSBMP_DUTDlg* pDlg = (CZDUSBMP_DUTDlg*) pParam;

	bool bIsRunning=true;
	while (bIsRunning){

		TRACE(_T("Check Timer\n"));

		if (!pDlg->ThreadProcBegin) break;
	}

	AfxEndThread(0);
	TRACE(_T("Close Thread 0\n"));

	return 0;
}

void CZDUSBMP_DUTDlg::GetEEData()
{
	//MAC
	memcpy(mtmpEEData.MAC, &mE2promCtrl.pDLTempBuf[EE_MAC_ADDRESS], 6);

	//SN
	memcpy(mtmpEEData.SN, &mE2promCtrl.pDLTempBuf[EE_SERIAL_NUMBER_ADDRESS], 12);

	//SetPoint
	memcpy(mtmpEEData.SetPoint, &mE2promCtrl.pDLTempBuf[EE_SET_POINT_ADDRESS], 14);

	//Integration
	memcpy(mtmpEEData.Integration, &mE2promCtrl.pDLTempBuf[EE_INTEGRATION_ADDRESS], 14);
}

bool CZDUSBMP_DUTDlg::OpenAdapter()
{
	if (AdapterCtrl.OpenFirstAdapter()){
		//---------------------------------------
		int nWinVer = AdapterCtrl.ZD_GetOSVersion();
		if(nWinVer == ZDOS_WIN_XP) {
			if (AdapterCtrl.CheckWZCS(&AdapterCtrl.pAdapterInfo[0])){
				ShowString(m_StateList.GetItemCount(),1,"Please close WZCS functionality");
//				AfxMessageBox("Please close WZCS functionality!!!");
				return FALSE;
			}
		}
		//---------------------------------------
		if (!InitNIC(&AdapterCtrl.pAdapterInfo[0], 0)){
			ShowString(m_StateList.GetItemCount(),1,"Initial NIC fail!!!");
//			AfxMessageBox("Initial NIC fail!!!");
			return FALSE;
		}

	}else{
		ShowString(m_StateList.GetItemCount(),1,"Can't find any availble network!!!");
//		AfxMessageBox("Can't find any availble network!!!");
		return FALSE;
	}

	return true;

}

bool CZDUSBMP_DUTDlg::ConTXTest(PWLADAPTERINFO pWLAdapterInfoIn, int mCh, int mPAGain)
{
	double dfChannelPower=0.0;
	int SetPoint=0;
	CString c, c1;

	//set channel of SA and draw a limit
	mGPIBCtrl.SetTestChannel(mCh);

	//set channel of NIC
	if (!AdapterCtrl.Test_SetChannel(pWLAdapterInfoIn, mCh)){
		return FALSE;
	}
	//set filter of NIC
	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;
		}
	}


	//Set NIC to Continuous TX Mode.
	if (!AdapterCtrl.Test_SetConTX(pWLAdapterInfoIn, FALSE, 0)){
		return FALSE;
	}


⌨️ 快捷键说明

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