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

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_CFGcommon.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  common CFG file 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. #include "form_CFGCommon.h"
  69. #include "META_Factory.h"
  70. #include "meta_utils.h"
  71. #include "misc.h"
  72. #ifndef  _FT_UTILS_H_
  73. #include "ft_utils.h"
  74. #endif
  75. //---------------------------------------------------------------------------
  76. #pragma package(smart_init)
  77. #pragma resource "*.dfm"
  78. TfrmCFGCommon *frmCFGCommon;
  79. //static int Default_ARFCN[] = { 0, 512, 512, 128, 276 };  // GSM, DCS, PCS, GSM850, GSM400
  80. //---------------------------------------------------------------------------
  81. __fastcall TfrmCFGCommon::TfrmCFGCommon(TComponent* Owner)
  82.         : TForm(Owner)
  83. {
  84.     // GPIB address
  85.     i_GPIB_Addr[0] = i_8960_GPIB_Addr;
  86.     i_GPIB_Addr[1] = i_CMU200_GPIB_Addr;
  87.     // cable loss
  88.     d_CL[AGILENT_8960_CL][0] = d_GSM400_CL;
  89.     d_CL[AGILENT_8960_CL][1] = d_GSM850_CL;
  90.     d_CL[AGILENT_8960_CL][2] = d_GSM900_CL;
  91.     d_CL[AGILENT_8960_CL][3] = d_DCS1800_CL;
  92.     d_CL[AGILENT_8960_CL][4] = d_PCS1900_CL;
  93.     d_CL[CMU_200_INPUT_CL][0] = d_CMU200_INPUT_GSM400_CL;
  94.     d_CL[CMU_200_INPUT_CL][1] = d_CMU200_INPUT_GSM850_CL;
  95.     d_CL[CMU_200_INPUT_CL][2] = d_CMU200_INPUT_GSM900_CL;
  96.     d_CL[CMU_200_INPUT_CL][3] = d_CMU200_INPUT_DCS1800_CL;
  97.     d_CL[CMU_200_INPUT_CL][4] = d_CMU200_INPUT_PCS1900_CL;
  98.     d_CL[CMU_200_OUTPUT_CL][0] = d_CMU200_OUTPUT_GSM400_CL;
  99.     d_CL[CMU_200_OUTPUT_CL][1] = d_CMU200_OUTPUT_GSM850_CL;
  100.     d_CL[CMU_200_OUTPUT_CL][2] = d_CMU200_OUTPUT_GSM900_CL;
  101.     d_CL[CMU_200_OUTPUT_CL][3] = d_CMU200_OUTPUT_DCS1800_CL;
  102.     d_CL[CMU_200_OUTPUT_CL][4] = d_CMU200_OUTPUT_PCS1900_CL;
  103.     // CO ARFCN
  104.     m_sARFCN_C0[0] = m_sARFCN_C0_GSM;
  105.     m_sARFCN_C0[1] = m_sARFCN_C0_DCS;
  106.     m_sARFCN_C0[2] = m_sARFCN_C0_PCS;
  107.     m_sARFCN_C0[3] = m_sARFCN_C0_GSM850;
  108.     m_sARFCN_C0[4] = m_sARFCN_C0_GSM400;
  109. }
  110. //---------------------------------------------------------------------------
  111. void __fastcall TfrmCFGCommon::edtGPIBAddressCheck(TObject *Sender)
  112. {
  113.     int  data;
  114.     AnsiString  text;
  115.     TEdit *edit = (TEdit*)Sender;
  116.     char  hint[] = " GPIB address is not valid ";
  117.     text = edit->Text;
  118.     if( !IsValidGPIBAddr( text, data ) )
  119.     {
  120.         ShowHintLabel( edit, hint );
  121.         edit->Text = IntToStr( 15 );
  122.         edit->SetFocus();
  123.         return;
  124.     }
  125.     i_GPIB_Addr[edit->Tag] = data;
  126. }
  127. //---------------------------------------------------------------------------
  128. void __fastcall TfrmCFGCommon::edtTimeOutCheck(TObject *Sender)
  129. {
  130.     int  data;
  131.     AnsiString  text;
  132.     TEdit *edit = (TEdit*)Sender;
  133.     char  hint[] = " Timeout is not valid ";
  134.     text = edit->Text;
  135.     if( !IsValidTimeout( text, data ) )
  136.     {
  137.         ShowHintLabel( edit, hint );
  138.         edit->Text = IntToStr( 5000 );
  139.         edit->SetFocus();
  140.         return;
  141.     }
  142.     i_TimeOut[edit->Tag] = data;
  143. }
  144. //---------------------------------------------------------------------------
  145. void __fastcall TfrmCFGCommon::edtCableLossCheck(TObject *Sender)
  146. {
  147.     double  data;
  148.     AnsiString  text;
  149.     TEdit *edit = (TEdit*)Sender;
  150.     char  hint[] = " Cable loss is not valid ";
  151.     text = edit->Text;
  152.     if( !IsValidCableLoss( text, data ) )
  153.     {
  154.         ShowHintLabel( edit, hint );
  155.         edit->Text = IntToStr( 0 );
  156.         edit->SetFocus();
  157.         return;
  158.     }
  159.     d_CL[AGILENT_8960_CL][edit->Tag] = data;
  160. }
  161. //---------------------------------------------------------------------------
  162. void __fastcall TfrmCFGCommon::edtInputCableLossCheck(TObject *Sender)
  163. {
  164.     double  data;
  165.     AnsiString  text;
  166.     TEdit *edit = (TEdit*)Sender;
  167.     char  hint[] = " Cable loss is not valid ";
  168.     text = edit->Text;
  169.     if( !IsValidCableLoss( text, data ) )
  170.     {
  171.         ShowHintLabel( edit, hint );
  172.         edit->Text = IntToStr( 0 );
  173.         edit->SetFocus();
  174.         return;
  175.     }
  176.     d_CL[CMU_200_INPUT_CL][edit->Tag] = data;
  177. }
  178. //---------------------------------------------------------------------------
  179. void __fastcall TfrmCFGCommon::edtOutputCableLossCheck(TObject *Sender)
  180. {
  181.     double  data;
  182.     AnsiString  text;
  183.     TEdit *edit = (TEdit*)Sender;
  184.     char  hint[] = " Cable loss is not valid ";
  185.     text = edit->Text;
  186.     if( !IsValidCableLoss( text, data ) )
  187.     {
  188.         ShowHintLabel( edit, hint );
  189.         edit->Text = IntToStr( 0 );
  190.         edit->SetFocus();
  191.         return;
  192.     }
  193.     d_CL[CMU_200_OUTPUT_CL][edit->Tag] = data;
  194. }
  195. //---------------------------------------------------------------------------
  196. void __fastcall TfrmCFGCommon::edtARFCNCheck(TObject *Sender)
  197. {
  198.     short sdata;
  199.     AnsiString  text;
  200.     TEdit *edit = (TEdit*)Sender;
  201.     char  hint[][256] =
  202.     {
  203.         " value shall be 0~124 or 975~1023 ", // GSM
  204.         " value shall be 512~885 ",           // DCS
  205.         " value shall be 512~810 ",           // PCS
  206.         " value shall be 128~251 ",           // GSM850
  207.         " value shall be 259~293 "            // GSM450
  208.     };
  209.     E_BANDSEL CurBand = (E_BANDSEL) edit->Tag;
  210.     text = edit->Text;
  211.     if (!IsValidARFCN(text, CurBand, sdata))
  212.     {
  213.         edit->Text = IntToStr(Default_ARFCN[CurBand]);
  214.         ShowHintLabel(edit, hint[CurBand]);
  215.         edit->SetFocus();
  216.         return;
  217.     }
  218.     m_sARFCN_C0[edit->Tag] = sdata;
  219. }
  220. //---------------------------------------------------------------------------
  221. void __fastcall TfrmCFGCommon::edtP_DLCheck(TObject *Sender)
  222. {
  223.     double  data;
  224.     AnsiString  text;
  225.     TEdit *edit = (TEdit*)Sender;
  226.     char  hint[] = " P_DL is not valid ";
  227.     text = edit->Text;
  228.     if( !IsValidPower( text, data ) )
  229.     {
  230.         ShowHintLabel( edit, hint );
  231.         edit->Text = Double_To_AnsiString( -60 );
  232.         edit->SetFocus();
  233.         return;
  234.     }
  235.     d_P_DL = data;
  236. }
  237. //---------------------------------------------------------------------------
  238. bool  TfrmCFGCommon::CheckFields( void )
  239. {
  240.     AnsiString  text;
  241.     char buf[20];
  242.     // 8960 Initialization
  243.     text = edt8960GPIBAddress->Text;   if( !IsValidGPIBAddr( text, i_8960_GPIB_Addr ) )         {  edtGPIBAddressCheck(edt8960GPIBAddress);   return(false);   }
  244.     cfg->setGPIB_Addr( "GPIB0::" + IntToStr(i_8960_GPIB_Addr) + "::INSTR" );
  245.     text = edtTimeOut8960->Text;   if( !IsValidTimeout( text, i_8960_TimeOut ) )         {  edtTimeOutCheck(edtTimeOut8960);   return(false);   }
  246.     cfg->setTimeOut( i_8960_TimeOut );
  247.     text = edtGSM400CableLoss->Text;   if( !IsValidCableLoss( text, d_GSM400_CL ) )         {  edtCableLossCheck(edtGSM400CableLoss);   return(false);   }
  248.     cfg->setGSM400_CableLoss( d_GSM400_CL );
  249.     text = edtGSM850CableLoss->Text;   if( !IsValidCableLoss( text, d_GSM850_CL ) )         {  edtCableLossCheck(edtGSM850CableLoss);   return(false);   }
  250.     cfg->setGSM850_CableLoss( d_GSM850_CL );
  251.     text = edtGSM900CableLoss->Text;   if( !IsValidCableLoss( text, d_GSM900_CL ) )         {  edtCableLossCheck(edtGSM900CableLoss);   return(false);   }
  252.     cfg->setGSM900_CableLoss( d_GSM900_CL );
  253.     text = edtDCS1800CableLoss->Text;   if( !IsValidCableLoss( text, d_DCS1800_CL ) )         {  edtCableLossCheck(edtDCS1800CableLoss);   return(false);   }
  254.     cfg->setDCS1800_CableLoss( d_DCS1800_CL );
  255.     text = edtPCS1900CableLoss->Text;   if( !IsValidCableLoss( text, d_PCS1900_CL ) )         {  edtCableLossCheck(edtPCS1900CableLoss);   return(false);   }
  256.     cfg->setPCS1900_CableLoss( d_PCS1900_CL );
  257.     // CMU200 Initialization
  258.     text = edtCMU200GPIBAddress->Text;   if( !IsValidGPIBAddr( text, i_CMU200_GPIB_Addr ) )         {  edtGPIBAddressCheck(edtCMU200GPIBAddress);   return(false);   }
  259.     cfg->setCMU200_GPIB_Addr( "GPIB0::" + IntToStr(i_CMU200_GPIB_Addr) + "::INSTR" );
  260.     text = edtTimeOutCMU200->Text;   if( !IsValidTimeout( text, i_CMU200_TimeOut ) )         {  edtTimeOutCheck(edtTimeOutCMU200);   return(false);   }
  261.     cfg->setCMU200_TimeOut( i_CMU200_TimeOut );
  262.     text = edtGSM400InputCableLoss->Text;   if( !IsValidCableLoss( text, d_CMU200_INPUT_GSM400_CL ) )         {  edtCableLossCheck(edtGSM400InputCableLoss);   return(false);   }
  263.     cfg->setCMU200_INPUT_GSM400_CableLoss( d_CMU200_INPUT_GSM400_CL );
  264.     text = edtGSM850InputCableLoss->Text;   if( !IsValidCableLoss( text, d_CMU200_INPUT_GSM850_CL ) )         {  edtCableLossCheck(edtGSM850InputCableLoss);   return(false);   }
  265.     cfg->setCMU200_INPUT_GSM850_CableLoss( d_CMU200_INPUT_GSM850_CL );
  266.     text = edtGSM900InputCableLoss->Text;   if( !IsValidCableLoss( text, d_CMU200_INPUT_GSM900_CL ) )         {  edtCableLossCheck(edtGSM900InputCableLoss);   return(false);   }
  267.     cfg->setCMU200_INPUT_GSM900_CableLoss( d_CMU200_INPUT_GSM900_CL );
  268.     text = edtDCS1800InputCableLoss->Text;   if( !IsValidCableLoss( text, d_CMU200_INPUT_DCS1800_CL ) )         {  edtCableLossCheck(edtDCS1800InputCableLoss);   return(false);   }
  269.     cfg->setCMU200_INPUT_DCS1800_CableLoss( d_CMU200_INPUT_DCS1800_CL );
  270.     text = edtPCS1900InputCableLoss->Text;   if( !IsValidCableLoss( text, d_CMU200_INPUT_PCS1900_CL ) )         {  edtCableLossCheck(edtPCS1900InputCableLoss);   return(false);   }
  271.     cfg->setCMU200_INPUT_PCS1900_CableLoss( d_CMU200_INPUT_PCS1900_CL );
  272.     text = edtGSM400OutputCableLoss->Text;   if( !IsValidCableLoss( text, d_CMU200_OUTPUT_GSM400_CL ) )         {  edtCableLossCheck(edtGSM400OutputCableLoss);   return(false);   }
  273.     cfg->setCMU200_OUTPUT_GSM400_CableLoss( d_CMU200_OUTPUT_GSM400_CL );
  274.     text = edtGSM850OutputCableLoss->Text;   if( !IsValidCableLoss( text, d_CMU200_OUTPUT_GSM850_CL ) )         {  edtCableLossCheck(edtGSM850OutputCableLoss);   return(false);   }
  275.     cfg->setCMU200_OUTPUT_GSM850_CableLoss( d_CMU200_OUTPUT_GSM850_CL );
  276.     text = edtGSM900OutputCableLoss->Text;   if( !IsValidCableLoss( text, d_CMU200_OUTPUT_GSM900_CL ) )         {  edtCableLossCheck(edtGSM900OutputCableLoss);   return(false);   }
  277.     cfg->setCMU200_OUTPUT_GSM900_CableLoss( d_CMU200_OUTPUT_GSM900_CL );
  278.     text = edtDCS1800OutputCableLoss->Text;   if( !IsValidCableLoss( text, d_CMU200_OUTPUT_DCS1800_CL ) )         {  edtCableLossCheck(edtDCS1800OutputCableLoss);   return(false);   }
  279.     cfg->setCMU200_OUTPUT_DCS1800_CableLoss( d_CMU200_OUTPUT_DCS1800_CL );
  280.     text = edtPCS1900OutputCableLoss->Text;   if( !IsValidCableLoss( text, d_CMU200_OUTPUT_PCS1900_CL ) )         {  edtCableLossCheck(edtPCS1900OutputCableLoss);   return(false);   }
  281.     cfg->setCMU200_OUTPUT_PCS1900_CableLoss( d_CMU200_OUTPUT_PCS1900_CL );
  282.     // frequency bank
  283.     setFrequencyBank();
  284.     sprintf(buf, "%x", i_FreqBank );
  285.     if( i_FreqBank <= 16 )
  286.     {
  287.         cfg->setFreqBank( "0x0" +(AnsiString) buf );
  288.     }
  289.     else
  290.     {
  291.         cfg->setFreqBank( "0x" +(AnsiString) buf );
  292.     }
  293.     // C0 for each Bank
  294.     text = edtArfcn_C0_GSM400->Text;   if( !IsValidARFCN( text, BANDSEL_GSM400, m_sARFCN_C0_GSM400 ) )         {  edtARFCNCheck(edtArfcn_C0_GSM400);   return(false);   }
  295.     cfg->setARFCN_C0_GSM400( m_sARFCN_C0_GSM400 );
  296.     text = edtArfcn_C0_GSM850->Text;   if( !IsValidARFCN( text, BANDSEL_GSM850, m_sARFCN_C0_GSM850 ) )         {  edtARFCNCheck(edtArfcn_C0_GSM850);   return(false);   }
  297.     cfg->setARFCN_C0_GSM850( m_sARFCN_C0_GSM850 );
  298.     text = edtArfcn_C0_GSM->Text;   if( !IsValidARFCN( text, BANDSEL_GSM900, m_sARFCN_C0_GSM ) )         {  edtARFCNCheck(edtArfcn_C0_GSM);   return(false);   }
  299.     cfg->setARFCN_C0_GSM( m_sARFCN_C0_GSM );
  300.     text = edtArfcn_C0_DCS->Text;   if( !IsValidARFCN( text, BANDSEL_DCS1800, m_sARFCN_C0_DCS ) )         {  edtARFCNCheck(edtArfcn_C0_DCS);   return(false);   }
  301.     cfg->setARFCN_C0_DCS( m_sARFCN_C0_DCS );
  302.     text = edtArfcn_C0_PCS->Text;   if( !IsValidARFCN( text, BANDSEL_PCS1900, m_sARFCN_C0_PCS ) )         {  edtARFCNCheck(edtArfcn_C0_PCS);   return(false);   }
  303.     cfg->setARFCN_C0_PCS( m_sARFCN_C0_PCS );
  304.     // Downlink power
  305.     text = edtP_DL->Text;   if( !IsValidPower( text, d_P_DL ) )         {  edtP_DLCheck(edtP_DL);   return(false);   }
  306.     cfg->setP_DL( d_P_DL );
  307.     return true;
  308. }
  309. //---------------------------------------------------------------------------
  310. void __fastcall TfrmCFGCommon::HintTimerTimer(TObject *Sender)
  311. {
  312.     HintTimer->Enabled = false;
  313.     lblHint->Visible = false;
  314. }
  315. //---------------------------------------------------------------------------
  316. void TfrmCFGCommon::ShowHintLabel( TControl *sender, char* hint )
  317. {
  318.    TPoint pt0 = this->ClientOrigin;
  319.    TPoint pt1 = sender->ClientOrigin;
  320.    lblHint->Left = (pt1.x-pt0.x);
  321.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  322.    lblHint->Caption = hint;
  323.    lblHint->Visible = true;
  324.    HintTimer->Enabled = true;
  325. }
  326. //---------------------------------------------------------------------------
  327. void __fastcall TfrmCFGCommon::btnSaveToCFGFileClick(TObject *Sender)
  328. {
  329.     bool ok;
  330.     int i;
  331.     AnsiString asPath, asFileName;
  332.     static bool isFirstSave = true;
  333.     if( isFirstSave )
  334.     {
  335.         isFirstSave = false;
  336.         if( getPathFromStr( frmFatcory->stCFGFile->Caption, asPath ) )
  337.         {
  338.             SaveDlg->InitialDir = asPath;
  339.             if( getFilenameFromStr( frmFatcory->stCFGFile->Caption, asFileName ) )
  340.             {
  341.                 SaveDlg->FileName = asFileName;
  342.             }
  343.         }
  344.         else
  345.         {
  346.             if( getPathFromStr(Application->ExeName, asPath) )
  347.             {
  348.                 SaveDlg->InitialDir = asPath;
  349.             }
  350.             else
  351.             {
  352.                 SaveDlg->InitialDir = "C:\";
  353.             }
  354.         }
  355.     }
  356.     if( ! CheckFields() )
  357.     {
  358.         sbCFGCommon->Panels->Items[0]->Text = (AnsiString) "  Save common parameter setting to file fail";
  359.         Application->MessageBox( "Execution Failure : Save common parameter setting to file", "FAILURE", MB_OK );
  360.         return;
  361.     }
  362.     ok = SaveDlg->Execute();
  363.     if( !ok )
  364.     {
  365.         sbCFGCommon->Panels->Items[0]->Text = (AnsiString) "  Save common parameter setting to file fail";
  366.         Application->MessageBox( "Execution Failure : Save common parameter setting to file", "FAILURE", MB_OK );
  367.         return;
  368.     }
  369.     cfg->SaveCommonToCfgFile( SaveDlg->FileName );
  370. }
  371. //---------------------------------------------------------------------------
  372. void __fastcall TfrmCFGCommon::FormClose(TObject *Sender,
  373.       TCloseAction &Action)
  374. {
  375.     if(cfg != NULL)
  376.     {
  377.         delete cfg;
  378.         cfg = NULL;
  379.     }
  380. }
  381. //---------------------------------------------------------------------------
  382. void TfrmCFGCommon::setFrequencyBank( void )
  383. {
  384.     i_FreqBank = 0;
  385.     if( cbGSM400->Checked )
  386.     {
  387.         i_FreqBank |= FREQUENCY_BANK_GSM_400;
  388.     }
  389.     if( cbGSM850->Checked )
  390.     {
  391.         i_FreqBank |= FREQUENCY_BANK_GSM_850;
  392.     }
  393.     if( cbGSM900->Checked )
  394.     {
  395.         i_FreqBank |= FREQUENCY_BANK_GSM_900;
  396.     }
  397.     if( cbDCS1800->Checked )
  398.     {
  399.         i_FreqBank |= FREQUENCY_BANK_DCS_1800;
  400.     }
  401.     if( cbPCS1900->Checked )
  402.     {
  403.         i_FreqBank |= FREQUENCY_BANK_PCS_1900;
  404.     }
  405. }
  406. //---------------------------------------------------------------------------
  407. void __fastcall TfrmCFGCommon::btnLoadFromCFGFileClick(TObject *Sender)
  408. {
  409.     bool ok;
  410.     int i;
  411.     AnsiString asPath, asFileName;
  412.     AnsiString as_8960_GPIB_Addr, as_CMU200_GPIB_Addr;
  413.     AnsiString as_FreqBank;
  414.     static bool isFirstOpen = true;
  415.     if( isFirstOpen )
  416.     {
  417.         isFirstOpen = false;
  418.         if( getPathFromStr( frmFatcory->stCFGFile->Caption, asPath ) )
  419.         {
  420.             OpenDlg->InitialDir = asPath;
  421.             if( getFilenameFromStr( frmFatcory->stCFGFile->Caption, asFileName ) )
  422.             {
  423.                 OpenDlg->FileName = asFileName;
  424.             }
  425.         }
  426.         else
  427.         {
  428.             if( getPathFromStr(Application->ExeName, asPath) )
  429.             {
  430.                 OpenDlg->InitialDir = asPath;
  431.             }
  432.             else
  433.             {
  434.                 OpenDlg->InitialDir = "C:\";
  435.             }
  436.         }
  437.     }
  438.     ok = OpenDlg->Execute();
  439.     if( !ok )
  440.     {
  441.         sbCFGCommon->Panels->Items[0]->Text = (AnsiString) "  Load common parameter setting from file fail";
  442.         Application->MessageBox( "Execution Failure : Load common parameter setting from file fail", "FAILURE", MB_OK );
  443.         return;
  444.     }
  445.     if (!cfg->ReadFromIniFile(OpenDlg->FileName))
  446.     {
  447.         sbCFGCommon->Panels->Items[0]->Text = (AnsiString) "  Read CFG file fail";
  448.         Application->MessageBox( "Execution Failure : Read CFG file", "FAILURE", MB_OK );
  449.         return;
  450.     }
  451.     // 8960 GPIB Address
  452.     cfg->getGPIB_Addr( as_8960_GPIB_Addr );
  453.     if( ! getGPIBAddrNumFromStr( as_8960_GPIB_Addr, i_8960_GPIB_Addr) )
  454.     {
  455.         sbCFGCommon->Panels->Items[0]->Text = (AnsiString) "  Get 8960 GPIB Address from file fail";
  456.         Application->MessageBox( "Execution Failure : Get 8960 GPIB Address from file fail", "FAILURE", MB_OK );
  457.         return;
  458.     }
  459.     edt8960GPIBAddress->Text = IntToStr( i_8960_GPIB_Addr );
  460.     // Time Out
  461.     cfg->getTimeOut( i_8960_TimeOut );
  462.     edtTimeOut8960->Text = IntToStr( i_8960_TimeOut );
  463.     // GSM400 cable loss
  464.     cfg->getGSM400_CableLoss( d_GSM400_CL );
  465.     edtGSM400CableLoss->Text = Double_To_AnsiString( d_GSM400_CL );
  466.     // GSM850 cable loss
  467.     cfg->getGSM850_CableLoss( d_GSM850_CL );
  468.     edtGSM850CableLoss->Text = Double_To_AnsiString( d_GSM850_CL );
  469.     // GSM900 cable loss
  470.     cfg->getGSM900_CableLoss( d_GSM900_CL );
  471.     edtGSM900CableLoss->Text = Double_To_AnsiString( d_GSM900_CL );
  472.     // DCS1800 cable loss
  473.     cfg->getDCS1800_CableLoss( d_DCS1800_CL );
  474.     edtDCS1800CableLoss->Text = Double_To_AnsiString( d_DCS1800_CL );
  475.     // PCS1900 cable loss
  476.     cfg->getPCS1900_CableLoss( d_PCS1900_CL );
  477.     edtPCS1900CableLoss->Text = Double_To_AnsiString( d_PCS1900_CL );
  478.     // CMU200 Initialization
  479.     // CMU200 GPIB Address
  480.     cfg->getCMU200_GPIB_Addr( as_CMU200_GPIB_Addr );
  481.     if( ! getGPIBAddrNumFromStr( as_CMU200_GPIB_Addr, i_CMU200_GPIB_Addr) )
  482.     {
  483.         sbCFGCommon->Panels->Items[0]->Text = (AnsiString) "  Get CMU200 GPIB Address from file fail";
  484.         Application->MessageBox( "Execution Failure : Get CMU200 GPIB Address from file fail", "FAILURE", MB_OK );
  485.         return;
  486.     }
  487.     edtCMU200GPIBAddress->Text = IntToStr( i_CMU200_GPIB_Addr );
  488.     // Time Out
  489.     cfg->getCMU200_TimeOut( i_CMU200_TimeOut );
  490.     edtTimeOutCMU200->Text = IntToStr( i_CMU200_TimeOut );
  491.     // GSM400 input cable loss
  492.     cfg->getCMU200_INPUT_GSM400_CableLoss( d_CMU200_INPUT_GSM400_CL );
  493.     edtGSM400InputCableLoss->Text = Double_To_AnsiString( d_CMU200_INPUT_GSM400_CL );
  494.     // GSM850 input cable loss
  495.     cfg->getCMU200_INPUT_GSM850_CableLoss( d_CMU200_INPUT_GSM850_CL );
  496.     edtGSM850InputCableLoss->Text = Double_To_AnsiString( d_CMU200_INPUT_GSM850_CL );
  497.     // GSM900 input cable loss
  498.     cfg->getCMU200_INPUT_GSM900_CableLoss( d_CMU200_INPUT_GSM900_CL );
  499.     edtGSM900InputCableLoss->Text = Double_To_AnsiString( d_CMU200_INPUT_GSM900_CL );
  500.     // DCS1800 input cable loss
  501.     cfg->getCMU200_INPUT_DCS1800_CableLoss( d_CMU200_INPUT_DCS1800_CL );
  502.     edtDCS1800InputCableLoss->Text = Double_To_AnsiString( d_CMU200_INPUT_DCS1800_CL );
  503.     // PCS1900 input cable loss
  504.     cfg->getCMU200_INPUT_PCS1900_CableLoss( d_CMU200_INPUT_PCS1900_CL );
  505.     edtPCS1900InputCableLoss->Text = Double_To_AnsiString( d_CMU200_INPUT_PCS1900_CL );
  506.     // GSM400 output cable loss
  507.     cfg->getCMU200_OUTPUT_GSM400_CableLoss( d_CMU200_OUTPUT_GSM400_CL );
  508.     edtGSM400OutputCableLoss->Text = Double_To_AnsiString( d_CMU200_OUTPUT_GSM400_CL );
  509.     // GSM850 output cable loss
  510.     cfg->getCMU200_OUTPUT_GSM850_CableLoss( d_CMU200_OUTPUT_GSM850_CL );
  511.     edtGSM850OutputCableLoss->Text = Double_To_AnsiString( d_CMU200_OUTPUT_GSM850_CL );
  512.     // GSM900 output cable loss
  513.     cfg->getCMU200_OUTPUT_GSM900_CableLoss( d_CMU200_OUTPUT_GSM900_CL );
  514.     edtGSM900OutputCableLoss->Text = Double_To_AnsiString( d_CMU200_OUTPUT_GSM900_CL );
  515.     // DCS1800 output cable loss
  516.     cfg->getCMU200_OUTPUT_DCS1800_CableLoss( d_CMU200_OUTPUT_DCS1800_CL );
  517.     edtDCS1800OutputCableLoss->Text = Double_To_AnsiString( d_CMU200_OUTPUT_DCS1800_CL );
  518.     // PCS1900 output cable loss
  519.     cfg->getCMU200_OUTPUT_PCS1900_CableLoss( d_CMU200_OUTPUT_PCS1900_CL );
  520.     edtPCS1900OutputCableLoss->Text = Double_To_AnsiString( d_CMU200_OUTPUT_PCS1900_CL );
  521.     // frequency bank
  522.     cfg->getFreqBank( as_FreqBank );
  523.     i_FreqBank = as_FreqBank.ToInt();
  524.     DisplayFreqBank(i_FreqBank);
  525.     // C0 for each Bank
  526.     // arfcn_C0_GSM400
  527.     cfg->getARFCN_C0_GSM400( m_sARFCN_C0_GSM400 );
  528.     edtArfcn_C0_GSM400->Text = IntToStr( m_sARFCN_C0_GSM400 );
  529.     // arfcn_C0_GSM850
  530.     cfg->getARFCN_C0_GSM850( m_sARFCN_C0_GSM850 );
  531.     edtArfcn_C0_GSM850->Text = IntToStr( m_sARFCN_C0_GSM850 );
  532.     // arfcn_C0_GSM
  533.     cfg->getARFCN_C0_GSM( m_sARFCN_C0_GSM );
  534.     edtArfcn_C0_GSM->Text = IntToStr( m_sARFCN_C0_GSM );
  535.     // arfcn_C0_DCS
  536.     cfg->getARFCN_C0_DCS( m_sARFCN_C0_DCS );
  537.     edtArfcn_C0_DCS->Text = IntToStr( m_sARFCN_C0_DCS );
  538.     // arfcn_C0_PCS
  539.     cfg->getARFCN_C0_PCS( m_sARFCN_C0_PCS );
  540.     edtArfcn_C0_PCS->Text = IntToStr( m_sARFCN_C0_PCS );
  541.     // Downlink power
  542.     cfg->getP_DL( d_P_DL );
  543.     edtP_DL->Text = Double_To_AnsiString( d_P_DL );
  544. }
  545. //---------------------------------------------------------------------------
  546. void TfrmCFGCommon::DisplayFreqBank( int i_FreqBank )
  547. {
  548.     int mask;
  549.     mask = FREQUENCY_BANK_GSM_400;
  550.     if( i_FreqBank & mask )
  551.     {
  552.         cbGSM400->Checked = true;
  553.     }
  554.     else
  555.     {
  556.         cbGSM400->Checked = false;
  557.     }
  558.     mask = FREQUENCY_BANK_GSM_850;
  559.     if( i_FreqBank & mask )
  560.     {
  561.         cbGSM850->Checked = true;
  562.     }
  563.     else
  564.     {
  565.         cbGSM850->Checked = false;
  566.     }
  567.     mask = FREQUENCY_BANK_GSM_900;
  568.     if( i_FreqBank & mask )
  569.     {
  570.         cbGSM900->Checked = true;
  571.     }
  572.     else
  573.     {
  574.         cbGSM900->Checked = false;
  575.     }
  576.     mask = FREQUENCY_BANK_DCS_1800;
  577.     if( i_FreqBank & mask )
  578.     {
  579.         cbDCS1800->Checked = true;
  580.     }
  581.     else
  582.     {
  583.         cbDCS1800->Checked = false;
  584.     }
  585.     mask = FREQUENCY_BANK_PCS_1900;
  586.     if( i_FreqBank & mask )
  587.     {
  588.         cbPCS1900->Checked = true;
  589.     }
  590.     else
  591.     {
  592.         cbPCS1900->Checked = false;
  593.     }
  594. }
  595. void __fastcall TfrmCFGCommon::FormShow(TObject *Sender)
  596. {
  597.     if(cfg == NULL)
  598.     {
  599.         cfg = new TMETA_factory_cfg();
  600.     }
  601. }
  602. //---------------------------------------------------------------------------