📄 t_wifi_txpcl.cpp
字号:
}
s_cal_ch_freq_mhz.ch_num = String_To_Array_UnsignedInteger(as_cal_channel.c_str(), s_cal_ch_freq_mhz.ch_freq_MHz, max_ch_num);
for (int cal_ch_idx=0; cal_ch_idx<s_cal_ch_freq_mhz.ch_num; cal_ch_idx++ )
{
log->Add( "\n" + DateToStr(Date()) + " " + CurrentTimeStr() +
" ------------------------------------------------------------------ "
);
unsigned int freq_khz = s_cal_ch_freq_mhz.ch_freq_MHz[cal_ch_idx]*1000;
nvram_ch_idx = GetWiFiNVRAMChannelIndex(e_802_11_idx, s_cal_ch_freq_mhz.ch_freq_MHz[cal_ch_idx]);
if ((int)NOT_FOUND == nvram_ch_idx)
{
PostMessage(ctrl.hPostMsgDestHandle,
WM_MF_WIFI_CHANNEL_INDEX_NOT_FOUND_FAIL,
0,
0
);
log->Add(DateToStr(Date()) + " " + CurrentTimeStr() +
" WiFi Channel index not found fail, channel = " + IntToStr(s_cal_ch_freq_mhz.ch_freq_MHz[cal_ch_idx]) + " MHz fail"
);
return false;
}
// m_pWft->iqv.p_handle->rx.freq = 1000*freq_khz;
if (!m_wft_ctrl.WFT_SetCentralFreq( m_pWft, (double) s_cal_ch_freq_mhz.ch_freq_MHz[cal_ch_idx]) )
{
PostMessage(
ctrl.hPostMsgDestHandle,
WM_MF_WIFI_SET_CENTRAL_FREQ_FAIL,
0,
0
);
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" WiFi tester < RX channel frequency = " + IntToStr(s_cal_ch_freq_mhz.ch_freq_MHz[cal_ch_idx]) + " MHz fail"
);
return false;
}
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" WiFi tester < RX channel frequency = " + IntToStr(s_cal_ch_freq_mhz.ch_freq_MHz[cal_ch_idx]) + " MHz"
);
if( ! m_wft_ctrl.WFT_ApplyChange( m_pWft ) )
{
PostMessage(
ctrl.hPostMsgDestHandle,
WM_MF_WIFI_APPLY_CHANGE_FAIL,
0,
0
);
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" WiFi tester applies change value fail "
);
return false;
}
wifi_cpt.channel_freq = freq_khz;
for( int iRealRecursiveTimes=0; iRealRecursiveTimes<m_iWiFiTxPRecursive_Times;
iRealRecursiveTimes++)
{
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" RecursiveTimes = " + IntToStr(iRealRecursiveTimes)
);
wifi_cpt.tx_pwr_dac = m_pCal->s_cal_obj.pc_WIFI_APC_Obj->Get_TxPowerDac(e_802_11_idx, mod, nvram_ch_idx);
if (wifi_cpt.tx_pwr_dac > WIFI_MAX_APC_VALUE )
{
wifi_cpt.tx_pwr_dac = WIFI_MAX_APC_VALUE;
}
pkt_tx_ex.ch_freq = wifi_cpt.channel_freq;
pkt_tx_ex.tx_rate = wifi_cpt.tx_rate;
pkt_tx_ex.tx_gain_dac = wifi_cpt.tx_pwr_dac;
pkt_tx_ex.txAnt = 0;
pkt_tx_ex.txFlags = 0;
pkt_tx_ex.targetAlc = 0;
log->Add(DateToStr(Date()) + " " + CurrentTimeStr() +
" Dac[" + IntToStr(nvram_ch_idx) + "] = " + IntToStr(m_pCal->s_cal_obj.pc_WIFI_APC_Obj->Get_TxPowerDac(e_802_11_idx, mod, nvram_ch_idx))
);
META_RESULT MetaResult = META_WiFi_Stop_r(m_pCal->i_MainMETAHandle, 500);
if( META_SUCCESS != MetaResult )
{
CalErrorHandler( WM_MF_WIFI_CPT_FAIL );
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" FAIL: Target > WiFi stop fail."
);
return false;
}
Sleep(50);
MetaResult = META_WiFi_SetRegDomain_r( m_pCal->i_MainMETAHandle, 500, &wifi_cpt.reg_domain );
if( META_SUCCESS != MetaResult )
{
CalErrorHandler( WM_MF_WIFI_CPT_FAIL );
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" FAIL: Target < WiFi set reg domain fail."
);
return false;
}
WiFi_TestPktTx_S pkt_tx;
m_cWIFI_CPT_Obj.Compose_MacHeader(wifi_cpt.s_mac_header, pkt_tx_ex.mac_header);
if (m_pCal->b_WiFiAlcSupport)
{
MetaResult = META_WiFi_ContPktTx_Ex_r(m_pCal->i_MainMETAHandle, 500, &pkt_tx_ex);
if (META_SUCCESS != MetaResult)
{
CalErrorHandler(WM_MF_WIFI_CPT_FAIL);
log->Add(DateToStr(Date()) + " " + CurrentTimeStr() +
" FAIL: Target < WiFi continuous packet TX fail."
);
return false;
}
}
else
{
pkt_tx.ch_freq = pkt_tx_ex.ch_freq;
pkt_tx.tx_rate = pkt_tx_ex.tx_rate;
pkt_tx.tx_gain_dac = pkt_tx_ex.tx_gain_dac;
pkt_tx.pktCount = pkt_tx_ex.pktCount;
pkt_tx.pktInterval = pkt_tx_ex.pktInterval;
pkt_tx.pktLength = pkt_tx_ex.pktLength;
pkt_tx.pattern = pkt_tx_ex.pattern;
pkt_tx.txAnt = pkt_tx_ex.txAnt;
pkt_tx.is_short_preamble = pkt_tx_ex.is_short_preamble;
for (int i=0; i<24; i++)
{
pkt_tx.mac_header[i] = pkt_tx_ex.mac_header[i];
}
MetaResult = META_WiFi_ContPktTx_r(m_pCal->i_MainMETAHandle, 500, &pkt_tx);
}
if( META_SUCCESS != MetaResult )
{
CalErrorHandler( WM_MF_WIFI_CPT_FAIL );
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" FAIL: Target > WiFi continuous packet TX fail."
);
return false;
}
Sleep(100);
if (!m_wft_ctrl.WFT_DataCapture(m_pWft))
{
PostMessage(
ctrl.hPostMsgDestHandle,
WM_MF_WIFI_APPLY_CHANGE_FAIL,
0,
0
);
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" WiFi tester applies change value fail "
);
return false;
}
if (!m_wft_ctrl.WFT_PowerAnalyze(m_pWft))
{
PostMessage(
ctrl.hPostMsgDestHandle,
WM_MF_WIFI_ANALYZE_POWER_FAIL,
0,
0
);
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" WiFi tester analyzes TX power fail "
);
return false;
}
if (!m_wft_ctrl.WFT_ReadPower(m_pWft, virTX))
{
PostMessage(
ctrl.hPostMsgDestHandle,
WM_MF_WIFI_READ_POWER_FAIL,
0,
0
);
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" WiFi tester reads TX power fail "
);
return false;
}
virTX = virTX - d_CL;
log->Add(DateToStr(Date()) + " " + CurrentTimeStr() +
" WiFi tester > read TX power = "+ Double_To_AnsiString(virTX)
);
signed short ss1;
double d1;
unsigned char new_dac;
if (iRealRecursiveTimes != m_iWiFiTxPRecursive_Times-1) //iteration
{
if ( virTX > (d_WANTED_P + d_Delta) ||
virTX < (d_WANTED_P - d_Delta)
)
{
d1 = i_C * ( d_WANTED_P - virTX );
ss1 = (signed short) (d1>0) ? floor(d1+1.0): ceil(d1-1.0);
new_dac = m_pCal->s_cal_obj.pc_WIFI_APC_Obj->Get_TxPowerDac(e_802_11_idx, mod, nvram_ch_idx)+ ss1;
if(new_dac > WIFI_MAX_APC_VALUE)
{
m_pCal->s_cal_obj.pc_WIFI_APC_Obj->Set_TxPowerDac(e_802_11_idx, mod, nvram_ch_idx, WIFI_MAX_APC_VALUE);
}
else
{
m_pCal->s_cal_obj.pc_WIFI_APC_Obj->Set_TxPowerDac(e_802_11_idx, mod, nvram_ch_idx, new_dac);
}
log->Add(DateToStr(Date()) + " " + CurrentTimeStr() +
" delta s = "+
AnsiString(ss1)
);
}
else
{
// log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
// " delta s = 0 "
// );
break; // for iRealRecursiveTimes
}
} // if no iteration
else if( iRealRecursiveTimes == m_iWiFiTxPRecursive_Times-1 )
{
if ( virTX > d_max_p || virTX < d_min_p )
{
CalErrorHandler( WM_MF_WIFI_TX_POWER_CHECK_FAIL );
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" WiFi test < read TX power = "+ Double_To_AnsiString( virTX ) +
" ( Out of Range ), min TX power = " + Double_To_AnsiString( d_min_p ) + ", max TX power = " + Double_To_AnsiString( d_max_p )
);
return false;
}
else
{
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" Agilent 8960> read TX power = "+ Double_To_AnsiString( virTX ) +
" ( Pass ), min TX power = " + Double_To_AnsiString( d_min_p ) + ", max TX power = " + Double_To_AnsiString( d_max_p )
);
}
}
if ( this->Terminated )
{
this->OnTerminate = neByUser;
return false;
}
} // for (iRealRecursiveTimes)
sprintf(tempbuf, "%2.1f", virTX);
m_pCal->as_ResultBuf = m_pCal->as_ResultBuf + tempbuf + ", ";
// get ALC value
if (m_pCal->b_WiFiAlcSupport)
{
MetaResult = META_WiFi_QueryTxStatus_Ex_r(m_pCal->i_MainMETAHandle, 5000, &pkt_tx_ex_status);
if (META_SUCCESS != MetaResult)
{
CalErrorHandler(WM_MF_WIFI_CPT_FAIL);
log->Add( DateToStr(Date()) + " " + CurrentTimeStr() +
" FAIL: Target > Query WiFi ALC fail."
);
return false;
}
if (WIFI_MOD_CCK == mod)
{
m_pCal->s_cal_obj.pc_WIFI_ALC_Obj->Set_AlcPower2400MAlc(mod, nvram_ch_idx, (WiFi_TestRate_E) 0, pkt_tx_ex_status.avgAlc);
}
else
{
for (int rate = 0; rate < WIFI_ALC_2400M_TX_RATE_NUM; rate++)
{
m_pCal->s_cal_obj.pc_WIFI_ALC_Obj->Set_AlcPower2400MAlc(mod, nvram_ch_idx, (WiFi_TestRate_E) rate, pkt_tx_ex_status.avgAlc);
}
}
}
} // for (ch_idx)
// interpolate not calibrated channel
S_WIFI_CH_FREQ_MHZ s_remain_ch_freq_mhz;
int remain_ch_num = GetWiFiRemainChannels(e_802_11_idx, s_cal_ch_freq_mhz, s_remain_ch_freq_mhz);
if (remain_ch_num > 0)
{
log->Add( "\n" +DateToStr(Date()) + " " + CurrentTimeStr() +
" --------------------- Evaluate WiFi TX power DAC value begin --------------------- "
);
for (int i=0; i<remain_ch_num; i++)
{
int first_ch_index;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -