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

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_CFGAFC.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  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_CFGAfc.h"
  69. #include "META_Factory.h"
  70. #include "misc.h"
  71. #include "meta_utils.h"
  72. #ifndef  _FT_UTILS_H_
  73. #include "ft_utils.h"
  74. #endif
  75. //---------------------------------------------------------------------------
  76. #pragma package(smart_init)
  77. #pragma resource "*.dfm"
  78. TfrmCFGAfc *frmCFGAfc;
  79. //static int Default_AFC = 4100;
  80. static int Default_N_AFC = 5;
  81. //---------------------------------------------------------------------------
  82. __fastcall TfrmCFGAfc::TfrmCFGAfc(TComponent* Owner)
  83.         : TForm(Owner)
  84. {
  85.     m_sDAC[0] = m_sDAC1;
  86.     m_sDAC[1] = m_sDAC2;
  87.     m_sINIT_AFC_DAC[0] = m_sMAX_INIT_AFC_DAC;
  88.     m_sINIT_AFC_DAC[1] = m_sMIN_INIT_AFC_DAC;
  89.     dAFC_SLOPE[0] = dMAX_AFC_SLOPE;
  90.     dAFC_SLOPE[1] = dMIN_AFC_SLOPE;
  91. }
  92. //---------------------------------------------------------------------------
  93. void __fastcall TfrmCFGAfc::edtN_AFCCheck(TObject *Sender)
  94. {
  95.     short sdata;
  96.     AnsiString  text;
  97.     TEdit *edit = (TEdit*)Sender;
  98.     char hint[] = "value shall be 0~32767 ";
  99.     text = edit->Text;
  100.     if (!IsValidAFCCount(text, sdata))
  101.     {
  102.         ShowHintLabel(edit, hint);
  103.         edit->Text = IntToStr(Default_N_AFC);
  104.         edit->SetFocus();
  105.         return;
  106.     }
  107. }
  108. //---------------------------------------------------------------------------
  109. void __fastcall TfrmCFGAfc::edtInitAfcDacCheck(TObject *Sender)
  110. {
  111.     short s_data;
  112.     AnsiString  text;
  113.     TEdit *edit = (TEdit*)Sender;
  114.     char  hint[] = " value shall be 0~8191 ";
  115.     text = edit->Text;
  116.     if (!IsValidAFC(text, s_data))
  117.     {
  118.         ShowHintLabel(edit, hint);
  119.         edit->Text = IntToStr(Default_AFC);
  120.         edit->SetFocus();
  121.         return;
  122.     }
  123.     m_sINIT_AFC_DAC[edit->Tag] = s_data;
  124. }
  125. //---------------------------------------------------------------------------
  126. void __fastcall TfrmCFGAfc::edtAfcSlopeCheck(TObject *Sender)
  127. {
  128.     int  i;
  129.     double  data;
  130.     AnsiString  text;
  131.     TEdit *edit = (TEdit*)Sender;
  132.     char  hint[] = " value shall be -32~31 ";
  133.     text = edit->Text;
  134.     if( !IsValidCFGAFCSlope( text, data ) )
  135.     {
  136.        ShowHintLabel( edit, hint );
  137.        edit->SetFocus();
  138.        return;
  139.    }
  140.    dAFC_SLOPE[edit->Tag] = data;
  141. }
  142. //---------------------------------------------------------------------------
  143. void TfrmCFGAfc::ShowHintLabel( TControl *sender, char* hint )
  144. {
  145.    TPoint pt0 = this->ClientOrigin;
  146.    TPoint pt1 = sender->ClientOrigin;
  147.    lblHint->Left = (pt1.x-pt0.x);
  148.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  149.    lblHint->Caption = hint;
  150.    lblHint->Visible = true;
  151.    HintTimer->Enabled = true;
  152. }
  153. //---------------------------------------------------------------------------
  154. bool  TfrmCFGAfc::CheckFields( void )
  155. {
  156.     AnsiString  text;
  157.     text = edtAFC_BAND->Text;   if( !IsValidBand( text ) )         {  edtAfcBandCheck(edtAFC_BAND);   return(false);   }
  158.     as_AFC_BAND = text;
  159.     cfg->setAFC_BAND( as_AFC_BAND );
  160.     
  161.     E_BANDSEL CurBand = Get_CurrentBand(edtAFC_BAND->Text);
  162.     text = edtAFC_ARFCN->Text;   if( !IsValidARFCN( text, CurBand, m_sAFC_ARFCN) )        {  edtAfcArfcnCheck(edtAFC_ARFCN);   return(false);   }
  163.     cfg->setAFC_ARFCN(m_sAFC_ARFCN);
  164.     text = edtN_AFC->Text;   if( !IsValidAFCCount( text, m_sN_AFC ) )        {  edtN_AFCCheck(edtN_AFC);   return(false);   }
  165.     cfg->setN_AFC( m_sN_AFC );
  166.     text = edtDAC1->Text;   if( !IsValidAFC( text, m_sDAC1 ) )         {  edtAfcDacCheck(edtDAC1);   return(false);   }
  167.     cfg->set_DAC1(m_sDAC1);
  168.     text = edtDAC2->Text;   if( !IsValidAFC( text, m_sDAC2 ) )         {  edtAfcDacCheck(edtDAC2);   return(false);   }
  169.     cfg->set_DAC2(m_sDAC2);
  170.     text = edtMAX_INIT_AFC_DAC->Text;   if( !IsValidAFC( text, m_sMAX_INIT_AFC_DAC ) )         {  edtAfcDacCheck(edtMAX_INIT_AFC_DAC);   return(false);   }
  171.     cfg->set_MAX_INIT_AFC_DAC(m_sMAX_INIT_AFC_DAC);
  172.     text = edtMIN_INIT_AFC_DAC->Text;   if( !IsValidAFC( text, m_sMIN_INIT_AFC_DAC ) )         {  edtAfcDacCheck(edtMIN_INIT_AFC_DAC);   return(false);   }
  173.     cfg->set_MIN_INIT_AFC_DAC(m_sMIN_INIT_AFC_DAC);
  174.     text = edtMAX_AFC_SLOPE->Text;   if( !IsValidCFGAFCSlope( text, dMAX_AFC_SLOPE ) )         {  edtAfcSlopeCheck(edtMAX_AFC_SLOPE);   return(false);   }
  175.     cfg->set_MAX_AFC_SLOPE( dMAX_AFC_SLOPE );
  176.     text = edtMIN_AFC_SLOPE->Text;   if( !IsValidCFGAFCSlope( text, dMIN_AFC_SLOPE ) )         {  edtAfcSlopeCheck(edtMIN_AFC_SLOPE);   return(false);   }
  177.     cfg->set_MIN_AFC_SLOPE( dMIN_AFC_SLOPE );
  178.     return true;
  179. }
  180. //---------------------------------------------------------------------------
  181. void __fastcall TfrmCFGAfc::HintTimerTimer(TObject *Sender)
  182. {
  183.     HintTimer->Enabled = false;
  184.     lblHint->Visible = false;
  185. }
  186. //---------------------------------------------------------------------------
  187. void __fastcall TfrmCFGAfc::btnLoadFromCFGFileClick(TObject *Sender)
  188. {
  189.     bool ok;
  190.     int i;
  191.     AnsiString asPath, asFileName;
  192.     static bool isFirstOpen = true;
  193.     if( isFirstOpen )
  194.     {
  195.         isFirstOpen = false;
  196.         if( getPathFromStr( frmFatcory->stCFGFile->Caption, asPath ) )
  197.         {
  198.             OpenDlg->InitialDir = asPath;
  199.             if( getFilenameFromStr( frmFatcory->stCFGFile->Caption, asFileName ) )
  200.             {
  201.                 OpenDlg->FileName = asFileName;
  202.             }
  203.         }
  204.         else
  205.         {
  206.             if( getPathFromStr(Application->ExeName, asPath) )
  207.             {
  208.                 OpenDlg->InitialDir = asPath;
  209.             }
  210.             else
  211.             {
  212.                 OpenDlg->InitialDir = "C:\";
  213.             }
  214.         }
  215.     }
  216.     ok = OpenDlg->Execute();
  217.     if( !ok )
  218.     {
  219.         sbCFGAfc->Panels->Items[0]->Text = (AnsiString) "  Load AFC setting from file fail";
  220.         Application->MessageBox( "Execution Failure : Load AFC setting from file fail", "FAILURE", MB_OK );
  221.         return;
  222.     }
  223.     if (!cfg->ReadFromIniFile(OpenDlg->FileName))
  224.     {
  225.         sbCFGAfc->Panels->Items[0]->Text = (AnsiString) "  Read CFG file fail";
  226.         Application->MessageBox("Execution Failure : Read CFG file", "FAILURE", MB_OK);
  227.         return;
  228.     }
  229.     // AFC BAND
  230.     cfg->getAFC_BAND( as_AFC_BAND );
  231.     edtAFC_BAND->Text = as_AFC_BAND;
  232.     // AFC ARFCN
  233.     cfg->getAFC_ARFCN(m_sAFC_ARFCN);
  234.     edtAFC_ARFCN->Text = IntToStr(m_sAFC_ARFCN);
  235.     // N_AFC
  236.     cfg->getN_AFC(m_sN_AFC);
  237.     edtN_AFC->Text = IntToStr(m_sN_AFC);
  238.     // DAC1
  239.     cfg->get_DAC1(m_sDAC1);
  240.     edtDAC1->Text = IntToStr(m_sDAC1);
  241.     // DAC2
  242.     cfg->get_DAC2(m_sDAC2);
  243.     edtDAC2->Text = IntToStr(m_sDAC2);
  244.     // MAX_INIT_AFC_DAC
  245.     cfg->get_MAX_INIT_AFC_DAC(m_sMAX_INIT_AFC_DAC);
  246.     edtMAX_INIT_AFC_DAC->Text = IntToStr(m_sMAX_INIT_AFC_DAC);
  247.     // MIN_INIT_AFC_DAC
  248.     cfg->get_MIN_INIT_AFC_DAC( m_sMIN_INIT_AFC_DAC );
  249.     edtMIN_INIT_AFC_DAC->Text = IntToStr( m_sMIN_INIT_AFC_DAC );
  250.     // MAX_AFC_SLOPE
  251.     cfg->get_MAX_AFC_SLOPE( dMAX_AFC_SLOPE );
  252.     edtMAX_AFC_SLOPE->Text = Double_To_AnsiString( dMAX_AFC_SLOPE );
  253.     // MIN_AFC_SLOPE
  254.     cfg->get_MIN_AFC_SLOPE( dMIN_AFC_SLOPE );
  255.     edtMIN_AFC_SLOPE->Text = Double_To_AnsiString( dMIN_AFC_SLOPE );
  256. }
  257. //---------------------------------------------------------------------------
  258. void __fastcall TfrmCFGAfc::FormClose(TObject *Sender,
  259.       TCloseAction &Action)
  260. {
  261.     if(cfg != NULL)
  262.     {
  263.         delete cfg;
  264.         cfg = NULL;
  265.     }        
  266. }
  267. //---------------------------------------------------------------------------
  268. void __fastcall TfrmCFGAfc::btnSaveToCFGFileClick(TObject *Sender)
  269. {
  270.     bool ok;
  271.     int i;
  272.     AnsiString asPath, asFileName;
  273.     static bool isFirstSave = true;
  274.     if( isFirstSave )
  275.     {
  276.         isFirstSave = false;
  277.         if( getPathFromStr( frmFatcory->stCFGFile->Caption, asPath ) )
  278.         {
  279.             SaveDlg->InitialDir = asPath;
  280.             if( getFilenameFromStr( frmFatcory->stCFGFile->Caption, asFileName ) )
  281.             {
  282.                 SaveDlg->FileName = asFileName;
  283.             }
  284.         }
  285.         else
  286.         {
  287.             if( getPathFromStr(Application->ExeName, asPath) )
  288.             {
  289.                 SaveDlg->InitialDir = asPath;
  290.             }
  291.             else
  292.             {
  293.                 SaveDlg->InitialDir = "C:\";
  294.             }
  295.         }
  296.     }
  297.     if( ! CheckFields() )
  298.     {
  299.         sbCFGAfc->Panels->Items[0]->Text = (AnsiString) "  Save AFC setting to file fail";
  300.         Application->MessageBox( "Execution Failure : Save AFC setting to file", "FAILURE", MB_OK );
  301.         return;
  302.     }
  303.     ok = SaveDlg->Execute();
  304.     if( !ok )
  305.     {
  306.         sbCFGAfc->Panels->Items[0]->Text = (AnsiString) "  Save AFC setting to file fail";
  307.         Application->MessageBox( "Execution Failure : Save AFC setting to file", "FAILURE", MB_OK );
  308.         return;
  309.     }
  310.     cfg->SaveAfcToCfgFile( SaveDlg->FileName );    
  311. }
  312. //---------------------------------------------------------------------------
  313. void __fastcall TfrmCFGAfc::FormShow(TObject *Sender)
  314. {
  315.     if(cfg == NULL)
  316.     {
  317.         cfg = new TMETA_factory_cfg();
  318.     }    
  319. }
  320. //---------------------------------------------------------------------------
  321. void __fastcall TfrmCFGAfc::edtAfcDacCheck(TObject *Sender)
  322. {
  323.     short  sdata;
  324.     AnsiString  text;
  325.     TEdit *edit = (TEdit*)Sender;
  326.     char  hint[] = " value shall be 0~8191 ";
  327.     text = edit->Text;
  328.     if (!IsValidAFC(text, sdata))
  329.     {
  330.         ShowHintLabel( edit, hint );
  331.         edit->Text = IntToStr( Default_AFC );
  332.         edit->SetFocus();
  333.         return;
  334.     }
  335.     m_sDAC[edit->Tag] = sdata;
  336. }
  337. //---------------------------------------------------------------------------
  338. void __fastcall TfrmCFGAfc::edtAfcBandCheck(TObject *Sender)
  339. {
  340.     int  i;
  341.     //int  data;
  342.     AnsiString  text;
  343.     TEdit *edit = (TEdit*)Sender;
  344.     char  hint[] = " Support band: GSM850, GSM, DCS, PCS ";
  345.     text = edit->Text;
  346.     if( !IsValidBand( text ) )
  347.     {
  348.         ShowHintLabel( edit, hint );
  349.         edit->Text = "GSM";
  350.         edit->SetFocus();
  351.         return;
  352.     }
  353. }
  354. //---------------------------------------------------------------------------
  355. void __fastcall TfrmCFGAfc::edtAfcArfcnCheck(TObject *Sender)
  356. {
  357.     short sdata;
  358.     E_BANDSEL CurBand = Get_CurrentBand(edtAFC_BAND->Text);
  359.     AnsiString  text;
  360.     TEdit *edit = (TEdit*)Sender;
  361.    // int Default_ARFCN[4] = { 0, 512, 512, 128 };
  362.     char  hint[][256] =
  363.     {   " value shall be 0~124 or 975~1023 ",
  364.         " value shall be 512~885 ",
  365.         " value shall be 512~810 ",
  366.         " value shall be 128~251 ",
  367.     };
  368.     text = edit->Text;
  369.     if (!IsValidARFCN(text, CurBand, sdata))
  370.     {
  371.         edit->Text = IntToStr( Default_ARFCN[CurBand] );
  372.         ShowHintLabel( edit, hint[CurBand] );
  373.         edit->SetFocus();
  374.         return;
  375.     }
  376. }
  377. //---------------------------------------------------------------------------
  378. E_BANDSEL TfrmCFGAfc::Get_CurrentBand(AnsiString as_band)
  379. {
  380.     AnsiString BAND_NAME[]=
  381.     {
  382.         "GSM",
  383.         "DCS",
  384.         "PCS",
  385.         "GSM850"
  386.     };
  387.     E_BANDSEL band;
  388.     for (int i=0; i<sizeof(BAND_NAME)/sizeof(BAND_NAME[0]); i++)
  389.     {
  390.         if (BAND_NAME[i].AnsiCompareIC(as_band) == 0)
  391.         {
  392.             band = (E_BANDSEL) i;
  393.             break;
  394.         }
  395.     }
  396.     return band;
  397. }