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

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.  *   form_RFCTBBTX.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  RF continuous TX BB TX form 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. //---------------------------------------------------------------------------
  66. #include <vcl.h>
  67. #pragma hdrstop
  68. // form
  69. #include "form_RFTool.h"
  70. #include "form_main.h"
  71. #ifndef  _FORM_RFCTBBTXRUN_H_
  72. #include "form_RFCTBBTXRun.h"
  73. #endif
  74. #include "rf_common.h"
  75. #include "misc.h"
  76. #ifndef  _RF_CT_RUN_THRD_H_
  77. #include "rf_ct_run_thrd.h"
  78. #endif
  79. #ifndef _META_LAB_MSG_H_
  80. #include "meta_lab_msg.h"
  81. #endif
  82. //---------------------------------------------------------------------------
  83. #pragma package(smart_init)
  84. #pragma resource "*.dfm"
  85. TfrmCTBBTXRunTimeSetting *frmCTBBTXRunTimeSetting;
  86. //static int Default_ARFCN[4] = { 0, 512, 512, 128 };
  87. // BB TX parameters
  88. //T_RFCTRUN*      pt_rf_ctrun;
  89. //==============================================================================
  90. static void  ConfirmCallback_CT( void )
  91. {   frmCTBBTXRunTimeSetting->ConfirmCallback_CT();
  92. }
  93. //---------------------------------------------------------------------------
  94. static void ConfirmCallback_GetBBTxCfg(void)
  95. {
  96.     frmCTBBTXRunTimeSetting->ConfirmCallback_GetBBTxCfg();
  97. }
  98. //--------------------------------------------------------------------------
  99. static void CNF_SetBBTxCfg(void)
  100. {
  101.     //frmCTBBTXRunTimeSetting->CNF_SetBBTxCfg();
  102. }
  103. //============================================================================
  104. __fastcall TfrmCTBBTXRunTimeSetting::TfrmCTBBTXRunTimeSetting(TComponent* Owner)
  105.         : TForm(Owner)
  106. {
  107. }
  108. //---------------------------------------------------------------------------
  109. void TfrmCTBBTXRunTimeSetting::Init( void )
  110. {
  111.     m_bInit = true;
  112. }
  113. //----------------------------------------------------------------------------
  114. void __fastcall TfrmCTBBTXRunTimeSetting::FormCreate(TObject *Sender)
  115. {
  116.     WindowProc = SubClassWndProc;
  117.     Init();
  118. }
  119. //---------------------------------------------------------------------------
  120. void __fastcall TfrmCTBBTXRunTimeSetting::FormActivate(TObject *Sender)
  121. {
  122.     if (m_bInit)
  123.     {
  124.         m_bInit = false;
  125.         // BBTXCfg
  126.         BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  127.         m_eBbTxCfgVer = m_pcRF_TXIQRUN_Obj->Query_BBTxCfgVer_Start(bb_chip);
  128.         if (m_eBbTxCfgVer >= BBTXCFG_VER3)
  129.         {
  130.             lblCTBBTXPhasesel->Visible = true;
  131.             lblCTBBTXPhasesel->Visible = true;
  132.         }
  133.         else
  134.         {
  135.             lblCTBBTXPhasesel->Visible = false;
  136.             lblCTBBTXPhasesel->Visible = false;
  137.         }
  138.         // CT support level
  139.         m_eCtSupport = frmRFTool->Get_CtSupport();
  140.         if (CT_SUPPORT_0 == m_eCtSupport)
  141.         {
  142.             lblTXModulation->Visible = false;
  143.             cbTXModulation->Visible = false;
  144.             rbCTPattern->Visible = false;
  145.             edtCTPattern->Visible = false;
  146.             lblPCL->Visible = false;
  147.             edtPCL->Visible = false;
  148.         }
  149.         else if (CT_SUPPORT_1 == m_eCtSupport)
  150.         {
  151.             lblTXModulation->Visible = true;
  152.             cbTXModulation->Visible = true;
  153.             rbCTPattern->Visible = true;
  154.             edtCTPattern->Visible = true;
  155.             lblPCL->Visible = false;
  156.             edtPCL->Visible = false;
  157.         }
  158.         else
  159.         {
  160.             lblTXModulation->Visible = true;
  161.             cbTXModulation->Visible = true;
  162.             rbCTPattern->Visible = true;
  163.             edtCTPattern->Visible = true;
  164.             lblPCL->Visible = true;
  165.             edtPCL->Visible = true;
  166.         }
  167.     }
  168. }
  169. //==============================================================================
  170. void _fastcall TfrmCTBBTXRunTimeSetting::SubClassWndProc( Messages::TMessage &Message)
  171. {
  172.     switch ( Message.Msg )
  173.     {
  174.        // case WM_ML_QUERY_BBTXCFG3SUPPPORT_SUCCESS:
  175.        //      m_bBBTXCfg3Support = true;
  176.        //      lblCTBBTXPhasesel->Visible = true;
  177.        //      edtCTBBTXPhasesel->Visible = true;
  178.        // break;
  179.        // case WM_ML_QUERY_BBTXCFG3SUPPPORT_FAILED:
  180.        //      m_bBBTXCfg3Support = false;
  181.        //      lblCTBBTXPhasesel->Visible = false;
  182.        //      edtCTBBTXPhasesel->Visible = false;
  183.        // break;
  184.         default:
  185.              this->WndProc( Message );
  186.         break;
  187.     }
  188. }
  189. //---------------------------------------------------------------------------
  190. void TfrmCTBBTXRunTimeSetting::ConfirmCallback_CT(void)
  191. {
  192.     E_METAAPP_RESULT_T state = m_pcRF_CT_Obj->Get_ConfirmState();
  193.     switch (state)
  194.     {
  195.         case METAAPP_SUCCESS:
  196.         {
  197.             sbCT->Panels->Items[0]->Text = (AnsiString) "  Continuous TX progressing";
  198.         }
  199.         break;
  200.         case METAAPP_FAIL:
  201.         {
  202.             sbCT->Panels->Items[0]->Text = (AnsiString) "  Continuous TX fail";
  203.             Application->MessageBox("Execution Failure : Continue TX", "FAILURE", MB_OK);
  204.             frmRFTool->Force_RF_Stop();
  205.             CurrentPageReset();
  206.         }
  207.         break;
  208.         case METAAPP_TIMEOUT:
  209.         {
  210.             sbCT->Panels->Items[0]->Text = (AnsiString) "  Continuous TX timeout";
  211.             Application->MessageBox("Execution Timeout : Continue TX", "TIMEOUT", MB_OK);
  212.             frmRFTool->Force_RF_Stop();
  213.             CurrentPageReset();
  214.         }
  215.         break;
  216.         case METAAPP_STOP:
  217.         {
  218.             sbCT->Panels->Items[0]->Text = (AnsiString) "  Continuous TX stop";
  219.         }
  220.         break;
  221.     }
  222. }
  223. //---------------------------------------------------------------------------
  224. void __fastcall TfrmCTBBTXRunTimeSetting::btnCTStartClick(TObject *Sender)
  225. {
  226.     if (1 == btnCTStart->Tag)
  227.     {
  228.         return;
  229.     }
  230.     if (!CheckBbTxCfgFields())
  231.     {
  232.         return;
  233.     }
  234.     m_eCurBand = (E_BANDSEL) cbxCTBand->ItemIndex;
  235.     CurrentPageLock();
  236.     m_pcRF_TXIQRUN_Obj->ConfirmCallback   = ::CNF_SetBBTxCfg;
  237.     m_pcRF_TXIQRUN_Obj->REQ_SetBBTxCfg_Start(m_eBbTxCfgVer, m_sBbTxCfg);
  238.     sbCT->Panels->Items[0]->Text = (AnsiString)"  Continuous TX processing";
  239. }
  240. //---------------------------------------------------------------------------
  241. void TfrmCTBBTXRunTimeSetting::CNF_SetBBTxCfg(void)
  242. {
  243.     E_METAAPP_RESULT_T state = m_pcRF_TXIQRUN_Obj->Get_ConfirmState();
  244.     switch (state)
  245.     {
  246.         case METAAPP_SUCCESS:
  247.         {
  248.             S_RF_CT rf_ct;
  249.             AnsiString text;
  250.             // band
  251.             rf_ct.e_band = (E_BANDSEL) cbxCTBand->ItemIndex;
  252.             m_eCurBand  = rf_ct.e_band;
  253.             // ARFCN
  254.             text = edtCTArfcn->Text;
  255.             if (!IsValidARFCN(text, rf_ct.e_band, rf_ct.s_arfcn))
  256.             {
  257.                 edtArfcnCheck(edtCTArfcn);
  258.                 return;
  259.             }
  260.             // PCL
  261.             text = edtPCL->Text;
  262.             if (!IsValidPCL(text, rf_ct.e_band, rf_ct.i_pcl))
  263.             {
  264.                 edtPCLCheck(edtPCL);
  265.                 return;
  266.             }
  267.             rf_ct.e_rf_ct_support = m_eCtSupport;
  268.             rf_ct.i_on_off = 1 - btnCTStart->Tag;
  269.             // pattern
  270.             if (rbCTAll0->Checked)
  271.             {
  272.                 rf_ct.i_pattern = CONT_TX_ALL_ZEROS;
  273.             }
  274.             else if (rbCTAll1->Checked)
  275.             {
  276.                 rf_ct.i_pattern = CONT_TX_ALL_ONES;
  277.             }
  278.             else if (rbCTAlternate->Checked)
  279.             {
  280.                 rf_ct.i_pattern = CONT_TX_ALTERNATE_BITS;
  281.             }
  282.             else if (rbCTRandom->Checked)
  283.             {
  284.                 rf_ct.i_pattern = CONT_TX_PSEUDO_RANDOM;
  285.             }
  286.             else
  287.             {
  288.                 rf_ct.i_pattern = CONT_TX_PATTERN_WITHOUT_TSC;
  289.             }
  290.             if (rbCTPattern->Checked)
  291.             {
  292.                 text = edtCTPattern->Text;       if( !IsValidCTPattern( text, rf_ct.us_pattern_data ) )                  {  edtCTPatternCheck(edtCTPattern);            return;   }
  293.             }
  294.             if (0 == cbTXModulation->ItemIndex) // GMSK
  295.             {
  296.                 rf_ct.us_modtype = 0;
  297.             }
  298.             else
  299.             {
  300.                 rf_ct.us_modtype = 1;
  301.             }
  302.             CurrentPageLock();
  303.             m_pcRF_CT_Obj->ConfirmCallback = ::ConfirmCallback_CT;
  304.             m_pcRF_CT_Obj->REQ_Start(rf_ct);
  305.         }
  306.         break;
  307.         case METAAPP_FAIL:
  308.         {
  309.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Set BB TX run time setting fail";
  310.             Application->MessageBox( "Execution Failure : Set BB TX run time setting", "FAILURE", MB_OK );
  311.             frmRFTool->Force_RF_Stop();
  312.             CurrentPageReset();
  313.         }
  314.         break;
  315.         case METAAPP_TIMEOUT:
  316.         {
  317.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Set BB TX run time setting timeout";
  318.             Application->MessageBox( "Execution Timeout : Set BB TX run time setting", "TIMEOUT", MB_OK );
  319.             frmRFTool->Force_RF_Stop();
  320.             CurrentPageReset();
  321.         }
  322.         break;
  323.         case METAAPP_STOP:
  324.         {
  325.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Set BB TX run time setting stop";
  326.             CurrentPageReset();
  327.         }
  328.         break;
  329.     }    
  330. }
  331. //===========================================================================
  332. bool TfrmCTBBTXRunTimeSetting::CheckBbTxCfgFields(void)
  333. {
  334.     signed char   tx_trim_i;
  335.     signed char   tx_trim_q;
  336.     signed char   tx_offset_i;
  337.     signed char   tx_offset_q;
  338.     signed char   tx_cal_bias;
  339.     char   tx_iq_swap;
  340.     signed char   tx_cmv;
  341.     signed char   tx_gain;
  342.     signed char   tx_calrcsel;
  343.     signed char   tx_phasesel;
  344.     AnsiString  text;
  345.     text = edtCTTrimI->Text;    if (!IsValidTrimIQ(text, tx_trim_i))   {  edtTrimIQCheck(edtCTTrimI);       return false;   }
  346.     m_sBbTxCfg.TxTrimI = tx_trim_i;
  347.     text = edtCTTrimQ->Text;    if (!IsValidTrimIQ(text, tx_trim_q))   {  edtTrimIQCheck(edtCTTrimQ);        return false;   }
  348.     m_sBbTxCfg.TxTrimQ = tx_trim_q;
  349.     text = edtCTOffsetI->Text;    if (!IsValidOffsetIQ(m_eBbTxCfgVer, text, tx_offset_i) )   {  edtOffsetIQCheck(edtCTOffsetI);        return false;   }
  350.     m_sBbTxCfg.TxOffsetI = tx_offset_i;
  351.     text = edtCTOffsetQ->Text;    if (!IsValidOffsetIQ(m_eBbTxCfgVer, text, tx_offset_q) )   {  edtOffsetIQCheck(edtCTOffsetQ);        return false;   }
  352.     m_sBbTxCfg.TxOffsetQ = tx_offset_q;
  353.     text = edtCTTXCalbias->Text;    if (!IsValidTxCalbias(m_eBbTxCfgVer, text, tx_cal_bias))   {  edtBBTXCalbiasCheck(edtCTTXCalbias);        return false;   }
  354.     m_sBbTxCfg.TxCalbias = tx_cal_bias;
  355.     text = edtCTTXIQSwap->Text;    if (!IsValidTxIQSwap(text, tx_iq_swap))   {  edtBBTXIQSwapCheck(edtCTTXIQSwap);        return false;   }
  356.     m_sBbTxCfg.TxIQSwap = tx_iq_swap;
  357.     text = edtCTCMV->Text;    if (!IsValidBBTXCommonModeVoltage(text, tx_cmv))   {  edtBBTXCommonModeVoltageCheck(edtCTCMV);        return false;   }
  358.     m_sBbTxCfg.TxCMV = tx_cmv;
  359.     text = edtCTBBTXGain->Text;    if (!IsValidBBTXGain(text, tx_gain) )   {  edtBBTXGainCheck(edtCTBBTXGain);        return false;  }
  360.     m_sBbTxCfg.TxGain = tx_gain;
  361.     text = edtCTBBTXCalrcsel->Text;    if (!IsValidBBTXCalrcsel(text, tx_calrcsel))   {  edtCTBBTXCalrcselCheck(edtCTBBTXCalrcsel);        return false;   }
  362.     m_sBbTxCfg.TxCalrcsel = tx_calrcsel;
  363.     if (edtCTBBTXPhasesel->Visible)
  364.     {
  365.         text = edtCTBBTXPhasesel->Text;    if (!IsValidBBTXPhasesel(m_eBbTxCfgVer, text, tx_phasesel))   {  edtCTBBTXPhaseselCheck(edtCTBBTXPhasesel);        return false;   }
  366.         m_sBbTxCfg.TxPhasesel = tx_phasesel;
  367.     }
  368.     return true;
  369. }
  370. //------------------------------------------------------------------------
  371. void  TfrmCTBBTXRunTimeSetting::CurrentPageReset( void )
  372. {
  373.          cbxCTBand->Enabled = true;
  374.          edtCTArfcn->Enabled = true;
  375.          edtPCL->Enabled = true;
  376.         // cbxCTPattern->Enabled = true;
  377.          cbTXModulation->Enabled = true;
  378.          rbCTAll0->Enabled = true;
  379.          rbCTAll1->Enabled = true;
  380.          rbCTAlternate->Enabled = true;
  381.          rbCTRandom->Enabled = true;
  382.          rbCTPattern->Enabled = true;
  383.          edtCTPattern->Enabled = true;
  384.          cbTXModulation->Enabled = true;
  385.          edtCTTrimI->Enabled = true;
  386.          edtCTTrimQ->Enabled = true;
  387.          edtCTOffsetI->Enabled = true;
  388.          edtCTOffsetQ->Enabled = true;
  389.          edtCTTXCalbias->Enabled = true;
  390.          edtCTTXIQSwap->Enabled = true;
  391.          edtCTCMV->Enabled = true;
  392.          edtCTBBTXGain->Enabled = true;
  393.          edtCTBBTXCalrcsel->Enabled = true;
  394.          edtCTBBTXPhasesel->Enabled = true;
  395.          btnCTStart->Enabled = true;
  396.          btnCTStart->Tag = 0;
  397.          btnLoadFromReg->Enabled = true;
  398. }
  399. //---------------------------------------------------------------------------
  400. void  TfrmCTBBTXRunTimeSetting::CurrentPageLock( void )
  401. {
  402.          cbxCTBand->Enabled = false;
  403.          edtCTArfcn->Enabled = false;
  404.          edtPCL->Enabled = false;
  405.          cbTXModulation->Enabled = false;
  406.          rbCTAll0->Enabled = false;
  407.          rbCTAll1->Enabled = false;
  408.          rbCTAlternate->Enabled = false;
  409.          rbCTRandom->Enabled = false;
  410.          rbCTPattern->Enabled = false;
  411.          edtCTPattern->Enabled = false;
  412.          edtCTTrimI->Enabled = false;
  413.          edtCTTrimQ->Enabled = false;
  414.          edtCTOffsetI->Enabled = false;
  415.          edtCTOffsetQ->Enabled = false;
  416.          edtCTTXCalbias->Enabled = false;
  417.          edtCTTXIQSwap->Enabled = false;
  418.          edtCTCMV->Enabled = false;
  419.          edtCTBBTXGain->Enabled = false;
  420.          edtCTBBTXCalrcsel->Enabled = false;
  421.          edtCTBBTXPhasesel->Enabled = false;
  422.          btnCTStart->Enabled = false;
  423.          btnCTStart->Tag = 1;
  424.          btnLoadFromReg->Enabled = false;
  425. }
  426. //---------------------------------------------------------------------------
  427. void TfrmCTBBTXRunTimeSetting::ReDrawFields(void)
  428. {
  429.     edtCTTrimI->Text = IntToStr(m_sBbTxCfg.TxTrimI);
  430.     edtCTTrimQ->Text = IntToStr(m_sBbTxCfg.TxTrimQ);
  431.     edtCTOffsetI->Text = IntToStr(m_sBbTxCfg.TxOffsetI);
  432.     edtCTOffsetQ->Text = IntToStr(m_sBbTxCfg.TxOffsetQ);
  433.     edtCTTXCalbias->Text = IntToStr(m_sBbTxCfg.TxCalbias);
  434.     edtCTTXIQSwap->Text = IntToStr(m_sBbTxCfg.TxIQSwap);
  435.     edtCTCMV->Text = IntToStr(m_sBbTxCfg.TxCMV);
  436.     edtCTBBTXGain->Text = IntToStr(m_sBbTxCfg.TxGain);
  437.     edtCTBBTXCalrcsel->Text = IntToStr(m_sBbTxCfg.TxCalrcsel);
  438.     if (m_eBbTxCfgVer >= BBTXCFG_VER3)
  439.     {
  440.         edtCTBBTXPhasesel->Text = IntToStr(m_sBbTxCfg.TxPhasesel);
  441.     }
  442. }
  443. //---------------------------------------------------------------------------
  444. void __fastcall TfrmCTBBTXRunTimeSetting::edtArfcnCheck(TObject *Sender)
  445. {
  446.     short sdata;
  447.     AnsiString  text;
  448.     TEdit *edit = (TEdit*)Sender;
  449.     char  hint[][256] =
  450.     {
  451.         " value shall be 0~124 or 975~1023 ",
  452.         " value shall be 512~885 ",
  453.         " value shall be 512~810 ",
  454.         " value shall be 128~251 ",
  455.     };
  456.     text = edit->Text;
  457.     if (!IsValidARFCN(text, m_eCurBand, sdata))
  458.     {
  459.         edit->Text = IntToStr(Default_ARFCN[m_eCurBand]);
  460.         ShowHintLabel(edit, hint[m_eCurBand]);
  461.         edit->SetFocus();
  462.         return;
  463.     }
  464. }
  465. //---------------------------------------------------------------------------
  466. void  TfrmCTBBTXRunTimeSetting::ShowHintLabel( TControl *sender, char* hint )
  467. {
  468.    TPoint pt0 = this->ClientOrigin;
  469.    TPoint pt1 = sender->ClientOrigin;
  470.    lblHint->Left = (pt1.x-pt0.x);
  471.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  472.    lblHint->Caption = hint;
  473.    lblHint->Visible = true;
  474.    HintTimer->Enabled = true;
  475. }
  476. //-----------------------------------------------------------------------------
  477. void __fastcall TfrmCTBBTXRunTimeSetting::HintTimerTimer(TObject *Sender)
  478. {
  479.     HintTimer->Enabled = false;
  480.     lblHint->Visible = false;
  481. }
  482. //---------------------------------------------------------------------------
  483. void __fastcall TfrmCTBBTXRunTimeSetting::cbxCTBandChange(TObject *Sender)
  484. {
  485.     TEdit *edit;
  486.     short sdata;
  487.     if (!frmMainSel->cbGSM850->Checked)
  488.     {
  489.         if (BANDSEL_GSM850 == (E_BANDSEL) ((TComboBox*)Sender)->ItemIndex)
  490.         {
  491.             ((TComboBox*)Sender)->ItemIndex = 0;
  492.             Application->MessageBox( "Please check GSM 850 on main menu", "FAILURE", MB_OK );
  493.         }
  494.     }
  495.     m_eCurBand = (E_BANDSEL) ((TComboBox*)Sender)->ItemIndex;
  496.     edit = edtCTArfcn;
  497.     edtArfcnCheck( edit );
  498.     if (!IsValidARFCN(edit->Text, m_eCurBand, sdata))
  499.     {
  500.         edit->Text = IntToStr(Default_ARFCN[m_eCurBand]);
  501.     }
  502. }
  503. //---------------------------------------------------------------------------
  504. //---------------------------------------------------------------------------
  505. void __fastcall TfrmCTBBTXRunTimeSetting::btnLoadFromRegClick(TObject *Sender)
  506. {
  507.     CurrentPageLock();
  508.     m_pcRF_TXIQRUN_Obj->ConfirmCallback = ::ConfirmCallback_GetBBTxCfg;
  509.     m_pcRF_TXIQRUN_Obj->REQ_GetBBTxCfg_Start(m_eBbTxCfgVer);
  510. }
  511. //---------------------------------------------------------------------------
  512. void  TfrmCTBBTXRunTimeSetting::ConfirmCallback_GetBBTxCfg( void )
  513. {
  514.     E_METAAPP_RESULT_T state = m_pcRF_TXIQRUN_Obj->Get_ConfirmState();
  515.     switch (state)
  516.     {
  517.         case METAAPP_SUCCESS:
  518.         {
  519.             RfBBTXCfg4* p_bbtxcfg = m_pcRF_TXIQRUN_Obj->Get_BbTxCfg();
  520.             m_sBbTxCfg = *p_bbtxcfg;
  521.             ReDrawFields();
  522.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Get BB TX run time setting successfully";
  523.         }
  524.         break;
  525.         case METAAPP_FAIL:
  526.         {
  527.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Get BB TX run time setting fail";
  528.             Application->MessageBox( "Execution Failure : Get BB TX run time setting", "FAILURE", MB_OK );
  529.             frmRFTool->Force_RF_Stop();
  530.             CurrentPageReset();
  531.         }
  532.         break;
  533.         case METAAPP_TIMEOUT:
  534.         {
  535.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Get BB TX run time setting timeout";
  536.             Application->MessageBox( "Execution Timeout : Get BB TX run time setting", "TIMEOUT", MB_OK );
  537.             frmRFTool->Force_RF_Stop();
  538.             CurrentPageReset();
  539.         }
  540.         break;
  541.         case METAAPP_STOP:
  542.         {
  543.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Get BB TX run time setting stop";
  544.         }
  545.         break;
  546.     }    
  547.     CurrentPageReset();
  548. }
  549. //---------------------------------------------------------------------------
  550. void __fastcall TfrmCTBBTXRunTimeSetting::btnCTLoadFromFileClick(
  551.       TObject *Sender)
  552. {
  553.     char str[512];
  554.     bool ok;
  555.     float  fdata;
  556.     ok = OpenDialog->Execute();
  557.     if (!ok)
  558.     {
  559.         sbCT->Panels->Items[0]->Text = (AnsiString) "  Load BB TX run time setting from file fail";
  560.         Application->MessageBox("Execution Failure : Load BB TX run time setting from file", "FAILURE", MB_OK);
  561.         return;
  562.     }
  563.    strcpy(str, OpenDialog->FileName.c_str());
  564.    ok = m_pcRF_TXIQRUN_Obj->REQ_Read_From_File(str, m_eBbTxCfgVer);
  565.    if (ok)
  566.    {
  567.        RfBBTXCfg4* p_bbtxcfg = m_pcRF_TXIQRUN_Obj->Get_BbTxCfg();
  568.        m_sBbTxCfg = *p_bbtxcfg;
  569.        ReDrawFields();
  570.        sbCT->Panels->Items[0]->Text = (AnsiString) "  Load BB TX run time setting from file successfully";
  571.    }
  572.    else
  573.    {
  574.        sbCT->Panels->Items[0]->Text = (AnsiString) "  Load BB TX run time setting from file fail";
  575.        Application->MessageBox("Execution Failure : Load BB TX run time setting from file", "FAILURE", MB_OK);
  576.    }
  577. }
  578. //---------------------------------------------------------------------------
  579. void __fastcall TfrmCTBBTXRunTimeSetting::edtTrimIQCheck(TObject *Sender)
  580. {
  581.     signed char data;
  582.     AnsiString  text;
  583.     TEdit *edit = (TEdit*)Sender;
  584.     char  hint[] = " value shall be -8~7 ";
  585.     text = edit->Text;
  586.     if( !IsValidTrimIQ( text, data ) )
  587.     {
  588.         ShowHintLabel( edit, hint );
  589.         edit->Text = Default_TrimIQ;
  590.         edit->SetFocus();
  591.         return;
  592.     }
  593. }
  594. //---------------------------------------------------------------------------
  595. void __fastcall TfrmCTBBTXRunTimeSetting::edtOffsetIQCheck(TObject *Sender)
  596. {
  597.     signed char  data;
  598.     AnsiString  text;
  599.     TEdit *edit = (TEdit*)Sender;
  600.     char  hint[] = " value shall be -32~31 ";
  601.     text = edit->Text;
  602.     if( !IsValidOffsetIQ(m_eBbTxCfgVer, text, data ) )
  603.     {
  604.         ShowHintLabel( edit, hint );
  605.         edit->Text = Default_OffsetIQ;
  606.         edit->SetFocus();
  607.         return;
  608.     }
  609. }
  610. //---------------------------------------------------------------------------
  611. void __fastcall TfrmCTBBTXRunTimeSetting::edtBBTXCalbiasCheck(
  612.       TObject *Sender)
  613. {
  614.     signed char  data;
  615.     AnsiString  text;
  616.     TEdit *edit = (TEdit*)Sender;
  617.     char  hint[2][256] = {" value shall be -16~15 ", " value shall be -8~7 "};
  618.     text = edit->Text;
  619.     if (!IsValidTxCalbias(m_eBbTxCfgVer, text, data))
  620.     {
  621.         if (BBTXCFG_VER2 == m_eBbTxCfgVer)
  622.         {
  623.             ShowHintLabel(edit, hint[0]);
  624.         }
  625.         else
  626.         {
  627.             ShowHintLabel(edit, hint[1]);
  628.         }
  629.         edit->Text = Default_TxCalbias;
  630.         edit->SetFocus();
  631.         return;
  632.     }
  633. }
  634. //--------------------------------------------------------------------------
  635. void __fastcall TfrmCTBBTXRunTimeSetting::edtBBTXIQSwapCheck(
  636.       TObject *Sender)
  637. {
  638.     char  data;
  639.     AnsiString  text;
  640.     TEdit *edit = (TEdit*)Sender;
  641.     char  hint[] = " value shall be 0~1 ";
  642.     text = edit->Text;
  643.     if( !IsValidTxIQSwap( text, data ) )
  644.     {
  645.         ShowHintLabel( edit, hint );
  646.         edit->Text = Default_TxIQSwap;
  647.         edit->SetFocus();
  648.         return;
  649.     }
  650. }
  651. //---------------------------------------------------------------------------
  652. void __fastcall TfrmCTBBTXRunTimeSetting::edtBBTXCommonModeVoltageCheck(
  653.       TObject *Sender)
  654. {
  655.     signed char  data;
  656.     AnsiString  text;
  657.     TEdit *edit = (TEdit*)Sender;
  658.     char  hint[256] =
  659.     {   " value shall be -4 ~ 3 "
  660.     };
  661.     text = edit->Text;
  662.     if( !IsValidBBTXCommonModeVoltage( text, data ) )
  663.     {
  664.         edit->Text = IntToStr( Default_BBTXCommonModeVoltage );
  665.         ShowHintLabel( edit, hint );
  666.         edit->SetFocus();
  667.         return;
  668.     }
  669. }
  670. //---------------------------------------------------------------------------
  671. void __fastcall TfrmCTBBTXRunTimeSetting::edtBBTXGainCheck(TObject *Sender)
  672. {
  673.     signed char  data;
  674.     AnsiString  text;
  675.     TEdit *edit = (TEdit*)Sender;
  676.     char  hint[256] =
  677.     {   " value shall be -4 ~ 3 "
  678.     };
  679.     text = edit->Text;
  680.     if( !IsValidBBTXGain( text, data ) )
  681.     {
  682.         edit->Text = IntToStr( Default_BBTXGain );
  683.         ShowHintLabel( edit, hint );
  684.         edit->SetFocus();
  685.         return;
  686.     }
  687. }
  688. //---------------------------------------------------------------------------
  689. void __fastcall TfrmCTBBTXRunTimeSetting::edtCTBBTXCalrcselCheck(
  690.       TObject *Sender)
  691. {
  692.     signed char  data;
  693.     AnsiString  text;
  694.     TEdit *edit = (TEdit*)Sender;
  695.     char  hint[256] =
  696.     {   " value shall be -4 ~ 3 "
  697.     };
  698.     text = edit->Text;
  699.     if( !IsValidBBTXCalrcsel( text, data ) )
  700.     {
  701.         edit->Text = IntToStr( Default_BBTXCalrcsel );
  702.         ShowHintLabel( edit, hint );
  703.         edit->SetFocus();
  704.         return;
  705.     }
  706. }
  707. //--------------------------------------------------------------------------
  708. void __fastcall TfrmCTBBTXRunTimeSetting::btnCTSaveToFileClick(
  709.       TObject *Sender)
  710. {
  711.     char str[512];
  712.     bool ok;
  713.     if (!CheckBbTxCfgFields())
  714.     {
  715.         return;
  716.     }
  717.     ok = SaveDialog->Execute();
  718.     if (!ok)
  719.     {
  720.         sbCT->Panels->Items[0]->Text = (AnsiString) "  Save BB TX run time setting to file fail";
  721.         Application->MessageBox( "Execution Failure : Save BB TX run time setting to file", "FAILURE", MB_OK );
  722.         return;
  723.     }
  724.     strcpy(str, SaveDialog->FileName.c_str());
  725.     m_pcRF_TXIQRUN_Obj->Set_BbTxCfg(m_sBbTxCfg);
  726.     ok = m_pcRF_TXIQRUN_Obj->REQ_Write_To_File(str, m_eBbTxCfgVer);
  727.     if (!ok)
  728.     {
  729.         sbCT->Panels->Items[0]->Text = (AnsiString) "  Save BB TX run time setting to file fail";
  730.         Application->MessageBox( "Execution Failure : Save BB TX run time setting to file", "FAILURE", MB_OK );
  731.     }
  732.     else
  733.     {
  734.         sbCT->Panels->Items[0]->Text = (AnsiString) "  Save BB TX run time setting to file successfully";
  735.     }
  736. }
  737. //---------------------------------------------------------------------------
  738. void __fastcall TfrmCTBBTXRunTimeSetting::btnCTStopClick(TObject *Sender)
  739. {
  740.     if (btnCTStart->Tag==1)
  741.     {
  742.         sbCT->Panels->Items[0]->Text = (AnsiString) "  Continuous TX stop";
  743.         frmRFTool->Force_RF_Stop();
  744.         CurrentPageReset();
  745.         return;
  746.     }
  747. }
  748. //-------------------------------------------------------------------------
  749. void __fastcall TfrmCTBBTXRunTimeSetting::edtCTBBTXPhaseselCheck(
  750.       TObject *Sender)
  751. {
  752.     signed char  data;
  753.     AnsiString  text;
  754.     TEdit *edit = (TEdit*)Sender;
  755.     char  hint[256] =
  756.     {   " value shall be -3 ~ 3 "
  757.     };
  758.     text = edit->Text;
  759.     if (!IsValidBBTXCalrcsel(text, data))
  760.     {
  761.         edit->Text = IntToStr(Default_BBTXPhasesel);
  762.         ShowHintLabel(edit, hint);
  763.         edit->SetFocus();
  764.         return;
  765.     }
  766. }
  767. //---------------------------------------------------------------------------
  768. void __fastcall TfrmCTBBTXRunTimeSetting::edtCTPatternCheck(
  769.       TObject *Sender)
  770. {
  771.     unsigned short  data;
  772.     AnsiString  text;
  773.     TEdit *edit = (TEdit*)Sender;
  774.     char  hint[256] =
  775.     {   " binary format and length<=16 "
  776.     };
  777.     text = edit->Text;
  778.     if( !IsValidMultiSlotTxPattern( text, data ) )
  779.     {  ShowHintLabel( edit, hint);
  780.        edit->SetFocus();
  781.        return;
  782.     }    
  783. }
  784. //---------------------------------------------------------------------------
  785. void __fastcall TfrmCTBBTXRunTimeSetting::edtPCLCheck(TObject *Sender)
  786. {
  787.     int  data;
  788.    AnsiString  text;
  789.    TEdit *edit = (TEdit*)Sender;
  790.    char  hint[][256] =
  791.    {   " value shall be 4~31 ",
  792.        " value shall be 0~28 ",
  793.        " value shall be 0~15 ",
  794.        " value shall be 4~31 ",
  795.    };
  796.    text = edit->Text;
  797.    if( text.AnsiCompare("") == 0 )  return;
  798.    if( !IsValidPCL( text, m_eCurBand, data ) )
  799.    {  ShowHintLabel( edit, hint[m_eCurBand] );
  800.       edit->Text = IntToStr( Default_PCL );
  801.       edit->SetFocus();
  802.       return;
  803.    }
  804. }
  805. //============================================================================
  806. ///////////////////////////    export information    /////////////////////////
  807. //============================================================================
  808. void TfrmCTBBTXRunTimeSetting::Set_RF_CT_Obj(CRFCT* rf_ct_obj)
  809. {
  810.     m_pcRF_CT_Obj = rf_ct_obj;
  811. }
  812. //----------------------------------------------------------------------------
  813. void TfrmCTBBTXRunTimeSetting::Set_RF_TXIQRUN_Obj(CRFTXIQRUN* rf_txiqrun_obj)
  814. {
  815.     m_pcRF_TXIQRUN_Obj = rf_txiqrun_obj;
  816. }
  817. //----------------------------------------------------------------------------
  818. void TfrmCTBBTXRunTimeSetting::Set_RF_STOP_Obj(CRFSTOP* rf_stop_obj)
  819. {
  820.     m_pcRF_STOP_Obj = rf_stop_obj;
  821. }