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

📄 t_wifi_txpcl.cpp

📁 MTK 手机软件开发 META 源代码,开发环境: C++ Builder
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                max_ch_num      = NUM_TX_POWER_2400M_CH;
                d_max_p         = m_dCCK_MAX_P;
                d_min_p         = m_dCCK_MIN_P;
                mod             = WIFI_MOD_CCK;
                if (IQVIEW == m_pWft->device_type)
                {
                    d_CL                          = m_pWft->iqv.d_2_4g_cl;
                    m_pWft->iqv.p_handle->rx.ampl = m_dCCK_WANTED_P + 2;
                    m_pWft->iqv.p_handle->adc.sampling_time = 0.005;
                }
                else
                {
                    d_CL                          = m_pWft->s_age_n4010a.d_2_4g_cl;
                    d_n4010a_power_range          = m_dCCK_WANTED_P + 5;
                }
                wifi_cpt.tx_rate = m_eCCK_CHECK_RATE;
            }
            break;

            case WIFI_802_11G_IDX:
            {
                if (!IsWiFiSupported(m_asWiFi_Support, e_802_11_idx))
                {
                    e_802_11_idx++;
                    continue;
                }
                as_check_channel = m_as802_11G_CHECK_CHANNEL;
                max_ch_num       = NUM_TX_POWER_2400M_CH;
                d_max_p          = m_dOFDM_MAX_P;
                d_min_p          = m_dOFDM_MIN_P;
                mod              = WIFI_MOD_OFDM;
                if (IQVIEW == m_pWft->device_type)
                {
                    d_CL                          = m_pWft->iqv.d_2_4g_cl;
                    m_pWft->iqv.p_handle->rx.ampl = m_dOFDM_WANTED_P + 10;
                    m_pWft->iqv.p_handle->adc.sampling_time = 0.001;
                }
                else
                {
                    d_CL                          = m_pWft->s_age_n4010a.d_2_4g_cl;
                    d_n4010a_power_range          = m_dOFDM_WANTED_P + 5;
                }
                wifi_cpt.tx_rate = m_eOFDM_CHECK_RATE;
            }
            break;

            default:
                assert(false);
            break;
        } // switch

        log->Add( "\n" + DateToStr(Date()) +  " " + CurrentTimeStr() +
                         " ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
                       );
        if( ! m_wft_ctrl.WFT_SetTriggerStyle( m_pWft )  )
        {
               PostMessage(
                         ctrl.hPostMsgDestHandle,
                         WM_MF_WIFI_SET_TRIGGER_STYLE_FAIL,
                         0,
                         0
                       );
               log->Add( DateToStr(Date()) +  " " + CurrentTimeStr() +
                      " WiFi tester sets trigger style fail "
                    );
               return false;
        }

        if (!m_wft_ctrl.WFT_SetPowerRange(m_pWft, d_n4010a_power_range))
        {
            PostMessage(ctrl.hPostMsgDestHandle,
                        WM_MF_WIFI_SET_POWER_RANGE_FAIL,
                        0,
                        0
                        );
            log->Add( DateToStr(Date()) +  " " + CurrentTimeStr() +
                              " WiFi tester < power range = " + Double_To_AnsiString(d_n4010a_power_range) + " dBm fail"
                            );

            return false;
        }

        s_check_ch_freq_mhz.ch_num = String_To_Array_UnsignedInteger(as_check_channel.c_str(), s_check_ch_freq_mhz.ch_freq_MHz, max_ch_num);
        for (int check_ch_idx=0; check_ch_idx<s_check_ch_freq_mhz.ch_num; check_ch_idx++)
        {
            unsigned int freq_khz = s_check_ch_freq_mhz.ch_freq_MHz[check_ch_idx] * 1000;
           // m_pWft->iqv.p_handle->rx.freq = 1000*freq_khz;

            if (!m_wft_ctrl.WFT_SetCentralFreq(m_pWft, (double) s_check_ch_freq_mhz.ch_freq_MHz[check_ch_idx]))
            {
                    PostMessage(
                                 ctrl.hPostMsgDestHandle,
                                 WM_MF_WIFI_SET_CENTRAL_FREQ_FAIL,
                                 0,
                                 0
                               );
                    log->Add( DateToStr(Date()) +  " " + CurrentTimeStr() +
                              " WiFi tester < RX channel frequency = " + Double_To_AnsiString(s_check_ch_freq_mhz.ch_freq_MHz[check_ch_idx]) + " MHz fail"
                            );

                    return false;

            }

            log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                              " WiFi tester < RX channel frequency = " + Double_To_AnsiString(s_check_ch_freq_mhz.ch_freq_MHz[check_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;
            nvram_ch_idx = GetWiFiNVRAMChannelIndex(e_802_11_idx, s_check_ch_freq_mhz.ch_freq_MHz[check_ch_idx]);
            wifi_cpt.tx_pwr_dac   = m_pCal->s_cal_obj.pc_WIFI_APC_Obj->Get_TxPowerDac(e_802_11_idx, mod, nvram_ch_idx);
            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(wifi_cpt.tx_pwr_dac)
                                );

            // stop continuous packet TX
            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);

            // start continuos packet TX
            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);
            }
            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;

            if (virTX > d_max_p || virTX < d_min_p)
            {
                log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                          " WiFi tester > 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 )
                        );
                out_of_range_flag = true;
            }
            else
            {
                log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                          " WiFi tester > 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 )
                          );
            }
        } // for(ch_idx)
        e_802_11_idx++;
    } // while

    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;
    }

    if (out_of_range_flag)
    {
        CalErrorHandler(WM_MF_RF_TX_LEVEL_CHECK_FAIL );
        log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                    " FAIL : WiFi TX power check " + "\n"
              );

        return false;
   }

    if (m_pCal->b_WiFiAlcSupport)
    {
        WriteWiFiALCCalResultToFile(as_ID+".cal",Application->ExeName, m_pCal->b_CalResultPath);
    }

   frmFatcory->DisableAllCalTimer();
   PostMessage(ctrl.hPostMsgDestHandle,
               WM_MF_WIFI_TX_POWER_CALIBRATION_DONE,
               0,
               0
              );

    log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
             " ====================== WiFi TX power check end ===================== "
           );

    return true;


}





⌨️ 快捷键说明

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