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

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_CFGCrystalAfc.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  Crystal AFC 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_CFGCrystalAfc.h"
  69. #include "META_Factory.h"
  70. #include "misc.h"
  71. #ifndef  _FT_UTILS_H_
  72. #include "ft_utils.h"
  73. #endif
  74. #include "meta_utils.h"
  75. #ifndef  _BAND_UTILS_H_
  76. #include "band_utils.h"
  77. #endif
  78. //---------------------------------------------------------------------------
  79. #pragma package(smart_init)
  80. #pragma resource "*.dfm"
  81. TfrmCFGCrystalAfc *frmCFGCrystalAfc;
  82. //---------------------------------------------------------------------------
  83. __fastcall TfrmCFGCrystalAfc::TfrmCFGCrystalAfc(TComponent* Owner)
  84.         : TForm(Owner)
  85. {
  86.    // iCHECK_DAC[0] = 8000;
  87.    // iCHECK_DAC[1] = 0;
  88.    // dFREQUENCY_ERROR_PPM[0] = 17.0;
  89.    // dFREQUENCY_ERROR_PPM[1] = -17.0;
  90.     edtCHECK_DAC[0] = edtCRYSTAL_AFC_CHECK_DAC1;
  91.     edtCHECK_DAC[1] = edtCRYSTAL_AFC_CHECK_DAC2;
  92.     edtFREQUENCY_ERROR_PPM[0] = edtCRYSTAL_AFC_MAX_FREQ_ERR_PPM;
  93.     edtFREQUENCY_ERROR_PPM[1] = edtCRYSTAL_AFC_MIN_FREQ_ERR_PPM;
  94. }
  95. //---------------------------------------------------------------------------
  96. void __fastcall TfrmCFGCrystalAfc::btnLoadFromCFGFileClick(TObject *Sender)
  97. {
  98.     bool ok;
  99.     AnsiString asPath, asFileName;
  100.     static bool isFirstOpen = true;
  101.     if( isFirstOpen )
  102.     {
  103.         isFirstOpen = false;
  104.         if( getPathFromStr( frmFatcory->stCFGFile->Caption, asPath ) )
  105.         {
  106.             OpenDlg->InitialDir = asPath;
  107.             if( getFilenameFromStr( frmFatcory->stCFGFile->Caption, asFileName ) )
  108.             {
  109.                 OpenDlg->FileName = asFileName;
  110.             }
  111.         }
  112.         else
  113.         {
  114.             if( getPathFromStr(Application->ExeName, asPath) )
  115.             {
  116.                 OpenDlg->InitialDir = asPath;
  117.             }
  118.             else
  119.             {
  120.                 OpenDlg->InitialDir = "C:\";
  121.             }
  122.         }
  123.     }
  124.     ok = OpenDlg->Execute();
  125.     if( !ok )
  126.     {
  127.         sbCFGCrystalAfc->Panels->Items[0]->Text = (AnsiString) "  Load crystal AFC setting from file fail";
  128.         Application->MessageBox( "Execution Failure : Load crystal AFC setting from file fail", "FAILURE", MB_OK );
  129.         return;
  130.     }
  131.     if (!cfg->ReadFromIniFile(OpenDlg->FileName))
  132.     {
  133.         sbCFGCrystalAfc->Panels->Items[0]->Text = (AnsiString) "  Read CFG file fail";
  134.         Application->MessageBox( "Execution Failure : Read CFG file", "FAILURE", MB_OK );
  135.         return;
  136.     }
  137.     // CRYSTAL_AFC_BAND
  138.     cfg->get_CRYSTAL_AFC_BAND( as_CRYSTAL_AFC_BAND );
  139.     edtCRYSTAL_AFC_BAND->Text = as_CRYSTAL_AFC_BAND;
  140.     // CRYSTAL_AFC_ARFCN
  141.     cfg->get_CRYSTAL_AFC_ARFCN( m_sCRYSTAL_AFC_ARFCN );
  142.     edtCRYSTAL_AFC_ARFCN->Text = IntToStr( m_sCRYSTAL_AFC_ARFCN );
  143.     // CRYSTAL_AFC_GSM850_PCL
  144.     cfg->get_CRYSTAL_AFC_GSM850_PCL( iCRYSTAL_AFC_GSM850_PCL );
  145.     edtCRYSTAL_AFC_GSM850_PCL->Text = IntToStr( iCRYSTAL_AFC_GSM850_PCL );
  146.     // CRYSTAL_AFC_GSM900_PCL
  147.     cfg->get_CRYSTAL_AFC_GSM900_PCL( iCRYSTAL_AFC_GSM900_PCL );
  148.     edtCRYSTAL_AFC_GSM900_PCL->Text = IntToStr( iCRYSTAL_AFC_GSM900_PCL );
  149.     // CRYSTAL_AFC_DCS1800_PCL
  150.     cfg->get_CRYSTAL_AFC_DCS1800_PCL( iCRYSTAL_AFC_DCS1800_PCL );
  151.     edtCRYSTAL_AFC_DCS1800_PCL->Text = IntToStr( iCRYSTAL_AFC_DCS1800_PCL );
  152.     // CRYSTAL_AFC_PCS1900_PCL
  153.     cfg->get_CRYSTAL_AFC_PCS1900_PCL( iCRYSTAL_AFC_PCS1900_PCL );
  154.     edtCRYSTAL_AFC_PCS1900_PCL->Text = IntToStr( iCRYSTAL_AFC_PCS1900_PCL );
  155.     // CRYSTAL_AFC_CAL_DAC
  156.     cfg->get_CRYSTAL_AFC_CAL_DAC( m_sCRYSTAL_AFC_CAL_DAC );
  157.     edtCRYSTAL_AFC_CAL_DAC->Text = IntToStr( m_sCRYSTAL_AFC_CAL_DAC );
  158.     // MIN_CHECK_DAC
  159.     cfg->get_CRYSTAL_AFC_CHECK_DAC1( m_sCRYSTAL_AFC_CHECK_DAC1 );
  160.     edtCRYSTAL_AFC_CHECK_DAC1->Text = IntToStr( m_sCRYSTAL_AFC_CHECK_DAC1 );
  161.     // CRYSTAL_AFC_CHECK_DAC2
  162.     cfg->get_CRYSTAL_AFC_CHECK_DAC2( m_sCRYSTAL_AFC_CHECK_DAC2 );
  163.     edtCRYSTAL_AFC_CHECK_DAC2->Text = IntToStr( m_sCRYSTAL_AFC_CHECK_DAC2 );
  164.     // CRYSTAL_AFC_MIN_FREQ_ERR_PPM
  165.     cfg->get_CRYSTAL_AFC_MIN_FREQ_ERR_PPM( dCRYSTAL_AFC_MIN_FREQ_ERR_PPM );
  166.     edtCRYSTAL_AFC_MIN_FREQ_ERR_PPM->Text = Double_To_AnsiString( dCRYSTAL_AFC_MIN_FREQ_ERR_PPM );
  167.     // CRYSTAL_AFC_MAX_FREQ_ERR_PPM
  168.     cfg->get_CRYSTAL_AFC_MAX_FREQ_ERR_PPM( dCRYSTAL_AFC_MAX_FREQ_ERR_PPM );
  169.     edtCRYSTAL_AFC_MAX_FREQ_ERR_PPM->Text = Double_To_AnsiString( dCRYSTAL_AFC_MAX_FREQ_ERR_PPM );
  170.     // CRYSTAL_AFC_MAX_AFC_TRACK_INIT_FREQ_ERR
  171.     cfg->get_CRYSTAL_AFC_MAX_AFC_TRACK_INIT_FREQ_ERR( m_dCRYSTAL_AFC_MAX_AFC_TRACK_INIT_FREQ_ERR );
  172.     edtCRYSTAL_AFC_MAX_AFC_TRACK_INIT_FREQ_ERR->Text = Double_To_AnsiString( m_dCRYSTAL_AFC_MAX_AFC_TRACK_INIT_FREQ_ERR );
  173.     // CRYSTAL_AFC_FREQ_ERR_MEASUSE_COUNT
  174.     cfg->get_CRYSTAL_AFC_FREQ_ERR_MEASUSE_COUNT(m_sCRYSTAL_AFC_FREQ_ERR_MEASUSE_COUNT);
  175.     edtCRYSTAL_AFC_FREQ_ERR_MEASUSE_COUNT->Text = IntToStr(m_sCRYSTAL_AFC_FREQ_ERR_MEASUSE_COUNT);
  176.     // CRYSTAL_AFC_RECURSIVE_TIMES
  177.     cfg->get_CRYSTAL_AFC_RECURSIVE_TIMES(m_sCRYSTAL_AFC_RECURSIVE_TIMES );
  178.     edtCRYSTAL_AFC_RECURSIVE_TIMES->Text = IntToStr(m_sCRYSTAL_AFC_RECURSIVE_TIMES);
  179. }
  180. //---------------------------------------------------------------------------
  181. void __fastcall TfrmCFGCrystalAfc::FormClose(TObject *Sender,
  182.       TCloseAction &Action)
  183. {
  184.     if(cfg != NULL)
  185.     {
  186.         delete cfg;
  187.         cfg = NULL;
  188.     }
  189. }
  190. //---------------------------------------------------------------------------
  191. void __fastcall TfrmCFGCrystalAfc::btnSaveToCFGFileClick(TObject *Sender)
  192. {
  193.     bool ok;
  194.     AnsiString asPath, asFileName;
  195.     static bool isFirstSave = true;
  196.     if( isFirstSave )
  197.     {
  198.         isFirstSave = false;
  199.         if( getPathFromStr( frmFatcory->stCFGFile->Caption, asPath ) )
  200.         {
  201.             SaveDlg->InitialDir = asPath;
  202.             if( getFilenameFromStr( frmFatcory->stCFGFile->Caption, asFileName ) )
  203.             {
  204.                 SaveDlg->FileName = asFileName;
  205.             }
  206.         }
  207.         else
  208.         {
  209.             if( getPathFromStr(Application->ExeName, asPath) )
  210.             {
  211.                 SaveDlg->InitialDir = asPath;
  212.             }
  213.             else
  214.             {
  215.                 SaveDlg->InitialDir = "C:\";
  216.             }
  217.         }
  218.     }
  219.     if( ! CheckFields() )
  220.     {
  221.         sbCFGCrystalAfc->Panels->Items[0]->Text = (AnsiString) "  Save crystal AFC setting to file fail";
  222.         Application->MessageBox( "Execution Failure : Save crystal AFC setting to file", "FAILURE", MB_OK );
  223.         return;
  224.     }
  225.     ok = SaveDlg->Execute();
  226.     if( !ok )
  227.     {
  228.         sbCFGCrystalAfc->Panels->Items[0]->Text = (AnsiString) "  Save crystal AFC setting to file fail";
  229.         Application->MessageBox( "Execution Failure : Save crystal AFC setting to file", "FAILURE", MB_OK );
  230.         return;
  231.     }
  232.     cfg->SaveCrystalAfcToCfgFile( SaveDlg->FileName );
  233. }
  234. //---------------------------------------------------------------------------
  235. bool  TfrmCFGCrystalAfc::CheckFields( void )
  236. {
  237.     AnsiString  text;    
  238.     text = edtCRYSTAL_AFC_BAND->Text;   if( !IsValidBand( text ) )         {  edtCRYSTAL_AFC_BANCheck(edtCRYSTAL_AFC_BAND);   return(false);   }
  239.     as_CRYSTAL_AFC_BAND = text;
  240.     cfg->setAFC_BAND( as_CRYSTAL_AFC_BAND );
  241.     E_BANDSEL band_index = String_To_BandIdx(as_CRYSTAL_AFC_BAND);
  242.     text = edtCRYSTAL_AFC_ARFCN->Text;   if( !IsValidARFCN( text, band_index, m_sCRYSTAL_AFC_ARFCN ) )         {  edtArfcnCheck(edtCRYSTAL_AFC_ARFCN);   return(false);   }
  243.     cfg->set_CRYSTAL_AFC_ARFCN( m_sCRYSTAL_AFC_ARFCN );
  244.     text = edtCRYSTAL_AFC_GSM850_PCL->Text;   if( !IsValidPCL( text, BANDSEL_GSM850, iCRYSTAL_AFC_GSM850_PCL ) )         {  edtPclCheck(edtCRYSTAL_AFC_GSM850_PCL);   return(false);   }
  245.     cfg->set_CRYSTAL_AFC_GSM850_PCL( iCRYSTAL_AFC_GSM850_PCL );
  246.     text = edtCRYSTAL_AFC_GSM900_PCL->Text;   if( !IsValidPCL( text, BANDSEL_GSM900, iCRYSTAL_AFC_GSM900_PCL ) )         {  edtPclCheck(edtCRYSTAL_AFC_GSM900_PCL);   return(false);   }
  247.     cfg->set_CRYSTAL_AFC_GSM900_PCL( iCRYSTAL_AFC_GSM900_PCL );
  248.     text = edtCRYSTAL_AFC_DCS1800_PCL->Text;   if( !IsValidPCL( text, BANDSEL_DCS1800, iCRYSTAL_AFC_DCS1800_PCL ) )         {  edtPclCheck(edtCRYSTAL_AFC_DCS1800_PCL);   return(false);   }
  249.     cfg->set_CRYSTAL_AFC_DCS1800_PCL( iCRYSTAL_AFC_DCS1800_PCL );
  250.     text = edtCRYSTAL_AFC_PCS1900_PCL->Text;   if( !IsValidPCL( text, BANDSEL_PCS1900, iCRYSTAL_AFC_PCS1900_PCL ) )         {  edtPclCheck(edtCRYSTAL_AFC_PCS1900_PCL);   return(false);   }
  251.     cfg->set_CRYSTAL_AFC_PCS1900_PCL( iCRYSTAL_AFC_PCS1900_PCL );
  252.     text = edtCRYSTAL_AFC_CAL_DAC->Text;   if( !IsValidAFC( text, m_sCRYSTAL_AFC_CAL_DAC ) )         {  edtAfcDacCheck(edtCRYSTAL_AFC_CAL_DAC);   return(false);   }
  253.     cfg->set_CRYSTAL_AFC_CAL_DAC( m_sCRYSTAL_AFC_CAL_DAC );
  254.     text = edtCRYSTAL_AFC_CHECK_DAC2->Text;   if( !IsValidAFC( text, m_sCRYSTAL_AFC_CHECK_DAC2 ) )         {  edtAfcDacCheck(edtCRYSTAL_AFC_CHECK_DAC2);   return(false);   }
  255.     cfg->set_CRYSTAL_AFC_CHECK_DAC2( m_sCRYSTAL_AFC_CHECK_DAC2 );
  256.     text = edtCRYSTAL_AFC_CHECK_DAC1->Text;   if( !IsValidAFC( text, m_sCRYSTAL_AFC_CHECK_DAC1 ) )         {  edtAfcDacCheck(edtCRYSTAL_AFC_CHECK_DAC1);   return(false);   }
  257.     cfg->set_CRYSTAL_AFC_CHECK_DAC1( m_sCRYSTAL_AFC_CHECK_DAC1 );
  258.     text = edtCRYSTAL_AFC_MAX_FREQ_ERR_PPM->Text;   if( !IsValidCFGFrequencyErrorPPM( text, dCRYSTAL_AFC_MAX_FREQ_ERR_PPM ) )         {  edtFreqErrPPMCheck(edtCRYSTAL_AFC_MAX_FREQ_ERR_PPM);   return false;   }
  259.     cfg->set_CRYSTAL_AFC_MAX_FREQ_ERR_PPM( dCRYSTAL_AFC_MAX_FREQ_ERR_PPM );
  260.     text = edtCRYSTAL_AFC_MIN_FREQ_ERR_PPM->Text;   if( !IsValidCFGFrequencyErrorPPM( text, dCRYSTAL_AFC_MIN_FREQ_ERR_PPM ) )         {  edtFreqErrPPMCheck(edtCRYSTAL_AFC_MIN_FREQ_ERR_PPM);   return false;   }
  261.     cfg->set_CRYSTAL_AFC_MIN_FREQ_ERR_PPM( dCRYSTAL_AFC_MIN_FREQ_ERR_PPM );
  262.     text = edtCRYSTAL_AFC_MAX_AFC_TRACK_INIT_FREQ_ERR->Text;   if( !IsValidCFGFrequencyError( text, m_dCRYSTAL_AFC_MAX_AFC_TRACK_INIT_FREQ_ERR ) )         {  edtFreqErrCheck(edtCRYSTAL_AFC_MAX_AFC_TRACK_INIT_FREQ_ERR);   return(false);   }
  263.     cfg->set_CRYSTAL_AFC_MAX_AFC_TRACK_INIT_FREQ_ERR( m_dCRYSTAL_AFC_MAX_AFC_TRACK_INIT_FREQ_ERR );
  264.     text = edtCRYSTAL_AFC_FREQ_ERR_MEASUSE_COUNT->Text;   if( !IsValidAFCCount(text, m_sCRYSTAL_AFC_FREQ_ERR_MEASUSE_COUNT))         {  edtFreqErrMeasCountCheck(edtCRYSTAL_AFC_FREQ_ERR_MEASUSE_COUNT);   return false;   }
  265.     cfg->set_CRYSTAL_AFC_FREQ_ERR_MEASUSE_COUNT(m_sCRYSTAL_AFC_FREQ_ERR_MEASUSE_COUNT);
  266.     text = edtCRYSTAL_AFC_RECURSIVE_TIMES->Text;   if (!IsValidAFCCount(text, m_sCRYSTAL_AFC_RECURSIVE_TIMES))         {  edtFreqErrRecursiveTimesCheck(edtCRYSTAL_AFC_RECURSIVE_TIMES);   return(false);   }
  267.     cfg->set_CRYSTAL_AFC_RECURSIVE_TIMES(m_sCRYSTAL_AFC_RECURSIVE_TIMES);
  268.     return true;
  269. }
  270. //---------------------------------------------------------------------------
  271. void __fastcall TfrmCFGCrystalAfc::edtArfcnCheck(TObject *Sender)
  272. {
  273.     short sdata;
  274.     AnsiString  text;
  275.     TEdit *edit = (TEdit*)Sender;
  276.     char  hint[][256] =
  277.     {   " value shall be 0~124 or 975~1023 ",
  278.        " value shall be 512~885 ",
  279.        " value shall be 512~810 ",
  280.        " value shall be 128~251 ",
  281.     };
  282.     E_BANDSEL CurBand = String_To_BandIdx(as_CRYSTAL_AFC_BAND);
  283.     text = edit->Text;
  284.     if (!IsValidARFCN(text, CurBand, sdata))
  285.     {
  286.         edit->Text = IntToStr(Default_ARFCN[CurBand]);
  287.         ShowHintLabel(edit, hint[CurBand]);
  288.         edit->SetFocus();
  289.         return;
  290.     }
  291. }
  292. //---------------------------------------------------------------------------
  293. void  TfrmCFGCrystalAfc::ShowHintLabel( TControl *sender, char* hint )
  294. {
  295.    TPoint pt0 = this->ClientOrigin;
  296.    TPoint pt1 = sender->ClientOrigin;
  297.    lblHint->Left = (pt1.x-pt0.x);
  298.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  299.    lblHint->Caption = hint;
  300.    lblHint->Visible = true;
  301.    HintTimer->Enabled = true;
  302. }
  303. //---------------------------------------------------------------------------
  304. void __fastcall TfrmCFGCrystalAfc::HintTimerTimer(TObject *Sender)
  305. {
  306.     HintTimer->Enabled = false;
  307.     lblHint->Visible = false;
  308. }
  309. //---------------------------------------------------------------------------
  310. void __fastcall TfrmCFGCrystalAfc::edtPclCheck(TObject *Sender)
  311. {
  312.     int  i;
  313.     int  data;
  314.     AnsiString  text;
  315.     TEdit *edit = (TEdit*)Sender;
  316.     char  hint[][256] =
  317.     {  " value shall be 4~31 ",
  318.        " value shall be 0~28 ",
  319.        " value shall be 0~15 ",
  320.        " value shall be 4~31 ",
  321.     };
  322.     int CurBand = 0;
  323.     
  324.     text = edit->Text;
  325.     if( !IsValidPCL( text, CurBand, data ) )
  326.     {
  327.         ShowHintLabel( edit, hint[CurBand] );
  328.         edit->Text = IntToStr( Default_PCL );
  329.         edit->SetFocus();
  330.         return;
  331.     }
  332. }
  333. //---------------------------------------------------------------------------
  334. void __fastcall TfrmCFGCrystalAfc::edtAfcDacCheck(TObject *Sender)
  335. {
  336.     short  sdata;
  337.     AnsiString  text;
  338.     TEdit *edit = (TEdit*)Sender;
  339.     char  hint[] = " value shall be 0~8191 ";
  340.     text = edit->Text;
  341.     if (!IsValidAFC( text, sdata ) )
  342.     {
  343.         ShowHintLabel( edit, hint );
  344.         edit->Text = IntToStr( Default_AFC );
  345.         edit->SetFocus();
  346.         return;
  347.     }
  348.     //iCHECK_DAC[edit->Tag] = data;
  349. }
  350. //---------------------------------------------------------------------------
  351. void __fastcall TfrmCFGCrystalAfc::edtFreqErrPPMCheck(TObject *Sender)
  352. {
  353.     double  data;
  354.     AnsiString  text;
  355.     TEdit *edit = (TEdit*)Sender;
  356.     char  hint[] = " value is not valid ";
  357.     text = edit->Text;
  358.     if( !IsValidCFGFrequencyErrorPPM( text, data ) )
  359.     {
  360.         ShowHintLabel( edit, hint );
  361.         edit->Text = IntToStr( 0 );
  362.         edit->SetFocus();
  363.         return;
  364.     }
  365.    // dFREQUENCY_ERROR_PPM[edit->Tag] = dCRYSTAL_AFC_MAX_FREQ_ERR_PPM;
  366.    // dFREQUENCY_ERROR_PPM[1] = dCRYSTAL_AFC_MIN_FREQ_ERR_PPM;
  367. }
  368. //---------------------------------------------------------------------------
  369. void __fastcall TfrmCFGCrystalAfc::FormShow(TObject *Sender)
  370. {
  371.     if(cfg == NULL)
  372.     {
  373.         cfg = new TMETA_factory_cfg();
  374.     }    
  375. }
  376. //---------------------------------------------------------------------------
  377. void __fastcall TfrmCFGCrystalAfc::edtCRYSTAL_AFC_BANCheck(TObject *Sender)
  378. {
  379.     int  i;
  380.     AnsiString  text;
  381.     TEdit *edit = (TEdit*)Sender;
  382.     char  hint[] = " Support band: GSM850, GSM, DCS, PCS ";
  383.     text = edit->Text;
  384.     if( !IsValidBand( text ) )
  385.     {
  386.         ShowHintLabel( edit, hint );
  387.         edit->Text = "GSM";
  388.         edit->SetFocus();
  389.         return;
  390.     }
  391. }
  392. //---------------------------------------------------------------------------
  393. void __fastcall TfrmCFGCrystalAfc::edtFreqErrMeasCountCheck(
  394.       TObject *Sender)
  395. {
  396.     short s_data;
  397.     AnsiString  text;
  398.     TEdit *edit = (TEdit*)Sender;
  399.     char  hint[] = "value shall be 0~32767 ";
  400.     text = edit->Text;
  401.     if (!IsValidAFCCount(text, s_data))
  402.     {
  403.         ShowHintLabel(edit, hint);
  404.         edit->Text = IntToStr(10);
  405.         edit->SetFocus();
  406.         return;
  407.     }
  408. }
  409. //---------------------------------------------------------------------------
  410. void __fastcall TfrmCFGCrystalAfc::edtFreqErrRecursiveTimesCheck(
  411.       TObject *Sender)
  412. {
  413.     short s_data;
  414.     AnsiString text;
  415.     TEdit *edit = (TEdit*)Sender;
  416.     char hint[] = "value shall be 0~32767 ";
  417.     text = edit->Text;
  418.     if (!IsValidAFCCount(text, s_data))
  419.     {
  420.         ShowHintLabel(edit, hint);
  421.         edit->Text = IntToStr(20);
  422.         edit->SetFocus();
  423.         return;
  424.     }
  425. }
  426. //---------------------------------------------------------------------------
  427. void __fastcall TfrmCFGCrystalAfc::edtFreqErrCheck(TObject *Sender)
  428. {
  429.     double  data;
  430.     AnsiString  text;
  431.     TEdit *edit = (TEdit*)Sender;
  432.     char  hint[] = " value is not valid ";
  433.     text = edit->Text;
  434.     if( !IsValidCFGFrequencyError( text, data ) )
  435.     {
  436.         ShowHintLabel( edit, hint );
  437.         edit->Text = Double_To_AnsiString( 100.0 );
  438.         edit->SetFocus();
  439.         return;
  440.     }
  441. }
  442. //---------------------------------------------------------------------------