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

📄 t_bt_cap_id.cpp

📁 MTK 手机软件开发 META 源代码,开发环境: C++ Builder
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*****************************************************************************
*  Copyright Statement:
*  --------------------
*  This software is protected by Copyright and the information contained
*  herein is confidential. The software may not be copied and the information
*  contained herein may not be used or disclosed except with the written
*  permission of MediaTek Inc. (C) 2005
*
*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
*  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*****************************************************************************
 *
 * Filename:
 * ---------
 *   T_BT_CAP_ID.cpp
 *
 * Project:
 * --------
 *   Maui META APP
 *
 * Description:
 * ------------
 *  BT CAP ID calibration source
 *
 * Author:
 * -------
 *  Andy Ueng (mtk00490)
 *
 *============================================================================
 *             HISTORY
 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *------------------------------------------------------------------------------
 * $Revision$
 * $Modtime$
 * $Log$
 *
 *------------------------------------------------------------------------------
 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
 *============================================================================
****************************************************************************/
#include <assert.h>
#include <math.h>

#pragma hdrstop

#ifndef _T_META_FACTORY_CALIBRATION_H_
#include "T_META_factory_calibration.H"
#endif

#ifndef _CAL_COMMON_H_
#include "cal_common.h"
#endif

#ifndef _META_FACTORY_H_
#include "meta_factory.h"
#endif

// BT
#ifndef  _BT_POWER_H_
#include "bt_power.h"
#endif

#ifndef  _BT_RF_H_
#include "bt_rf.h"
#endif

#ifndef  _BT_CON_H_
#include "bt_con.h"
#endif

#ifndef  _BT_INFO_MT6601_H_
#include "bt_info_mt6601.h"
#endif

// misc
#ifndef  _TIME_UTILS_H_
#include "time_utils.h"
#endif

#ifndef  _MATH_UTILS_H_
#include "math_utils.h"
#endif

#ifndef  _FT_UTILS_H_
#include "ft_utils.h"
#endif

// callback
#ifndef _MF_BT_CB_H_
#include "mf_bt_cb.h"
#endif

#define TARGET_POLL_COUNT 400000

extern bool  is_suspend_cal;

