rf_txiq_run.cpp
上传用户:gelin96
上传日期:2017-01-08
资源大小:20993k
文件大小:21k
源码类别:

MTK

开发平台:

C++ Builder

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *   rf_txiq_run.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   RF BB TX IQ runtime source
  48.  *
  49.  * Author:
  50.  * -------
  51.  *  Andy Ueng (mtk00490)
  52.  *
  53.  *============================================================================
  54.  *             HISTORY
  55.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  56.  *------------------------------------------------------------------------------
  57.  * $Revision$
  58.  * $Modtime$
  59.  * $Log$
  60.  * 
  61.  *------------------------------------------------------------------------------
  62.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  63.  *============================================================================
  64.  ****************************************************************************/
  65. #include <IniFiles.hpp>
  66. #pragma hdrstop
  67. #ifndef  _RF_COMMON_H_
  68. #include "rf_common.h"
  69. #endif
  70. #ifndef  _RF_TXIQ_RUN_H_
  71. #include "rf_txiq_run.h"
  72. #endif
  73. #ifndef  _MAN_ACTIVE_H_
  74. #include "man_active.h"
  75. #endif
  76. //===========================================================================
  77. static CRFTXIQRUN* g_txiq_run_ptr;
  78. static bool g_bIsRunning = false;
  79. //===========================================================================
  80. static void REQ_GetBBTxCfg(void)
  81. {
  82.     g_txiq_run_ptr->REQ_GetBBTxCfg();
  83. }
  84. //------------------------------------------------------------------------------
  85. static void REQ_SetBBTxCfg(void)
  86. {
  87.     g_txiq_run_ptr->REQ_SetBBTxCfg();
  88. }
  89. //------------------------------------------------------------------------------
  90. static void __stdcall CNF_BBTXCfg(const unsigned char cnf, const short token, void *usrData)
  91. {
  92.     g_txiq_run_ptr->CNF_BBTXCfg(cnf, token, usrData);
  93. }
  94. //===========================================================================
  95. CRFTXIQRUN::CRFTXIQRUN(void)
  96. {
  97.     g_bIsRunning = false;
  98.     ConfirmCallback = NULL;
  99. }
  100. //---------------------------------------------------------------------------
  101. CRFTXIQRUN::~CRFTXIQRUN()
  102. {
  103.     g_bIsRunning = false;
  104.     ConfirmCallback = NULL;
  105. }
  106. //---------------------------------------------------------------------------
  107. void  CRFTXIQRUN::REQ_Stop(void)
  108. {
  109.     if (!g_bIsRunning)
  110.     {
  111.         return;
  112.     }
  113.     META_Cancel_r(m_META_HANDLE_Obj.Get_MainHandle(), m_sRFID_TXIQRUN);
  114.     META_CancelAllBlockingCall_r(m_META_HANDLE_Obj.Get_MainHandle());
  115.     Confirm(METAAPP_STOP);
  116.     g_bIsRunning = false;
  117. }
  118. //---------------------------------------------------------------------------
  119. void CRFTXIQRUN::Confirm(E_METAAPP_RESULT_T confirm_state)
  120. {
  121.     if (!g_bIsRunning)
  122.     {
  123.         return;
  124.     }
  125.     g_bIsRunning = false;
  126.     if (NULL == ConfirmCallback)
  127.     {
  128.         return;
  129.     }
  130.     if (confirm_state != METAAPP_SUCCESS)
  131.     {
  132.         META_Cancel_r(m_META_HANDLE_Obj.Get_MainHandle(), m_sRFID_TXIQRUN);
  133.         META_CancelAllBlockingCall_r(m_META_HANDLE_Obj.Get_MainHandle());
  134.     }
  135.     m_eConfirmState = confirm_state;
  136.     ActiveMan->SetActiveFunction( ConfirmCallback );
  137. }
  138. //===========================================================================
  139. void CRFTXIQRUN::Compose_BBTXCfg(void)
  140. {
  141.     if (m_eBbTxCfgVer >= BBTXCFG_VER4)
  142.     {
  143.         // offsetI
  144.         if (m_sBbTxCfg.TxOffsetI > MAX_OFFSET_IQ_OLD)
  145.         {
  146.             m_sBbTxCfg.TxOffsetI = m_sBbTxCfg.TxOffsetI - (MAX_OFFSET_IQ_OLD + 1);
  147.             m_sBbTxCfg.TxCoarseI = 1;
  148.         }
  149.         else if (m_sBbTxCfg.TxOffsetI < MIN_OFFSET_IQ_OLD)
  150.         {
  151.             m_sBbTxCfg.TxOffsetI = m_sBbTxCfg.TxOffsetI + (MAX_OFFSET_IQ_OLD + 1);
  152.             m_sBbTxCfg.TxCoarseI = -1;
  153.         }
  154.         else
  155.         {
  156.             m_sBbTxCfg.TxCoarseI = 0;
  157.         }
  158.         // offsetQ
  159.         if (m_sBbTxCfg.TxOffsetQ > MAX_OFFSET_IQ_OLD)
  160.         {
  161.             m_sBbTxCfg.TxOffsetQ = m_sBbTxCfg.TxOffsetQ - (MAX_OFFSET_IQ_OLD + 1);
  162.             m_sBbTxCfg.TxCoarseQ = 1;
  163.         }
  164.         else if (m_sBbTxCfg.TxOffsetQ < MIN_OFFSET_IQ_OLD)
  165.         {
  166.             m_sBbTxCfg.TxOffsetQ = m_sBbTxCfg.TxOffsetQ + (MAX_OFFSET_IQ_OLD + 1);
  167.             m_sBbTxCfg.TxCoarseQ = -1;
  168.         }
  169.         else 
  170.         {
  171.             m_sBbTxCfg.TxCoarseQ = 0;
  172.         }
  173.     }
  174.     else
  175.     {
  176.         m_sBbTxCfg.TxCoarseI = 0;
  177.         m_sBbTxCfg.TxCoarseQ = 0;
  178.     }
  179. }
  180. //---------------------------------------------------------------------------
  181. void CRFTXIQRUN::DeCompose_BBTXCfg(void)
  182. {
  183.     if (m_eBbTxCfgVer >= BBTXCFG_VER4)
  184.     {
  185.         // TxOffsetI
  186.         if (1 == m_sBbTxCfg.TxCoarseI)
  187.         {
  188.             m_sBbTxCfg.TxOffsetI += (MAX_OFFSET_IQ_OLD + 1);
  189.         }
  190.         else if (-1 == m_sBbTxCfg.TxCoarseI)
  191.         {
  192.             m_sBbTxCfg.TxOffsetI -= (MAX_OFFSET_IQ_OLD + 1);
  193.         }
  194.         // TxOffsetQ
  195.         if (1 == m_sBbTxCfg.TxCoarseQ)
  196.         {
  197.             m_sBbTxCfg.TxOffsetQ += (MAX_OFFSET_IQ_OLD + 1);
  198.         }
  199.         else if (-1 == m_sBbTxCfg.TxCoarseQ)
  200.         {
  201.             m_sBbTxCfg.TxOffsetQ -= (MAX_OFFSET_IQ_OLD + 1);
  202.         }
  203.     }
  204. }
  205. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  206. void  CRFTXIQRUN::REQ_GetBBTxCfg_Start(E_BBTXCFG_VER_T bbtxcfg_ver)
  207. {
  208.     g_txiq_run_ptr = this;
  209.     g_bIsRunning = true;
  210.     m_eBbTxCfgVer = bbtxcfg_ver;
  211.     ActiveMan->SetActiveFunction(::REQ_GetBBTxCfg);
  212. }
  213. //---------------------------------------------------------------------------
  214. void CRFTXIQRUN::REQ_GetBBTxCfg(void)
  215. {
  216.     if (!g_bIsRunning)
  217.     {
  218.         return;
  219.     }
  220.     META_RESULT MetaResult;
  221.     switch (m_eBbTxCfgVer)
  222.     {
  223.         case BBTXCFG_VER2:
  224.         {
  225.             RfBBTXCfg2 RFCnf_BBTXCFG2;
  226.             MetaResult = META_Rf_GetBBTxCfg2_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &RFCnf_BBTXCFG2);
  227.             m_sBbTxCfg.TxTrimI   = RFCnf_BBTXCFG2.TxTrimI;
  228.     m_sBbTxCfg.TxTrimQ   = RFCnf_BBTXCFG2.TxTrimQ;
  229.             m_sBbTxCfg.TxOffsetI = RFCnf_BBTXCFG2.TxOffsetI;
  230.     m_sBbTxCfg.TxOffsetQ = RFCnf_BBTXCFG2.TxOffsetQ;
  231.          m_sBbTxCfg.TxCalbias = RFCnf_BBTXCFG2.TxCalbias;
  232.     m_sBbTxCfg.TxIQSwap  = RFCnf_BBTXCFG2.TxIQSwap;
  233.             m_sBbTxCfg.TxCMV     = RFCnf_BBTXCFG2.TxCMV;
  234.         m_sBbTxCfg.TxGain    = RFCnf_BBTXCFG2.TxGain;
  235.     m_sBbTxCfg.TxCalrcsel = RFCnf_BBTXCFG2.TxCalrcsel;
  236.         }
  237.         break;
  238.         case BBTXCFG_VER3:
  239.         {
  240.             RfBBTXCfg3 RFCnf_BBTXCFG3;
  241.             MetaResult = META_Rf_GetBBTxCfg3_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &RFCnf_BBTXCFG3);
  242.             m_sBbTxCfg.TxTrimI    = RFCnf_BBTXCFG3.TxTrimI;
  243.     m_sBbTxCfg.TxTrimQ    = RFCnf_BBTXCFG3.TxTrimQ;
  244.     m_sBbTxCfg.TxOffsetI  = RFCnf_BBTXCFG3.TxOffsetI;
  245.     m_sBbTxCfg.TxOffsetQ  = RFCnf_BBTXCFG3.TxOffsetQ;
  246.          m_sBbTxCfg.TxCalbias  = RFCnf_BBTXCFG3.TxCalbias;
  247.     m_sBbTxCfg.TxIQSwap   = RFCnf_BBTXCFG3.TxIQSwap;
  248.          m_sBbTxCfg.TxCMV      = RFCnf_BBTXCFG3.TxCMV;
  249.         m_sBbTxCfg.TxGain     = RFCnf_BBTXCFG3.TxGain;
  250.     m_sBbTxCfg.TxCalrcsel = RFCnf_BBTXCFG3.TxCalrcsel;
  251.             m_sBbTxCfg.TxPhasesel = RFCnf_BBTXCFG3.TxPhasesel;
  252.         }
  253.         break;
  254.         case BBTXCFG_VER4:
  255.         {
  256.             MetaResult = META_Rf_GetBBTxCfg4_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sBbTxCfg);
  257.         }
  258.         break;
  259.         case BBTXCFG_VER5:
  260.         {
  261.             MetaResult = META_Rf_GetBBTxCfg5_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sBbTxCfg);
  262.         }
  263.         break;
  264.     }
  265.     if (MetaResult != META_SUCCESS)
  266.     {
  267.         Confirm(METAAPP_FAIL);
  268.         return;
  269.     }
  270.     DeCompose_BBTXCfg();
  271.     Confirm(METAAPP_SUCCESS);
  272. }
  273. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  274. void CRFTXIQRUN::REQ_SetBBTxCfg_Start(E_BBTXCFG_VER_T bbtxcfg_ver, RfBBTXCfg4 bbtx_cfg)
  275. {
  276.     g_txiq_run_ptr = this;
  277.     g_bIsRunning = true;
  278.     m_eBbTxCfgVer = bbtxcfg_ver;
  279.     m_sBbTxCfg = bbtx_cfg;
  280.     ActiveMan->SetActiveFunction(::REQ_SetBBTxCfg);
  281. }
  282. //---------------------------------------------------------------------------
  283. void CRFTXIQRUN::REQ_SetBBTxCfg(void)
  284. {
  285.     if (!g_bIsRunning)
  286.     {
  287.         return;
  288.     }
  289.     META_RESULT MetaResult;
  290.     Compose_BBTXCfg();
  291.     switch (m_eBbTxCfgVer)
  292.     {
  293.         case BBTXCFG_VER1:
  294.         {
  295.             short RFID_BBTXCFG;
  296.             RfSetBBTXCfg_Req RFReq_BBTXCFG;
  297.             RFReq_BBTXCFG.TxTrimI   = m_sBbTxCfg.TxTrimI;
  298.     RFReq_BBTXCFG.TxTrimQ   = m_sBbTxCfg.TxTrimQ;
  299.     RFReq_BBTXCFG.TxOffsetI = m_sBbTxCfg.TxOffsetI;
  300.     RFReq_BBTXCFG.TxOffsetQ = m_sBbTxCfg.TxOffsetQ;
  301.             MetaResult = META_Rf_SetBBTXCfg_r(m_META_HANDLE_Obj.Get_MainHandle(), &RFReq_BBTXCFG, ::CNF_BBTXCfg, &RFID_BBTXCFG, NULL);
  302.         }
  303.         break;
  304.         case BBTXCFG_VER2:
  305.         {
  306.             RfBBTXCfg2 RFReq_BBTXCFG2;
  307.             RfBBTXCfg2 RFCnf_BBTXCFG2;
  308.             RFReq_BBTXCFG2.TxTrimI    = m_sBbTxCfg.TxTrimI;
  309.     RFReq_BBTXCFG2.TxTrimQ    = m_sBbTxCfg.TxTrimQ;
  310.     RFReq_BBTXCFG2.TxOffsetI  = m_sBbTxCfg.TxOffsetI;
  311.     RFReq_BBTXCFG2.TxOffsetQ  = m_sBbTxCfg.TxOffsetQ;
  312.          RFReq_BBTXCFG2.TxCalbias  = m_sBbTxCfg.TxCalbias;
  313.     RFReq_BBTXCFG2.TxIQSwap   = m_sBbTxCfg.TxIQSwap;
  314.          RFReq_BBTXCFG2.TxCMV      = m_sBbTxCfg.TxCMV;
  315.         RFReq_BBTXCFG2.TxGain     = m_sBbTxCfg.TxGain;
  316.     RFReq_BBTXCFG2.TxCalrcsel = m_sBbTxCfg.TxCalrcsel;
  317.             MetaResult = META_Rf_SetBBTxCfg2_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &RFReq_BBTXCFG2, &RFCnf_BBTXCFG2);
  318.         }
  319.         break;
  320.         case BBTXCFG_VER3:
  321.         {
  322.             RfBBTXCfg3 sBBTXCFG3;
  323.             RfBBTXCfg3 sBBTXCFGCNF;
  324.             sBBTXCFG3.TxTrimI    = m_sBbTxCfg.TxTrimI;
  325.     sBBTXCFG3.TxTrimQ    = m_sBbTxCfg.TxTrimQ;
  326.     sBBTXCFG3.TxOffsetI  = m_sBbTxCfg.TxOffsetI;
  327.     sBBTXCFG3.TxOffsetQ  = m_sBbTxCfg.TxOffsetQ;
  328.          sBBTXCFG3.TxCalbias  = m_sBbTxCfg.TxCalbias;
  329.     sBBTXCFG3.TxIQSwap   = m_sBbTxCfg.TxIQSwap;
  330.          sBBTXCFG3.TxCMV      = m_sBbTxCfg.TxCMV;
  331.         sBBTXCFG3.TxGain     = m_sBbTxCfg.TxGain;
  332.     sBBTXCFG3.TxCalrcsel = m_sBbTxCfg.TxCalrcsel;
  333.             sBBTXCFG3.TxPhasesel = m_sBbTxCfg.TxPhasesel;
  334.             MetaResult = META_Rf_SetBBTxCfg3_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &sBBTXCFG3, &sBBTXCFGCNF);
  335.         }
  336.         break;
  337.         case BBTXCFG_VER4:
  338.         {
  339.             RfBBTXCfg4 RFCnf_BBTXCFG4;
  340.             MetaResult = META_Rf_SetBBTxCfg4_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sBbTxCfg, &RFCnf_BBTXCFG4);
  341.         }
  342.         break;
  343.         case BBTXCFG_VER5:
  344.         {
  345.             RfBBTXCfg4 RFCnf_BBTXCFG4;
  346.             MetaResult = META_Rf_SetBBTxCfg5_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sBbTxCfg, &RFCnf_BBTXCFG4);
  347.         }
  348.         break;
  349.     }
  350.     if (MetaResult != META_SUCCESS)
  351.     {
  352.         Confirm(METAAPP_FAIL);
  353.         return;
  354.     }
  355.     if (m_eBbTxCfgVer != BBTXCFG_VER1)
  356.     {
  357.         Confirm(METAAPP_SUCCESS);
  358.     }
  359. }
  360. //-------------------------------------
  361. void __stdcall CRFTXIQRUN::CNF_BBTXCfg(const unsigned char cnf, const short token, void *usrData)
  362. {
  363.     if (!g_bIsRunning)
  364.     {
  365.         return;
  366.     }
  367.     if (false == cnf)
  368.     {
  369.         Confirm(METAAPP_FAIL);
  370.         return;
  371.     }
  372.     Confirm(METAAPP_SUCCESS);
  373. }
  374. //===========================================================================
  375. bool  CRFTXIQRUN::REQ_Read_From_File(char *filename, E_BBTXCFG_VER_T bbtxcfg_ver)
  376. {
  377.     TIniFile   *ini_file;
  378.     AnsiString  as_Str;
  379.     ini_file = new TIniFile(filename);
  380.     if (NULL == ini_file)
  381.     {
  382.          return false;
  383.     }
  384.     as_Str = ini_file->ReadString("BB TX Run Time Parameters",
  385.                                   "Trim I",
  386.                                   0
  387.                                   );
  388.     m_sBbTxCfg.TxTrimI = as_Str.ToInt();
  389.     as_Str = ini_file->ReadString("BB TX Run Time Parameters",
  390.                                   "Trim Q",
  391.                                   0
  392.                                   );
  393.     m_sBbTxCfg.TxTrimQ = as_Str.ToInt();
  394.     as_Str = ini_file->ReadString("BB TX Run Time Parameters",
  395.                                   "Offset I",
  396.                                   0
  397.                                   );
  398.     m_sBbTxCfg.TxOffsetI = as_Str.ToInt();
  399.     as_Str = ini_file->ReadString("BB TX Run Time Parameters",
  400.                                   "Offset Q",
  401.                                   0
  402.                                   );
  403.     m_sBbTxCfg.TxOffsetQ = as_Str.ToInt();
  404.     as_Str = ini_file->ReadString("BB TX Run Time Parameters",
  405.                                   "BB TX calbias",
  406.                                   0
  407.                                   );
  408.     m_sBbTxCfg.TxCalbias = as_Str.ToInt();
  409.     as_Str = ini_file->ReadString("BB TX Run Time Parameters",
  410.                                   "BB TX IQ swap",
  411.                                   0
  412.                                   );
  413.     m_sBbTxCfg.TxIQSwap = as_Str.ToInt();
  414.     as_Str = ini_file->ReadString("BB TX Run Time Parameters",
  415.                                   "BB TX common mode voltage",
  416.                                   0
  417.                                   );
  418.     m_sBbTxCfg.TxCMV = as_Str.ToInt();
  419.     as_Str = ini_file->ReadString("BB TX Run Time Parameters",
  420.                                   "BB TX gain",
  421.                                   0
  422.                                   );
  423.     m_sBbTxCfg.TxGain = as_Str.ToInt();
  424.     as_Str = ini_file->ReadString("BB TX Run Time Parameters",
  425.                                   "BB TX calrcsel",
  426.                                   0
  427.                                   );
  428.     m_sBbTxCfg.TxCalrcsel = as_Str.ToInt();
  429.     if (bbtxcfg_ver >= BBTXCFG_VER3)
  430.     {
  431.         as_Str = ini_file->ReadString( "BB TX Run Time Parameters",
  432.                                               "BB TX phasesel",
  433.                                               0
  434.                                             );
  435.         m_sBbTxCfg.TxPhasesel = as_Str.ToInt();
  436.     }
  437.     delete  ini_file;
  438.     return  true;
  439. }
  440. //-------------------------------------------------------------------------
  441. bool CRFTXIQRUN::REQ_Write_To_File(char *filename, E_BBTXCFG_VER_T bbtxcfg_ver)
  442. {
  443.     TIniFile *ini_file;
  444.     ini_file = new TIniFile(filename);
  445.     if (NULL == ini_file)
  446.     {
  447.         return false;
  448.     }
  449.     ini_file->WriteString("BB TX Run Time Parameters",
  450.                           "Trim I",
  451.                           IntToStr((int)m_sBbTxCfg.TxTrimI)
  452.                         );
  453.     ini_file->WriteString("BB TX Run Time Parameters",
  454.                           "Trim Q",
  455.                           IntToStr((int)m_sBbTxCfg.TxTrimQ)
  456.                         );
  457.     ini_file->WriteString("BB TX Run Time Parameters",
  458.                           "Offset I",
  459.                           IntToStr((int)m_sBbTxCfg.TxOffsetI)
  460.                          );
  461.     ini_file->WriteString("BB TX Run Time Parameters",
  462.                           "Offset Q",
  463.                           IntToStr((int)m_sBbTxCfg.TxOffsetQ)
  464.                         );
  465.     ini_file->WriteString("BB TX Run Time Parameters",
  466.                           "BB TX calbias",
  467.                           IntToStr((int)m_sBbTxCfg.TxCalbias)
  468.                         );
  469.     ini_file->WriteString("BB TX Run Time Parameters",
  470.                           "BB TX IQ swap",
  471.                           IntToStr((int)m_sBbTxCfg.TxIQSwap)
  472.                         );
  473.     ini_file->WriteString("BB TX Run Time Parameters",
  474.                           "BB TX common mode voltage",
  475.                           IntToStr((int)m_sBbTxCfg.TxCMV)
  476.                         );
  477.     ini_file->WriteString("BB TX Run Time Parameters",
  478.                           "BB TX gain",
  479.                           IntToStr((int)m_sBbTxCfg.TxGain)
  480.                         );
  481.     ini_file->WriteString("BB TX Run Time Parameters",
  482.                           "BB TX calrcsel",
  483.                           IntToStr((int) m_sBbTxCfg.TxCalrcsel)
  484.                         );
  485.     if (bbtxcfg_ver >= BBTXCFG_VER3)
  486.     {
  487.         ini_file->WriteString("BB TX Run Time Parameters",
  488.                               "BB TX phasesel",
  489.                               IntToStr((int) m_sBbTxCfg.TxPhasesel)
  490.                              );
  491.     }
  492.     delete  ini_file;
  493.     return true;
  494. }
  495. //===========================================================================
  496. ////////////////////////////////  Query       ///////////////////////////////
  497. //===========================================================================
  498. E_BBTXCFG_VER_T CRFTXIQRUN::Query_BBTxCfgVer_Start(BBCHIP_TYPE bb_chip)
  499. {
  500.     META_RESULT MetaResult;
  501.     MetaResult = META_QueryIfFunctionSupportedByTarget_r(m_META_HANDLE_Obj.Get_MainHandle(), 300, "META_Rf_SetBBTxCfg3");
  502.     if (META_SUCCESS == MetaResult)
  503.     {
  504.         return BBTXCFG_VER3;
  505.     }
  506.     MetaResult = META_QueryIfFunctionSupportedByTarget_r(m_META_HANDLE_Obj.Get_MainHandle(), 300, "META_Rf_SetBBTxCfg2");
  507.     if (META_SUCCESS == MetaResult)
  508.     {
  509.         return BBTXCFG_VER2;
  510.     }
  511.     
  512.     if ((bb_chip != MT6205)  &&
  513. (bb_chip != MT6205B) &&
  514. (bb_chip != MT6218)  &&
  515. (bb_chip != MT6218B) &&
  516. (bb_chip != MT6219)  &&
  517. (bb_chip != MT6217)  &&
  518. (bb_chip != MT6228)  &&
  519. (bb_chip != MT6227)  &&
  520. (bb_chip != MT6229)  &&
  521. (bb_chip != MT6226)  &&
  522. (bb_chip != MT6226M) &&
  523. (bb_chip != MT6230)  &&
  524. (bb_chip != MT6225)  &&
  525. (bb_chip != MT6268T) &&
  526. (bb_chip != MT6223)  &&
  527. (bb_chip != MT6227D) &&
  528. (bb_chip != MT6226D) &&
  529. (bb_chip != MT6223P) 
  530.        )
  531.     {
  532.         MetaResult = META_QueryIfFunctionSupportedByTarget_r(m_META_HANDLE_Obj.Get_MainHandle(), 300, "META_Rf_SetBBTxCfg5");
  533.         if (META_SUCCESS == MetaResult)
  534.         {
  535.             return BBTXCFG_VER5;
  536.         }
  537.     }
  538.     MetaResult = META_QueryIfFunctionSupportedByTarget_r(m_META_HANDLE_Obj.Get_MainHandle(), 300, "META_Rf_SetBBTxCfg4");
  539.     if (META_SUCCESS == MetaResult)
  540.     {
  541.         return BBTXCFG_VER4;
  542.     }
  543.     return BBTXCFG_VER1;
  544. }
  545. //===========================================================================
  546. ////////////////////////////  export information  ///////////////////////////
  547. //===========================================================================
  548. E_METAAPP_RESULT_T CRFTXIQRUN::Get_ConfirmState(void)
  549. {
  550.     return m_eConfirmState;
  551. }
  552. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  553. E_BBTXCFG_VER_T CRFTXIQRUN::Get_BbTxCfgVer(void)
  554. {
  555.     return m_eBbTxCfgVer;
  556. }
  557. //---------------------------------------------------------------------------
  558. void CRFTXIQRUN::Set_BbTxCfgVer(E_BBTXCFG_VER_T bb_tx_cfg_ver)
  559. {
  560.     m_eBbTxCfgVer = bb_tx_cfg_ver;
  561. }
  562. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  563. RfBBTXCfg4* CRFTXIQRUN::Get_BbTxCfg(void)
  564. {
  565.     return &m_sBbTxCfg;
  566. }
  567. //---------------------------------------------------------------------------
  568. void CRFTXIQRUN::Set_BbTxCfg(RfBBTXCfg4 bb_tx_cfg)
  569. {
  570.     m_sBbTxCfg = bb_tx_cfg;
  571. }