📄 zdusbmp_dutdlg.cpp
字号:
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 + -