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

📄 t_wifi_txpcl.cpp

📁 MTK 手机软件开发 META 源代码,开发环境: C++ Builder
💻 CPP
📖 第 1 页 / 共 4 页
字号:
        }

        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 + -