//******************************************************************************
/////////////////////////////  BT CAP ID calibration  //////////////////////////
//******************************************************************************
bool __fastcall T_META_factory_calibration::BTCrystalCapIDCal_MT6601(void)
{

    char tempbuf[256];
    S_BT_CT sBTCT;
    S_BTT_INQUIRY s_inquiry;
    E_BTT_STATE_T btt_state;

    S_BT_SCAN scan;


    PostMessage(
                     ctrl.hPostMsgDestHandle,
                     WM_MF_BT_CRYSTAL_CAPID_BEGIN,
                     0,
                     0
                    );

    log->Add("\n" +DateToStr(Date()) +  " " + CurrentTimeStr() +
             " ================= BT Crystal CAP ID calibration begin ================ "
           );





    // read BT info from NVRAM

    //m_cBT_INFO_Obj.ConfirmCallback  = ::CNF_MF_BT;
    //m_cBT_INFO_Obj.REQ_Read_From_NVRAM_Start();

    //RestartTimerCal(WM_MF_NVRAM_BT_INFO_READ_FAIL);

    //SUSPEND_CAL_THREAD

    //E_METAAPP_RESULT_T state = m_cBT_INFO_Obj.Get_ConfirmState();
    //if (state != METAAPP_SUCCESS)
    //{
    //    CalErrorHandler( WM_MF_NVRAM_BT_INFO_READ_FAIL);
    //    log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
    //              " FAIL : Target > read BT info. from NVRAM fail "
    //            );
    //    return false;
    //}


    RestartTimerCal(WM_MF_BTT_CONFIG_BD_ADDRESS_FAIL);
    if (!m_btt_ctrl.BTT_Config_BD_Address(m_pBtt, m_asBD_Address))
    {
        CalErrorHandler(WM_MF_BTT_CONFIG_BD_ADDRESS_FAIL);
        log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                  " FAIL : BT tester < Config BD address fail "
                );
        return false;
    }


    //m_cBT_POWER_Obj.REQ_Power_On_Start();

    RestartTimerCal(WM_MF_BTT_CONFIG_SLAVE_PARAMETER_FAIL);
    if (!m_btt_ctrl.BTT_Config_Slave_Parameter(m_pBtt, m_usBT_CRYSTAL_CHANNEL))
    {
        CalErrorHandler(WM_MF_BTT_CONFIG_SLAVE_PARAMETER_FAIL);
        log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                     " FAIL : BT tester < Config slave parameter fail "
                    );
        return false;
    }

    // inquiry enable
    if (m_asInquiry_Enable.AnsiCompareIC("yes") == 0)
    {
        sBTCT.hPostMsgDestHandle = NULL;
        sBTCT.log                = NULL;

        // set inquiry scan interval
        //if (!m_cBT_POWER_Obj.REQ_Query_Power_On_Start())
        //{
        //    m_cBT_POWER_Obj.REQ_Power_On_Start();
        //}
        //Sleep(1000);
        
        m_cBT_CT_Obj.ConfirmCallback = ::CNF_MF_BT;
        m_cBT_CT_Obj.REQ_Set_Inquiry_Scan_Interval_Start(sBTCT);

        RestartTimerCal(WM_MF_BT_INQUIRY_ENABLE_FAIL);

        SUSPEND_CAL_THREAD

        E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
        if (state != METAAPP_SUCCESS)
        {
            CalErrorHandler(WM_MF_BT_INQUIRY_ENABLE_FAIL);
            log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                     " FAIL : Target < set BT inquiry interval fail "
                    );
            return false;
        }



        // set scan type
        scan.e_scan_type = SCAN_ENABLE_INQUIRY_ONLY;
        scan.b_interlaced_inquiry_scan = true;
        scan.b_interlaced_page_scan = false;
        m_cBT_CT_Obj.Set_ScanParameter(scan);

        m_cBT_CT_Obj.ConfirmCallback = ::CNF_MF_BT;
        m_cBT_CT_Obj.REQ_Scan_Start(sBTCT);

        RestartTimerCal(WM_MF_BTT_CONFIG_SCAN_FAIL);

        SUSPEND_CAL_THREAD

        state = m_cBT_CT_Obj.Get_ConfirmState();
        if (state != METAAPP_SUCCESS)
        {
            CalErrorHandler(WM_MF_BTT_CONFIG_SCAN_FAIL);
            log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                     " FAIL : Target < BT config inquiry scan parameter fail "
                    );
            return false;
        }

        // trigger BT tester to inquiry
        RestartTimerCal(WM_MF_BTT_CONFIG_INQUIRY_FAIL);

        s_inquiry.i_timeout = 10;
        s_inquiry.i_response_num = 1;
        if (!m_btt_ctrl.BTT_Config_Inquiry(m_pBtt, s_inquiry))
        {
            CalErrorHandler(WM_MF_BTT_CONFIG_INQUIRY_FAIL);
            log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                     " FAIL : BT tester < Config inquiry fail "
                    );
            return false;
        }

        RestartTimerCal(WM_MF_BTT_INQUIRY_FAIL);
        if (!m_btt_ctrl.BTT_Inquiry(m_pBtt))
        {
            CalErrorHandler(WM_MF_BTT_INQUIRY_FAIL);
            log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                     " FAIL : BT tester < Inquiry fail "
                    );
            return false;
        }


        RestartTimerCal(WM_MF_BTT_QUERY_STATE_FAIL);
        do
        {
            CHECK_TERMINATE_BY_USER
            Sleep(100);
            if (!m_btt_ctrl.BTT_Query_State(m_pBtt, btt_state))
            {
                CalErrorHandler(WM_MF_BTT_QUERY_STATE_FAIL);
                log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                         " FAIL : BT tester < query state fail "
                        );
                return false;
            }
        }
        while (BTT_STATUS_INQUIRY == btt_state);
    }

    unsigned char ucCAP_ID[2];
    double d_freq_err[2];
    ucCAP_ID[0] = m_ucBT_CRYSTAL_CAP_ID1;
    ucCAP_ID[1] = m_ucBT_CRYSTAL_CAP_ID2;
    for (int i=0; i<2; i++)
    {
        // set CAP_ID
        m_pCal->s_cal_obj.pc_BT_INFO6601_Obj->Set_BT_CAP_ID(ucCAP_ID[i]);

        // write BT info to NVRAM
        m_pCal->s_cal_obj.pc_BT_INFO6601_Obj->ConfirmCallback  = ::CNF_MF_BT;
        m_pCal->s_cal_obj.pc_BT_INFO6601_Obj->REQ_Write_To_NVRAM_Start();

        RestartTimerCal(WM_MF_NVRAM_BT_INFO_WRITE_FAIL);

        SUSPEND_CAL_THREAD

        E_METAAPP_RESULT_T state = m_pCal->s_cal_obj.pc_BT_INFO6601_Obj->Get_ConfirmState();
        if (state != METAAPP_SUCCESS)
        {
            if (METAAPP_NVRAM_LID_VER_NOT_SUPPORT == state)
            {
                CalErrorHandler(WM_MF_NVRAM_EF_BTRADIO_MT6601_LID_VERNO_FAIL);
                log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                               " FAIL : NVRAM_EF_BTRADIO_MT6601_LID version is not support, please update META to latest version. "
                               );
            }
            else
            {
                CalErrorHandler(WM_MF_NVRAM_BT_INFO_WRITE_FAIL);
                log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                                 " FAIL:  Target < Write BT info. to flash "
                                );
            }
            return false;
        }

        log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                                 " Target < Write BT CAP_ID = " + IntToStr(ucCAP_ID[i]) + " to flash "
                                );
   //     m_cBT_POWER_Obj.REQ_Power_On_Start();
        // enter test mode
        //Sleep(1000);
        S_BT_RF sBtRf;
        sBtRf.hPostMsgDestHandle = NULL;
        sBtRf.log                = NULL;
        m_cBT_RF_Obj.ConfirmCallback  = ::CNF_MF_BT;
        m_cBT_RF_Obj.REQ_Enter_Test_Mode_Start(sBtRf);

        RestartTimerCal(WM_MF_BT_ENTER_TEST_MODE_FAIL);

        SUSPEND_CAL_THREAD

        state = m_cBT_RF_Obj.Get_ConfirmState();
        if (state != METAAPP_SUCCESS)
        {
            CalErrorHandler(WM_MF_BT_ENTER_TEST_MODE_FAIL);
            log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                  " FAIL : Target < Enter BT test mode fail "
                );
            return false;
        }

        // set page scan interval
        m_cBT_CT_Obj.ConfirmCallback = ::CNF_MF_BT;
        m_cBT_CT_Obj.REQ_Set_Page_Scan_Interval_Start(sBTCT);

        RestartTimerCal(WM_MF_BT_INQUIRY_ENABLE_FAIL);

        SUSPEND_CAL_THREAD

        state = m_cBT_CT_Obj.Get_ConfirmState();
        if (state != METAAPP_SUCCESS)
        {
            CalErrorHandler(WM_MF_BT_INQUIRY_ENABLE_FAIL);
            log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                     " FAIL : Target < set BT page interval fail "
                    );
            return false;
        }

        // set scan type
        scan.e_scan_type = SCAN_ENABLE_PAGE_ONLY;
        scan.b_interlaced_inquiry_scan = false;
        scan.b_interlaced_page_scan = true;
        m_cBT_CT_Obj.Set_ScanParameter(scan);

        m_cBT_CT_Obj.ConfirmCallback = ::CNF_MF_BT;
        m_cBT_CT_Obj.REQ_Scan_Start(sBTCT);

        RestartTimerCal(WM_MF_BTT_CONFIG_SCAN_FAIL);

        SUSPEND_CAL_THREAD

        state = m_cBT_CT_Obj.Get_ConfirmState();
        if (state != METAAPP_SUCCESS)
        {
            CalErrorHandler(WM_MF_BTT_CONFIG_SCAN_FAIL);
            log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                     " FAIL : Target < BT config page scan parameter fail "
                    );
            return false;
        }

        // trigger BT tester to make connection
        RestartTimerCal(WM_MF_BTT_CONNECT_TEST_FAIL);
        if (!m_btt_ctrl.BTT_Connect_Test(m_pBtt))
        {
            CalErrorHandler(WM_MF_BTT_CONNECT_TEST_FAIL);
            log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                     " FAIL : BT tester < Connect testmode fail "
                    );
            return false;
        }


        RestartTimerCal(WM_MF_BTT_QUERY_STATE_FAIL);

        do
        {
            CHECK_TERMINATE_BY_USER
            Sleep(100);

            if (!m_btt_ctrl.BTT_Query_State(m_pBtt, btt_state))
            {
                CalErrorHandler(WM_MF_BTT_QUERY_STATE_FAIL);
                log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                         " FAIL : BT tester < query state fail "
                        );
                return false;
            }
        }
        while (BTT_STATUS_TEST != btt_state);

        // config TX modulation
        S_BTT_MOD bt_mod;
        bt_mod.i_burst_num = 100;
        bt_mod.i_channel   = m_usBT_CRYSTAL_CHANNEL;
        RestartTimerCal(WM_MF_BTT_CONNECT_TEST_FAIL);
        if (!m_btt_ctrl.BTT_Config_MOD(m_pBtt, bt_mod))
        {
            CalErrorHandler(WM_MF_BTT_CONNECT_TEST_FAIL);
            log->Add(DateToStr(Date()) +  " " + CurrentTimeStr() +
                     " FAIL : BT tester < Connect testmode fail "
                    );
            return false;

⌨️ 快捷键说明

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