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

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_Baseband.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   Baseband 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. #include <stdio.h>
  68. #pragma hdrstop
  69. #ifndef  _METAAPP_COMMON_H_
  70. #include "METAAPP_common.h"
  71. #endif
  72. #ifndef _FORM_BASEBAND_H_
  73. #include "form_BaseBand.h"
  74. #endif
  75. #ifndef _FORM_MAIN_H_
  76. #include "form_main.h"
  77. #endif
  78. #ifndef _FORM_PMICREG_H_
  79. #include "form_pmicreg.h"
  80. #endif
  81. #ifndef  _MISC_BB_H_
  82. #include "misc_bb.h"
  83. #endif
  84. #ifndef  _MAN_FDM_H_
  85. #include "man_fdm.h"
  86. #endif
  87. //---------------------------------------------------------------------------
  88. #pragma package(smart_init)
  89. #pragma resource "*.dfm"
  90. TfrmBaseBand *frmBaseBand;
  91. bool FormBaseBandFirstShow = true;
  92. extern TfrmMainSel *frmMainSel;
  93. //---------------------------------------------------------------------------
  94. //==============================================================================
  95. static void CNF_PMIC_ReadRegister( void )
  96. {   frmBaseBand->PMIC_ReadRegister_Done();
  97. }
  98. //--------------------------------------------------------------------------
  99. static void CNF_PMIC_WriteRegister( void )
  100. {   frmBaseBand->PMIC_WriteRegister_Done();
  101. }
  102. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  103. static void CNF_ReadFromNVRAM( void )
  104. {   frmBaseBand->UploadFromFlashDone();
  105. }
  106. //---------------------------------------------------------------------------
  107. static void CNF_BG_ReadFromNVRAM( void )
  108. {   frmBaseBand->UploadBGFromFlashDone();
  109. }
  110. //---------------------------------------------------------------------------
  111. static void  CNF_WriteToNVRAM( void )
  112. {   frmBaseBand->DownloadToFlashDone();
  113. }
  114. //---------------------------------------------------------------------------
  115. static void  CNF_BG_WriteToNVRAM( void )
  116. {   frmBaseBand->DownloadBGToFlashDone();
  117. }
  118. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  119. static void CNF_LED_SetLightLevel(void)
  120. {
  121.     frmBaseBand->CNF_LED_SetLightLevel();
  122. }
  123. //---------------------------------------------------------------------------
  124. static void CNF_LED_MainLCDLightLevel(void)
  125. {
  126.     frmBaseBand->CNF_LED_MainLCDLightLevel();
  127. }
  128. //---------------------------------------------------------------------------
  129. static void CNF_LED_SubLCDLightLevel(void)
  130. {
  131.     frmBaseBand->CNF_LED_SubLCDLightLevel();
  132. }
  133. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  134. static void CNF_VBR_TurnOnVibrator(void)
  135. {
  136.     frmBaseBand->CNF_VBR_TurnOnVibrator();
  137. }
  138. //---------------------------------------------------------------------------
  139. static void CNF_VBR_TurnOffVibrator(void)
  140. {
  141.     frmBaseBand->CNF_VBR_TurnOffVibrator();
  142. }
  143. //---------------------------------------------------------------------------
  144. // RTC
  145. static void CNF_RTC_Query(void)
  146. {
  147.     frmBaseBand->CNF_RTC_Query();
  148. }
  149. //===========================================================================
  150. void __fastcall TfrmBaseBand::HintTimerTimer(TObject *Sender)
  151. {
  152.     HintTimer->Enabled = false;
  153.     lblHint->Visible = false;
  154. }
  155. //===========================================================================
  156. __fastcall TfrmBaseBand::TfrmBaseBand(TComponent* Owner)
  157.    : TForm(Owner)
  158. {
  159.     m_edtSlope[0] = edtSlope0;       m_edtOffset[0] = edtOffset0;    m_btnADC[0] = btnADC0;
  160.     m_edtSlope[1] = edtSlope1;       m_edtOffset[1] = edtOffset1;    m_btnADC[1] = btnADC1;
  161.     m_edtSlope[2] = edtSlope2;       m_edtOffset[2] = edtOffset2;    m_btnADC[2] = btnADC2;
  162.     m_edtSlope[3] = edtSlope3;       m_edtOffset[3] = edtOffset3;    m_btnADC[3] = btnADC3;
  163.     m_edtSlope[4] = edtSlope4;       m_edtOffset[4] = edtOffset4;    m_btnADC[4] = btnADC4;
  164.     m_edtSlope[5] = edtSlope5;       m_edtOffset[5] = edtOffset5;    m_btnADC[5] = btnADC5;
  165.     m_edtSlope[6] = edtSlope6;       m_edtOffset[6] = edtOffset6;    m_btnADC[6] = btnADC6;
  166.     for (int i=0; i<TOTAL_6218_ADC_NUM; i++)
  167.     {
  168.         m_edtSlope[i]->Tag = 1;
  169.         m_edtOffset[i]->Tag = 0;
  170.     }
  171.     edtInput1->Tag = 0;
  172.     edtInput2->Tag = 0;
  173.     m_iCurAdcChannel = 0;
  174.     m_uiBBRegAddr = 0x20;
  175.     m_usBBRegValue = 0x20;
  176.     m_uiPMICRegAddr = 0x3000;
  177.     m_usPMICRegValue = 0;
  178. }
  179. //---------------------------------------------------------------------------
  180. void __fastcall TfrmBaseBand::FormActivate(TObject *Sender)
  181. {
  182.     if (m_bInit)
  183.     {
  184.         m_bInit = false;
  185.         m_iFinalBBChip = frmMainSel->Get_FinalBBChip();
  186.         // ADC
  187.         if (MT6205 == m_iFinalBBChip || MT6205B == m_iFinalBBChip)
  188.         {
  189.             btnADC5->Enabled = false;
  190.             btnADC6->Enabled = false;
  191.             edtSlope5->Enabled = false;
  192.             edtSlope6->Enabled = false;
  193.             edtOffset5->Enabled = false;
  194.             edtOffset6->Enabled = false;
  195.             Display_AdcBatteryChannel( m_iFinalBBChip );
  196.             Display_AdcChargerChannel( m_iFinalBBChip );
  197.         }
  198.         // PMIC register
  199.         if (! m_cBB_PMIC_REG_Obj.Query_PMIC_ID_Start())
  200.         {
  201.             m_sPmicId.id = FT_MT_UNKNOWN;            
  202.         }
  203.         PMIC_ID* psPmicId;
  204.         psPmicId = m_cBB_PMIC_REG_Obj.Get_PMIC_ID();
  205.         m_sPmicId = *psPmicId;
  206.         if (FT_MT6318 == m_sPmicId.id)
  207.         {
  208.             btnPMICReg->Caption = "MT6318 PMIC register setting ...";
  209.             btnPMICReg->Visible = true;
  210.         }
  211.         else
  212.         {
  213.             btnPMICReg->Visible = false;
  214.         }
  215.     }
  216. }
  217. //---------------------------------------------------------------------------
  218. void __fastcall TfrmBaseBand::FormHide(TObject *Sender)
  219. {
  220.    Force_BB_Stop();
  221. }
  222. //===========================================================================
  223. void  TfrmBaseBand::CurrentPageReset( void )
  224. {
  225.     switch (pctlToolSel->ActivePageIndex)
  226.     {
  227.         case BB_PAGEIDX_ADC:
  228.         {
  229.             btnMeasureAdcStart1->Tag = STOP_TAG;
  230.             btnMeasureAdcStart1->Enabled = true;
  231.             btnMeasureAdcStart2->Tag = STOP_TAG;
  232.             btnMeasureAdcStart2->Enabled = true;
  233.             btnAdcUploadFromFlash->Enabled = true;
  234.             btnAdcDownloadToFlash->Enabled = true;
  235.             btnADCChangeDB->Enabled = true;
  236.         }
  237.         break;
  238.         case BB_PAGEIDX_BB_REG:
  239.         {
  240.             btnBBRegRead->Enabled = true;
  241.             btnBBRegWrite->Enabled = true;
  242.         }
  243.         break;
  244.         case BB_PAGEIDX_PMIC_REG:
  245.         {
  246.             btnPMICRegRead->Enabled = true;
  247.             btnPMICRegWrite->Enabled = true;
  248.         }
  249.         break;
  250.         case BB_PAGEIDX_BATTERY:
  251.         {
  252.             btnBGUploadFromFlash->Enabled = true;
  253.             btnBGDownloadToFlash->Enabled = true;
  254.             btnBGChangeDB->Enabled = true;
  255.         }
  256.         break;
  257.         case BB_PAGEIDX_LED:
  258.         {
  259.             m_btnKeypadLEDSet->Enabled = true;
  260.             m_btnMainLCDSet->Enabled = true;
  261.             //m_btnSubLCDSet->Enabled = true;
  262.         }
  263.         break;
  264.         case BB_PAGEIDX_VBR:
  265.         {
  266.             btnVBROn->Enabled = true;
  267.             btnVBROff->Enabled = true;
  268.         }
  269.         break;
  270.         case BB_PAGEIDX_RTC:
  271.         {
  272.             btnRTCQuery->Enabled = true;
  273.         }
  274.         break;
  275.         default:
  276.         {
  277.         }
  278.         break;
  279.     }
  280. }
  281. //---------------------------------------------------------------------------
  282. void  TfrmBaseBand::CurrentPageLock( void )
  283. {
  284.     switch (pctlToolSel->ActivePageIndex)
  285.     {
  286.         case BB_PAGEIDX_ADC:
  287.         {
  288.             btnMeasureAdcStart1->Tag = START_TAG;
  289.             btnMeasureAdcStart1->Enabled = false;
  290.             btnMeasureAdcStart2->Tag = START_TAG;
  291.             btnMeasureAdcStart2->Enabled = false;
  292.             btnAdcUploadFromFlash->Enabled = false;
  293.             btnAdcDownloadToFlash->Enabled = false;
  294.             btnADCChangeDB->Enabled = false;
  295.         }
  296.         break;
  297.         case BB_PAGEIDX_BB_REG:
  298.         {
  299.             btnBBRegRead->Enabled = false;
  300.             btnBBRegWrite->Enabled = false;
  301.         }
  302.         break;
  303.         case BB_PAGEIDX_PMIC_REG:
  304.         {
  305.             btnPMICRegRead->Enabled = false;
  306.             btnPMICRegWrite->Enabled = false;
  307.         }
  308.         break;
  309.         case BB_PAGEIDX_BATTERY:
  310.         {
  311.             btnBGUploadFromFlash->Enabled = false;
  312.             btnBGDownloadToFlash->Enabled = false;
  313.             btnBGChangeDB->Enabled = false;
  314.         }
  315.         break;
  316.         case BB_PAGEIDX_LED:
  317.         {
  318.             m_btnKeypadLEDSet->Enabled = false;
  319.             m_btnMainLCDSet->Enabled = false;
  320.             //m_btnSubLCDSet->Enabled = false;
  321.         }
  322.         break;
  323.         case BB_PAGEIDX_VBR:
  324.         {
  325.             btnVBROn->Enabled = false;
  326.             btnVBROff->Enabled = false;
  327.         }
  328.         break;
  329.         case BB_PAGEIDX_RTC:
  330.         {
  331.             btnRTCQuery->Enabled = false;
  332.         }
  333.         break;
  334.         default:
  335.         {
  336.         }
  337.         break;
  338.     }
  339. }
  340. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  341. void __fastcall TfrmBaseBand::pctlToolSelChange(TObject *Sender)
  342. {
  343.     Force_BB_Stop();
  344.     ReDrawFields( (E_BB_PAGEIDX_T)pctlToolSel->ActivePageIndex );
  345. }
  346. //===========================================================================
  347. void  TfrmBaseBand::ShowHintLabel( TControl *sender, char* hint )
  348. {
  349.    TPoint pt0 = this->ClientOrigin;
  350.    TPoint pt1 = sender->ClientOrigin;
  351.    lblHint->Left = (pt1.x-pt0.x);
  352.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  353.    lblHint->Caption = hint;
  354.    lblHint->Visible = true;
  355.    HintTimer->Enabled = true;
  356. }
  357. //---------------------------------------------------------------------------
  358. bool  TfrmBaseBand::CheckFields( void )
  359. {
  360.     int  i;
  361.     int  data;
  362.     AnsiString  text;
  363.     int total_adc_num;
  364.     switch ((E_BB_PAGEIDX_T) pctlToolSel->ActivePageIndex)
  365.     {
  366.         case BB_PAGEIDX_ADC:
  367.         {
  368.             BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  369.             if (MT6205 == bb_chip || MT6205B == bb_chip)
  370.             {
  371.                 total_adc_num = TOTAL_6205B_ADC_NUM;
  372.             }
  373.             else
  374.             {
  375.                 total_adc_num = TOTAL_6218_ADC_NUM;
  376.             }
  377.             for (i=0; i<total_adc_num; i++)
  378.             {
  379.                 text = m_edtSlope[i]->Text;     if( !IsValidADCSlope( text,data ) )    {  edtSlopeCheck(m_edtSlope[i]);   return false;   }
  380.                 text = m_edtOffset[i]->Text;    if( !IsValidADCOffset( text,data ) )   {  edtOffsetCheck(m_edtSlope[i]);  return false;   }
  381.             }
  382.             text = edtInput1->Text;    if( !IsValidADCInput( text,data ) )   {  edtInputCheck(edtInput1);   return false;   }
  383.             text = edtInput2->Text;    if( !IsValidADCInput( text,data ) )   {  edtInputCheck(edtInput2);   return false;   }
  384.         }
  385.         break;
  386.         case BB_PAGEIDX_BB_REG:
  387.         {
  388.             unsigned int idata;
  389.             unsigned short sdata;
  390.             text = edtBBAddress->Text;    if (!IsValidHexRegAddr(text, idata))    {edtRegAddrCheck(edtBBAddress);   return false;   }
  391.             m_uiBBRegAddr = idata;
  392.             text = edtBBValue->Text;
  393.             if( DEC_FORMAT == btnBBRegValue->Tag )  // Dec
  394.             {
  395.                 if (!IsValidDecRegValue(text, sdata))
  396.                 {
  397.                     edtRegValueCheck(edtBBValue);
  398.                     return false;
  399.                 }
  400.             }
  401.             else  // Hex
  402.             {
  403.                 if (!IsValidHexRegValue(text, sdata))
  404.                 {
  405.                     edtRegValueCheck(edtBBValue);
  406.                     return false;
  407.                 }
  408.             }
  409.             m_usBBRegValue = sdata;
  410.         }
  411.         break;
  412.         case BB_PAGEIDX_PMIC_REG:
  413.         {
  414.             unsigned int idata;
  415.             unsigned short sdata;
  416.             text = edtPMICAddress->Text;    if (!IsValidHexRegAddr(text, idata))    {edtRegAddrCheck(edtPMICAddress);   return false;   }
  417.             m_uiPMICRegAddr = idata;
  418.             text = edtPMICValue->Text;
  419.             if( DEC_FORMAT == btnPMICRegValue->Tag )  // Dec
  420.             {
  421.                 if (!IsValidDecRegValue(text, sdata))
  422.                 {
  423.                     edtPMICValueCheck(edtPMICValue);
  424.                     return false;
  425.                 }
  426.             }
  427.             else  // Hex
  428.             {
  429.                 if (!IsValidHexRegValue(text, sdata))
  430.                 {
  431.                     edtPMICValueCheck(edtPMICValue);
  432.                     return false;
  433.                 }
  434.             }
  435.             m_usPMICRegValue = sdata;
  436.         }
  437.         break;
  438.         default:
  439.         break;
  440.     }
  441.     return true;
  442. }
  443. //---------------------------------------------------------------------------
  444. void __fastcall TfrmBaseBand::edtSlopeCheck(TObject *Sender)
  445. {
  446.    AnsiString  text;
  447.    int  data;
  448.    int  band;
  449.    TEdit *edit = (TEdit*)Sender;
  450.    char  hint[] = " character is not valid ";
  451.    text = edit->Text;
  452.    if( !IsValidADCSlope( text, data ) )
  453.    {  ShowHintLabel( edit, hint );
  454.       edit->SetFocus();
  455.       return;
  456.    }
  457.    edit->Tag = data;
  458. }
  459. //---------------------------------------------------------------------------
  460. void __fastcall TfrmBaseBand::edtOffsetCheck(TObject *Sender)
  461. {
  462.    AnsiString  text;
  463.    int  data;
  464.    int  band;
  465.    TEdit *edit = (TEdit*)Sender;
  466.    char  hint[] = " character is not valid ";
  467.    text = edit->Text;
  468.    if( !IsValidADCOffset( text, data ) )
  469.    {  ShowHintLabel( edit, hint );
  470.       edit->SetFocus();
  471.       return;
  472.    }
  473.    edit->Tag = data;
  474. }
  475. //---------------------------------------------------------------------------
  476. void __fastcall TfrmBaseBand::edtInputCheck(TObject *Sender)
  477. {
  478.    AnsiString  text;
  479.    int  data;
  480.    int  band;
  481.    TEdit *edit = (TEdit*)Sender;
  482.    char  hint[] = " character is not valid ";
  483.    text = edit->Text;
  484.    if( !IsValidADCInput( text, data ) )
  485.    {  ShowHintLabel( edit, hint );
  486.       edit->SetFocus();
  487.       return;
  488.    }
  489.    edit->Tag = data;
  490. }
  491. //---------------------------------------------------------------------------
  492. void __fastcall TfrmBaseBand::edtRegAddrCheck(TObject *Sender)
  493. {
  494.    AnsiString  text;
  495.    unsigned int  data;
  496.    TEdit *edit = (TEdit*)Sender;
  497.    char  hint[] = " character is not valid ";
  498.    text = edit->Text;
  499.    if( !IsValidHexRegAddr( text, data ) )
  500.    {  ShowHintLabel( edit, hint );
  501.       edit->SetFocus();
  502.       return;
  503.    }
  504.    m_uiBBRegAddr = data;
  505. }
  506. //---------------------------------------------------------------------------
  507. void __fastcall TfrmBaseBand::edtRegValueCheck(TObject *Sender)
  508. {
  509.    AnsiString  text;
  510.    unsigned short  data;
  511.    int  band;
  512.    TEdit *edit = (TEdit*)Sender;
  513.    char  hint[] = " character is not valid ";
  514.    text = edit->Text;
  515.    if( DEC_FORMAT == btnBBRegValue->Tag )  // Dec
  516.    {
  517.       if( !IsValidDecRegValue( text, data ) )
  518.       {  ShowHintLabel( edit, hint );
  519.          edit->SetFocus();
  520.          return;
  521.       }
  522.    }
  523.    else  // Hex
  524.    {
  525.       if( !IsValidHexRegValue( text, data ) )
  526.       {  ShowHintLabel( edit, hint );
  527.          edit->SetFocus();
  528.          return;
  529.       }
  530.    }
  531.    m_usBBRegValue = data;
  532. }
  533. //===========================================================================
  534. void  TfrmBaseBand::Display_AdcBatteryChannel( int bb_chip )
  535. {
  536.     cbADCBatteryChannel->ItemIndex = 0;
  537. }
  538. //---------------------------------------------------------------------------
  539. void  TfrmBaseBand::Display_AdcChargerChannel( int bb_chip )
  540. {
  541.     if( MT6205 == bb_chip || MT6205B == bb_chip )
  542.     {
  543.         cbADCChargerChannel->ItemIndex = 3;
  544.     }
  545.     else
  546.     {
  547.         cbADCChargerChannel->ItemIndex = 1;
  548.     }
  549. }
  550. //---------------------------------------------------------------------------
  551. void  TfrmBaseBand::ReDrawFields(E_BB_PAGEIDX_T e_pageidx)
  552. {
  553.     char  str[256];
  554.     int total_adc_num;
  555.     switch (e_pageidx)
  556.     {
  557.         case BB_PAGEIDX_ADC:
  558.         {
  559.             BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  560.             if (MT6205 == bb_chip || MT6205B == bb_chip)
  561.             {
  562.                 total_adc_num = TOTAL_6205B_ADC_NUM;
  563.             }
  564.             else
  565.             {
  566.                 total_adc_num = TOTAL_6218_ADC_NUM;
  567.             }
  568.             for (int i=0; i<total_adc_num; i++)
  569.             {
  570.                 m_edtSlope[i]->Text = m_edtSlope[i]->Tag;
  571.                 m_edtOffset[i]->Text = m_edtOffset[i]->Tag;
  572.             }
  573.             sprintf(str, "ADC %d", m_iCurAdcChannel);
  574.             pnlProfileTitle->Caption = str;
  575.             sprintf(str, "%.3f", (float)(edtInput1->Tag/1000.0) );
  576.             edtInput1->Text = str;
  577.             sprintf(str, "%.3f", (float)(edtInput2->Tag/1000.0) );
  578.             edtInput2->Text = str;
  579.             char buf[50];
  580.             sprintf(buf, "%.1f", m_BB_ADC_Obj.Get_ADC_Output(0));
  581.             txtOutput1->Caption = buf;
  582.             sprintf(buf, "%.1f", m_BB_ADC_Obj.Get_ADC_Output(1) );
  583.             txtOutput2->Caption = buf;
  584.             btnApply->Enabled = (txtOutput1->Tag!=txtOutput2->Tag)&&(edtInput1->Tag&&edtInput2->Tag);
  585.             if (btnApply->Enabled)
  586.             {
  587.                 float  x0 = m_BB_ADC_Obj.Get_ADC_Output(0);
  588.                 float  x1 = m_BB_ADC_Obj.Get_ADC_Output(1);
  589.                 int  y0 = edtInput1->Tag;
  590.                 int  y1 = edtInput2->Tag;
  591.                 float fdata;
  592.                 if (x0-x1!=0)
  593.                 {
  594.                     fdata = 1.0*(y1-y0)/(x1-x0);
  595.                     fdata += (fdata>=0) ? 0.5 : -0.5 ;
  596.                     txtResultSlope->Tag = (int)fdata;
  597.                     fdata = y0 - 1.0*(y1-y0)/(x1-x0)*x0;
  598.                     fdata += (fdata>=0) ? 0.5 : -0.5 ;
  599.                     txtResultOffset->Tag = (int)fdata;
  600.                 }
  601.             }
  602.             txtResultSlope->Caption = txtResultSlope->Tag;
  603.             txtResultOffset->Caption = txtResultOffset->Tag;
  604.         }
  605.         break;
  606.         case BB_PAGEIDX_BB_REG:
  607.         {
  608.             sprintf(str, "%08lx", m_uiBBRegAddr);
  609.             edtBBAddress->Text = str;
  610.             if (DEC_FORMAT == btnBBRegValue->Tag)  // Dec
  611.             {
  612.                 btnBBRegValue->Caption = "Value (Dec)";
  613.                 lblBBRegValue0X->Visible = false;
  614.                 edtBBValue->Text = IntToStr(m_usBBRegValue);
  615.             }
  616.             else  // Hex
  617.             {
  618.                 btnBBRegValue->Caption = "Value (Hex)";
  619.                 lblBBRegValue0X->Visible = true;
  620.                 sprintf( str, "%X", (int)m_usBBRegValue );
  621.                 edtBBValue->Text = str;
  622.             }
  623.         }
  624.         break;
  625.         case BB_PAGEIDX_PMIC_REG:
  626.         {
  627.             sprintf(str, "%08lx", m_uiPMICRegAddr);
  628.             edtPMICAddress->Text = str;
  629.             if (DEC_FORMAT == btnPMICRegValue->Tag)  // Dec
  630.             {
  631.                 btnPMICRegValue->Caption = "Value (Dec)";
  632.                 lblPMICRegValue0X->Visible = false;
  633.                 edtPMICValue->Text = IntToStr(m_usPMICRegValue);
  634.             }
  635.             else  // Hex
  636.             {
  637.                 btnPMICRegValue->Caption = "Value (Hex)";
  638.                 lblPMICRegValue0X->Visible = true;
  639.                 sprintf( str, "%X", (int)m_usPMICRegValue );
  640.                 edtPMICValue->Text = str;
  641.             }
  642.         }
  643.         break;
  644.         case BB_PAGEIDX_RTC:
  645.         {
  646.             edtRTCYear->Text  = IntToStr(m_sRTC.m_rtc_year);
  647.             edtRTCMonth->Text = IntToStr(m_sRTC.m_rtc_mon);
  648.             edtRTCDay->Text   = IntToStr(m_sRTC.m_rtc_day);
  649.             edtRTCWDay->Text  = IntToStr(m_sRTC.m_rtc_wday);
  650.             edtRTCWHour->Text = IntToStr(m_sRTC.m_rtc_hour);
  651.             edtRTCMinute->Text= IntToStr(m_sRTC.m_rtc_min);
  652.             edtRTCSec->Text   = IntToStr(m_sRTC.m_rtc_sec);
  653.         }
  654.         break;
  655.         default:
  656.         
  657.         break;
  658.     }
  659. }
  660. //---------------------------------------------------------------------------
  661. void  TfrmBaseBand::ReDrawBGFields( void )
  662. {
  663.     edtBGShutdown->Text = IntToStr( m_custom_hw_level.BatteryLevel[BATTERY_LEVEL_SHUT_DOWN_IDX] );
  664.     edtBGNoMoCall->Text = IntToStr( m_custom_hw_level.BatteryLevel[BATTERY_LEVEL_NO_MO_CALL_IDX] );
  665.     edtBGLowBatteryWarning->Text = IntToStr( m_custom_hw_level.BatteryLevel[BATTERY_LEVEL_LOW_BATTERY_WARNING_IDX] );
  666.     edtBGLevel1->Text = IntToStr( m_custom_hw_level.BatteryLevel[BATTERY_LEVEL_LEVEL1_IDX] );
  667.     edtBGLevel2->Text = IntToStr( m_custom_hw_level.BatteryLevel[BATTERY_LEVEL_LEVEL2_IDX] );
  668.     edtBGLevel3->Text = IntToStr( m_custom_hw_level.BatteryLevel[BATTERY_LEVEL_LEVEL3_IDX] );
  669. }
  670. //===========================================================================
  671. void  TfrmBaseBand::Force_BB_Stop(void)
  672. {
  673.     m_BB_ADC_Obj.REQ_Stop();
  674.     m_BB_REG_Obj.REQ_Stop();
  675.     m_BB_CUSTHW_Obj.REQ_Stop();
  676. }
  677. //---------------------------------------------------------------------------
  678. void __fastcall TfrmBaseBand::btnAdcClick(TObject *Sender)
  679. {
  680.     TButton *btn = (TButton*)Sender;
  681.     m_iCurAdcChannel = btn->Tag;
  682.     edtInput1->Tag = 0;
  683.     edtInput2->Tag = 0;
  684.     txtOutput1->Tag = 0;
  685.     txtOutput2->Tag = 0;
  686.     txtResultSlope->Tag = 0;
  687.     txtResultOffset->Tag = 0;
  688.     ReDrawFields(BB_PAGEIDX_ADC);
  689. }
  690. //---------------------------------------------------------------------------
  691. static void  CNF_MeasureAdc1( void )
  692. {   frmBaseBand->MeasureAdc1_Done();
  693. }
  694. //-------------------------------------
  695. void __fastcall TfrmBaseBand::btnMeasureAdcStart1Click(TObject *Sender)
  696. {
  697.     m_BB_ADC_Obj.ConfirmCallback = ::CNF_MeasureAdc1;
  698.     m_BB_ADC_Obj.REQ_Start(m_iCurAdcChannel, edtInput1->Tag, 0, edtMeasureCount->Text.ToInt());
  699.     sbAdc->Panels->Items[0]->Text = (AnsiString) "  Measure auxiliary ADC progressing";
  700. }
  701. //-------------------------------------
  702. void TfrmBaseBand::MeasureAdc1_Done( void )
  703. {
  704.     int state = m_BB_ADC_Obj.Get_ConfirmState();
  705.     switch (state)
  706.     {
  707.         case METAAPP_SUCCESS:
  708.         {
  709.             txtOutput1->Tag = m_BB_ADC_Obj.Get_ADC_Output(0);
  710.             ReDrawFields(BB_PAGEIDX_ADC);
  711.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Measure auxiliary ADC successfully";
  712.         }
  713.         break;
  714.         case METAAPP_FAIL:
  715.         {
  716.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Measure auxiliary ADC fail";
  717.             Application->MessageBox( "Execution Failure : Measure auxliary ADC", "FAILURE", MB_OK );
  718.             Force_BB_Stop();
  719.         }
  720.         break;
  721.         case METAAPP_TIMEOUT:
  722.         {
  723.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Measure auxiliary ADC timeout";
  724.             Application->MessageBox( "Execution Timeout : Measure auxliary ADC", "TIMEOUT", MB_OK );
  725.             Force_BB_Stop();
  726.         }
  727.         break;
  728.         case METAAPP_STOP:
  729.         {
  730.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Measure auxiliary ADC stop";
  731.         }
  732.         break;
  733.     }
  734. }
  735. //---------------------------------------------------------------------------
  736. static void  CNF_MeasureAdc2( void )
  737. {   frmBaseBand->MeasureAdc2_Done();
  738. }
  739. //-------------------------------------
  740. void __fastcall TfrmBaseBand::btnMeasureAdcStart2Click(TObject *Sender)
  741. {
  742.     m_BB_ADC_Obj.ConfirmCallback = ::CNF_MeasureAdc2;
  743.     m_BB_ADC_Obj.REQ_Start(m_iCurAdcChannel, edtInput2->Tag, 1, edtMeasureCount->Text.ToInt());
  744.     sbAdc->Panels->Items[0]->Text = (AnsiString) "  Measure auxiliary ADC progressing";
  745. }
  746. //-------------------------------------
  747. void TfrmBaseBand::MeasureAdc2_Done( void )
  748. {
  749.     int state = m_BB_ADC_Obj.Get_ConfirmState();
  750.     switch (state)
  751.     {
  752.         case METAAPP_SUCCESS:
  753.         {
  754.             txtOutput2->Tag = m_BB_ADC_Obj.Get_ADC_Output(1);
  755.             ReDrawFields(BB_PAGEIDX_ADC);
  756.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Measure auxiliary ADC successfully";
  757.         }
  758.         break;
  759.         case METAAPP_FAIL:
  760.         {
  761.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Measure auxiliary ADC fail";
  762.             Application->MessageBox( "Execution Failure : Measure auxliary ADC", "FAILURE", MB_OK );
  763.             Force_BB_Stop();
  764.         }
  765.         break;
  766.         case METAAPP_TIMEOUT:
  767.         {
  768.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Measure auxiliary ADC timeout";
  769.             Application->MessageBox( "Execution Timeout : Measure auxliary ADC", "TIMEOUT", MB_OK );
  770.             Force_BB_Stop();
  771.         }
  772.         break;
  773.         case METAAPP_STOP:
  774.         {
  775.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Measure auxiliary ADC stop";
  776.         }
  777.         break;
  778.         default:
  779.         break;
  780.     }
  781. }
  782. //---------------------------------------------------------------------------
  783. void __fastcall TfrmBaseBand::btnApplyClick(TObject *Sender)
  784. {
  785.     m_edtSlope[m_iCurAdcChannel]->Tag  = txtResultSlope->Tag;
  786.     m_edtOffset[m_iCurAdcChannel]->Tag = txtResultOffset->Tag;
  787.     int battery_ch = cbADCBatteryChannel->Text.ToInt();
  788.     int charger_ch = cbADCChargerChannel->Text.ToInt();
  789.     if( m_iCurAdcChannel == battery_ch )
  790.     {
  791.         int total_adc_num;
  792.         BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  793.         if( bb_chip == MT6205 || bb_chip == MT6205B )
  794.         {
  795.             total_adc_num = TOTAL_6205B_ADC_NUM;
  796.         }
  797.         else
  798.         {
  799.             total_adc_num = TOTAL_6218_ADC_NUM;
  800.         }
  801.         for( int i=0; i<total_adc_num; i++ )
  802.         {
  803.             if( i != charger_ch )
  804.             {
  805.                 m_edtSlope[i]->Tag = txtResultSlope->Tag;
  806.                 m_edtOffset[i]->Tag = txtResultOffset->Tag;
  807.             }    
  808.         }
  809.     }
  810.     ReDrawFields(BB_PAGEIDX_ADC);
  811.     sbAdc->Panels->Items[0]->Text = (AnsiString) "  Apply ADC slope and offset successfully";
  812. }
  813. //-----------------------------------------------
  814. void __fastcall TfrmBaseBand::btnAdcUploadFromFlashClick(TObject *Sender)
  815. {
  816.     if( ! NVRAMMan->Get_IsInit() )
  817.     {   frmMainSel->mnuFDMDatabaseClick(Sender);
  818.     }
  819.     if( ! NVRAMMan->Get_IsInit() )
  820.     {
  821.         sbAdc->Panels->Items[0]->Text = (AnsiString) " NVRAM database file initialize fail";
  822.         Application->MessageBox( "Execution Failure : NVRAM database file initialize fail", "FAILURE", MB_OK );
  823.         return;
  824.     }
  825.     m_BB_ADC_Obj.ConfirmCallback = ::CNF_ReadFromNVRAM;
  826.     m_BB_ADC_Obj.REQ_Read_From_NVRAM_Start();
  827.     CurrentPageLock();
  828. }
  829. //-----------------------------------------------
  830. void TfrmBaseBand::UploadFromFlashDone(void)
  831. {
  832.     E_METAAPP_RESULT_T state = m_BB_ADC_Obj.Get_ConfirmState();
  833.     int total_adc_num;
  834.     CurrentPageReset();
  835.     switch (state)
  836.     {
  837.         case METAAPP_SUCCESS:
  838.         {
  839.             BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  840.             if (MT6205 == bb_chip || MT6205B == bb_chip)
  841.             {
  842.                 total_adc_num = TOTAL_6205B_ADC_NUM;
  843.             }
  844.             else
  845.             {
  846.                 total_adc_num = TOTAL_6218_ADC_NUM;
  847.             }
  848.             bmt_adcdata  adc_data = m_BB_ADC_Obj.Get_AdcData();
  849.             for (int i=0; i<total_adc_num; i++)
  850.             {
  851.                 m_edtSlope[i]->Tag = adc_data.i_ADCSlope[i];
  852.                 m_edtOffset[i]->Tag = adc_data.i_ADCOffset[i];
  853.             }
  854.             m_iCurAdcChannel = 0;
  855.             edtInput1->Tag = 0;
  856.             edtInput2->Tag = 0;
  857.             txtOutput1->Tag = 0;
  858.             txtOutput2->Tag = 0;
  859.             txtResultSlope->Tag = 0;
  860.             txtResultOffset->Tag = 0;
  861.             ReDrawFields(BB_PAGEIDX_ADC);
  862.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Upload auxiliary ADC setting from flash successful";
  863.         }
  864.         break;
  865.         case METAAPP_FAIL:
  866.         {
  867.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Upload auxiliary ADC setting from flash fail, please check the version of load and NVRAM database are same.";
  868.             Application->MessageBox( "Execution Failure : Upload auxiliary ADC setting form flash, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  869.             Force_BB_Stop();
  870.         }
  871.         break;
  872.         case METAAPP_TIMEOUT:
  873.         {
  874.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Upload auxiliary ADC setting from flash timeout";
  875.             Application->MessageBox( "Execution Timeout : Upload auxiliary ADC setting form flash", "TIMEOUT", MB_OK );
  876.             Force_BB_Stop();
  877.         }
  878.         break;
  879.         case METAAPP_STOP:
  880.         {
  881.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Upload auxiliary ADC setting from flash stop";
  882.         }
  883.         break;
  884.         case METAAPP_NVRAM_LID_VER_NOT_SUPPORT:
  885.         {
  886.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  NVRAM_EF_ADC_LID version is not support, please update META to latest version";
  887.             Application->MessageBox( "Execution Warning : NVRAM_EF_ADC_LID version is not support, please update META to latest version", "WARNING", MB_OK );
  888.         }
  889.         break;
  890.         default:
  891.         {
  892.         }
  893.         break;
  894.     }
  895. }
  896. //---------------------------------------------------------------------------
  897. void __fastcall TfrmBaseBand::btnAdcDownloadToFlashClick(TObject *Sender)
  898. {
  899.     int  i;
  900.     int total_adc_num;
  901.     if( !CheckFields() )  return;
  902.     if( ! NVRAMMan->Get_IsInit() )
  903.     {   frmMainSel->mnuFDMDatabaseClick(Sender);
  904.     }
  905.     if( ! NVRAMMan->Get_IsInit() )
  906.     {
  907.         sbAdc->Panels->Items[0]->Text = (AnsiString) " NVRAM database file initialize fail";
  908.         Application->MessageBox( "Execution Failure : NVRAM database file initialize fail", "FAILURE", MB_OK );
  909.         return;
  910.     }
  911.     BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  912.     if( bb_chip == MT6205 || bb_chip == MT6205B )
  913.     {
  914.          total_adc_num = TOTAL_6205B_ADC_NUM;
  915.     }
  916.     else
  917.     {
  918.          total_adc_num = TOTAL_6218_ADC_NUM;
  919.     }
  920.     bmt_adcdata adc_data;
  921.     for(i=0; i<total_adc_num; i++)
  922.     {
  923.         adc_data.i_ADCSlope[i]  = m_edtSlope[i]->Tag;
  924.         adc_data.i_ADCOffset[i] = m_edtOffset[i]->Tag;
  925.     }
  926.     m_BB_ADC_Obj.Set_AdcData( adc_data );
  927.     m_BB_ADC_Obj.ConfirmCallback = ::CNF_WriteToNVRAM;
  928.     m_BB_ADC_Obj.REQ_Write_To_NVRAM_Start();
  929. }
  930. //-----------------------------------------------
  931. void  TfrmBaseBand::DownloadToFlashDone( void )
  932. {
  933.     int state = m_BB_ADC_Obj.Get_ConfirmState();
  934.     switch (state)
  935.     {
  936.         case METAAPP_SUCCESS:
  937.         {
  938.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Download auxiliary ADC setting to flash successfully";
  939.             ReDrawFields(BB_PAGEIDX_ADC);
  940.         }
  941.         break;
  942.         case METAAPP_FAIL:
  943.         {
  944.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Download auxiliary ADC setting to flash fail";
  945.             Application->MessageBox( "Execution Failure : Download auxiliary ADC setting to flash", "FAILURE", MB_OK );
  946.             Force_BB_Stop();
  947.         }
  948.         break;
  949.         case METAAPP_TIMEOUT:
  950.         {
  951.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Download auxiliary ADC setting to flash timeout";
  952.             Application->MessageBox( "Execution Timeout : Download auxiliary ADC setting to flash", "TIMEOUT", MB_OK );
  953.             Force_BB_Stop();
  954.         }
  955.         break;
  956.         case METAAPP_STOP:
  957.         {
  958.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  Download auxiliary ADC setting to flash stop";
  959.         }
  960.         break;
  961.         case METAAPP_NVRAM_LID_VER_NOT_SUPPORT:
  962.         {
  963.             sbAdc->Panels->Items[0]->Text = (AnsiString) "  NVRAM_EF_ADC_LID version is not support, please update META to latest version";
  964.             Application->MessageBox( "Execution Warning : NVRAM_EF_ADC_LID version is not support, please update META to latest version", "WARNING", MB_OK );
  965.         }
  966.         break;
  967.         default:
  968.         {
  969.         }
  970.         break;
  971.     }
  972. }
  973. //===========================================================================
  974. void __fastcall TfrmBaseBand::btnAdcLoadFromFileClick(TObject *Sender)
  975. {
  976.     char str[512];
  977.     bool ok;
  978.     int  i;
  979.     int  total_adc_num;
  980.     ok = OpenDialog->Execute();
  981.     if( !ok )
  982.     {
  983.         sbAdc->Panels->Items[0]->Text = (AnsiString) "  Load auxiliary ADC setting from file fail";
  984.         return;
  985.     }
  986.     strcpy( str, OpenDialog->FileName.c_str() );
  987.     ok = m_BB_ADC_Obj.REQ_Read_From_File( str );
  988.     if (ok)
  989.     {
  990.         BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  991.         if( bb_chip == MT6205 || bb_chip == MT6205B )
  992.         {
  993.             total_adc_num = TOTAL_6205B_ADC_NUM;
  994.         }
  995.         else
  996.         {
  997.             total_adc_num = TOTAL_6218_ADC_NUM;
  998.         }
  999.         bmt_adcdata adc_data;
  1000.         adc_data = m_BB_ADC_Obj.Get_AdcData();
  1001.         for(i=0; i<total_adc_num; i++)
  1002.         {
  1003.             m_edtSlope[i]->Tag  = adc_data.i_ADCSlope[i];
  1004.             m_edtOffset[i]->Tag = adc_data.i_ADCOffset[i];
  1005.         }
  1006.         m_iCurAdcChannel = 0;
  1007.         edtInput1->Tag = 0;
  1008.         edtInput2->Tag = 0;
  1009.         txtOutput1->Tag = 0;
  1010.         txtOutput2->Tag = 0;
  1011.         txtResultSlope->Tag = 0;
  1012.         txtResultOffset->Tag = 0;
  1013.         ReDrawFields(BB_PAGEIDX_ADC);
  1014.         sbAdc->Panels->Items[0]->Text = (AnsiString) "  Load auxiliary ADC setting from file successfully";
  1015.     }
  1016.     else
  1017.     {
  1018.         sbAdc->Panels->Items[0]->Text = (AnsiString) "  Load auxiliary ADC setting from file fail";
  1019.         Application->MessageBox( "Execution Failure : Load auxiliary ADC setting from file", "FAILURE", MB_OK );
  1020.     }
  1021. }
  1022. //---------------------------------------------------------------------------
  1023. void __fastcall TfrmBaseBand::btnAdcSaveToFileClick(TObject *Sender)
  1024. {
  1025.     char str[512];
  1026.     bool ok;
  1027.     int  i;
  1028.     int  total_adc_num;
  1029.     ok = CheckFields();
  1030.     if(!ok)
  1031.     {
  1032.         sbAdc->Panels->Items[0]->Text = (AnsiString) "  Save auxiliary ADC setting to file fail";
  1033.         return;
  1034.     }
  1035.     ok = SaveDialog->Execute();
  1036.     if( !ok )
  1037.     {
  1038.         sbAdc->Panels->Items[0]->Text = (AnsiString) "  Save auxiliary ADC setting to file fail";
  1039.         return;
  1040.     }
  1041.     //if( frmMainSel->rb6205->Checked || frmMainSel->rb6205B->Checked)
  1042.     BBCHIP_TYPE bb_chip = frmMainSel->Get_FinalBBChip();
  1043.     if( bb_chip == MT6205 || bb_chip == MT6205B )
  1044.     {
  1045.          total_adc_num = TOTAL_6205B_ADC_NUM;
  1046.     }
  1047.     else
  1048.     {
  1049.          total_adc_num = TOTAL_6218_ADC_NUM;
  1050.     }
  1051.     bmt_adcdata adc_data;
  1052.     for(i=0; i<total_adc_num; i++)
  1053.     {
  1054.         //m_BB_ADC_Obj.AdcData.ADCSlope[i] = m_edtSlope[i]->Tag;
  1055.         //m_BB_ADC_Obj.AdcData.ADCOffset[i] = m_edtOffset[i]->Tag;
  1056.         adc_data.i_ADCSlope[i] = m_edtSlope[i]->Tag;
  1057.         adc_data.i_ADCOffset[i] = m_edtOffset[i]->Tag;
  1058.     }
  1059.     m_BB_ADC_Obj.Set_AdcData( adc_data );
  1060.     strcpy( str, SaveDialog->FileName.c_str() );
  1061.     ok = m_BB_ADC_Obj.REQ_Write_To_File( str );
  1062.     if( !ok )
  1063.     {
  1064.         sbAdc->Panels->Items[0]->Text = (AnsiString) "  Save auxiliary ADC setting to file fail";
  1065.         Application->MessageBox( "Execution Failure : Save auxiliary ADC setting to file", "FAILURE", MB_OK );
  1066.     }
  1067.     else
  1068.     {
  1069.         sbAdc->Panels->Items[0]->Text = (AnsiString) "  Save auxiliary ADC setting to file successfully";
  1070.     }
  1071. }
  1072. //===========================================================================
  1073.  static void  CNF_ReadRegister( void )
  1074. {   frmBaseBand->ReadRegister_Done();
  1075. }
  1076. //-----------------------------------------------
  1077. void __fastcall TfrmBaseBand::btnBBRegReadClick(TObject *Sender)
  1078. {
  1079.     if( !CheckFields() )
  1080.     {
  1081.         sbReg->Panels->Items[0]->Text = (AnsiString) "  Read baseband register fail";
  1082.         return;
  1083.     }
  1084.     m_BB_REG_Obj.ConfirmCallback = ::CNF_ReadRegister;
  1085.     m_BB_REG_Obj.REQ_ReadRegister_Start(m_uiBBRegAddr);
  1086.     sbReg->Panels->Items[0]->Text = (AnsiString) "  Read baseband register progressing";
  1087. }
  1088. //-----------------------------------------------
  1089. void  TfrmBaseBand::ReadRegister_Done(void)
  1090. {
  1091.     E_METAAPP_RESULT_T state = m_BB_REG_Obj.Get_ConfirmState();
  1092.     switch( state )
  1093.     {
  1094.         case METAAPP_SUCCESS:
  1095.         {
  1096.             m_usBBRegValue = m_BB_REG_Obj.Get_RegValue();
  1097.             ReDrawFields(BB_PAGEIDX_BB_REG);
  1098.             sbReg->Panels->Items[0]->Text = (AnsiString) "  Read baseband register successfully";
  1099.         }
  1100.         break;
  1101.         case METAAPP_FAIL:
  1102.         {
  1103.             sbReg->Panels->Items[0]->Text = (AnsiString) "  Read baseband register fail";
  1104.             Application->MessageBox( "Execution Failure : Read Baseband register", "FAILURE", MB_OK );
  1105.             Force_BB_Stop();
  1106.         }
  1107.         break;
  1108.         case METAAPP_TIMEOUT:
  1109.         {
  1110.             sbReg->Panels->Items[0]->Text = (AnsiString) "  Read baseband register timeout";
  1111.             Application->MessageBox( "Execution Timeout : Read Baseband register", "TIMEOUT", MB_OK );
  1112.             Force_BB_Stop();
  1113.         }
  1114.         break;
  1115.         case METAAPP_STOP:
  1116.         {
  1117.             sbReg->Panels->Items[0]->Text = (AnsiString) "  Read baseband register stop";
  1118.         }
  1119.         break;
  1120.     }
  1121. }
  1122. //---------------------------------------------------------------------------
  1123. static void  CNF_WriteRegister( void )
  1124. {   frmBaseBand->WriteRegister_Done();
  1125. }
  1126. //-----------------------------------------------
  1127. void __fastcall TfrmBaseBand::btnBBRegWriteClick(TObject *Sender)
  1128. {
  1129.     if( !CheckFields() )
  1130.     {
  1131.         sbReg->Panels->Items[0]->Text = (AnsiString) "  Write baseband register fail";
  1132.         Application->MessageBox( "Execution Failure : Write Baseband register", "FAILURE", MB_OK );
  1133.         return;
  1134.     }
  1135.     m_BB_REG_Obj.ConfirmCallback = ::CNF_WriteRegister;
  1136.     m_BB_REG_Obj.REQ_WriteRegister_Start(m_uiBBRegAddr, m_usBBRegValue);
  1137.     sbReg->Panels->Items[0]->Text = (AnsiString) "  Write baseband register progressing";
  1138. }
  1139. //-----------------------------------------------
  1140. void TfrmBaseBand::WriteRegister_Done(void)
  1141. {
  1142.     E_METAAPP_RESULT_T state = m_BB_REG_Obj.Get_ConfirmState();
  1143.     switch (state)
  1144.     {
  1145.         case METAAPP_SUCCESS:
  1146.         {
  1147.             sbReg->Panels->Items[0]->Text = (AnsiString) "  Write baseband register successfully";
  1148.         }
  1149.         break;
  1150.         case METAAPP_FAIL:
  1151.         {
  1152.             sbReg->Panels->Items[0]->Text = (AnsiString) "  Write baseband register fail";
  1153.             Application->MessageBox( "Execution Failure : Write Baseband register", "FAILURE", MB_OK );
  1154.             Force_BB_Stop();
  1155.         }
  1156.         break;
  1157.         case METAAPP_TIMEOUT:
  1158.         {
  1159.             sbReg->Panels->Items[0]->Text = (AnsiString) "  Write baseband register timeout";
  1160.             Application->MessageBox( "Execution Timeout : Write Baseband register", "TIMEOUT", MB_OK );
  1161.             Force_BB_Stop();
  1162.         }
  1163.         break;
  1164.         case METAAPP_STOP:
  1165.         {
  1166.             sbReg->Panels->Items[0]->Text = (AnsiString) "  Write baseband register stop";
  1167.         }
  1168.         break;
  1169.         default:
  1170.         break;
  1171.     }
  1172. }
  1173. //===========================================================================
  1174. void __fastcall TfrmBaseBand::btnBBRegValueClick(TObject *Sender)
  1175. {
  1176.     btnBBRegValue->Tag = (DEC_FORMAT == (E_VALUE_FORMAT_T) btnBBRegValue->Tag) ? HEX_FORMAT: DEC_FORMAT;
  1177.     ReDrawFields(BB_PAGEIDX_BB_REG);
  1178. }
  1179. //---------------------------------------------------------------------------
  1180. void __fastcall TfrmBaseBand::edtMeasureCountCheck(TObject *Sender)
  1181. {
  1182.    AnsiString  text;
  1183.    unsigned short  data;
  1184.    int  band;
  1185.    TEdit *edit = (TEdit*)Sender;
  1186.    char  hint[] = "value shall be 0 ~ 65535";
  1187.    text = edit->Text;
  1188.    if( !IsValidADCMeasureCount( text, data ) )
  1189.    {  edit->Text = 0;
  1190.       ShowHintLabel( edit, hint );
  1191.       edit->SetFocus();
  1192.       return;
  1193.    }
  1194.    m_usMeasureCount = data;
  1195. }
  1196. //---------------------------------------------------------------------------
  1197. void __fastcall TfrmBaseBand::btnADCChangeDBClick(TObject *Sender)
  1198. {
  1199.     frmMainSel->mnuFDMDatabaseClick(Sender);
  1200.     if( ! NVRAMMan->Get_IsInit() )
  1201.     {
  1202.         sbAdc->Panels->Items[0]->Text = (AnsiString) "  NVRAM database file initialization fail";
  1203.         Application->MessageBox( "Execution Failure : NVRAM database file initialization fail", "FAILURE", MB_OK );
  1204.         return;
  1205.     }
  1206.     sbAdc->Panels->Items[0]->Text = (AnsiString) "  Change NVRAM database file successfully";
  1207. }
  1208. //==============================================================================
  1209. void __fastcall TfrmBaseBand::btnBGUploadFromFlashClick(TObject *Sender)
  1210. {
  1211.     if( ! NVRAMMan->Get_IsInit() )
  1212.     {  frmMainSel->mnuFDMDatabaseClick(Sender);
  1213.     }
  1214.     if( ! NVRAMMan->Get_IsInit() )
  1215.     {
  1216.         sbBG->Panels->Items[0]->Text = (AnsiString) " NVRAM database file initialize fail";
  1217.         Application->MessageBox( "Execution Failure : NVRAM database file initialize fail", "FAILURE", MB_OK );
  1218.         return;
  1219.     }
  1220.     m_BB_CUSTHW_Obj.ConfirmCallback = ::CNF_BG_ReadFromNVRAM;
  1221.     m_BB_CUSTHW_Obj.REQ_Read_From_NVRAM();
  1222.     btnBGUploadFromFlash->Enabled = false;
  1223.     btnBGDownloadToFlash->Enabled = false;
  1224. }
  1225. //-----------------------------------------------
  1226. void  TfrmBaseBand::UploadBGFromFlashDone( void )
  1227. {
  1228.     int  i;
  1229.     int state = m_BB_CUSTHW_Obj.Get_ConfirmState();
  1230.     switch( state )
  1231.     {
  1232.         case STATE_CUST_HW_OK:
  1233.         {
  1234.             m_custom_hw_level = m_BB_CUSTHW_Obj.Get_CustomHwLevel();
  1235.             if( m_bDownloadTrigger )
  1236.             {
  1237.                 m_bDownloadTrigger = false;
  1238.                 for( int i=0; i<VISIBLE_BATTERY_LEVEL_NUM; i++ )
  1239.                 {
  1240.                     // m_BB_CUSTHW_Obj.m_custom_hw_level.BatteryLevel[i] = m_uiBatteryLevelVoltage[i];
  1241.                     m_BB_CUSTHW_Obj.Set_BatteryLevel( i, m_uiBatteryLevelVoltage[i] );
  1242.                 }
  1243.                 m_BB_CUSTHW_Obj.ConfirmCallback = ::CNF_BG_WriteToNVRAM;
  1244.                 m_BB_CUSTHW_Obj.REQ_Write_To_NVRAM();
  1245.             }
  1246.             else
  1247.             {
  1248.                 for( int i=0; i<VISIBLE_BATTERY_LEVEL_NUM; i++ )
  1249.                 {
  1250.                     m_uiBatteryLevelVoltage[i] =  m_custom_hw_level.BatteryLevel[i];
  1251.                 }
  1252.             ReDrawBGFields();
  1253.             sbBG->Panels->Items[0]->Text = (AnsiString) "  Upload battery level setting from flash successful";
  1254.             btnBGUploadFromFlash->Enabled = true;
  1255.             btnBGDownloadToFlash->Enabled = true;
  1256.         }
  1257.     }
  1258.         break;
  1259.         case STATE_CUST_HW_FAIL:
  1260.         {
  1261.             sbBG->Panels->Items[0]->Text = (AnsiString) "  Upload battery level setting from flash fail, please check the version of load and NVRAM database are same.";
  1262.             Application->MessageBox( "Execution Failure : Upload battery level setting form flash, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  1263.             Force_BB_Stop();
  1264.         }
  1265.         break;
  1266.         case STATE_CUST_HW_TIMEOUT:
  1267.         {
  1268.             sbBG->Panels->Items[0]->Text = (AnsiString) "  Upload battery level setting from flash timeout";
  1269.             Application->MessageBox( "Execution Timeout : Upload battery level setting form flash", "TIMEOUT", MB_OK );
  1270.             Force_BB_Stop();
  1271.         }
  1272.         break;
  1273.         case STATE_CUST_HW_STOP:
  1274.         {
  1275.             sbBG->Panels->Items[0]->Text = (AnsiString) "  Upload battery level setting from flash stop";
  1276.         }
  1277.         break;
  1278.     }
  1279. }
  1280. //==============================================================================
  1281. void __fastcall TfrmBaseBand::btnBGDownloadToFlashClick(TObject *Sender)
  1282. {
  1283.     if( ! NVRAMMan->Get_IsInit() )
  1284.     {   frmMainSel->mnuFDMDatabaseClick(Sender);
  1285.     }
  1286.     if( ! NVRAMMan->Get_IsInit() )
  1287.     {
  1288.         sbBG->Panels->Items[0]->Text = (AnsiString) " NVRAM database file initialize fail";
  1289.         Application->MessageBox( "Execution Failure : NVRAM database file initialize fail", "FAILURE", MB_OK );
  1290.         return;
  1291.     }
  1292.     m_bDownloadTrigger = true;
  1293.     m_BB_CUSTHW_Obj.ConfirmCallback = ::CNF_BG_ReadFromNVRAM;
  1294.     m_BB_CUSTHW_Obj.REQ_Read_From_NVRAM();
  1295.     btnBGUploadFromFlash->Enabled = false;
  1296.     btnBGDownloadToFlash->Enabled = false;
  1297. }
  1298. //-----------------------------------------------
  1299. void  TfrmBaseBand::DownloadBGToFlashDone( void )
  1300. {
  1301.     int state = m_BB_CUSTHW_Obj.Get_ConfirmState();
  1302.     if( state==STATE_CUST_HW_OK )
  1303.     {
  1304.         sbBG->Panels->Items[0]->Text = (AnsiString) "  Download battery level setting to flash successfully";
  1305.     }
  1306.     else  if( state==STATE_CUST_HW_FAIL )
  1307.     {
  1308.         sbBG->Panels->Items[0]->Text = (AnsiString) "  Download battery level setting to flash fail, please check the version of load and NVRAM database are same.";
  1309.         Application->MessageBox( "Execution Failure : Download battery level setting to flash, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  1310.         Force_BB_Stop();
  1311.     }
  1312.     else  if( state==STATE_CUST_HW_TIMEOUT )
  1313.     {
  1314.         sbBG->Panels->Items[0]->Text = (AnsiString) "  Download battery level setting to flash timeout";
  1315.         Application->MessageBox( "Execution Timeout : Download battery level setting to flash", "TIMEOUT", MB_OK );
  1316.         Force_BB_Stop();
  1317.     }
  1318.     else  if( state==STATE_CUST_HW_STOP )
  1319.     {
  1320.         sbBG->Panels->Items[0]->Text = (AnsiString) "  Download battery level setting to flash stop";
  1321.     }
  1322.     btnBGUploadFromFlash->Enabled = true;
  1323.     btnBGDownloadToFlash->Enabled = true;
  1324. }
  1325. //==============================================================================
  1326. void __fastcall TfrmBaseBand::btnBGChangeDBClick(TObject *Sender)
  1327. {
  1328.     frmMainSel->mnuFDMDatabaseClick(Sender);
  1329.     if( ! NVRAMMan->Get_IsInit() )
  1330.     {
  1331.         sbBG->Panels->Items[0]->Text = (AnsiString) "  NVRAM database file initialization fail";
  1332.         Application->MessageBox( "Execution Failure : NVRAM database file initialization fail", "FAILURE", MB_OK );
  1333.         return;
  1334.     }
  1335.     sbBG->Panels->Items[0]->Text = (AnsiString) "  Change NVRAM database file successfully";
  1336. }
  1337. //---------------------------------------------------------------------------
  1338. void __fastcall TfrmBaseBand::btnBGLoadFromFileClick(TObject *Sender)
  1339. {
  1340.     char str[512];
  1341.     bool ok;
  1342.     float  fdata;
  1343.     ok = OpenDialog->Execute();
  1344.     if( !ok )
  1345.     {
  1346.         sbBG->Panels->Items[0]->Text = (AnsiString) "  Load battery level setting from file fail";
  1347.         Application->MessageBox( "Execution Failure : Load battery level setting from file", "FAILURE", MB_OK );
  1348.         return;
  1349.     }
  1350.     strcpy( str, OpenDialog->FileName.c_str() );
  1351.     ok = m_BB_CUSTHW_Obj.REQ_Read_From_File( str );
  1352.     if( ok )
  1353.     {
  1354.         for( int i=0; i<VISIBLE_BATTERY_LEVEL_NUM; i++ )
  1355.         {
  1356.            // m_custom_hw_level.BatteryLevel[i] = m_BB_CUSTHW_Obj.m_custom_hw_level.BatteryLevel[i];
  1357.             m_custom_hw_level.BatteryLevel[i] = m_BB_CUSTHW_Obj.Get_BatteryLevel( i );
  1358.             m_uiBatteryLevelVoltage[i] =  m_custom_hw_level.BatteryLevel[i];
  1359.         }
  1360.         ReDrawBGFields();
  1361.         sbBG->Panels->Items[0]->Text = (AnsiString) "  Load battery level setting from file successful";
  1362.     }
  1363.     else
  1364.     {
  1365.         sbBG->Panels->Items[0]->Text = (AnsiString) "  Load battery level setting from file fail";
  1366.         Application->MessageBox( "Execution Failure : Load battery level setting from file", "FAILURE", MB_OK );
  1367.     }
  1368. }
  1369. //---------------------------------------------------------------------------
  1370. void __fastcall TfrmBaseBand::btnBGSaveToFileClick(TObject *Sender)
  1371. {
  1372.     char str[512];
  1373.     bool ok;
  1374.     ok = SaveDialog->Execute();
  1375.     if( !ok )
  1376.     {
  1377.         sbBG->Panels->Items[0]->Text = (AnsiString) "   Save battery level setting to file fail";
  1378.         Application->MessageBox( "Execution Failure : Save battery level setting to file", "FAILURE", MB_OK );
  1379.         return;
  1380.     }
  1381.     for( int i=0; i<VISIBLE_BATTERY_LEVEL_NUM; i++ )
  1382.     {
  1383.        // m_BB_CUSTHW_Obj.m_custom_hw_level.BatteryLevel[i] = m_uiBatteryLevelVoltage[i];
  1384.         m_BB_CUSTHW_Obj.Set_BatteryLevel( i, m_uiBatteryLevelVoltage[i] );
  1385.     }
  1386.     strcpy( str, SaveDialog->FileName.c_str() );
  1387.    
  1388.     ok = m_BB_CUSTHW_Obj.REQ_Write_To_File( str );
  1389.     if( !ok )
  1390.     {
  1391.         sbBG->Panels->Items[0]->Text = (AnsiString) "  Save battery level setting to file fail";
  1392.         Application->MessageBox( "Execution Failure : Save battery level setting to file", "FAILURE", MB_OK );
  1393.     }
  1394.     else
  1395.     {
  1396.         sbBG->Panels->Items[0]->Text = (AnsiString) "  Save battery level setting to file successfully";
  1397.     }
  1398. }
  1399. //---------------------------------------------------------------------------
  1400. void __fastcall TfrmBaseBand::edtBatteryLevelVoltageCheck(TObject *Sender)
  1401. {
  1402.     AnsiString  text;
  1403.     unsigned int  data;
  1404.     int  band;
  1405.     TEdit *edit = (TEdit*)Sender;
  1406.     char  hint[] = "value shall be 0 ~ 9999999";
  1407.     text = edit->Text;
  1408.     if( !IsValidBatteryLevelVoltage( text, data ) )
  1409.     {
  1410.         edit->Text = 0;
  1411.         ShowHintLabel( edit, hint );
  1412.         edit->SetFocus();
  1413.         return;
  1414.     }
  1415.     m_uiBatteryLevelVoltage[edit->Tag] = data;
  1416.     m_custom_hw_level.BatteryLevel[edit->Tag] = data;
  1417.     
  1418. }
  1419. //---------------------------------------------------------------------------
  1420. void __fastcall TfrmBaseBand::FormCreate(TObject *Sender)
  1421. {
  1422.     // BG
  1423.     m_bDownloadTrigger = false;
  1424.     for(int i=0; i<VISIBLE_BATTERY_LEVEL_NUM; i++ )
  1425.     {
  1426.         m_uiBatteryLevelVoltage[i] = 0;
  1427.     }
  1428.     Init();
  1429. }
  1430. //---------------------------------------------------------------------------
  1431. void TfrmBaseBand::Init( void )
  1432. {
  1433.     m_bInit = true;
  1434.     frmPMICReg->Init();
  1435. }
  1436. //==========================================================================
  1437. ///////////////////////              PMIC         //////////////////////////
  1438. //==========================================================================
  1439. void __fastcall TfrmBaseBand::btnPMICRegValueClick(TObject *Sender)
  1440. {
  1441.     btnPMICRegValue->Tag = (DEC_FORMAT == (E_VALUE_FORMAT_T) btnPMICRegValue->Tag) ? HEX_FORMAT: DEC_FORMAT;
  1442.     ReDrawFields(BB_PAGEIDX_PMIC_REG);
  1443. }
  1444. //---------------------------------------------------------------------------
  1445. void __fastcall TfrmBaseBand::btnPMICRegReadClick(TObject *Sender)
  1446. {
  1447.     if( !CheckFields() )
  1448.     {
  1449.         m_sbPMIC->Panels->Items[0]->Text = (AnsiString) "  Read PMIC register fail";
  1450.         Application->MessageBox( "Execution Failure : Read PMIC register", "FAILURE", MB_OK );
  1451.         return;
  1452.     }
  1453.     m_cBB_PMIC_REG_Obj.ConfirmCallback = ::CNF_PMIC_ReadRegister;
  1454.     m_cBB_PMIC_REG_Obj.REQ_ReadRegister_Start( m_uiPMICRegAddr );
  1455.     m_sbPMIC->Panels->Items[0]->Text = (AnsiString) "  Read PMIC register progressing";
  1456. }
  1457. //-----------------------------------------------
  1458. void  TfrmBaseBand::PMIC_ReadRegister_Done(void)
  1459. {
  1460.     E_METAAPP_RESULT_T state = m_cBB_PMIC_REG_Obj.Get_ConfirmState();
  1461.     switch (state)
  1462.     {
  1463.         case METAAPP_SUCCESS:
  1464.         {
  1465.             m_usPMICRegValue = m_cBB_PMIC_REG_Obj.Get_RegValue();
  1466.             ReDrawFields(BB_PAGEIDX_PMIC_REG);
  1467.             m_sbPMIC->Panels->Items[0]->Text = (AnsiString) "  Read PMIC register successfully";
  1468.         }
  1469.         break;
  1470.         case METAAPP_FAIL:
  1471.         {
  1472.             m_sbPMIC->Panels->Items[0]->Text = (AnsiString) "  Read PMIC register fail";
  1473.             Application->MessageBox( "Execution Failure : Read PMIC register", "FAILURE", MB_OK );
  1474.             Force_BB_Stop();
  1475.         }
  1476.         break;
  1477.         case METAAPP_TIMEOUT:
  1478.         {
  1479.             m_sbPMIC->Panels->Items[0]->Text = (AnsiString) "  Read PMIC register timeout";
  1480.             Application->MessageBox( "Execution Timeout : Read PMIC register", "TIMEOUT", MB_OK );
  1481.             Force_BB_Stop();
  1482.         }
  1483.         break;
  1484.         case METAAPP_STOP:
  1485.         {
  1486.             m_sbPMIC->Panels->Items[0]->Text = (AnsiString) "  Read PMIC register stop";
  1487.         }
  1488.         break;
  1489.         default:
  1490.         break;
  1491.     }
  1492. }
  1493. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1494. void __fastcall TfrmBaseBand::btnPMICRegWriteClick(TObject *Sender)
  1495. {
  1496.     if( !CheckFields() )
  1497.     {
  1498.         m_sbPMIC->Panels->Items[0]->Text = (AnsiString) "  Write PMIC register fail";
  1499.         Application->MessageBox( "Execution Failure : Write PMIC register", "FAILURE", MB_OK );
  1500.         return;
  1501.     }
  1502.     m_cBB_PMIC_REG_Obj.ConfirmCallback = ::CNF_PMIC_WriteRegister;
  1503.     m_cBB_PMIC_REG_Obj.REQ_WriteRegister_Start( m_uiPMICRegAddr, m_usPMICRegValue );
  1504.     m_sbPMIC->Panels->Items[0]->Text = (AnsiString) "  Write PMIC register progressing";
  1505. }
  1506. //-----------------------------------------------
  1507. void  TfrmBaseBand::PMIC_WriteRegister_Done(void)
  1508. {
  1509.     E_METAAPP_RESULT_T state = m_cBB_PMIC_REG_Obj.Get_ConfirmState();
  1510.     switch (state)
  1511.     {
  1512.         case METAAPP_SUCCESS:
  1513.         {
  1514.             m_sbPMIC->Panels->Items[0]->Text = (AnsiString) "  Write baseband register successfully";
  1515.         }
  1516.         break;
  1517.         case METAAPP_FAIL:
  1518.         {
  1519.             m_sbPMIC->Panels->Items[0]->Text = (AnsiString) "  Write baseband register fail";
  1520.             Application->MessageBox( "Execution Failure : Write Baseband register", "FAILURE", MB_OK );
  1521.             Force_BB_Stop();
  1522.         }
  1523.         break;
  1524.         case METAAPP_TIMEOUT:
  1525.         {
  1526.             m_sbPMIC->Panels->Items[0]->Text = (AnsiString) "  Write baseband register timeout";
  1527.             Application->MessageBox( "Execution Timeout : Write Baseband register", "TIMEOUT", MB_OK );
  1528.             Force_BB_Stop();
  1529.         }
  1530.         break;
  1531.         case METAAPP_STOP:
  1532.         {
  1533.             m_sbPMIC->Panels->Items[0]->Text = (AnsiString) "  Write baseband register stop";
  1534.         }
  1535.         break;
  1536.         default:
  1537.         {
  1538.         }
  1539.         break;
  1540.     }
  1541. }
  1542. void __fastcall TfrmBaseBand::edtPMICAddressCheck(TObject *Sender)
  1543. {
  1544.     AnsiString  text;
  1545.     unsigned int  data;
  1546.     TEdit *edit = (TEdit*)Sender;
  1547.     char  hint[] = " character is not valid ";
  1548.     text = edit->Text;
  1549.     if (! IsValidHexRegAddr(text, data))
  1550.     {
  1551.         ShowHintLabel(edit, hint);
  1552.         edit->SetFocus();
  1553.         return;
  1554.     }
  1555.     m_uiPMICRegAddr = data;
  1556. }
  1557. //---------------------------------------------------------------------------
  1558. void __fastcall TfrmBaseBand::edtPMICValueCheck(TObject *Sender)
  1559. {
  1560.     AnsiString  text;
  1561.     unsigned short  data;
  1562.     int  band;
  1563.     TEdit *edit = (TEdit*)Sender;
  1564.     char  hint[] = " character is not valid ";
  1565.     text = edit->Text;
  1566.     if (DEC_FORMAT == btnPMICRegValue->Tag)  // Dec
  1567.     {
  1568.         if (! IsValidDecRegValue(text, data))
  1569.         {
  1570.             ShowHintLabel(edit, hint);
  1571.             edit->SetFocus();
  1572.             return;
  1573.         }
  1574.     }
  1575.     else  // Hex
  1576.     {
  1577.         if (! IsValidHexRegValue(text, data))
  1578.         {
  1579.             ShowHintLabel(edit, hint);
  1580.             edit->SetFocus();
  1581.             return;
  1582.         }
  1583.    }
  1584.    m_usPMICRegValue = data;
  1585. }
  1586. //---------------------------------------------------------------------------
  1587. void __fastcall TfrmBaseBand::btnPMICRegClick(TObject *Sender)
  1588. {
  1589.     if ( FT_MT6318 == m_sPmicId.id )
  1590.     {
  1591.         frmPMICReg->Top  = 104;
  1592.         frmPMICReg->Left = 135;
  1593.         frmPMICReg->Show();
  1594.     }
  1595.     
  1596. }
  1597. //===========================================================================
  1598. void __fastcall TfrmBaseBand::edtLEDLightLevelCheck(TObject *Sender)
  1599. {
  1600.     AnsiString  text;
  1601.     unsigned char  ucdata;
  1602.     TEdit *edit = (TEdit*)Sender;
  1603.     char  hint[] = " value should be 0~5 ";
  1604.     text = edit->Text;
  1605.     if( !IsValidLEDLightLevel(text, ucdata))
  1606.     {
  1607.         ShowHintLabel( edit, hint );
  1608.         edit->SetFocus();
  1609.         return;
  1610.     }
  1611.     m_sLEDLevel.led_light_level = ucdata;
  1612. }
  1613. //---------------------------------------------------------------------------
  1614. void __fastcall TfrmBaseBand::m_edtMainLCDCheck(TObject *Sender)
  1615. {
  1616.     AnsiString  text;
  1617.     unsigned char  ucdata;
  1618.     TEdit *edit = (TEdit*)Sender;
  1619.     char  hint[] = " value should be 0~5 ";
  1620.     text = edit->Text;
  1621.     if( !IsValidLEDLightLevel(text, ucdata))
  1622.     {
  1623.         ShowHintLabel( edit, hint );
  1624.         edit->SetFocus();
  1625.         return;
  1626.     }
  1627.     m_cMainLCDLevel = ucdata;
  1628. }
  1629. //---------------------------------------------------------------------------
  1630. void __fastcall TfrmBaseBand::m_edtSubLCDCheck(TObject *Sender)
  1631. {
  1632.     AnsiString  text;
  1633.     unsigned char  ucdata;
  1634.     TEdit *edit = (TEdit*)Sender;
  1635.     char  hint[] = " value should be 0~5 ";
  1636.     text = edit->Text;
  1637.     if( !IsValidLEDLightLevel(text, ucdata))
  1638.     {
  1639.         ShowHintLabel( edit, hint );
  1640.         edit->SetFocus();
  1641.         return;
  1642.     }
  1643.     m_cSubLCDLevel = ucdata;
  1644. }
  1645. //---------------------------------------------------------------------------
  1646. void __fastcall TfrmBaseBand::m_btnKeypadLEDSetClick(TObject *Sender)
  1647. {
  1648.     CurrentPageLock();
  1649.     m_cBB_LED_Obj.ConfirmCallback = ::CNF_LED_SetLightLevel;
  1650.     m_cBB_LED_Obj.REQ_SetLEDLightLevel_Start(m_sLEDLevel);
  1651.     m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level progressing";
  1652. }
  1653. //---------------------------------------------------------------------------
  1654. void TfrmBaseBand::CNF_LED_SetLightLevel(void)
  1655. {
  1656.     int state = m_cBB_LED_Obj.Get_ConfirmState();
  1657.     switch (state)
  1658.     {
  1659.         case METAAPP_SUCCESS:
  1660.         {
  1661.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level successful";
  1662.         }
  1663.         break;
  1664.         case METAAPP_FAIL:
  1665.         {
  1666.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level fail";
  1667.             Application->MessageBox( "Execution Failure : Set LED light level", "FAILURE", MB_OK );
  1668.         }
  1669.         break;
  1670.         case METAAPP_TIMEOUT:
  1671.         {
  1672.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level timeout";
  1673.             Application->MessageBox( "Execution Timeout : Set LED light level", "TIMEOUT", MB_OK );
  1674.         }
  1675.         break;
  1676.         case METAAPP_STOP:
  1677.         {
  1678.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level stop";
  1679.         }
  1680.         break;
  1681.         default:
  1682.         {
  1683.         }
  1684.         break;
  1685.     }
  1686.     CurrentPageReset();
  1687. }
  1688. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1689. void __fastcall TfrmBaseBand::m_btnMainLCDSetClick(TObject *Sender)
  1690. {
  1691.     FtLCDLevel sLCDLevel;
  1692.     sLCDLevel.lcd_type = GPIO_DEV_LED_MAINLCD;
  1693.     sLCDLevel.lcd_light_level = m_edtMainLCD->Text.ToInt();
  1694.     CurrentPageLock();
  1695.     m_cBB_LED_Obj.ConfirmCallback = ::CNF_LED_MainLCDLightLevel;
  1696.     m_cBB_LED_Obj.REQ_SetMainSubLEDLightLevel_Start(sLCDLevel);
  1697.     m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level of main LCD progressing";
  1698. }
  1699. //---------------------------------------------------------------------------
  1700. void TfrmBaseBand::CNF_LED_MainLCDLightLevel(void)
  1701. {
  1702.     int state = m_cBB_LED_Obj.Get_ConfirmState();
  1703.     switch (state)
  1704.     {
  1705.         case METAAPP_SUCCESS:
  1706.         {
  1707.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level of main LCD successful";
  1708.         }
  1709.         break;
  1710.         case METAAPP_FAIL:
  1711.         {
  1712.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level of main LCD fail";
  1713.             Application->MessageBox( "Execution Failure : Set LED light level of main LCD", "FAILURE", MB_OK );
  1714.         }
  1715.         break;
  1716.         case METAAPP_TIMEOUT:
  1717.         {
  1718.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level of main LCD timeout";
  1719.             Application->MessageBox( "Execution Timeout : Set LED light level of main LCD", "TIMEOUT", MB_OK );
  1720.         }
  1721.         break;
  1722.         case METAAPP_STOP:
  1723.         {
  1724.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level of main LCD stop";
  1725.         }
  1726.         break;
  1727.         default:
  1728.         {
  1729.         }
  1730.         break;
  1731.     }
  1732.     CurrentPageReset();
  1733. }
  1734. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1735. void __fastcall TfrmBaseBand::m_btnSubLCDSetClick(TObject *Sender)
  1736. {
  1737. #if 0
  1738.     FtLCDLevel sLCDLevel;
  1739.     sLCDLevel.lcd_type = GPIO_DEV_LED_SUBLCD;
  1740.     sLCDLevel.lcd_light_level = m_edtSubLCD->Text.ToInt();
  1741.     CurrentPageLock();
  1742.     m_cBB_LED_Obj.ConfirmCallback = ::CNF_LED_SubLCDLightLevel;
  1743.     m_cBB_LED_Obj.REQ_SetMainSubLEDLightLevel_Start(sLCDLevel);
  1744.     m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level of Sub. LCD progressing";
  1745. #endif    
  1746. }
  1747. //---------------------------------------------------------------------------
  1748. void TfrmBaseBand::CNF_LED_SubLCDLightLevel(void)
  1749. {
  1750.     int state = m_cBB_LED_Obj.Get_ConfirmState();
  1751.     switch (state)
  1752.     {
  1753.         case METAAPP_SUCCESS:
  1754.         {
  1755.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level of Sub. LCD successful";
  1756.         }
  1757.         break;
  1758.         case METAAPP_FAIL:
  1759.         {
  1760.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level of Sub. LCD fail";
  1761.             Application->MessageBox( "Execution Failure : Set LED light level of Sub. LCD", "FAILURE", MB_OK );
  1762.         }
  1763.         break;
  1764.         case METAAPP_TIMEOUT:
  1765.         {
  1766.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level of Sub. LCD timeout";
  1767.             Application->MessageBox( "Execution Timeout : Set LED light level of Sub. LCD", "TIMEOUT", MB_OK );
  1768.         }
  1769.         break;
  1770.         case METAAPP_STOP:
  1771.         {
  1772.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Set LED light level of Sub. LCD stop";
  1773.         }
  1774.         break;
  1775.         default:
  1776.         {
  1777.         }
  1778.         break;
  1779.     }
  1780.     CurrentPageReset();
  1781. }
  1782. //===========================================================================
  1783. void __fastcall TfrmBaseBand::btnVBROnClick(TObject *Sender)
  1784. {
  1785.     FtVibratorOnOff vbr_on_off;
  1786.     vbr_on_off.onoff = 1;
  1787.     m_cBB_VBR_Obj.ConfirmCallback = ::CNF_VBR_TurnOnVibrator;
  1788.     m_cBB_VBR_Obj.REQ_SetVibratorOnOff_Start(vbr_on_off);
  1789.     CurrentPageLock();
  1790.     m_sbVBR->Panels->Items[0]->Text = (AnsiString) "  Turn on vibrator progressing";
  1791. }
  1792. //-------------------------------
  1793. void TfrmBaseBand::CNF_VBR_TurnOnVibrator(void)
  1794. {
  1795.     int state = m_cBB_VBR_Obj.Get_ConfirmState();
  1796.     switch (state)
  1797.     {
  1798.         case METAAPP_SUCCESS:
  1799.         {
  1800.             m_sbVBR->Panels->Items[0]->Text = (AnsiString) "  Turn on vibrator successful";
  1801.         }
  1802.         break;
  1803.         case METAAPP_FAIL:
  1804.         {
  1805.             m_sbVBR->Panels->Items[0]->Text = (AnsiString) "  Turn on vibrator fail";
  1806.             Application->MessageBox( "Execution Failure : Turn on vibrator", "FAILURE", MB_OK );
  1807.         }
  1808.         break;
  1809.         case METAAPP_TIMEOUT:
  1810.         {
  1811.             m_sbVBR->Panels->Items[0]->Text = (AnsiString) "  Turn on vibrator timeout";
  1812.             Application->MessageBox( "Execution Timeout : Turn on vibrator", "TIMEOUT", MB_OK );
  1813.         }
  1814.         break;
  1815.         case METAAPP_STOP:
  1816.         {
  1817.             m_sbVBR->Panels->Items[0]->Text = (AnsiString) "  Turn on vibrator stop";
  1818.         }
  1819.         break;
  1820.         default:
  1821.         {
  1822.         }
  1823.         break;
  1824.     }
  1825.     CurrentPageReset();
  1826. }
  1827. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1828. void __fastcall TfrmBaseBand::btnVBROffClick(TObject *Sender)
  1829. {
  1830.     FtVibratorOnOff vbr_on_off;
  1831.     vbr_on_off.onoff = 0;
  1832.     m_cBB_VBR_Obj.ConfirmCallback = ::CNF_VBR_TurnOffVibrator;
  1833.     m_cBB_VBR_Obj.REQ_SetVibratorOnOff_Start(vbr_on_off);
  1834.     CurrentPageLock();
  1835.     m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Turn off vibrator progressing";
  1836. }
  1837. //-------------------------------
  1838. void TfrmBaseBand::CNF_VBR_TurnOffVibrator(void)
  1839. {
  1840.     int state = m_cBB_VBR_Obj.Get_ConfirmState();
  1841.     switch (state)
  1842.     {
  1843.         case METAAPP_SUCCESS:
  1844.         {
  1845.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Turn off vibrator successful";
  1846.         }
  1847.         break;
  1848.         case METAAPP_FAIL:
  1849.         {
  1850.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Turn off vibrator fail";
  1851.             Application->MessageBox( "Execution Failure : Turn off vibrator", "FAILURE", MB_OK );
  1852.         }
  1853.         break;
  1854.         case METAAPP_TIMEOUT:
  1855.         {
  1856.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Turn off vibrator timeout";
  1857.             Application->MessageBox( "Execution Timeout : Turn off vibrator", "TIMEOUT", MB_OK );
  1858.         }
  1859.         break;
  1860.         case METAAPP_STOP:
  1861.         {
  1862.             m_sbLED->Panels->Items[0]->Text = (AnsiString) "  Turn off vibrator stop";
  1863.         }
  1864.         break;
  1865.         default:
  1866.         {
  1867.         }
  1868.         break;
  1869.     }
  1870.     CurrentPageReset();
  1871. }
  1872. //===========================================================================
  1873. ////////////////////////      share information     /////////////////////////
  1874. //===========================================================================
  1875. PMIC_ID* TfrmBaseBand::Get_PMIC_ID(void)
  1876. {
  1877.     return &m_sPmicId;
  1878. }
  1879. void __fastcall TfrmBaseBand::edtRTCYearCheck(TObject *Sender)
  1880. {
  1881.     //    
  1882. }
  1883. //---------------------------------------------------------------------------
  1884. void __fastcall TfrmBaseBand::edtRTCMonthCheck(TObject *Sender)
  1885. {
  1886.     //    
  1887. }
  1888. //---------------------------------------------------------------------------
  1889. void __fastcall TfrmBaseBand::edtRTCDayCheck(TObject *Sender)
  1890. {
  1891.     //    
  1892. }
  1893. //---------------------------------------------------------------------------
  1894. void __fastcall TfrmBaseBand::edtRTCWDayCheck(TObject *Sender)
  1895. {
  1896.     //     
  1897. }
  1898. //---------------------------------------------------------------------------
  1899. void __fastcall TfrmBaseBand::edtRTCHourCheck(TObject *Sender)
  1900. {
  1901.     //    
  1902. }
  1903. //---------------------------------------------------------------------------
  1904. void __fastcall TfrmBaseBand::edtRTCMinuteCheck(TObject *Sender)
  1905. {
  1906.     //    
  1907. }
  1908. //---------------------------------------------------------------------------
  1909. void __fastcall TfrmBaseBand::edtRTCSecCheck(TObject *Sender)
  1910. {
  1911.     //    
  1912. }
  1913. //===========================================================================
  1914. void __fastcall TfrmBaseBand::btnRTCQueryClick(TObject *Sender)
  1915. {
  1916.     m_cBB_RTC_Obj.ConfirmCallback = ::CNF_RTC_Query;
  1917.     m_cBB_RTC_Obj.REQ_QueryRTCTime_Start();
  1918.     CurrentPageLock();
  1919.     
  1920.     m_sbRTC->Panels->Items[0]->Text = (AnsiString) "  Query RTC time progressing";
  1921. }
  1922. //-------------------------------
  1923. void TfrmBaseBand::CNF_RTC_Query(void)
  1924. {
  1925.     int state = m_cBB_RTC_Obj.Get_ConfirmState();
  1926.     switch (state)
  1927.     {
  1928.         case METAAPP_SUCCESS:
  1929.         {
  1930.             T_Rtc *p_rtc = m_cBB_RTC_Obj.Get_RTCTime();
  1931.             m_sRTC = *p_rtc;
  1932.             ReDrawFields(BB_PAGEIDX_RTC);
  1933.             m_sbRTC->Panels->Items[0]->Text = (AnsiString) "  Query RTC time successful";
  1934.         }
  1935.         break;
  1936.         case METAAPP_FAIL:
  1937.         {
  1938.             m_sbRTC->Panels->Items[0]->Text = (AnsiString) "  Query RTC time fail";
  1939.             Application->MessageBox( "Execution Failure : Query RTC time", "FAILURE", MB_OK );
  1940.         }
  1941.         break;
  1942.         case METAAPP_TIMEOUT:
  1943.         {
  1944.             m_sbRTC->Panels->Items[0]->Text = (AnsiString) "  Query RTC time timeout";
  1945.             Application->MessageBox( "Execution Timeout : Query RTC time", "TIMEOUT", MB_OK );
  1946.         }
  1947.         break;
  1948.         case METAAPP_STOP:
  1949.         {
  1950.             m_sbRTC->Panels->Items[0]->Text = (AnsiString) "  Query RTC time stop";
  1951.         }
  1952.         break;
  1953.         default:
  1954.         {
  1955.         }
  1956.         break;
  1957.     }
  1958.     CurrentPageReset();
  1959. }