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

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_CFGADC.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  ADC 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_CFGADC.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. //---------------------------------------------------------------------------
  76. #pragma package(smart_init)
  77. #pragma resource "*.dfm"
  78. TfrmCFGAdc *frmCFGAdc;
  79. //---------------------------------------------------------------------------
  80. __fastcall TfrmCFGAdc::TfrmCFGAdc(TComponent* Owner)
  81.         : TForm(Owner)
  82. {
  83.     i_ADC_V[0] = i_ADC_V1;
  84.     i_ADC_V[1] = i_ADC_V2;
  85.     i_ADC_V[2] = i_ADC_CHECK_VOLTAGE;
  86.     i_ADC_V[3] = i_NORMAL_VOLTAGE;
  87.     i_BATTERY_ADC_SLOPE[0] = i_MAX_BATTERY_ADC_SLOPE;
  88.     i_BATTERY_ADC_SLOPE[1] = i_MIN_BATTERY_ADC_SLOPE;
  89.     i_BATTERY_ADC_OFFSET[0] = i_MAX_BATTERY_ADC_OFFSET;
  90.     i_BATTERY_ADC_OFFSET[1] = i_MIN_BATTERY_ADC_OFFSET;
  91.     i_CHANNEL[0] = i_BATTERY_CHANNEL;
  92.     i_CHANNEL[1] = i_CHARGER_CHANNEL;
  93. }
  94. //---------------------------------------------------------------------------
  95. void __fastcall TfrmCFGAdc::btnLoadFromCFGFileClick(TObject *Sender)
  96. {
  97.     bool ok;
  98.     int i;
  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.         sbCFGAdc->Panels->Items[0]->Text = (AnsiString) "  Load ADC setting from file fail";
  128.         Application->MessageBox( "Execution Failure : Load ADC setting from file fail", "FAILURE", MB_OK );
  129.         return;
  130.     }
  131.     if (!cfg->ReadFromIniFile(OpenDlg->FileName))
  132.     {
  133.         sbCFGAdc->Panels->Items[0]->Text = (AnsiString) "  Read CFG file fail";
  134.         Application->MessageBox( "Execution Failure : Read CFG file", "FAILURE", MB_OK );
  135.         return;
  136.     }
  137.     // ADC_V1
  138.     cfg->getADC_V1( i_ADC_V1 );
  139.     edtADC_V1->Text = IntToStr( i_ADC_V1 );
  140.     // ADC_V2
  141.     cfg->getADC_V2( i_ADC_V2 );
  142.     edtADC_V2->Text = IntToStr( i_ADC_V2 );
  143.     // ADC_CHECK_VOLTAGE
  144.     cfg->getADC_CHECK_VOLTAGE( i_ADC_CHECK_VOLTAGE );
  145.     edtADC_CHECK_VOLTAGE->Text = IntToStr( i_ADC_CHECK_VOLTAGE );
  146.     // NORMAL_VOLTAGE
  147.     cfg->get_NORMAL_VOLTAGE( i_NORMAL_VOLTAGE );
  148.     edtNORMAL_VOLTAGE->Text = IntToStr( i_NORMAL_VOLTAGE );
  149.     // CURRENT_LIMIT
  150.     cfg->get_CURRENT_LIMIT( i_CURRENT_LIMIT );
  151.     edtCURRENT_LIMIT->Text = IntToStr( i_CURRENT_LIMIT );
  152.     // MAX_BATTERY_ADC_SLOPE
  153.     cfg->get_MAX_BATTERY_ADC_SLOPE( i_MAX_BATTERY_ADC_SLOPE );
  154.     edtMAX_BATTERY_ADC_SLOPE->Text = IntToStr( i_MAX_BATTERY_ADC_SLOPE );
  155.     // MIN_BATTERY_ADC_SLOPE
  156.     cfg->get_MIN_BATTERY_ADC_SLOPE( i_MIN_BATTERY_ADC_SLOPE );
  157.     edtMIN_BATTERY_ADC_SLOPE->Text = IntToStr( i_MIN_BATTERY_ADC_SLOPE );
  158.     // MAX_BATTERY_ADC_OFFSET
  159.     cfg->get_MAX_BATTERY_ADC_OFFSET( i_MAX_BATTERY_ADC_OFFSET );
  160.     edtMAX_BATTERY_ADC_OFFSET->Text = IntToStr( i_MAX_BATTERY_ADC_OFFSET );
  161.     // MIN_BATTERY_ADC_OFFSET
  162.     cfg->get_MIN_BATTERY_ADC_OFFSET( i_MIN_BATTERY_ADC_OFFSET );
  163.     edtMIN_BATTERY_ADC_OFFSET->Text = IntToStr( i_MIN_BATTERY_ADC_OFFSET );
  164.     // BATTERY_CHANNEL
  165.     cfg->get_BATTERY_CHANNEL( i_BATTERY_CHANNEL );
  166.     edtBATTERY_CHANNEL->Text = IntToStr( i_BATTERY_CHANNEL );
  167.     // CHARGER_CHANNEL
  168.     cfg->get_CHARGER_CHANNEL( i_CHARGER_CHANNEL );
  169.     edtCHARGER_CHANNEL->Text = IntToStr( i_CHARGER_CHANNEL );
  170.     // ADC_RESISTANCE
  171.     cfg->get_ADC_RESISTANCE( d_ADC_RESISTANCE );
  172.     edtADC_RESISTANCE->Text = Double_To_AnsiString( d_ADC_RESISTANCE );
  173.     // MAX_VOLTAGE_DIFFERENCE
  174.     cfg->get_MAX_VOLTAGE_DIFFERENCE( d_MAX_VOLTAGE_DIFFERENCE );
  175.     edtMAX_VOLTAGE_DIFFERENCE->Text = Double_To_AnsiString( d_MAX_VOLTAGE_DIFFERENCE );
  176.     // MAX_CURRENT_DIFFERENCE
  177.     cfg->get_MAX_CURRENT_DIFFERENCE( d_MAX_CURRENT_DIFFERENCE );
  178.     edtMAX_CURRENT_DIFFERENCE->Text = Double_To_AnsiString( d_MAX_CURRENT_DIFFERENCE );
  179.     // ADC_MEASUREMENT_COUNT
  180.     cfg->get_ADC_MEASUREMENT_COUNT( i_ADC_MEASUREMENT_COUNT );
  181.     edtADC_MEASUREMENT_COUNT->Text = IntToStr( i_ADC_MEASUREMENT_COUNT );
  182. }
  183. //---------------------------------------------------------------------------
  184. void __fastcall TfrmCFGAdc::HintTimerTimer(TObject *Sender)
  185. {
  186.     HintTimer->Enabled = false;
  187.     lblHint->Visible = false;
  188. }
  189. //---------------------------------------------------------------------------
  190. void __fastcall TfrmCFGAdc::FormClose(TObject *Sender,
  191.       TCloseAction &Action)
  192. {
  193.     if(cfg != NULL)
  194.     {
  195.         delete cfg;
  196.         cfg = NULL;
  197.     }
  198. }
  199. //---------------------------------------------------------------------------
  200. void __fastcall TfrmCFGAdc::btnSaveToCFGFileClick(TObject *Sender)
  201. {
  202.     bool ok;
  203.     int i;
  204.     AnsiString asPath, asFileName;
  205.     static bool isFirstSave = true;
  206.     if( isFirstSave )
  207.     {
  208.         isFirstSave = false;
  209.         if( getPathFromStr( frmFatcory->stCFGFile->Caption, asPath ) )
  210.         {
  211.             SaveDlg->InitialDir = asPath;
  212.             if( getFilenameFromStr( frmFatcory->stCFGFile->Caption, asFileName ) )
  213.             {
  214.                 SaveDlg->FileName = asFileName;
  215.             }
  216.         }
  217.         else
  218.         {
  219.             if( getPathFromStr(Application->ExeName, asPath) )
  220.             {
  221.                 SaveDlg->InitialDir = asPath;
  222.             }
  223.             else
  224.             {
  225.                 SaveDlg->InitialDir = "C:\";
  226.             }
  227.         }
  228.     }
  229.     if( ! CheckFields() )
  230.     {
  231.         sbCFGAdc->Panels->Items[0]->Text = (AnsiString) "  Save ADC setting to file fail";
  232.         Application->MessageBox( "Execution Failure : Save ADC setting to file", "FAILURE", MB_OK );
  233.         return;
  234.     }
  235.     ok = SaveDlg->Execute();
  236.     if( !ok )
  237.     {
  238.         sbCFGAdc->Panels->Items[0]->Text = (AnsiString) "  Save ADC setting to file fail";
  239.         Application->MessageBox( "Execution Failure : Save ADC setting to file", "FAILURE", MB_OK );
  240.         return;
  241.     }
  242.     cfg->SaveAdcToCfgFile( SaveDlg->FileName );
  243. }
  244. //---------------------------------------------------------------------------
  245. bool  TfrmCFGAdc::CheckFields( void )
  246. {
  247.     AnsiString  text;    
  248.     text = edtADC_V1->Text;   if( !IsValidADCVoltage( text, i_ADC_V1 ) )         {  edtADCVoltageCheck(edtADC_V1);   return false;   }
  249.     cfg->setADC_V1( i_ADC_V1 );
  250.     text = edtADC_V2->Text;   if( !IsValidADCVoltage( text, i_ADC_V2 ) )         {  edtADCVoltageCheck(edtADC_V2);   return false;   }
  251.     cfg->setADC_V2( i_ADC_V2 );
  252.     text = edtADC_CHECK_VOLTAGE->Text;   if( !IsValidADCVoltage( text, i_ADC_CHECK_VOLTAGE ) )         {  edtADCVoltageCheck(edtADC_CHECK_VOLTAGE);   return false;   }
  253.     cfg->setADC_CHECK_VOLTAGE( i_ADC_CHECK_VOLTAGE );
  254.     text = edtNORMAL_VOLTAGE->Text;   if( !IsValidADCVoltage( text, i_NORMAL_VOLTAGE ) )         {  edtADCVoltageCheck(edtNORMAL_VOLTAGE);   return false;   }
  255.     cfg->set_NORMAL_VOLTAGE( i_NORMAL_VOLTAGE );
  256.     text = edtCURRENT_LIMIT->Text;   if( !IsValidCurrentLimit( text, i_CURRENT_LIMIT ) )         {  edtCurrentLimitCheck(edtCURRENT_LIMIT);   return false;   }
  257.     cfg->set_CURRENT_LIMIT( i_CURRENT_LIMIT );
  258.     text = edtMAX_BATTERY_ADC_SLOPE->Text;   if( !IsValidADCSlope( text, i_MAX_BATTERY_ADC_SLOPE ) )         {  edtADCSlopeCheck(edtMAX_BATTERY_ADC_SLOPE);   return false;   }
  259.     cfg->set_MAX_BATTERY_ADC_SLOPE( i_MAX_BATTERY_ADC_SLOPE );
  260.     text = edtMIN_BATTERY_ADC_SLOPE->Text;   if( !IsValidADCSlope( text, i_MIN_BATTERY_ADC_SLOPE ) )         {  edtADCSlopeCheck(edtMIN_BATTERY_ADC_SLOPE);   return false;   }
  261.     cfg->set_MIN_BATTERY_ADC_SLOPE( i_MIN_BATTERY_ADC_SLOPE );
  262.     text = edtMAX_BATTERY_ADC_OFFSET->Text;   if( !IsValidADCOffset( text, i_MAX_BATTERY_ADC_OFFSET ) )         {  edtADCOffsetCheck(edtMAX_BATTERY_ADC_OFFSET);   return false;   }
  263.     cfg->set_MAX_BATTERY_ADC_OFFSET( i_MAX_BATTERY_ADC_OFFSET );
  264.     text = edtMIN_BATTERY_ADC_OFFSET->Text;   if( !IsValidADCOffset( text, i_MIN_BATTERY_ADC_OFFSET ) )         {  edtADCOffsetCheck(edtMIN_BATTERY_ADC_OFFSET);   return false;   }
  265.     cfg->set_MIN_BATTERY_ADC_OFFSET( i_MIN_BATTERY_ADC_OFFSET );
  266.     text = edtBATTERY_CHANNEL->Text;   if( !IsValidADCChannel( text, i_BATTERY_CHANNEL ) )         {  edtADCChannelCheck(edtBATTERY_CHANNEL);   return false;   }
  267.     cfg->set_BATTERY_CHANNEL( i_BATTERY_CHANNEL );
  268.     text = edtCHARGER_CHANNEL->Text;   if( !IsValidADCChannel( text, i_CHARGER_CHANNEL ) )         {  edtADCChannelCheck(edtCHARGER_CHANNEL);   return false;   }
  269.     cfg->set_CHARGER_CHANNEL( i_CHARGER_CHANNEL );
  270.     text = edtADC_RESISTANCE->Text;   if( !IsValidADCResistance( text, d_ADC_RESISTANCE ) )         {  edtADCResistanceCheck(edtADC_RESISTANCE);   return false;   }
  271.     cfg->set_ADC_RESISTANCE( d_ADC_RESISTANCE );
  272.     text = edtMAX_VOLTAGE_DIFFERENCE->Text;   if( !IsValidADCMaxVoltageDifference( text, d_MAX_VOLTAGE_DIFFERENCE ) )         {  edtADCMaxVoltageDifferenceCheck(edtMAX_VOLTAGE_DIFFERENCE);   return false;   }
  273.     cfg->set_MAX_VOLTAGE_DIFFERENCE( d_MAX_VOLTAGE_DIFFERENCE );
  274.     text = edtMAX_CURRENT_DIFFERENCE->Text;   if( !IsValidADCMaxCurrentDifference( text, d_MAX_CURRENT_DIFFERENCE ) )         {  edtADCMaxCurrentDifferenceCheck(edtMAX_CURRENT_DIFFERENCE);   return false;   }
  275.     cfg->set_MAX_CURRENT_DIFFERENCE( d_MAX_CURRENT_DIFFERENCE );
  276.     text = edtADC_MEASUREMENT_COUNT->Text;   if( !IsValidADCMeasurementCount( text, i_ADC_MEASUREMENT_COUNT ) )         {  edtADCChannelCheck(edtADC_MEASUREMENT_COUNT);   return false;   }
  277.     cfg->set_ADC_MEASUREMENT_COUNT( i_ADC_MEASUREMENT_COUNT );
  278.     return true;
  279. }
  280. //---------------------------------------------------------------------------
  281. void __fastcall TfrmCFGAdc::edtADCVoltageCheck(TObject *Sender)
  282. {
  283.     AnsiString  text;
  284.     int  data;
  285.     int  band;
  286.     TEdit *edit = (TEdit*)Sender;
  287.     char  hint[] = " input voltage is not valid ";
  288.     text = edit->Text;
  289.     if( !IsValidADCVoltage( text, data ) )
  290.     {
  291.         ShowHintLabel( edit, hint );
  292.         edit->SetFocus();
  293.         return;
  294.     }
  295.     i_ADC_V[edit->Tag] = data;
  296. }
  297. //---------------------------------------------------------------------------
  298. void TfrmCFGAdc::ShowHintLabel( TControl *sender, char* hint )
  299. {
  300.    TPoint pt0 = this->ClientOrigin;
  301.    TPoint pt1 = sender->ClientOrigin;
  302.    lblHint->Left = (pt1.x-pt0.x);
  303.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  304.    lblHint->Caption = hint;
  305.    lblHint->Visible = true;
  306.    HintTimer->Enabled = true;
  307. }
  308. //---------------------------------------------------------------------------
  309. void __fastcall TfrmCFGAdc::edtADCSlopeCheck(TObject *Sender)
  310. {
  311.     AnsiString  text;
  312.     int  data;
  313.     int  band;
  314.     TEdit *edit = (TEdit*)Sender;
  315.     char  hint[] = " input slope is not valid ";
  316.     text = edit->Text;
  317.     if( !IsValidADCSlope( text, data ) )
  318.     {
  319.         ShowHintLabel( edit, hint );
  320.         edit->SetFocus();
  321.         return;
  322.     }
  323.     i_BATTERY_ADC_SLOPE[edit->Tag] = data;
  324. }
  325. //---------------------------------------------------------------------------
  326. void __fastcall TfrmCFGAdc::edtADCOffsetCheck(TObject *Sender)
  327. {
  328.     AnsiString  text;
  329.     int  data;
  330.     int  band;
  331.     TEdit *edit = (TEdit*)Sender;
  332.     char  hint[] = " input offset is not valid ";
  333.     text = edit->Text;
  334.     if( !IsValidADCOffset( text, data ) )
  335.     {
  336.         ShowHintLabel( edit, hint );
  337.         edit->SetFocus();
  338.         return;
  339.     }
  340.     i_BATTERY_ADC_OFFSET[edit->Tag] = data;
  341. }
  342. //---------------------------------------------------------------------------
  343. void __fastcall TfrmCFGAdc::edtADCChannelCheck(TObject *Sender)
  344. {
  345.     AnsiString  text;
  346.     int  data;
  347.     int  band;
  348.     TEdit *edit = (TEdit*)Sender;
  349.     char  hint[] = " input channel is not valid ";
  350.     text = edit->Text;
  351.     if( !IsValidADCChannel( text, data ) )
  352.     {
  353.         ShowHintLabel( edit, hint );
  354.         edit->SetFocus();
  355.         return;
  356.     }
  357.     i_CHANNEL[edit->Tag] = data;
  358. }
  359. //---------------------------------------------------------------------------
  360. void __fastcall TfrmCFGAdc::edtADCResistanceCheck(TObject *Sender)
  361. {
  362.     AnsiString  text;
  363.     double  data;
  364.     int  band;
  365.     TEdit *edit = (TEdit*)Sender;
  366.     char  hint[] = " input resistance is not valid ";
  367.     text = edit->Text;
  368.     if( !IsValidADCResistance( text, data ) )
  369.     {
  370.         ShowHintLabel( edit, hint );
  371.         edit->SetFocus();
  372.         return;
  373.     }
  374.     d_ADC_RESISTANCE = data;
  375. }
  376. //---------------------------------------------------------------------------
  377. void __fastcall TfrmCFGAdc::edtADCMeasurementCountCheck(TObject *Sender)
  378. {
  379.     AnsiString  text;
  380.     int  data;
  381.     int  band;
  382.     TEdit *edit = (TEdit*)Sender;
  383.     char  hint[] = " input measurement count is not valid ";
  384.     text = edit->Text;
  385.     if( !IsValidADCMeasurementCount( text, data ) )
  386.     {
  387.         ShowHintLabel( edit, hint );
  388.         edit->SetFocus();
  389.         return;
  390.     }
  391.     i_ADC_MEASUREMENT_COUNT = data;
  392. }
  393. //---------------------------------------------------------------------------
  394. void __fastcall TfrmCFGAdc::edtADCMaxVoltageDifferenceCheck(
  395.       TObject *Sender)
  396. {
  397.     AnsiString  text;
  398.     double  data;
  399.     int  band;
  400.     TEdit *edit = (TEdit*)Sender;
  401.     char  hint[] = " input max voltage difference is not valid ";
  402.     text = edit->Text;
  403.     if( !IsValidADCMaxVoltageDifference( text, data ) )
  404.     {
  405.         ShowHintLabel( edit, hint );
  406.         edit->SetFocus();
  407.         return;
  408.     }
  409.     d_MAX_VOLTAGE_DIFFERENCE = data;
  410. }
  411. //---------------------------------------------------------------------------
  412. void __fastcall TfrmCFGAdc::edtADCMaxCurrentDifferenceCheck(
  413.       TObject *Sender)
  414. {
  415.     AnsiString  text;
  416.     double  data;
  417.     int  band;
  418.     TEdit *edit = (TEdit*)Sender;
  419.     char  hint[] = " input max current difference is not valid ";
  420.     text = edit->Text;
  421.     if( !IsValidADCMaxVoltageDifference( text, data ) )
  422.     {
  423.         ShowHintLabel( edit, hint );
  424.         edit->SetFocus();
  425.         return;
  426.     }
  427.     d_MAX_CURRENT_DIFFERENCE = data;
  428. }
  429. //---------------------------------------------------------------------------
  430. void __fastcall TfrmCFGAdc::FormShow(TObject *Sender)
  431. {
  432.     if(cfg == NULL)
  433.     {
  434.         cfg = new TMETA_factory_cfg();
  435.     }    
  436. }
  437. //---------------------------------------------------------------------------
  438. void __fastcall TfrmCFGAdc::edtCurrentLimitCheck(TObject *Sender)
  439. {
  440.     AnsiString  text;
  441.     int  data;
  442.     int  band;
  443.     TEdit *edit = (TEdit*)Sender;
  444.     char  hint[] = " input current is not valid ";
  445.     text = edit->Text;
  446.     if( !IsValidCurrentLimit( text, data ) )
  447.     {
  448.         ShowHintLabel( edit, hint );
  449.         edit->SetFocus();
  450.         return;
  451.     }
  452.     i_CURRENT_LIMIT = data;
  453. }
  454. //---------------------------------------------------------------------------