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