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

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_RFApcProfile.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   RF APC profile 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. //---------------------------------------------------------------------------
  70. // form
  71. #include "form_RFGUIApcProfile.h"
  72. #include "form_RFApcProfile.h"
  73. #include "form_RFTool.h"
  74. #include "form_main.h"
  75. #ifndef  _FORM_RF8PSKAPCPROFILE_H_
  76. #include "form_RF8PskApcProfile.h"
  77. #endif
  78. // misc
  79. #include "misc.h"
  80. #include "man_fdm.h"
  81. // message
  82. #ifndef _META_LAB_MSG_H_
  83. #include "meta_lab_msg.h"
  84. #endif
  85. // thread
  86. #ifndef  _RF_TADO_THRD_H_
  87. #include "rf_tado_thrd.h"
  88. #endif
  89. #ifndef  _RF_SETRAMP_THRD_H_
  90. #include "rf_setramp_thrd.h"
  91. #endif
  92. //---------------------------------------------------------------------------
  93. #pragma package(smart_init)
  94. #pragma resource "*.dfm"
  95. TfrmApcProfile *frmApcProfile;
  96. //static bool  init=true;
  97. extern TfrmMainSel *frmMainSel;
  98. // thread
  99. T_RFTADO*            pt_rftado;
  100. T_RFSETRAMP*       pt_rfsetramp;
  101. //===========================================================================
  102. //===========================================================================
  103. static void  ConfirmCallback_TX( void )
  104. {   frmApcProfile->ConfirmCallback_TX();
  105. }
  106. //---------------------------------------------------------------------------
  107. static void  ConfirmCallback_RfSetRampTable( void )
  108. {   frmApcProfile->ConfirmCallback_RfSetRampTable();
  109. }
  110. //---------------------------------------------------------------------------
  111. static void  CNF_ReadApcFromNVRAM( void )
  112. {   frmApcProfile->UploadApcFromFlashDone();
  113. }
  114. //---------------------------------------------------------------------------
  115. //static void  CNF_ReadWord3FromNVRAM( void )
  116. //{   frmApcProfile->UploadWord3FromFlashDone();
  117. //}
  118. //---------------------------------------------------------------------------
  119. static void  CNF_ReadB5PFromNVRAM( void )
  120. {   frmApcProfile->UploadB5PFromFlashDone();
  121. }
  122. //---------------------------------------------------------------------------
  123. static void  CNF_WriteApcToNVRAM( void )
  124. {   frmApcProfile->DownloadApcToFlashDone();
  125. }
  126. //---------------------------------------------------------------------------
  127. //static void  CNF_WriteWord3ToNVRAM( void )
  128. //{   frmApcProfile->DownloadWord3ToFlashDone();
  129. //}
  130. //---------------------------------------------------------------------------
  131. static void  CNF_WriteB5PToNVRAM( void )
  132. {   frmApcProfile->DownloadB5PToFlashDone();
  133. }
  134. //---------------------------------------------------------------------------
  135. static void  CNF_SetB5PToReg( void )
  136. {   frmApcProfile->CNF_SetB5PToReg();
  137. }
  138. //---------------------------------------------------------------------------
  139. static void  CNF_SetW6sImmediateBSI( void )
  140. {   frmApcProfile->CNF_SetW6sImmediateBSI();
  141. }
  142. //==============================================================================
  143. void _fastcall TfrmApcProfile::SubClassWndProc( Messages::TMessage &Message)
  144. {
  145.     switch ( Message.Msg )
  146.     {
  147.         case WM_MF_QUERY_RFTWOAPCDOOFFSET_SUCCESS:
  148.             m_bTADOSupport = true;
  149.             lblLowApcDcOffset->Visible = true;
  150.             edtLowApcDcOffset->Visible = true;
  151.             lblAPCLowestPower->Visible = true;
  152.             edtAPCLowestPower->Visible = true;
  153.             Query_RfSetRampTable_Support();
  154.         break;
  155.         case WM_MF_QUERY_RFTWOAPCDOOFFSET_FAILED:
  156.             m_bTADOSupport = false;
  157.             lblLowApcDcOffset->Visible = false;
  158.             edtLowApcDcOffset->Visible = false;
  159.             lblAPCLowestPower->Visible = false;
  160.             edtAPCLowestPower->Visible = false;
  161.             Query_RfSetRampTable_Support();
  162.         break;
  163.         
  164.        // case WM_ML_QUERY_RFSETRAMPTABLE_SUCCESS:
  165.        //      read_APC_files_setup( "MF_setup.txt", Application->ExeName );
  166.        //      UploadFromFlashStart(this);
  167.        // break;
  168.        // case WM_ML_QUERY_RFSETRAMPTABLE_FAILED:
  169.        //      read_APC_files_setup( "MF_setup.txt", Application->ExeName );
  170.        //      UploadFromFlashStart(this);
  171.        // break;
  172.         
  173.         default:
  174.              this->WndProc( Message );
  175.         break;
  176.     }
  177. }
  178. //===========================================================================
  179. __fastcall TfrmApcProfile::TfrmApcProfile(TComponent* Owner)
  180.    : TForm(Owner)
  181. {
  182.     for (E_BANDSEL band = BANDSEL_GSM900; band <= BANDSEL_GSM850; band++)
  183.     {
  184.         m_sRFCal_RamTable[band].rampData.lowest_power = 0;
  185.         for (int i=0; i<16; i++)
  186.         {
  187.             m_sRFCal_RamTable[band].rampData.power[i] = 0;
  188.             for (int j=0; j<16; j++)
  189.             {
  190.                 m_sRFCal_RamTable[band].rampData.ramp[i].point[0][j] = 0;
  191.             }
  192.         }
  193.         for (int i=0; i<11; i++)
  194.         {
  195.             m_sRFCal_RamTable[band].rampData.arfcn_weight[i].max_arfcn = -1;
  196.             m_sRFCal_RamTable[band].rampData.arfcn_weight[i].mid_level = 10;
  197.             m_sRFCal_RamTable[band].rampData.arfcn_weight[i].hi_weight = 0;
  198.             m_sRFCal_RamTable[band].rampData.arfcn_weight[i].low_weight = 0;
  199.         }
  200.     }
  201.     m_cTsc       = 5;
  202.     m_sAfcDac    = 4100;
  203.     m_eBurstType = NB_TX_RANDOM_WITH_TSC;
  204.     m_eCurBand     = BANDSEL_GSM900;
  205.     m_iCurPCLIndex = 0;
  206.     for (E_BANDSEL band = BANDSEL_GSM900; band <= BANDSEL_GSM850; band++)
  207.     {
  208.         m_usHighApcDcOffset[band] = 0;
  209.         m_usLowApcDcOffset[band]  = 0;
  210.     }
  211.     m_sTestArfcn[BANDSEL_GSM900 ] = 0;
  212.     m_sTestArfcn[BANDSEL_DCS1800] = 512;
  213.     m_sTestArfcn[BANDSEL_PCS1900] = 512;
  214.     m_sTestArfcn[BANDSEL_GSM850]  = 128;
  215.     m_iApcLowestPower[BANDSEL_GSM900]  = 5;
  216.     m_iApcLowestPower[BANDSEL_DCS1800] = 0;
  217.     m_iApcLowestPower[BANDSEL_PCS1900] = 0;
  218.     m_iApcLowestPower[BANDSEL_GSM850]  = 5;
  219.     lastTabIndex = 0; // GSM 900
  220.     RF_TX_Obj  = 0;
  221.     RF_APC_Obj = 0;
  222.     edtPCLDAC[ 0]=edtPCLDAC00;   btnPCL[ 0]=btnPCL00;   edtRampUp[ 0]=edtRampUp00;   edtRampDn[ 0]=edtRampDn00;   edtWtARFCN[ 0]=edtWtARFCN00;   edtWtHigh[ 0]=edtWtHigh00;   edtWtLow[ 0]=edtWtLow00;   edtWtPCL[ 0]=edtWtPCL00;
  223.     edtPCLDAC[ 1]=edtPCLDAC01;   btnPCL[ 1]=btnPCL01;   edtRampUp[ 1]=edtRampUp01;   edtRampDn[ 1]=edtRampDn01;   edtWtARFCN[ 1]=edtWtARFCN01;   edtWtHigh[ 1]=edtWtHigh01;   edtWtLow[ 1]=edtWtLow01;   edtWtPCL[ 1]=edtWtPCL01;
  224.     edtPCLDAC[ 2]=edtPCLDAC02;   btnPCL[ 2]=btnPCL02;   edtRampUp[ 2]=edtRampUp02;   edtRampDn[ 2]=edtRampDn02;   edtWtARFCN[ 2]=edtWtARFCN02;   edtWtHigh[ 2]=edtWtHigh02;   edtWtLow[ 2]=edtWtLow02;   edtWtPCL[ 2]=edtWtPCL02;
  225.     edtPCLDAC[ 3]=edtPCLDAC03;   btnPCL[ 3]=btnPCL03;   edtRampUp[ 3]=edtRampUp03;   edtRampDn[ 3]=edtRampDn03;   edtWtARFCN[ 3]=edtWtARFCN03;   edtWtHigh[ 3]=edtWtHigh03;   edtWtLow[ 3]=edtWtLow03;   edtWtPCL[ 3]=edtWtPCL03;
  226.     edtPCLDAC[ 4]=edtPCLDAC04;   btnPCL[ 4]=btnPCL04;   edtRampUp[ 4]=edtRampUp04;   edtRampDn[ 4]=edtRampDn04;   edtWtARFCN[ 4]=edtWtARFCN04;   edtWtHigh[ 4]=edtWtHigh04;   edtWtLow[ 4]=edtWtLow04;   edtWtPCL[ 4]=edtWtPCL04;
  227.     edtPCLDAC[ 5]=edtPCLDAC05;   btnPCL[ 5]=btnPCL05;   edtRampUp[ 5]=edtRampUp05;   edtRampDn[ 5]=edtRampDn05;   edtWtARFCN[ 5]=edtWtARFCN05;   edtWtHigh[ 5]=edtWtHigh05;   edtWtLow[ 5]=edtWtLow05;   edtWtPCL[ 5]=edtWtPCL05;
  228.     edtPCLDAC[ 6]=edtPCLDAC06;   btnPCL[ 6]=btnPCL06;   edtRampUp[ 6]=edtRampUp06;   edtRampDn[ 6]=edtRampDn06;   edtWtARFCN[ 6]=edtWtARFCN06;   edtWtHigh[ 6]=edtWtHigh06;   edtWtLow[ 6]=edtWtLow06;   edtWtPCL[ 6]=edtWtPCL06;
  229.     edtPCLDAC[ 7]=edtPCLDAC07;   btnPCL[ 7]=btnPCL07;   edtRampUp[ 7]=edtRampUp07;   edtRampDn[ 7]=edtRampDn07;   edtWtARFCN[ 7]=edtWtARFCN07;   edtWtHigh[ 7]=edtWtHigh07;   edtWtLow[ 7]=edtWtLow07;   edtWtPCL[ 7]=edtWtPCL07;
  230.     edtPCLDAC[ 8]=edtPCLDAC08;   btnPCL[ 8]=btnPCL08;   edtRampUp[ 8]=edtRampUp08;   edtRampDn[ 8]=edtRampDn08;   edtWtARFCN[ 8]=edtWtARFCN08;   edtWtHigh[ 8]=edtWtHigh08;   edtWtLow[ 8]=edtWtLow08;   edtWtPCL[ 8]=edtWtPCL08;
  231.     edtPCLDAC[ 9]=edtPCLDAC09;   btnPCL[ 9]=btnPCL09;   edtRampUp[ 9]=edtRampUp09;   edtRampDn[ 9]=edtRampDn09;   edtWtARFCN[ 9]=edtWtARFCN09;   edtWtHigh[ 9]=edtWtHigh09;   edtWtLow[ 9]=edtWtLow09;   edtWtPCL[ 9]=edtWtPCL09;
  232.     edtPCLDAC[10]=edtPCLDAC10;   btnPCL[10]=btnPCL10;   edtRampUp[10]=edtRampUp10;   edtRampDn[10]=edtRampDn10;   edtWtARFCN[10]=edtWtARFCN10;   edtWtHigh[10]=edtWtHigh10;   edtWtLow[10]=edtWtLow10;   edtWtPCL[10]=edtWtPCL10;
  233.     edtPCLDAC[11]=edtPCLDAC11;   btnPCL[11]=btnPCL11;   edtRampUp[11]=edtRampUp11;   edtRampDn[11]=edtRampDn11;
  234.     edtPCLDAC[12]=edtPCLDAC12;   btnPCL[12]=btnPCL12;   edtRampUp[12]=edtRampUp12;   edtRampDn[12]=edtRampDn12;
  235.     edtPCLDAC[13]=edtPCLDAC13;   btnPCL[13]=btnPCL13;   edtRampUp[13]=edtRampUp13;   edtRampDn[13]=edtRampDn13;
  236.     edtPCLDAC[14]=edtPCLDAC14;   btnPCL[14]=btnPCL14;   edtRampUp[14]=edtRampUp14;   edtRampDn[14]=edtRampDn14;
  237.     edtPCLDAC[15]=edtPCLDAC15;   btnPCL[15]=btnPCL15;   edtRampUp[15]=edtRampUp15;   edtRampDn[15]=edtRampDn15;
  238.     // battery compensate
  239.     edtBatteryCompensateArray[0][0] = edtBatteryCompensate00; edtBatteryCompensateArray[0][1] = edtBatteryCompensate01;   edtBatteryCompensateArray[0][2] = edtBatteryCompensate02;
  240.     edtBatteryCompensateArray[1][0] = edtBatteryCompensate10; edtBatteryCompensateArray[1][1] = edtBatteryCompensate11;   edtBatteryCompensateArray[1][2] = edtBatteryCompensate12;
  241.     edtBatteryCompensateArray[2][0] = edtBatteryCompensate20; edtBatteryCompensateArray[2][1] = edtBatteryCompensate21;   edtBatteryCompensateArray[2][2] = edtBatteryCompensate22;
  242.     for (E_BANDSEL band = BANDSEL_GSM900; band <= BANDSEL_GSM850; band++)
  243.     {
  244.         for (int i=0; i<3; i++)
  245.         {
  246.             for (int j=0; j<3; j++)
  247.             {
  248.                m_sRFCal_RamTable[band].rampData.battery_compensate[i][j] = BATTERY_COMPENSATE_SCALE;
  249.             }
  250.         }
  251.     }
  252. }
  253. //---------------------------------------------------------------------------
  254. void __fastcall TfrmApcProfile::FormCreate(TObject *Sender)
  255. {
  256.     isSetCal3ModeTrigger = false;
  257.     m_uiFinalRFID  = 0;
  258.     m_bFirstFormShow = true;
  259.     WindowProc = SubClassWndProc;
  260.     Init();
  261. }
  262. //---------------------------------------------------------------------------
  263. void __fastcall TfrmApcProfile::FormShow(TObject *Sender)
  264. {
  265.    if (m_bFirstFormShow)
  266.    {
  267.         //Query_TwoApcDcOffset_Support();
  268.         Query_RfSetRampTable_Support();
  269.         frmApcProfile->AutoScroll = true;
  270.         read_APC_files_setup( "MF_setup.txt", Application->ExeName );
  271.         m_bTADOSupport = frmMainSel->Get_TADO_Support(   );
  272.         DisplayTADOUI(  m_bTADOSupport );
  273.         ReDrawFields(DRAW_PCL|DRAW_RAMP|DRAW_WEIGHT|DRAW_BATTERY_COMPENSATE | DRAW_WORD3 | DRAW_BV );
  274.         m_bFirstFormShow = false;
  275.    }
  276. }
  277. //---------------------------------------------------------------------------
  278. void __fastcall TfrmApcProfile::FormHide(TObject *Sender)
  279. {
  280.    if(btnTXStart->Tag==1)
  281.    {  btnTXStopClick(this);
  282.    }
  283. }
  284. //--------------------------------------------------------------------------
  285. void __fastcall TfrmApcProfile::FormActivate(TObject *Sender)
  286. {
  287.     if (m_bInit)
  288.     {
  289.         m_bInit = false;
  290.         m_uiFinalRFID = frmMainSel->Get_FinalRFID();
  291.     }
  292. }
  293. //--------------------------------------------------------------------------
  294. void  TfrmApcProfile::DisplayTADOUI( bool b_tado_support )
  295. {
  296.     if( b_tado_support )
  297.     {
  298.         lblLowApcDcOffset->Visible = true;
  299.         edtLowApcDcOffset->Visible = true;
  300.         lblAPCLowestPower->Visible = true;
  301.         edtAPCLowestPower->Visible = true;
  302.     }
  303.     else
  304.     {
  305.         lblLowApcDcOffset->Visible = false;
  306.         edtLowApcDcOffset->Visible = false;
  307.         lblAPCLowestPower->Visible = false;
  308.         edtAPCLowestPower->Visible = false;
  309.     }
  310. }
  311. //===========================================================================
  312. /////////////////////////////        Query       ////////////////////////////
  313. //===========================================================================
  314. void __fastcall TfrmApcProfile::on_QueryTwoApcDcOffset_Fail(TObject *Sender)
  315. {
  316. }
  317. //---------------------------------------------------------------------------
  318. void __fastcall TfrmApcProfile::on_QueryTwoApcDcOffset_TerminateSuccess(TObject *Sender)
  319. {
  320.     
  321. }
  322. //---------------------------------------------------------------------------
  323. void  TfrmApcProfile::Query_TwoApcDcOffset_Support( void )
  324. {
  325.     t_RfTado.hPostMsgDestHandle = this->Handle;
  326.     t_RfTado.ne_onTermSuccess   = on_QueryTwoApcDcOffset_TerminateSuccess;
  327.     pt_rftado = new T_RFTADO(
  328.                                        true,
  329.                                        &t_RfTado);
  330.     if(pt_rftado != NULL)
  331.     {
  332.         pt_rftado->FreeOnTerminate = true;
  333.         pt_rftado->OnTerminate = on_QueryTwoApcDcOffset_Fail;
  334.         pt_rftado->Priority = tpHighest;
  335.         pt_rftado->Resume();
  336.     }
  337. }
  338. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  339. void __fastcall TfrmApcProfile::on_QueryRfSetRampTableSupport_Fail(TObject *Sender)
  340. {
  341. }
  342. //---------------------------------------------------------------------------
  343. void __fastcall TfrmApcProfile::on_QueryRfSetRampTableSupport_TerminateSuccess(TObject *Sender)
  344. {
  345.     
  346. }
  347. //---------------------------------------------------------------------------
  348. void  TfrmApcProfile::Query_RfSetRampTable_Support( void )
  349. {
  350.     t_RfSetRamp.hPostMsgDestHandle = this->Handle;
  351.     t_RfSetRamp.ne_onTermSuccess   = on_QueryRfSetRampTableSupport_TerminateSuccess;
  352.     pt_rfsetramp = new T_RFSETRAMP(
  353.                                        true,
  354.                                        &t_RfSetRamp);
  355.     if(pt_rfsetramp != NULL)
  356.     {
  357.         pt_rfsetramp->FreeOnTerminate = true;
  358.         pt_rfsetramp->OnTerminate = on_QueryRfSetRampTableSupport_Fail;
  359.         pt_rfsetramp->Priority = tpHighest;
  360.         pt_rfsetramp->Resume();
  361.     }
  362. }
  363. //------------------------------------------------------------------------------
  364. void  TfrmApcProfile::ReDrawFields( int draw_mask )
  365. {
  366.     int  i, j;
  367.     int  band = m_eCurBand;
  368.     char str[256];
  369.     edtTestArfcn->Text       = m_sTestArfcn[band];
  370.     edtHighApcDcOffset->Text = m_usHighApcDcOffset[band];
  371.     if( m_bTADOSupport )
  372.     {
  373.         edtLowApcDcOffset->Text = m_usLowApcDcOffset[band];
  374.         edtAPCLowestPower->Text = m_iApcLowestPower[band];
  375.     }
  376.    if( band!=BANDSEL_GSM900 && band!=BANDSEL_GSM850)
  377.    {
  378.       edtPCLDAC[15]->Visible = true;
  379.       btnPCL[15]->Visible = true;
  380.    }
  381.    else
  382.    {
  383.       edtPCLDAC[15]->Visible = false;
  384.       btnPCL[15]->Visible = false;
  385.    }
  386.    if(draw_mask&DRAW_PCL)
  387.    {
  388.       for(i=0; i<16; i++)
  389.       {
  390.          edtPCLDAC[i]->Text = m_sRFCal_RamTable[band].rampData.power[i];
  391.          btnPCL[i]->Caption = PCL_RANGE[band][i];
  392.       }
  393.    }
  394.    if(draw_mask&DRAW_RAMP)
  395.    {
  396.       sprintf(str, "PCL %d Profile", PCL_RANGE[m_eCurBand][m_iCurPCLIndex]);
  397.       pnlProfileTItle->Caption = str;
  398.       for(i=0; i<16; i++)
  399.       {
  400.          edtRampUp[i]->Text = m_sRFCal_RamTable[band].rampData.ramp[m_iCurPCLIndex].point[0][i];
  401.          edtRampDn[i]->Text = m_sRFCal_RamTable[band].rampData.ramp[m_iCurPCLIndex].point[1][i];
  402.       }
  403.    }
  404.    if (draw_mask & DRAW_WEIGHT)
  405.    {
  406.       for(i=0; i<11; i++)
  407.       {
  408.         edtWtARFCN[i]->Text = m_sRFCal_RamTable[band].rampData.arfcn_weight[i].max_arfcn;
  409.         edtWtPCL[i]->Text   = m_sRFCal_RamTable[band].rampData.arfcn_weight[i].mid_level;
  410.         edtWtHigh[i]->Text  = (long)(m_sRFCal_RamTable[band].rampData.arfcn_weight[i].hi_weight*1.0/WEIGHT_SCALE*1000+0.5)/1000.0;
  411.         edtWtLow[i]->Text   = (long)(m_sRFCal_RamTable[band].rampData.arfcn_weight[i].low_weight*1.0/WEIGHT_SCALE*1000+0.5)/1000.0;
  412.       }
  413.    }
  414.    if(draw_mask&DRAW_BATTERY_COMPENSATE)
  415.    {
  416.       for(i=0; i<3; i++)
  417.       {
  418.           for(j=0; j<3; j++)
  419.           {
  420.               edtBatteryCompensateArray[i][j]->Text = (long) (m_sRFCal_RamTable[band].rampData.battery_compensate[i][j]*1.0 / BATTERY_COMPENSATE_SCALE*1000+0.5)/1000.0 ;
  421.           }
  422.       }
  423.    }
  424.    if(draw_mask & DRAW_TX_AFC_OFFSET)
  425.    {
  426.       edtTxAfcOffset->Text = IntToStr( m_sRFCal_RamTable[band].rampData.tx_afc_offset );
  427.    }
  428.    if(draw_mask & DRAW_WORD3 )
  429.    {
  430.        //Display_RenesasUI( tctlAPC->TabIndex );
  431.        Display_Word3();
  432.    }
  433.    if(draw_mask & DRAW_BV)
  434.    {
  435.       // Display_RenesasUI( tctlAPC->TabIndex );
  436.       Display_Word6s( tctlAPC->TabIndex );
  437.    }
  438.    edtTestArfcn->Text = m_sTestArfcn[m_eCurBand];
  439. }
  440. //===========================================================================
  441. void  TfrmApcProfile::ShowHintLabel( TControl *sender, char* hint )
  442. {
  443.    TPoint pt0 = this->ClientOrigin;
  444.    TPoint pt1 = sender->ClientOrigin;
  445.    lblHint->Left = (pt1.x-pt0.x);
  446.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  447.    lblHint->Caption = hint;
  448.    lblHint->Visible = true;
  449.    HintTimer->Enabled = true;
  450. }
  451. //---------------------------------------------------------------------------
  452. bool  TfrmApcProfile::CheckFields( void )
  453. {
  454.     int  i, j;
  455.     int  idata;
  456.     short sdata;
  457.     unsigned char  ucdata;
  458.     unsigned short usdata;
  459.     E_BANDSEL band = m_eCurBand;
  460.     AnsiString  text;
  461.     for(i=0; i<16; i++)
  462.     {
  463.         if (edtPCLDAC[i]->Visible)
  464.         {
  465.             text = edtPCLDAC[i]->Text;  if( !IsValidPCLDac( text, usdata ) )         {  edtPCLDACCheck(edtPCLDAC[i]);   return(false);   }
  466.             m_sRFCal_RamTable[band].rampData.power[i] = usdata;
  467.         }
  468.         text = edtRampUp[i]->Text;  if( !IsValidRamp( text, ucdata) )           {  edtRampUpCheck(edtRampUp[i]);   return(false);   }
  469.         m_sRFCal_RamTable[band].rampData.ramp[m_iCurPCLIndex].point[0][i] = ucdata;
  470.         text = edtRampDn[i]->Text;  if( !IsValidRamp( text, ucdata) )           {  edtRampDnCheck(edtRampDn[i]);   return(false);   }
  471.         m_sRFCal_RamTable[band].rampData.ramp[m_iCurPCLIndex].point[1][i] = ucdata;
  472.     }
  473.     for(i=0; i<11; i++)
  474.     {
  475.         text = edtWtARFCN[i]->Text;  if( !IsValidARFCN2( text, band, sdata ) )  {  edtWtARFCNCheck(edtWtARFCN[i]);   return(false);   }
  476.         m_sRFCal_RamTable[band].rampData.arfcn_weight[i].max_arfcn = sdata;
  477.         if (-1 == idata)  break;
  478.         text = edtWtPCL[i]->Text;    if( !IsValidPCL( text, band, idata ) )     {  edtWtPCLCheck(edtWtPCL[i]);     return(false);   }
  479.         m_sRFCal_RamTable[band].rampData.arfcn_weight[i].mid_level = idata;
  480.         text = edtWtHigh[i]->Text;   if (!IsValidWeight(text, m_uiFinalRFID, usdata))        {  edtWtHighCheck(edtWtHigh[i]);   return(false);   }
  481.         m_sRFCal_RamTable[band].rampData.arfcn_weight[i].hi_weight = usdata;
  482.         text = edtWtLow[i]->Text;    if (!IsValidWeight(text, m_uiFinalRFID, usdata))        {  edtWtLowCheck(edtWtLow[i]);     return(false);   }
  483.         m_sRFCal_RamTable[band].rampData.arfcn_weight[i].low_weight = usdata;
  484.     }
  485.     for(i=0; i<3; i++)
  486.     {
  487.         for( j=0; j<3; j++ )
  488.         {
  489.             text = edtBatteryCompensateArray[i][j]->Text;    if( !IsValidBatteryCompensate( text, usdata ) )     {  edtBatteryCompensateCheck(edtBatteryCompensateArray[i][j]);     return(false);   }
  490.             m_sRFCal_RamTable[band].rampData.battery_compensate[i][j] = usdata;
  491.         }
  492.     }
  493.     text = edtTestArfcn->Text;     if( !IsValidARFCN( text, band, m_sTestArfcn[band] ) )    {  edtTestArfcnCheck(edtTestArfcn);       return(false);   }
  494.     text = edtHighApcDcOffset->Text;   if( !IsValidPCLDac( text, m_usHighApcDcOffset[band] ) )             {  edtHighApcDcOffsetCheck(edtHighApcDcOffset);   return(false);   }
  495.     if( m_bTADOSupport )
  496.     {
  497.         text = edtLowApcDcOffset->Text;   if( !IsValidPCLDac( text, m_usLowApcDcOffset[band] ) )             {  edtHighApcDcOffsetCheck(edtLowApcDcOffset);   return(false);   }
  498.         text = edtAPCLowestPower->Text;   if( !IsValidApcLowestPower( text, m_eCurBand, m_iApcLowestPower[band] ) )     {  edtAPCLowestPowerCheck(edtAPCLowestPower);   return(false);   }
  499.     }
  500.     text = edtTxAfcOffset->Text;   if( !IsValidTxAfcOffset( text, tx_afc_offset[band] ) )              {  edtTxAfcOffsetCheck(edtTxAfcOffset);   return(false);   }
  501.     m_sRFCal_RamTable[band].rampData.tx_afc_offset = tx_afc_offset[band];
  502.     return(true);
  503. }
  504. //---------------------------------------------------------------------------
  505. void __fastcall TfrmApcProfile::edtPCLDACCheck(TObject *Sender)
  506. {
  507.     unsigned short  usdata;
  508.     AnsiString  text;
  509.     TEdit *edit = (TEdit*)Sender;
  510.     char  hint[] = " value shall be 0~1023 ";
  511.     text = edit->Text;
  512.     if (!IsValidPCLDac(text, usdata))
  513.     {
  514.         ShowHintLabel(edit, hint);
  515.         edit->SetFocus();
  516.         return;
  517.     }
  518.     m_sRFCal_RamTable[m_eCurBand].rampData.power[edit->Tag] = usdata;
  519.     if ((14 == edit->Tag) || (!edtPCLDAC15->Visible))
  520.     {
  521.         m_sRFCal_RamTable[m_eCurBand].rampData.power[15] = usdata;
  522.     }
  523. }
  524. //---------------------------------------------------------------------------
  525. void __fastcall TfrmApcProfile::edtRampUpCheck(TObject *Sender)
  526. {
  527.    unsigned char  ucdata;
  528.    AnsiString  text;
  529.    TEdit *edit = (TEdit*)Sender;
  530.    char  hint[] = " value shall be 0~255 ";
  531.    text = edit->Text;
  532.    if( !IsValidRamp( text, ucdata ) )
  533.    {  ShowHintLabel( edit, hint );
  534.       edit->SetFocus();
  535.       return;
  536.    }
  537.    m_sRFCal_RamTable[m_eCurBand].rampData.ramp[m_iCurPCLIndex].point[0][edit->Tag] = ucdata;
  538. }
  539. //---------------------------------------------------------------------------
  540. void __fastcall TfrmApcProfile::edtRampDnCheck(TObject *Sender)
  541. {
  542.    unsigned char  ucdata;
  543.    AnsiString  text;
  544.    TEdit *edit = (TEdit*)Sender;
  545.    char  hint[] = " value shall be 0~255 ";
  546.    text = edit->Text;
  547.    if( !IsValidRamp( text, ucdata ) )
  548.    {  ShowHintLabel( edit, hint );
  549.       edit->SetFocus();
  550.       return;
  551.    }
  552.    m_sRFCal_RamTable[m_eCurBand].rampData.ramp[m_iCurPCLIndex].point[1][edit->Tag] = ucdata;
  553. }
  554. //---------------------------------------------------------------------------
  555. void __fastcall TfrmApcProfile::edtWtARFCNCheck(TObject *Sender)
  556. {
  557.     short sdata;
  558.     AnsiString  text;
  559.     TEdit *edit = (TEdit*)Sender;
  560.     char  hint[][256] =
  561.     {
  562.         " value shall be 0~124 or 975~1023 or -1 ",
  563.         " value shall be 512~885 or -1 ",
  564.         " value shall be 512~810 or -1 ",
  565.         " value shall be 128~251 or -1 ",
  566.     };
  567.     text = edit->Text;
  568.     if (!IsValidARFCN2(text, m_eCurBand, sdata))
  569.     {
  570.         edit->Text = IntToStr(Default_ARFCN[m_eCurBand]);
  571.         ShowHintLabel(edit, hint[m_eCurBand]);
  572.         edit->SetFocus();
  573.         return;
  574.     }
  575.     m_sRFCal_RamTable[m_eCurBand].rampData.arfcn_weight[edit->Tag].max_arfcn = sdata;
  576. }
  577. //---------------------------------------------------------------------------
  578. void __fastcall TfrmApcProfile::edtWtPCLCheck(TObject *Sender)
  579. {
  580.    int  i;
  581.    int  data;
  582.    AnsiString  text;
  583.    TEdit *edit = (TEdit*)Sender;
  584.    char  hint[][256] =
  585.    {   " value shall be 4~31 ",
  586.        " value shall be 0~28 ",
  587.        " value shall be 0~15 ",
  588.        " value shall be 4~31 ",
  589.    };
  590.    text = edit->Text;
  591.    if( text.AnsiCompare("") == 0 )  return;
  592.    if( !IsValidPCL( text, m_eCurBand, data ) )
  593.    {  ShowHintLabel( edit, hint[m_eCurBand] );
  594.       edit->SetFocus();
  595.       return;
  596.    }
  597.    m_sRFCal_RamTable[m_eCurBand].rampData.arfcn_weight[edit->Tag].mid_level = data;
  598. }
  599. //---------------------------------------------------------------------------
  600. void __fastcall TfrmApcProfile::edtWtHighCheck(TObject *Sender)
  601. {
  602.     unsigned short us_data;
  603.     AnsiString  text;
  604.     TEdit *edit = (TEdit*)Sender;
  605.     char  hint[] = " value shall be 0.0~4.0 ";
  606.     text = edit->Text;
  607.     if (!IsValidWeight(text, m_uiFinalRFID, us_data))
  608.     {
  609.         ShowHintLabel(edit, hint);
  610.         edit->SetFocus();
  611.         return;
  612.     }
  613.     m_sRFCal_RamTable[m_eCurBand].rampData.arfcn_weight[edit->Tag].hi_weight = us_data;
  614. }
  615. //---------------------------------------------------------------------------
  616. void __fastcall TfrmApcProfile::edtWtLowCheck(TObject *Sender)
  617. {
  618.     unsigned short us_data;
  619.     AnsiString  text;
  620.     TEdit *edit = (TEdit*)Sender;
  621.     char  hint[] = " value shall be 0.0~3.99 ";
  622.     text = edit->Text;
  623.     if (!IsValidWeight(text, m_uiFinalRFID, us_data))
  624.     {
  625.         ShowHintLabel(edit, hint);
  626.         edit->SetFocus();
  627.         return;
  628.     }
  629.     m_sRFCal_RamTable[m_eCurBand].rampData.arfcn_weight[edit->Tag].low_weight = us_data;
  630. }
  631. //---------------------------------------------------------------------------
  632. void __fastcall TfrmApcProfile::edtTestArfcnCheck(TObject *Sender)
  633. {
  634.     short sdata;
  635.     AnsiString  text;
  636.     TEdit *edit = (TEdit*)Sender;
  637.     char  hint[][256] =
  638.     {
  639.         " value shall be 0~124 or 975~1023 ",
  640.         " value shall be 512~885 ",
  641.         " value shall be 512~810 ",
  642.         " value shall be 128~251 ",
  643.     };
  644.     text = edit->Text;
  645.     if (!IsValidARFCN(text, m_eCurBand, sdata))
  646.     {
  647.         edit->Text = IntToStr(Default_ARFCN[m_eCurBand]);
  648.         ShowHintLabel(edit, hint[m_eCurBand]);
  649.         edit->SetFocus();
  650.         return;
  651.     }
  652.     m_sTestArfcn[m_eCurBand] = sdata;
  653. }
  654. //---------------------------------------------------------------------------
  655. void __fastcall TfrmApcProfile::edtHighApcDcOffsetCheck(TObject *Sender)
  656. {
  657.     unsigned short usdata;
  658.     int  band = m_eCurBand;
  659.     AnsiString  text;
  660.     TEdit *edit = (TEdit*)Sender;
  661.     char  hint[] = " value shall be 0~1023 ";
  662.     text = edit->Text;
  663.     if (!IsValidPCLDac(text, usdata))
  664.     {
  665.         ShowHintLabel(edit, hint);
  666.         edit->SetFocus();
  667.         return;
  668.     }
  669.     m_usHighApcDcOffset[band] = usdata;
  670. }
  671. //===========================================================================
  672. void __fastcall TfrmApcProfile::tctlAPCChange(TObject *Sender)
  673. {
  674.    if (!frmMainSel->cbGSM850->Checked)
  675.    {
  676.        if (BANDSEL_GSM850 == (E_BANDSEL) tctlAPC->TabIndex)
  677.        {
  678.            tctlAPC->TabIndex = lastTabIndex;
  679.            Application->MessageBox( "Please check GSM 850 on main menu", "FAILURE", MB_OK );
  680.            return;
  681.        }
  682.    }    
  683.    if( !CheckFields() )
  684.    {  
  685.       tctlAPC->TabIndex = m_eCurBand;
  686.       return;
  687.    }
  688.    if(btnTXStart->Tag==1)
  689.    {  btnTXStartClick(this);
  690.    }
  691.    m_eCurBand = (E_BANDSEL) tctlAPC->TabIndex;
  692.    lastTabIndex =  tctlAPC->TabIndex;
  693.    m_iCurPCLIndex = 0;
  694.    ReDrawFields( DRAW_PCL | DRAW_RAMP | DRAW_WEIGHT | DRAW_BATTERY_COMPENSATE | DRAW_TX_AFC_OFFSET |
  695.                  DRAW_WORD3 | DRAW_BV);
  696. }
  697. //---------------------------------------------------------------------------
  698. void __fastcall TfrmApcProfile::OnBtnPclClick(TObject *Sender)
  699. {
  700.    if(btnTXStart->Tag==1)
  701.    {  btnTXStartClick(this);
  702.    }
  703.    m_iCurPCLIndex = (*(TComponent*)Sender).Tag;
  704.    ReDrawFields( DRAW_RAMP );
  705. }
  706. //---------------------------------------------------------------------------
  707. void __fastcall TfrmApcProfile::btnLeftClick(TObject *Sender)
  708. {
  709.    TButton *button = (TButton*)Sender;
  710.    int  up_down = button->Tag;
  711.    int  i;
  712.    for(i=0; i<15; i++)
  713.    {
  714.      m_sRFCal_RamTable[m_eCurBand].rampData.ramp[m_iCurPCLIndex].point[up_down][i] =
  715.      m_sRFCal_RamTable[m_eCurBand].rampData.ramp[m_iCurPCLIndex].point[up_down][i+1];
  716.    }
  717.    ReDrawFields( DRAW_RAMP );
  718. }
  719. //---------------------------------------------------------------------------
  720. void __fastcall TfrmApcProfile::btnRightClick(TObject *Sender)
  721. {
  722.    TButton *button = (TButton*)Sender;
  723.    int  up_down = button->Tag;
  724.    int  i;
  725.    for(i=15; i>=1; i--)
  726.    {
  727.       m_sRFCal_RamTable[m_eCurBand].rampData.ramp[m_iCurPCLIndex].point[up_down][i] =
  728.       m_sRFCal_RamTable[m_eCurBand].rampData.ramp[m_iCurPCLIndex].point[up_down][i-1];
  729.    }
  730.    ReDrawFields( DRAW_RAMP );
  731. }
  732. //---------------------------------------------------------------------------
  733. void __fastcall TfrmApcProfile::btnTXStartClick(TObject *Sender)
  734. {
  735.     if(btnTXStart->Tag==0)
  736.     {
  737.        AnsiString text;
  738.       //  btnTXStart->Kind = bkNo;
  739.       //  btnTXStart->Caption = "Stop";
  740.         btnTXStart->Enabled = false;
  741.         btnTXStart->Tag = 1;
  742.         m_cTsc = cbxTsc->ItemIndex;
  743.         text = edtAfc->Text;      if( !IsValidAFC( text, m_sAfcDac ) )            {  edtAfcDacCheck(edtAfc);       return;   }
  744.         m_eBurstType = NB_TX_RANDOM_WITH_TSC;
  745.         if (!CheckFields())
  746.         {
  747.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Burst TX fail";
  748.             Application->MessageBox( "Execution Failure : Burst TX", "FAILURE", MB_OK );
  749.             return;
  750.         }
  751.         frmRFTool->Force_RF_Stop();
  752.         CurrentPageLock();
  753.         frmRFTool->CurrentPageLock();
  754.        // frmRFTool->btnTXStart->Enabled = false;
  755.         frmRFTool->pctlToolSel->Enabled = false;
  756.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Burst TX progressing";
  757.         if( t_RfSetRamp.rf_setramp.SetRampTableSupport )
  758.         {
  759.             int  total_band_num;
  760.             int  band;
  761.             if(frmMainSel->cbGSM850->Checked)
  762.             {   total_band_num = 4;
  763.             }
  764.             else
  765.             {   total_band_num = 3;
  766.             }
  767.             for(band=0; band<total_band_num; band++)
  768.             {
  769.                 RF_APC_Obj->Set_HighApcDcOffset( band, m_usHighApcDcOffset[band] );
  770.                 if( m_bTADOSupport )
  771.                 {
  772.                     RF_APC_Obj->Set_LowApcDcOffset( band, m_usLowApcDcOffset[band] );
  773.                     RF_APC_Obj->Set_ApcLowestPower( band, m_iApcLowestPower[band] );
  774.                 }
  775.                 RF_APC_Obj->Set_ApcProfile( band, m_sRFCal_RamTable[band] );
  776.             }
  777.             
  778.             RF_APC_Obj->ConfirmCallback   = ::ConfirmCallback_RfSetRampTable;
  779.             RF_APC_Obj->REQ_RfSetRampTable_Start(m_uiFinalRFID, m_bTADOSupport, m_eCurBand );
  780.         }
  781.         else
  782.         {
  783.             S_RFTX rf_tx;
  784.             rf_tx.e_bandsel = m_eCurBand;
  785.             rf_tx.s_RfNbTxReq.arfcn  = m_sTestArfcn[m_eCurBand];
  786.     rf_tx.s_RfNbTxReq.bsic   = m_cTsc;
  787.     rf_tx.s_RfNbTxReq.power  = PCL_RANGE[m_eCurBand][m_iCurPCLIndex];
  788.     rf_tx.s_RfNbTxReq.frames = -99;
  789.     rf_tx.s_RfNbTxReq.dacValue = m_sAfcDac;
  790.         rf_tx.s_RfNbTxReq.burstTypeNB = m_eBurstType;
  791.             RF_TX_Obj->ConfirmCallback   = ::ConfirmCallback_TX;
  792.             RF_TX_Obj->REQ_Start(rf_tx);
  793.         }
  794.     }
  795.     else
  796.     {
  797.         #if 0
  798.         frmRFTool->Force_RF_Stop();
  799.       //  btnTXStart->Kind = bkRetry;
  800.       //  btnTXStart->Caption = "Start";
  801.         btnTXStart->Enabled = true;
  802.         btnTXStart->Tag = 0;
  803.         frmRFTool->pctlToolSel->Enabled = true;
  804.         frmRFTool->btnTXStart->Enabled = true;
  805.         //CurrentPageReset();
  806.         frmRFTool->CurrentPageReset();
  807.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Burst TX stop";
  808.         #endif
  809.         return;
  810.     }
  811. }
  812. //-----------------------------------------------
  813. void  TfrmApcProfile::ConfirmCallback_RfSetRampTable(void)
  814. {
  815.     E_METAAPP_RESULT_T state = RF_TX_Obj->Get_ConfirmState();
  816.     switch (state)
  817.     {
  818.         case METAAPP_SUCCESS:
  819.         {
  820.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Burst TX progressing";
  821.         }
  822.         break;
  823.         case METAAPP_FAIL:
  824.         {
  825.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Burst TX fail";
  826.             Application->MessageBox("Execution failure : Set ramp table", "FAILURE", MB_OK);
  827.         }
  828.         break;
  829.         case METAAPP_TIMEOUT:
  830.         {
  831.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Burst TX timeout";
  832.             Application->MessageBox("Execution Timeout : Set ramp table", "TIMEOUT", MB_OK);
  833.         }
  834.         break;
  835.         case METAAPP_STOP:
  836.         {
  837.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Set ramp table stop";
  838.         }
  839.         break;
  840.     }    
  841.     S_RFTX rf_tx;
  842.     rf_tx.e_bandsel = m_eCurBand;
  843.     rf_tx.s_RfNbTxReq.arfcn  = m_sTestArfcn[m_eCurBand];
  844.     rf_tx.s_RfNbTxReq.bsic   = m_cTsc;
  845.     rf_tx.s_RfNbTxReq.power  = PCL_RANGE[m_eCurBand][m_iCurPCLIndex];
  846.     rf_tx.s_RfNbTxReq.frames = -99;
  847.     rf_tx.s_RfNbTxReq.dacValue = m_sAfcDac;
  848.     rf_tx.s_RfNbTxReq.burstTypeNB = m_eBurstType;
  849.     RF_TX_Obj->ConfirmCallback   = ::ConfirmCallback_TX;
  850.     RF_TX_Obj->REQ_Start(rf_tx);
  851. }
  852. //-----------------------------------------------
  853. void TfrmApcProfile::ConfirmCallback_TX(void)
  854. {
  855.     E_METAAPP_RESULT_T state = RF_TX_Obj->Get_ConfirmState();
  856.     switch (state)
  857.     {
  858.         case METAAPP_SUCCESS:
  859.         {
  860.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Burst TX progressing";
  861.         }
  862.         break;
  863.         case METAAPP_FAIL:
  864.         {
  865.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Burst TX fail";
  866.             Application->MessageBox("Execution failure : Burst TX", "FAILURE", MB_OK);
  867.         }
  868.         break;
  869.         case METAAPP_TIMEOUT:
  870.         {
  871.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Burst TX timeout";
  872.             Application->MessageBox("Execution Timeout : Burst TX", "TIMEOUT", MB_OK);
  873.         }
  874.         break;
  875.         case METAAPP_STOP:
  876.         {
  877.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Burst TX stop";
  878.         }
  879.         break;
  880.     }    
  881. }
  882. //===========================================================================
  883. void __fastcall TfrmApcProfile::UploadFromFlashStart(TObject *Sender)
  884. {
  885.     if( ! NVRAMMan->Get_IsInit() )
  886.     {
  887.         frmMainSel->mnuFDMDatabaseClick(Sender);
  888.         if( ! NVRAMMan->Get_IsInit() )
  889.         {
  890.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  NVRAM database file initialization fail";
  891.             Application->MessageBox( "Execution Failure : NVRAM database file initialization fail", "FAILURE", MB_OK );
  892.             return;
  893.         }
  894.         stNVRAMDB->Caption = frmMainSel->Get_NVRAMDBFileName();
  895.     }
  896.     RF_APC_Obj->ConfirmCallback = ::CNF_ReadApcFromNVRAM;
  897.     RF_APC_Obj->REQ_Read_APC_From_NVRAM_Start(m_uiFinalRFID, m_bTADOSupport);
  898.     CurrentPageLock();
  899.     sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Upload APC profile setting from flash progressing";
  900. }
  901. //-----------------------------------------------
  902. void  TfrmApcProfile::UploadApcFromFlashDone( void )
  903. {
  904.     E_METAAPP_RESULT_T state = RF_APC_Obj->Get_ConfirmState();
  905.     int band;
  906.     int total_band_num;
  907.     if( state==METAAPP_SUCCESS )
  908.     {
  909.         if (frmMainSel->cbGSM850->Checked)
  910.         {   total_band_num = 4;
  911.         }
  912.         else
  913.         {
  914.             total_band_num = 3;
  915.         }
  916.         for(band=0; band<total_band_num; band++)
  917.         {
  918.             m_usHighApcDcOffset[band] = RF_APC_Obj->Get_HighApcDcOffset(band);
  919.             if( m_bTADOSupport )
  920.             {
  921.                  m_usLowApcDcOffset[band] = RF_APC_Obj->Get_LowApcDcOffset(band);
  922.                  m_iApcLowestPower[band] = RF_APC_Obj->Get_ApcLowestPower(band);
  923.             }
  924.             l1cal_rampTable_T* p_ramp_table = RF_APC_Obj->Get_ApcProfile(band);
  925.             m_sRFCal_RamTable[band] = *p_ramp_table;
  926.         }
  927.         if( RF_ID_BRIGHT5P == m_uiFinalRFID )
  928.         {
  929.             RF_APC_Obj->ConfirmCallback = ::CNF_ReadB5PFromNVRAM;
  930.             RF_APC_Obj->REQ_Read_B5P_From_NVRAM();
  931.             return;
  932.         }
  933.         else
  934.         {
  935.             ReDrawFields(DRAW_PCL | DRAW_RAMP | DRAW_WEIGHT | DRAW_BATTERY_COMPENSATE | DRAW_TX_AFC_OFFSET);
  936.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Upload APC profile setting from flash successfully";
  937.         }
  938.     }
  939.     else  if( state==METAAPP_FAIL )
  940.     {
  941.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Upload APC profile setting from flash fail";
  942.         Application->MessageBox( "Execution Failure : Upload APC profile from flash, please check 1.GSM850 support, 2. The version of load and NVRAM database are same. ", "FAILURE", MB_OK );
  943.     }
  944.     else  if( state==METAAPP_TIMEOUT )
  945.     {
  946.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Upload APC profile setting from flash timeout";
  947.         Application->MessageBox( "Execution Timeout : Upload APC profile from flash", "TIMEOUT", MB_OK );
  948.     }
  949.     else  if( state==METAAPP_STOP )
  950.     {
  951.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Upload APC profile setting from flash stop";
  952.     }
  953.     CurrentPageReset();
  954. }
  955. #if 0
  956. //-----------------------------------------------
  957. void  TfrmApcProfile::UploadWord3FromFlashDone( void )
  958. {
  959.     int state = RF_APC_Obj->ConfirmState;
  960.     int band;
  961.     int total_band_num;
  962.     if( state==METAAPP_SUCCESS )
  963.     {
  964.         RF_APC_Obj->ConfirmCallback = ::CNF_ReadBvFromNVRAM;
  965.         RF_APC_Obj->REQ_Read_BV_From_NVRAM();
  966.     }
  967.     else  if( state==METAAPP_FAIL )
  968.     {
  969.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Upload WORD3 mode setting from flash fail";
  970.         Application->MessageBox( "Execution Failure : Upload WORD3 mode setting from flash, please check 1.GSM850 support, 2. The version of load and NVRAM database are same. ", "FAILURE", MB_OK );
  971.     }
  972.     else  if( state==METAAPP_TIMEOUT )
  973.     {
  974.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Upload WORD3 mode setting from flash timeout";
  975.         Application->MessageBox( "Execution Timeout : Upload WORD3 mode setting from flash", "TIMEOUT", MB_OK );
  976.     }
  977.     else  if( state==METAAPP_STOP )
  978.     {
  979.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Upload WORD3 mode setting from flash stop";
  980.         Application->MessageBox( "Execution Timeout : Upload WORD3 mode setting from flash", "STOP", MB_OK );
  981.     }
  982. }
  983. #endif
  984. //-----------------------------------------------
  985. void TfrmApcProfile::UploadB5PFromFlashDone(void)
  986. {
  987.     E_METAAPP_RESULT_T state = RF_APC_Obj->Get_ConfirmState();
  988.     int band;
  989.     int total_band_num;
  990.     switch (state)
  991.     {
  992.         case METAAPP_SUCCESS:
  993.         {
  994.             if (m_bDownloadTrigger)
  995.             {
  996.                 m_bDownloadTrigger = false;
  997.                 ComposeRenesasField();
  998.                 RF_APC_Obj->Set_RenesasCoef(b5p_coef);
  999.                 RF_APC_Obj->ConfirmCallback = ::CNF_WriteB5PToNVRAM;
  1000.                 RF_APC_Obj->REQ_Write_B5P_To_NVRAM();
  1001.                 return;
  1002.             }
  1003.             else
  1004.             {
  1005.                 RF_APC_Obj->Get_RenesasCoef(b5p_coef);
  1006.                 DeComposeRenesasField();
  1007.                 ReDrawFields(DRAW_PCL | DRAW_RAMP | DRAW_WEIGHT | DRAW_BATTERY_COMPENSATE | DRAW_TX_AFC_OFFSET |
  1008.                              DRAW_WORD3 | DRAW_BV );
  1009.                 sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Upload APC profile, WORD3 and BV setting from flash successfully";
  1010.             }
  1011.         }
  1012.         break;
  1013.         case METAAPP_FAIL:
  1014.         {
  1015.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Upload WORD3 setting from flash fail";
  1016.             Application->MessageBox("Execution Failure : Upload WORD3 setting from flash, please check 1.GSM850 support, 2. The version of load and NVRAM database are same. ", "FAILURE", MB_OK);
  1017.         }
  1018.         break;
  1019.         case METAAPP_TIMEOUT:
  1020.         {
  1021.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Upload WORD3 setting from flash timeout";
  1022.             Application->MessageBox( "Execution Timeout : Upload WORD3 setting from flash", "TIMEOUT", MB_OK );
  1023.         }
  1024.         break;
  1025.         case METAAPP_STOP:
  1026.         {
  1027.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Upload WORD3 setting from flash stop";
  1028.             Application->MessageBox( "Execution Timeout : Upload WORD3 setting from flash", "STOP", MB_OK );
  1029.         }
  1030.         break;
  1031.     }
  1032.     CurrentPageReset();
  1033. }
  1034. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1035. void __fastcall TfrmApcProfile::DownloadToFlashStart(TObject *Sender)
  1036. {
  1037.     int  band;
  1038.     int  total_band_num;
  1039.     if( !CheckFields() )
  1040.     {
  1041.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download APC profile setting to flash fail";
  1042.         Application->MessageBox( "Execution Failure : Download APC profile to flash", "FAILURE", MB_OK );
  1043.         return;
  1044.     }
  1045.     if( ! NVRAMMan->Get_IsInit() )
  1046.     {
  1047.         frmMainSel->mnuFDMDatabaseClick(Sender);
  1048.         if( ! NVRAMMan->Get_IsInit() )
  1049.         {
  1050.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  NVRAM database file initialization fail";
  1051.             Application->MessageBox( "Execution Failure : NVRAM database file initialization fail", "FAILURE", MB_OK );
  1052.             return;
  1053.         }
  1054.         stNVRAMDB->Caption = frmMainSel->Get_NVRAMDBFileName();
  1055.     }
  1056.     if(frmMainSel->cbGSM850->Checked)
  1057.     {   total_band_num = 4;
  1058.     }
  1059.     else
  1060.     {
  1061.         total_band_num = 3;
  1062.     }
  1063.     for (band=0; band<total_band_num; band++)
  1064.     {
  1065.         RF_APC_Obj->Set_HighApcDcOffset( band, m_usHighApcDcOffset[band] );
  1066.         if( m_bTADOSupport )
  1067.         {
  1068.             RF_APC_Obj->Set_LowApcDcOffset( band, m_usLowApcDcOffset[band] );
  1069.             RF_APC_Obj->Set_ApcLowestPower( band, m_iApcLowestPower[band] );
  1070.         }
  1071.         RF_APC_Obj->Set_ApcProfile( band, m_sRFCal_RamTable[band] );
  1072.     }
  1073.     RF_APC_Obj->ConfirmCallback = ::CNF_WriteApcToNVRAM;
  1074.     RF_APC_Obj->REQ_Write_APC_To_NVRAM_Start(m_uiFinalRFID, m_bTADOSupport);
  1075.     m_bDownloadTrigger = true;
  1076.     CurrentPageLock();
  1077.     sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download APC profile setting to flash progressing";
  1078. }
  1079. //-----------------------------------------------
  1080. void  TfrmApcProfile::DownloadApcToFlashDone( void )
  1081. {
  1082.     E_METAAPP_RESULT_T state = RF_APC_Obj->Get_ConfirmState();
  1083.     switch (state)
  1084.     {
  1085.         case METAAPP_SUCCESS:
  1086.         {
  1087.             if (RF_ID_BRIGHT5P == m_uiFinalRFID)
  1088.             {
  1089.                 if (m_bDownloadTrigger)
  1090.                 {
  1091.                     RF_APC_Obj->ConfirmCallback = ::CNF_ReadB5PFromNVRAM;
  1092.                     RF_APC_Obj->REQ_Read_B5P_From_NVRAM();
  1093.                     return;
  1094.                 }
  1095.             }
  1096.             else
  1097.             {
  1098.                 sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download APC profile setting to flash successfully";
  1099.             }
  1100.         }
  1101.         break;
  1102.         case METAAPP_FAIL:
  1103.         {
  1104.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download APC profile setting to flash fail";
  1105.             Application->MessageBox( "Execution Failure : Download APC profile to flash, please check 1.GSM850 support. 2. The version of load and NVRAM database are same. ", "FAILURE", MB_OK );
  1106.         }
  1107.         break;
  1108.         case METAAPP_TIMEOUT:
  1109.         {
  1110.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download APC profile setting to flash timeout";
  1111.             Application->MessageBox( "Execution Timeout : Download APC profile to flash", "TIMEOUT", MB_OK );
  1112.         }
  1113.         break;
  1114.         case METAAPP_STOP:
  1115.         {
  1116.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download APC profile setting to flash stop";
  1117.         }
  1118.         break;
  1119.         case METAAPP_NVRAM_LID_VER_NOT_SUPPORT:
  1120.         {
  1121.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  NVRAM_EF_L1_RAMPTABLE_xxx_LID version is not support, please update META to latest version";
  1122.             Application->MessageBox("Execution Warning : NVRAM_EF_L1_RAMPTABLE_xxx_LID version is not support, please update META to latest version", "WARNING", MB_OK);
  1123.         }
  1124.         break;
  1125.         default:
  1126.         {
  1127.         }
  1128.         break;
  1129.     }
  1130.     CurrentPageReset();
  1131. }
  1132. #if 0
  1133. //-----------------------------------------------
  1134. void  TfrmApcProfile::DownloadWord3ToFlashDone( void )
  1135. {
  1136.     E_METAAPP_RESULT_T state = RF_APC_Obj->ConfirmState;
  1137.     CurrentPageReset();
  1138.     if( state==METAAPP_SUCCESS )
  1139.     {
  1140.         // copy BV
  1141.         RF_APC_Obj->ConfirmCallback = ::CNF_WriteBvToNVRAM;
  1142.         RF_APC_Obj->REQ_Write_BV_To_NVRAM();
  1143.     }
  1144.     else  if( state==METAAPP_FAIL )
  1145.     {
  1146.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download WORD3 setting to flash fail";
  1147.         Application->MessageBox( "Execution Failure : Download WORD3 to flash, please check 1.GSM850 support. 2. The version of load and NVRAM database are same. ", "FAILURE", MB_OK );
  1148.     }
  1149.     else  if( state==METAAPP_TIMEOUT )
  1150.     {
  1151.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download WORD3 setting to flash timeout";
  1152.         Application->MessageBox( "Execution Timeout : Download WORD3 to flash", "TIMEOUT", MB_OK );
  1153.     }
  1154.     else  if( state==METAAPP_STOP )
  1155.     {
  1156.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download WORD3 setting to flash stop";
  1157.        // Application->MessageBox( "Execution Stop : Download WORD3 to flash", "STOP", MB_OK );
  1158.     }
  1159. }
  1160. #endif
  1161. //-----------------------------------------------
  1162. void TfrmApcProfile::DownloadB5PToFlashDone(void)
  1163. {
  1164.     E_METAAPP_RESULT_T state = RF_APC_Obj->Get_ConfirmState();
  1165.     CurrentPageReset();
  1166.     switch (state)
  1167.     {
  1168.         case METAAPP_SUCCESS:
  1169.         {
  1170.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download APC profile, WORD3 and BV setting to flash successfully";
  1171.         }
  1172.         break;
  1173.         case METAAPP_FAIL:
  1174.         {
  1175.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download BV setting to flash fail";
  1176.             Application->MessageBox( "Execution Failure : Download BV to flash, please check 1.GSM850 support. 2. The version of load and NVRAM database are same. ", "FAILURE", MB_OK );
  1177.         }
  1178.         break;
  1179.         case METAAPP_TIMEOUT:
  1180.         {
  1181.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download BV setting to flash timeout";
  1182.             Application->MessageBox( "Execution Timeout : Download BV to flash", "TIMEOUT", MB_OK );
  1183.         }
  1184.         break;
  1185.         case METAAPP_STOP:
  1186.         {
  1187.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Download BV setting to flash stop";
  1188.         }
  1189.         break;
  1190.     }
  1191. }
  1192. //===========================================================================
  1193. void __fastcall TfrmApcProfile::btnLoadFromFileClick(TObject *Sender)
  1194. {
  1195.     char str[512];
  1196.     bool ok;
  1197.     int  band;
  1198.     ok = OpenDialog->Execute();
  1199.     if( !ok )
  1200.     {
  1201.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Load APC profile setting from file fail";
  1202.         Application->MessageBox( "Execution Failure : Load APC profile from file", "FAILURE", MB_OK );
  1203.         return;
  1204.     }
  1205.     strcpy( str, OpenDialog->FileName.c_str() );
  1206.     for(band=0; band<MAX_SUPPORT_BAND_NUM; band++)
  1207.     {
  1208.         if( RF_APC_Obj->ApcSectionExist( str, band ) )
  1209.         {
  1210.             ok = RF_APC_Obj->REQ_Read_APC_From_File_Single_Band(str, m_uiFinalRFID, band, m_bTADOSupport);
  1211.             if( !ok )
  1212.             {
  1213.                 sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Load APC profile setting from file fail";
  1214.                 Application->MessageBox( "Execution Failure : Load APC profile from file", "FAILURE", MB_OK );
  1215.                 return;
  1216.             }
  1217.             m_usHighApcDcOffset[band]    = RF_APC_Obj->Get_HighApcDcOffset(band);
  1218.             if( m_bTADOSupport )
  1219.             {
  1220.                 m_usLowApcDcOffset[band] = RF_APC_Obj->Get_LowApcDcOffset(band);
  1221.                 m_iApcLowestPower[band] = RF_APC_Obj->Get_ApcLowestPower(band);
  1222.             }
  1223.             l1cal_rampTable_T* p_ramp_table = RF_APC_Obj->Get_ApcProfile(band);
  1224.             m_sRFCal_RamTable[band] = *p_ramp_table;
  1225.         }    
  1226.     }
  1227.     if( m_uiFinalRFID == RF_ID_BRIGHT5P )
  1228.     {
  1229.         if( RF_APC_Obj->RenesasWord3SectionExist(str) )
  1230.         {
  1231.             ok = RF_APC_Obj->REQ_Read_Word3_From_File( str );
  1232.             if( !ok )
  1233.             {
  1234.                 sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Load WORD3 setting from file fail";
  1235.                 Application->MessageBox( "Execution Failure : Load WORD3 from file", "FAILURE", MB_OK );
  1236.                 return;
  1237.             }
  1238.         }
  1239.         if( RF_APC_Obj->RenesasWord6sSectionExist(str) )
  1240.         {
  1241.             ok = RF_APC_Obj->REQ_Read_Word6s_From_File( str );
  1242.             if( !ok )
  1243.             {
  1244.                 sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Load BV mode setting from file fail";
  1245.                 Application->MessageBox( "Execution Failure : Load BV mode from file", "FAILURE", MB_OK );
  1246.                 return;
  1247.             }
  1248.         }
  1249.         // get C3, BV
  1250.         RF_APC_Obj->Get_RenesasCoef( b5p_coef );
  1251.         DeComposeRenesasField();
  1252.         ReDrawFields( DRAW_PCL | DRAW_RAMP | DRAW_WEIGHT | DRAW_BATTERY_COMPENSATE | DRAW_TX_AFC_OFFSET |
  1253.                           DRAW_WORD3 | DRAW_BV );
  1254.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Load APC profile, WORD3 and BV setting from file successfully";
  1255.     }
  1256.     else
  1257.     {
  1258.         ReDrawFields( DRAW_PCL | DRAW_RAMP | DRAW_WEIGHT | DRAW_BATTERY_COMPENSATE | DRAW_TX_AFC_OFFSET );
  1259.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Load APC profile setting from file successfully";
  1260.     }
  1261. }
  1262. //---------------------------------------------------------------------------
  1263. void __fastcall TfrmApcProfile::btnSaveToFileClick(TObject *Sender)
  1264. {
  1265.     char str[512];
  1266.     bool ok;
  1267.     int  band;
  1268.     int  total_band_num;
  1269.     ok = CheckFields();
  1270.     if(!ok)
  1271.     {
  1272.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Save APC profile setting to file fail";
  1273.         Application->MessageBox( "Execution Failure : Save APC profile to file", "FAILURE", MB_OK );
  1274.         return;
  1275.     }
  1276.     ok = SaveDialog->Execute();
  1277.     if( !ok )
  1278.     {
  1279.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Save APC profile setting to file fail";
  1280.         Application->MessageBox( "Execution Failure : Save APC profile to file", "FAILURE", MB_OK );
  1281.         return;
  1282.     }
  1283.     strcpy( str, SaveDialog->FileName.c_str() );
  1284. //    frmMainSel->Get_FinalBandSupport( band_support );
  1285.     
  1286.     if( frmMainSel->cbGSM850->Checked )
  1287.     {   total_band_num = 4;
  1288.     }
  1289.     else
  1290.     {
  1291.         total_band_num = 3;
  1292.     }
  1293.     for(band=0; band<total_band_num; band++)
  1294.     {
  1295.         RF_APC_Obj->Set_HighApcDcOffset( band, m_usHighApcDcOffset[band] );
  1296.         if( m_bTADOSupport )
  1297.         {
  1298.             RF_APC_Obj->Set_LowApcDcOffset( band, m_usLowApcDcOffset[band] );
  1299.             RF_APC_Obj->Set_ApcLowestPower(band, m_iApcLowestPower[band]);
  1300.         }
  1301.         RF_APC_Obj->Set_ApcProfile( band, m_sRFCal_RamTable[band] );
  1302.         ok = RF_APC_Obj->REQ_Write_APC_To_File_Single_Band(str, m_uiFinalRFID, band, m_bTADOSupport);
  1303.         if( !ok )
  1304.         {
  1305.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Save APC profile setting to file fail";
  1306.             Application->MessageBox( "Execution Failure : Save APC profile to file", "FAILURE", MB_OK );
  1307.             return;
  1308.         }
  1309.     }
  1310.     if( m_uiFinalRFID == RF_ID_BRIGHT5P )
  1311.     {
  1312.         // Renesas
  1313.         ComposeRenesasField();
  1314.         RF_APC_Obj->Set_RenesasCoef( b5p_coef );
  1315.         ok = RF_APC_Obj->REQ_Write_Word3_To_File( str );
  1316.         if( !ok )
  1317.         {
  1318.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Save WORD3 setting to file fail";
  1319.             Application->MessageBox( "Execution Failure : Save WORD3 setting to file", "FAILURE", MB_OK );
  1320.             return;
  1321.         }
  1322.         ok = RF_APC_Obj->REQ_Write_Word6s_To_File( str );
  1323.         if( !ok )
  1324.         {
  1325.             sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Save bias Word6s to file fail";
  1326.             Application->MessageBox( "Execution Failure : Save bias Word6s to file", "FAILURE", MB_OK );
  1327.             return;
  1328.         }
  1329.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Save APC profile, Word3 and Word6s setting to file successfully";
  1330.         return;
  1331.     }
  1332.     sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  Save APC profile setting to file successfully";
  1333. }
  1334. //===========================================================================
  1335. void __fastcall TfrmApcProfile::HintTimerTimer(TObject *Sender)
  1336. {
  1337.    HintTimer->Enabled = false;
  1338.    lblHint->Visible = false;
  1339. }
  1340. //---------------------------------------------------------------------------
  1341. void __fastcall TfrmApcProfile::edtBatteryCompensateCheck(TObject *Sender)
  1342. {
  1343.     int  i;
  1344.     unsigned short  data;
  1345.     int row, col;
  1346.     AnsiString  text;
  1347.     TEdit *edit = (TEdit*)Sender;
  1348.     char  hint[] = " value shall be 0.1 ~ 1.9 ";
  1349.     text = edit->Text;
  1350.     if( !IsValidBatteryCompensate( text, data ) )
  1351.     {  ShowHintLabel( edit, hint );
  1352.        edit->SetFocus();
  1353.        return;
  1354.     }
  1355.     row = edit->Tag / 3;
  1356.     col = edit->Tag % 3;
  1357.     m_sRFCal_RamTable[m_eCurBand].rampData.battery_compensate[row][col] = data;
  1358. }
  1359. //---------------------------------------------------------------------------
  1360. void __fastcall TfrmApcProfile::btnChangeDBClick(TObject *Sender)
  1361. {
  1362.     frmMainSel->mnuFDMDatabaseClick(Sender);
  1363.     if( ! NVRAMMan->Get_IsInit())
  1364.     {
  1365.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString) "  NVRAM database file initialization fail";
  1366.         Application->MessageBox( "Execution Failure : NVRAM database file initialization fail", "FAILURE", MB_OK );
  1367.         return;
  1368.     }
  1369.     stNVRAMDB->Caption = frmMainSel->Get_NVRAMDBFileName();
  1370.     sbAPCProfile->Panels->Items[0]->Text = (AnsiString) " Change NVRAM database file successfully";
  1371. }
  1372. //---------------------------------------------------------------------------
  1373. void __fastcall TfrmApcProfile::btnGUIRampClick(TObject *Sender)
  1374. {
  1375.     frmGUIApcProfile->Top  = 1;
  1376.     frmGUIApcProfile->Left = 77;
  1377.     frmGUIApcProfile->Show();
  1378. }
  1379. //---------------------------------------------------------------------------
  1380. void  TfrmApcProfile::CurrentPageLock( void )
  1381. {
  1382.     int i;
  1383.     // button
  1384.   //  btnTXStart->Kind = bkNo;
  1385.    // btnTXStart->Caption = "Stop";
  1386.     btnTXStart->Enabled = false;
  1387.     btnTXStart->Tag = 1;
  1388.     btnUpLeft->Enabled = false;
  1389.     btnDnLeft->Enabled = false;
  1390.     btnUpRight->Enabled = false;
  1391.     btnDnRight->Enabled = false;
  1392.     btnUploadFromFlash->Enabled = false;
  1393.     btnDownloadToFlash->Enabled = false;
  1394.     btnChangeDB->Enabled = false;
  1395.     btnLoadFromFile->Enabled = false;
  1396.     btnSaveToFile->Enabled = false;
  1397.     btnSetCAL3ModeToRegister->Enabled = false;
  1398.     
  1399.    // for(i=0; i<TOTAL_PCL_DAC_NUM; i++ )
  1400.    // {
  1401.    //     btnPCL[i]->Enabled = false;
  1402.    // }
  1403.     // editor
  1404.    // edtApcDcOffset->Enabled = false;
  1405.    // edtTestArfcn->Enabled = false;
  1406.     
  1407.     // PCL DAC
  1408.    // for( i=0; i<TOTAL_PCL_DAC_NUM; i++ )
  1409.    // {   edtPCLDAC[i]->Enabled = false;
  1410.    // }
  1411.     // Ramp up, ramp down
  1412.    // for( i=0; i<TOTAL_RAMP_DOWN_NUM; i++ )
  1413.    // {
  1414.    //     edtRampUp[i]->Enabled = false;
  1415.    //     edtRampDn[i]->Enabled = false;
  1416.    // }
  1417.     // sub band weighting
  1418.    // for( i=0; i<TOTAL_SUBBAND_WEIGHT_NUM; i++ )
  1419.    // {
  1420.    //     edtWtARFCN[i]->Enabled = false;
  1421.    //     edtWtPCL[i]->Enabled = false;
  1422.    //     edtWtHigh[i]->Enabled = false;
  1423.    //     edtWtLow[i]->Enabled = false;
  1424.    // }
  1425.     // battery compensate
  1426.   //  for( i=0; i<3; i++ )
  1427.   //  {
  1428.   //      for(int j=0; j<3; j++)
  1429.   //      {
  1430.   //         edtBatteryCompensateArray[i][j]->Enabled = false;
  1431.    //     }
  1432.    // }
  1433.     // Tx AFC offset
  1434.    // pnlTxAfcOffset->Enabled = false;
  1435. }
  1436. //----------------------------------------------------------------------------
  1437. void  TfrmApcProfile::CurrentPageReset( void )
  1438. {
  1439.     int i;
  1440.     // button
  1441.    // btnTXStart->Kind = bkRetry;
  1442.    // btnTXStart->Caption = "Start";
  1443.     btnTXStart->Enabled = true;
  1444.     btnTXStart->Tag = 0;
  1445.     btnUpLeft->Enabled = true;
  1446.     btnDnLeft->Enabled = true;
  1447.     btnUpRight->Enabled = true;
  1448.     btnDnRight->Enabled = true;
  1449.     btnUploadFromFlash->Enabled = true;
  1450.     btnDownloadToFlash->Enabled = true;
  1451.     btnChangeDB->Enabled = true;
  1452.     btnLoadFromFile->Enabled = true;
  1453.     btnSaveToFile->Enabled = true;
  1454.     btnSetCAL3ModeToRegister->Enabled = true;
  1455.     #if 0
  1456.     for(i=0; i<TOTAL_PCL_DAC_NUM; i++ )
  1457.     {
  1458.         btnPCL[i]->Enabled = true;
  1459.     }
  1460.     // editor
  1461.     edtApcDcOffset->Enabled = true;
  1462.     edtTestArfcn->Enabled = true;
  1463.     
  1464.     // PCL DAC
  1465.     for( i=0; i<TOTAL_PCL_DAC_NUM; i++ )
  1466.     {   edtPCLDAC[i]->Enabled = true;
  1467.     }
  1468.     // Ramp up, ramp down
  1469.     for( i=0; i<TOTAL_RAMP_DOWN_NUM; i++ )
  1470.     {
  1471.         edtRampUp[i]->Enabled = true;
  1472.         edtRampDn[i]->Enabled = true;
  1473.     }
  1474.     // sub band weighting
  1475.     for( i=0; i<TOTAL_SUBBAND_WEIGHT_NUM; i++ )
  1476.     {
  1477.         edtWtARFCN[i]->Enabled = true;
  1478.         edtWtPCL[i]->Enabled = true;
  1479.         edtWtHigh[i]->Enabled = true;
  1480.         edtWtLow[i]->Enabled = true;
  1481.     }
  1482.     // battery compensate
  1483.     for( i=0; i<3; i++ )
  1484.     {
  1485.         for(int j=0; j<3; j++)
  1486.         {
  1487.            edtBatteryCompensateArray[i][j]->Enabled = true;
  1488.         }
  1489.     }
  1490.     #endif
  1491. }
  1492. //--------------------------------------------------------------------------
  1493. void __fastcall TfrmApcProfile::edtTxAfcOffsetCheck(TObject *Sender)
  1494. {
  1495.     short  sdata;
  1496.     int row, col;
  1497.     AnsiString  text;
  1498.     TEdit *edit = (TEdit*)Sender;
  1499.     char  hint[] = " value shall be -65536 ~ 65535 ";
  1500.     text = edit->Text;
  1501.     if (!IsValidTxAfcOffset(text, sdata))
  1502.     {
  1503.         ShowHintLabel( edit, hint );
  1504.         edit->SetFocus();
  1505.         return;
  1506.     }
  1507.     m_sRFCal_RamTable[m_eCurBand].rampData.tx_afc_offset = sdata;
  1508. }
  1509. //---------------------------------------------------------------------------
  1510. void __fastcall TfrmApcProfile::btnTXStopClick(TObject *Sender)
  1511. {
  1512.     if (START_TAG == btnTXStart->Tag)
  1513.     {
  1514.         frmRFTool->Force_RF_Stop();
  1515.         btnTXStart->Caption = "Start";
  1516.         btnTXStart->Tag = 0;
  1517.         frmRFTool->pctlToolSel->Enabled = true;
  1518.         frmRFTool->btnTXStart->Enabled = true;
  1519.         CurrentPageReset();
  1520.         frmRFTool->CurrentPageReset();
  1521.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Burst TX stop";
  1522.     }
  1523. }
  1524. //---------------------------------------------------------------------------
  1525. ////////////////////////////////     IP2     ////////////////////////////////
  1526. //---------------------------------------------------------------------------
  1527. void TfrmApcProfile::Compose_C3Reg(int tn, int to, int pm, int &c3reg)
  1528. {
  1529.     c3reg = tn << 11 | to << 7 | pm << 3 | 0x03;
  1530. }
  1531. //---------------------------------------------------------------------------
  1532. void TfrmApcProfile::DeCompose_C3Reg(int c3reg, int &tn, int &to, int &pm)
  1533. {
  1534.     tn = (c3reg >> 11) & 0x3F;
  1535.     to = (c3reg >>  7) & 0x0F;
  1536.     pm = (c3reg >>  3) & 0x0F;
  1537. }
  1538. //----------------------------------------------------------------------------
  1539. void TfrmApcProfile::Display_RenesasUI( int band_mode )
  1540. {
  1541.     m_uiFinalRFID = frmMainSel->Get_FinalRFID();
  1542.     if (RF_ID_BRIGHT5P == m_uiFinalRFID)
  1543.     {
  1544.         int bv=RF_APC_Obj->Get_BvMode();
  1545.         stBvmode->Caption = bv;
  1546.         btnSetCAL3ModeToRegister->Visible = true;
  1547.         pnlCAL3ModeHeader->Visible = true;
  1548.         pnlCAL3Mode->Visible = true;
  1549.         if( b5p_coef.tx.c3mode )
  1550.         {
  1551.             cbC3ModeEnable->Checked = true;
  1552.             lblTN->Visible = true;
  1553.             edtTN->Visible = true;
  1554.             lblTO->Visible = true;
  1555.             edtTO->Visible = true;
  1556.             Display_C3WordEditor();
  1557.         }
  1558.         else
  1559.         {
  1560.             cbC3ModeEnable->Checked = false;
  1561.             lblTN->Visible = false;
  1562.             edtTN->Visible = false;
  1563.             lblTO->Visible = false;
  1564.             edtTO->Visible = false;
  1565.         }
  1566.         pnlCAL3ModeHeader->Visible = true;
  1567.         pnlCAL3Mode->Visible = true;
  1568.         btnSetCAL3ModeToRegister->Visible = true;
  1569.         switch( band_mode )
  1570.         {
  1571.             case BANDSEL_GSM850:
  1572.             {
  1573.                 Display_BVW64();
  1574.             }
  1575.             break;
  1576.             case BANDSEL_GSM900:
  1577.             {
  1578.                 if( bv == 0 )
  1579.                 {
  1580.                     Display_BVW64();
  1581.                 }
  1582.                 else
  1583.                 {
  1584.                     Display_BVW65();
  1585.                 }
  1586.             }
  1587.             break;
  1588.             case BANDSEL_DCS1800:
  1589.             {
  1590.                 if( bv == 0 )
  1591.                 {
  1592.                     Display_BVW65();
  1593.                 }
  1594.                 else
  1595.                 {
  1596.                     Display_BVW66();
  1597.                 }
  1598.             }
  1599.             break;
  1600.             case BANDSEL_PCS1900:
  1601.             {
  1602.                 if( bv == 0 )
  1603.                 {
  1604.                     Display_BVW65();
  1605.                 }
  1606.                 else
  1607.                 {
  1608.                     Display_BVW67();
  1609.                 }
  1610.             }
  1611.             break;
  1612.         }
  1613.     }
  1614.     else
  1615.     {
  1616.         btnSetCAL3ModeToRegister->Visible = false;
  1617.         //pnlWord3Header->Visible = false;
  1618.         //pnlWord3->Visible = false;
  1619.         pnlCAL3ModeHeader->Visible = false;
  1620.         pnlCAL3Mode->Visible = false;
  1621.     }
  1622. }
  1623. //----------------------------------------------------------------------------
  1624. void TfrmApcProfile::Display_Word3(void)
  1625. {
  1626.     m_uiFinalRFID = frmMainSel->Get_FinalRFID();
  1627.     if (RF_ID_BRIGHT5P == m_uiFinalRFID)
  1628.     {
  1629.         btnSetCAL3ModeToRegister->Visible = true;
  1630.         pnlCAL3ModeHeader->Visible = true;
  1631.         pnlCAL3Mode->Visible = true;
  1632.         if( b5p_coef.tx.c3mode )
  1633.         {
  1634.             cbC3ModeEnable->Checked = true;
  1635.             lblTN->Visible = true;
  1636.             edtTN->Visible = true;
  1637.             lblTO->Visible = true;
  1638.             edtTO->Visible = true;
  1639.             Display_C3WordEditor();
  1640.         }
  1641.         else
  1642.         {
  1643.             cbC3ModeEnable->Checked = false;
  1644.             lblTN->Visible = false;
  1645.             edtTN->Visible = false;
  1646.             lblTO->Visible = false;
  1647.             edtTO->Visible = false;
  1648.         }
  1649.     }
  1650.     else
  1651.     {
  1652.         btnSetCAL3ModeToRegister->Visible = false;
  1653.         pnlCAL3ModeHeader->Visible = false;
  1654.         pnlCAL3Mode->Visible = false;
  1655.     }
  1656. }
  1657. //----------------------------------------------------------------------------
  1658. void TfrmApcProfile::Display_Word6s(int band_mode)
  1659. {
  1660.     m_uiFinalRFID = frmMainSel->Get_FinalRFID();
  1661.     if (RF_ID_BRIGHT5P == m_uiFinalRFID)
  1662.     {
  1663.         int bv=RF_APC_Obj->Get_BvMode();
  1664.         stBvmode->Caption = bv;
  1665.         btnSetCAL3ModeToRegister->Visible = true;
  1666.         pnlCAL3ModeHeader->Visible = true;
  1667.         pnlCAL3Mode->Visible = true;
  1668.         switch (band_mode)
  1669.         {
  1670.             case BANDSEL_GSM850:
  1671.             {
  1672.                // Display_BVW64();
  1673.                 if( bv == 0 )
  1674.                 {
  1675.                     Display_BVW66();
  1676.                 }
  1677.                 else
  1678.                 {
  1679.                     Display_BVW64();
  1680.                 }
  1681.             }
  1682.             break;
  1683.             case BANDSEL_GSM900:
  1684.             {
  1685.                 if( bv == 0 )
  1686.                 {
  1687.                    // Display_BVW64();
  1688.                     Display_BVW66();
  1689.                 }
  1690.                 else
  1691.                 {
  1692.                      Display_BVW65();
  1693.                 }
  1694.             }
  1695.             break;
  1696.             case BANDSEL_DCS1800:
  1697.             {
  1698.                 if( bv == 0 )
  1699.                 {
  1700.                    // Display_BVW65();
  1701.                      Display_BVW67();
  1702.                 }
  1703.                 else
  1704.                 {
  1705.                     Display_BVW66();
  1706.                 }
  1707.             }
  1708.             break;
  1709.             case BANDSEL_PCS1900:
  1710.             {
  1711.                 if( bv == 0 )
  1712.                 {
  1713.                    // Display_BVW65();
  1714.                     Display_BVW67();
  1715.                 }
  1716.                 else
  1717.                 {
  1718.                     Display_BVW67();
  1719.                 }
  1720.             }
  1721.             break;
  1722.         }
  1723.     }
  1724.     else
  1725.     {
  1726.         btnSetCAL3ModeToRegister->Visible = false;
  1727.         pnlCAL3ModeHeader->Visible = false;
  1728.         pnlCAL3Mode->Visible = false;
  1729.     }
  1730. }
  1731. //----------------------------------------------------------------------------
  1732. void TfrmApcProfile::Display_C3WordEditor( void )
  1733. {
  1734.     edtTN->Text = c3mode.uc_tn;
  1735.     edtTO->Text = c3mode.uc_to;
  1736. }
  1737. //----------------------------------------------------------------------------
  1738. void TfrmApcProfile::Display_BVW64( void )
  1739. {
  1740.     lblBVReg->Caption = "W6-4-0";
  1741.     edtAP->Text = bvw640.uc_ap;
  1742.     edtAS->Text = bvw640.uc_as;
  1743.     edtAO->Text = bvw640.uc_ao;
  1744.     edtBD->Text = bvw640.uc_bd;
  1745.    // edtAOF->Text = "0000000";
  1746.    // lblBVW12->Caption = "KSG";
  1747.    // lblBVW13->Caption = "KAG";
  1748.    // lblAOF->Visible = true;
  1749.    // edtAOF->Visible = true;
  1750.    // lblBVW12->Visible = true;
  1751.   //  edtBVW12->Visible = true;
  1752.    // lblBVW13->Visible = true;
  1753.    // edtBVW13->Visible = true;
  1754.    // lblBVW14->Visible = false;
  1755.    // edtBVW14->Visible = false;
  1756. }
  1757. //----------------------------------------------------------------------------
  1758. void TfrmApcProfile::Display_BVW65( void )
  1759. {
  1760.     lblBVReg->Caption = "W6-5-0";
  1761.     edtAP->Text = bvw650.uc_ap;
  1762.     edtAS->Text = bvw650.uc_as;
  1763.     edtAO->Text = bvw650.uc_ao;
  1764.     edtBD->Text = bvw650.uc_bd;
  1765.    // edtAOF->Text = "0000000";
  1766.    // lblBVW12->Caption = "KSD";
  1767.    // lblBVW13->Caption = "KAD";
  1768.    // lblAOF->Visible = true;
  1769.    // edtAOF->Visible = true;
  1770.    // lblBVW12->Visible = true;
  1771.    // edtBVW12->Visible = true;
  1772.    // lblBVW13->Visible = true;
  1773.   //  edtBVW13->Visible = true;
  1774.    // lblBVW14->Visible = false;
  1775.    // edtBVW14->Visible = false;
  1776. }
  1777. //----------------------------------------------------------------------------
  1778. void TfrmApcProfile::Display_BVW66( void )
  1779. {
  1780.     lblBVReg->Caption = "W6-6-0";
  1781.     edtAP->Text = bvw660.uc_ap;
  1782.     edtAS->Text = bvw660.uc_as;
  1783.     edtAO->Text = bvw660.uc_ao;
  1784.     edtBD->Text = bvw660.uc_bd;
  1785.    // lblBVW12->Caption = "ARE";
  1786.    // lblBVW13->Caption = "VOF";
  1787.    // lblBVW14->Caption = "VRE";
  1788.    // lblAOF->Visible = true;
  1789.    // edtAOF->Visible = true;
  1790.    // lblBVW12->Visible = true;
  1791.    // edtBVW12->Visible = true;
  1792.    // lblBVW13->Visible = true;
  1793.   //  edtBVW13->Visible = true;
  1794.    // lblBVW14->Visible = true;
  1795.    // edtBVW14->Visible = true;
  1796. }
  1797. //----------------------------------------------------------------------------
  1798. void TfrmApcProfile::Display_BVW67( void )
  1799. {
  1800.     lblBVReg->Caption = "W6-7-0";
  1801.     edtAP->Text = bvw670.uc_ap;
  1802.     edtAS->Text = bvw670.uc_as;
  1803.     edtAO->Text = bvw670.uc_ao;
  1804.     edtBD->Text = bvw670.uc_bd;
  1805.    // lblAOF->Visible = false;
  1806.    // edtAOF->Visible = false;
  1807.    // lblBVW12->Visible = false;
  1808.    // edtBVW12->Visible = false;
  1809.    // lblBVW13->Visible = false;
  1810.   //  edtBVW13->Visible = false;
  1811.    // lblBVW14->Visible = false;
  1812.    // edtBVW14->Visible = false;
  1813. }
  1814. //---------------------------------------------------------------------------
  1815. void __fastcall TfrmApcProfile::cbBVClick(TObject *Sender)
  1816. {
  1817.     ReDrawFields(DRAW_BV);
  1818. }
  1819. //---------------------------------------------------------------------------
  1820. void __fastcall TfrmApcProfile::edtAPCheck(TObject *Sender)
  1821. {
  1822.     int  i;
  1823.     int  data;
  1824.     int row, col;
  1825.     AnsiString  text;
  1826.     TEdit *edit = (TEdit*)Sender;
  1827.     char  hint[] = " value shall be 0 ~ 7 ";
  1828.     text = edit->Text;
  1829.     if( !IsValidBVAP( text, data ) )
  1830.     {  ShowHintLabel( edit, hint );
  1831.        edit->SetFocus();
  1832.        return;
  1833.     }
  1834.     if( lblBVReg->Caption.AnsiCompareIC("W6-4-0") == 0 )
  1835.     {
  1836.         bvw640.uc_ap = data;
  1837.     }
  1838.     else if( lblBVReg->Caption.AnsiCompareIC("W6-5-0") == 0 )
  1839.     {
  1840.         bvw650.uc_ap = data;
  1841.     }
  1842.     else if( lblBVReg->Caption.AnsiCompareIC("W6-6-0") == 0 )
  1843.     {
  1844.         bvw660.uc_ap = data;
  1845.     }
  1846.     else if( lblBVReg->Caption.AnsiCompareIC("W6-7-0") == 0 )
  1847.     {
  1848.         bvw670.uc_ap = data;
  1849.     }
  1850. }
  1851. //---------------------------------------------------------------------------
  1852. void __fastcall TfrmApcProfile::edtASCheck(TObject *Sender)
  1853. {
  1854.     int  i;
  1855.     int  data;
  1856.     int row, col;
  1857.     AnsiString  text;
  1858.     TEdit *edit = (TEdit*)Sender;
  1859.     char  hint[] = " value shall be 0 ~ 7 ";
  1860.     text = edit->Text;
  1861.     if( !IsValidBVAS( text, data ) )
  1862.     {  ShowHintLabel( edit, hint );
  1863.        edit->SetFocus();
  1864.        return;
  1865.     }
  1866.     if( lblBVReg->Caption.AnsiCompareIC("W6-4-0") == 0 )
  1867.     {
  1868.         bvw640.uc_as = data;
  1869.     }
  1870.     else if( lblBVReg->Caption.AnsiCompareIC("W6-5-0") == 0 )
  1871.     {
  1872.         bvw650.uc_as = data;
  1873.     }
  1874.     else if( lblBVReg->Caption.AnsiCompareIC("W6-6-0") == 0 )
  1875.     {
  1876.         bvw660.uc_as = data;
  1877.     }
  1878.     else if( lblBVReg->Caption.AnsiCompareIC("W6-7-0") == 0 )
  1879.     {
  1880.         bvw670.uc_as = data;
  1881.     }
  1882. }
  1883. //---------------------------------------------------------------------------
  1884. void __fastcall TfrmApcProfile::edtAOCheck(TObject *Sender)
  1885. {
  1886.     int  i;
  1887.     int  data;
  1888.     int row, col;
  1889.     AnsiString  text;
  1890.     TEdit *edit = (TEdit*)Sender;
  1891.     char  hint[] = " value shall be 0 ~ 63 ";
  1892.     text = edit->Text;
  1893.     if( !IsValidBVAO( text, data ) )
  1894.     {  ShowHintLabel( edit, hint );
  1895.        edit->SetFocus();
  1896.        return;
  1897.     }
  1898.     if( lblBVReg->Caption.AnsiCompareIC("W6-4-0") == 0 )
  1899.     {
  1900.         bvw640.uc_ao = data;
  1901.     }
  1902.     else if( lblBVReg->Caption.AnsiCompareIC("W6-5-0") == 0 )
  1903.     {
  1904.         bvw650.uc_ao = data;
  1905.     }
  1906.     else if( lblBVReg->Caption.AnsiCompareIC("W6-6-0") == 0 )
  1907.     {
  1908.         bvw660.uc_ao = data;
  1909.     }
  1910.     else if( lblBVReg->Caption.AnsiCompareIC("W6-7-0") == 0 )
  1911.     {
  1912.         bvw670.uc_ao = data;
  1913.     }
  1914. }
  1915. //---------------------------------------------------------------------------
  1916. void __fastcall TfrmApcProfile::edtBDCheck(TObject *Sender)
  1917. {
  1918.     int  i;
  1919.     int  data;
  1920.     int row, col;
  1921.     AnsiString  text;
  1922.     TEdit *edit = (TEdit*)Sender;
  1923.     char  hint[] = " value shall be 0 ~ 31 ";
  1924.     text = edit->Text;
  1925.     if( !IsValidBVBD( text, data ) )
  1926.     {  ShowHintLabel( edit, hint );
  1927.        edit->SetFocus();
  1928.        return;
  1929.     }
  1930.     if( lblBVReg->Caption.AnsiCompareIC("W6-4-0") == 0 )
  1931.     {
  1932.         bvw640.uc_bd = data;
  1933.     }
  1934.     else if( lblBVReg->Caption.AnsiCompareIC("W6-5-0") == 0 )
  1935.     {
  1936.         bvw650.uc_bd = data;
  1937.     }
  1938.     else if( lblBVReg->Caption.AnsiCompareIC("W6-6-0") == 0 )
  1939.     {
  1940.         bvw660.uc_bd = data;
  1941.     }
  1942.     else if( lblBVReg->Caption.AnsiCompareIC("W6-7-0") == 0 )
  1943.     {
  1944.         bvw670.uc_bd = data;
  1945.     }
  1946. }
  1947. //---------------------------------------------------------------------------
  1948. void __fastcall TfrmApcProfile::edtAOFCheck(TObject *Sender)
  1949. {
  1950.     #if 0
  1951.     int  i;
  1952.     int  data;
  1953.     int row, col;
  1954.     AnsiString  text;
  1955.     TEdit *edit = (TEdit*)Sender;
  1956.     text = edit->Text;
  1957.     if( lblBVReg->Caption.AnsiCompareIC("W6-4") == 0 ||
  1958.              lblBVReg->Caption.AnsiCompareIC("W6-5") == 0
  1959.            )
  1960.     {
  1961.         char  hint[] = " value shall be 0 ~ 1 ";
  1962.         if( ! (edtAOF->Text.AnsiCompareIC("0") ==0 || edtAOF->Text.AnsiCompareIC("1") ==0) )
  1963.         {  ShowHintLabel( edit, hint );
  1964.            edit->SetFocus();
  1965.            return;
  1966.         }
  1967.     }
  1968.     else if( lblBVReg->Caption.AnsiCompareIC("W6-6") == 0 )
  1969.     {
  1970.         char  hint[] = " value shall be 0 ~ 127 ";
  1971.         if( !IsValidBVAOF( text, data ) )
  1972.         {  ShowHintLabel( edit, hint );
  1973.            edit->SetFocus();
  1974.            return;
  1975.         }
  1976.     }
  1977.     bvw2[m_eCurBand].i_aof = data;
  1978.     #endif
  1979. }
  1980. //---------------------------------------------------------------------------
  1981. void __fastcall TfrmApcProfile::edtBVW12Check(TObject *Sender)
  1982. {
  1983. #if 0
  1984.     int  i;
  1985.     int  data;
  1986.     int row, col;
  1987.     AnsiString  text;
  1988.     TEdit *edit = (TEdit*)Sender;
  1989.     text = edit->Text;
  1990.     if( lblBVReg->Caption.AnsiCompareIC("W6-4") == 0 )
  1991.     {
  1992.         char  hint[] = " value shall be 0 ~ 15 ";
  1993.         if( !IsValidBVKSG( text, data )  )
  1994.         {  ShowHintLabel( edit, hint );
  1995.            edit->SetFocus();
  1996.            return;
  1997.         }
  1998.         bvw2[m_eCurBand].i_ksg = data;
  1999.     }
  2000.     else if( lblBVReg->Caption.AnsiCompareIC("W6-5") == 0 )
  2001.     {
  2002.         char  hint[] = " value shall be 0 ~ 15 ";
  2003.         if( !IsValidBVKSD( text, data )  )
  2004.         {  ShowHintLabel( edit, hint );
  2005.            edit->SetFocus();
  2006.            return;
  2007.         }
  2008.         bvw2[m_eCurBand].i_ksd = data;
  2009.     }
  2010.     else if( lblBVReg->Caption.AnsiCompareIC("W6-6") == 0 )
  2011.     {
  2012.         char  hint[] = " value shall be 0 ~ 1 ";
  2013.         if( !IsValidBVARE( text, data ) )
  2014.         {  ShowHintLabel( edit, hint );
  2015.            edit->SetFocus();
  2016.            return;
  2017.         }
  2018.         bvw2[m_eCurBand].i_are = data;
  2019.     }
  2020. #endif
  2021. }
  2022. //---------------------------------------------------------------------------
  2023. void __fastcall TfrmApcProfile::edtBVW13Check(TObject *Sender)
  2024. {
  2025. #if 0
  2026.     int  i;
  2027.     int  data;
  2028.     int row, col;
  2029.     AnsiString  text;
  2030.     TEdit *edit = (TEdit*)Sender;
  2031.     text = edit->Text;
  2032.     if( lblBVReg->Caption.AnsiCompareIC("W6-4") == 0 )
  2033.     {
  2034.         char  hint[] = " value shall be 0 ~ 31 ";
  2035.         if( !IsValidBVKAG( text, data )  )
  2036.         {  ShowHintLabel( edit, hint );
  2037.            edit->SetFocus();
  2038.            return;
  2039.         }
  2040.         bvw2[m_eCurBand].i_kag = data;
  2041.     }
  2042.     else if( lblBVReg->Caption.AnsiCompareIC("W6-5") == 0 )
  2043.     {
  2044.         char  hint[] = " value shall be 0 ~ 31 ";
  2045.         if( !IsValidBVKAD( text, data )  )
  2046.         {  ShowHintLabel( edit, hint );
  2047.            edit->SetFocus();
  2048.            return;
  2049.         }
  2050.         bvw2[m_eCurBand].i_kad = data;
  2051.     }
  2052.     else if( lblBVReg->Caption.AnsiCompareIC("W6-6") == 0 )
  2053.     {
  2054.         char  hint[] = " value shall be 0 ~ 127 ";
  2055.         if( !IsValidBVVOF( text, data ) )
  2056.         {  ShowHintLabel( edit, hint );
  2057.            edit->SetFocus();
  2058.            return;
  2059.         }
  2060.         bvw2[m_eCurBand].i_vof = data;
  2061.     }
  2062. #endif
  2063. }
  2064. //---------------------------------------------------------------------------
  2065. void __fastcall TfrmApcProfile::edtBVW14Check(TObject *Sender)
  2066. {
  2067. #if 0
  2068.     int  data;
  2069.     int row, col;
  2070.     AnsiString  text;
  2071.     TEdit *edit = (TEdit*)Sender;
  2072.     text = edit->Text;
  2073.     if( lblBVReg->Caption.AnsiCompareIC("W6-6") == 0 )
  2074.     {
  2075.         char  hint[] = " value shall be 0 ~ 1 ";
  2076.         if( !IsValidBVVRE( text, data ) )
  2077.         {  ShowHintLabel( edit, hint );
  2078.            edit->SetFocus();
  2079.            return;
  2080.         }
  2081.         bvw2[m_eCurBand].i_vre = data;
  2082.     }
  2083. #endif
  2084. }
  2085. //---------------------------------------------------------------------------
  2086. void __fastcall TfrmApcProfile::edtTNCheck(TObject *Sender)
  2087. {
  2088.     unsigned char  data;
  2089.     int row, col;
  2090.     AnsiString  text;
  2091.     TEdit *edit = (TEdit*)Sender;
  2092.     text = edit->Text;
  2093.     if( cbC3ModeEnable->Checked )
  2094.     {
  2095.         if( !IsValidC3TN( text, data ) )
  2096.         {
  2097.             char  hint[] = " value shall be 0 ~ 63 ";
  2098.             ShowHintLabel( edit, hint );
  2099.             edit->SetFocus();
  2100.             return;
  2101.         }
  2102.         c3mode.uc_tn = data;
  2103.     }
  2104.    // else
  2105.    // {
  2106.    //     if( !IsValidC3TA( text, data ) )
  2107.    //     {
  2108.    //         char  hint[] = " value shall be 0 ~ 7 ";
  2109.    //         ShowHintLabel( edit, hint );
  2110.    //         edit->SetFocus();
  2111.    //         return;
  2112.    //     }
  2113.    //     c3[m_eCurBand].i_ta = data;
  2114.    // }
  2115.     
  2116. }
  2117. //---------------------------------------------------------------------------
  2118. void __fastcall TfrmApcProfile::edtTOCheck(TObject *Sender)
  2119. {
  2120.     unsigned char  data;
  2121.     int row, col;
  2122.     char  hint[] = " value shall be 0 ~ 15 ";
  2123.     AnsiString  text;
  2124.     TEdit *edit = (TEdit*)Sender;
  2125.     text = edit->Text;
  2126.     if( !IsValidC3TO( text, data ) )
  2127.     {
  2128.         ShowHintLabel( edit, hint );
  2129.         edit->SetFocus();
  2130.         return;
  2131.     }
  2132.     c3mode.uc_to = data;
  2133. }
  2134. //---------------------------------------------------------------------------
  2135. void __fastcall TfrmApcProfile::edtPMCheck(TObject *Sender)
  2136. {
  2137.     unsigned char ucdata;
  2138.     int row, col;
  2139.     char  hint[] = " value shall be 0 ~ 15 ";
  2140.     AnsiString  text;
  2141.     TEdit *edit = (TEdit*)Sender;
  2142.     text = edit->Text;
  2143.     if (!IsValidC3PM(text, ucdata))
  2144.     {
  2145.         ShowHintLabel(edit, hint);
  2146.         edit->SetFocus();
  2147.         return;
  2148.     }
  2149.     c3mode.uc_pm = ucdata;
  2150. }
  2151. //---------------------------------------------------------------------------
  2152. void __fastcall TfrmApcProfile::cbC3ModeEnableClick(TObject *Sender)
  2153. {
  2154.     if( cbC3ModeEnable->Checked )
  2155.     {
  2156.        // lblTC->Visible = false;
  2157.        // lblTB->Visible = false;
  2158.        // lblTATN->Caption = "TN";
  2159.       // lblTN->Visible = true;
  2160.       // edtTN->Visible = true;
  2161.       // lblTO->Visible = true;
  2162.       // edtTO->Visible = true;
  2163.       b5p_coef.tx.c3mode = 1;
  2164.     }
  2165.     else
  2166.     {
  2167.        // lblTC->Visible = true;
  2168.        // lblTB->Visible = true;
  2169.        // lblTATN->Caption = "TA";
  2170.        // lblTN->Visible = false;
  2171.        /// edtTN->Visible = false;
  2172.       //  lblTO->Visible = false;
  2173.       //  edtTO->Visible = false;
  2174.         b5p_coef.tx.c3mode = 0;
  2175.     }
  2176.     ReDrawFields( DRAW_WORD3 );
  2177.     ComposeRenesasField();
  2178.     isSetCal3ModeTrigger = false;
  2179.     RF_APC_Obj->ConfirmCallback = ::CNF_WriteApcToNVRAM;
  2180.     RF_APC_Obj->Req_SetB5PToReg( b5p_coef );
  2181. }
  2182. //---------------------------------------------------------------------------
  2183. void __fastcall TfrmApcProfile::edtTCCheck(TObject *Sender)
  2184. {
  2185. #if 0
  2186.     int  data;
  2187.     int row, col;
  2188.     char  hint[] = " value shall be 0 ~ 7 ";
  2189.     AnsiString  text;
  2190.     TEdit *edit = (TEdit*)Sender;
  2191.     text = edit->Text;
  2192.     if( !IsValidC3TC( text, data ) )
  2193.     {
  2194.         ShowHintLabel( edit, hint );
  2195.         edit->SetFocus();
  2196.         return;
  2197.     }
  2198.     c3mode.uc_tc = data;
  2199. #endif
  2200. }
  2201. //---------------------------------------------------------------------------
  2202. void __fastcall TfrmApcProfile::edtTBCheck(TObject *Sender)
  2203. {
  2204. #if 0
  2205.     int  data;
  2206.     int row, col;
  2207.     char  hint[] = " value shall be 0 ~ 7 ";
  2208.     AnsiString  text;
  2209.     TEdit *edit = (TEdit*)Sender;
  2210.     text = edit->Text;
  2211.     if( !IsValidC3TB( text, data ) )
  2212.     {
  2213.         ShowHintLabel( edit, hint );
  2214.         edit->SetFocus();
  2215.         return;
  2216.     }
  2217.     c3[m_eCurBand].i_tb = data;
  2218. #endif
  2219. }
  2220. //---------------------------------------------------------------------------
  2221. void __fastcall TfrmApcProfile::btnSetCAL3ModeToRegisterClick(TObject *Sender)
  2222. {
  2223.     bool ok;
  2224.     unsigned int CurW6s;
  2225.     CurrentPageLock();
  2226.     ComposeRenesasField();
  2227.     isSetCal3ModeTrigger = true;
  2228.     RF_APC_Obj->ConfirmCallback = ::CNF_SetB5PToReg;
  2229.     RF_APC_Obj->Req_SetB5PToReg( b5p_coef );
  2230.    // if(!ok)
  2231.    // {
  2232.    //     sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Set CAL3 mode to register fail";
  2233.    ///     Application->MessageBox( "Execution Fail : Set CAL3 mode to register", "FAIL", MB_OK );
  2234.    //     return;
  2235.    // }
  2236.    // Get_CurrentWord6s( CurW6s );
  2237.    // ok = RF_APC_Obj->Set_W6sImmediateBSI( CurW6s );
  2238.    //
  2239.    // if(!ok)
  2240.    // {
  2241.    //     sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Set word6s to register fail";
  2242.    //     Application->MessageBox( "Execution Fail : Set word6s to register", "FAIL", MB_OK );
  2243.    //     return;
  2244.     //}
  2245.     //sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Set word3, word6s to register successfully";
  2246.     //CurrentPageReset();
  2247. }
  2248. //-----------------------------------------------
  2249. void  TfrmApcProfile::CNF_SetB5PToReg( void )
  2250. {
  2251.    // int state = RF_APC_Obj->ConfirmState;
  2252.     int state = RF_APC_Obj->Get_ConfirmState();
  2253.     unsigned int CurW6s;
  2254.     if( state==METAAPP_SUCCESS )
  2255.     {
  2256.         if( isSetCal3ModeTrigger )
  2257.         {
  2258.             Get_CurrentWord6s( CurW6s );
  2259.             RF_APC_Obj->ConfirmCallback = ::CNF_SetW6sImmediateBSI;
  2260.             RF_APC_Obj->REQ_SetW6sImmediateBSI_Start( CurW6s );
  2261.             return;
  2262.         }
  2263.     }
  2264.     else  if( state==METAAPP_FAIL )
  2265.     {
  2266.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Set CAL3 mode to register fail";
  2267.         Application->MessageBox( "Execution Fail : Set CAL3 mode to register", "FAIL", MB_OK );
  2268.     }
  2269.     else  if( state==METAAPP_TIMEOUT )
  2270.     {
  2271.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Set CAL3 mode to register timeout";
  2272.         Application->MessageBox( "Execution Timeout : Set CAL3 mode to register", "TIMEOUT", MB_OK );
  2273.     }
  2274.     else  if( state==METAAPP_STOP )
  2275.     {
  2276.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Set CAL3 mode to register stop";
  2277.     }
  2278.     CurrentPageReset();
  2279. }
  2280. //-----------------------------------------------
  2281. void  TfrmApcProfile::CNF_SetW6sImmediateBSI( void )
  2282. {
  2283.     int state = RF_APC_Obj->Get_ConfirmState();
  2284.     if( state==METAAPP_SUCCESS )
  2285.     {
  2286.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Set CAL3 mode to register successfully";
  2287.     }
  2288.     else  if( state==METAAPP_FAIL )
  2289.     {
  2290.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Set word6s to register fail";
  2291.         Application->MessageBox( "Execution Fail : Set word6s to register", "FAIL", MB_OK );
  2292.     }
  2293.     else  if( state==METAAPP_TIMEOUT )
  2294.     {
  2295.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Set word6s to register timeout";
  2296.         Application->MessageBox( "Execution Timeout : Set word6s to register", "TIMEOUT", MB_OK );
  2297.     }
  2298.     else  if( state==METAAPP_STOP )
  2299.     {
  2300.         sbAPCProfile->Panels->Items[0]->Text = (AnsiString)"  Set word6s to register stop";
  2301.       //  Application->MessageBox( "Execution Stop : Set word6s to register", "STOP", MB_OK );
  2302.     }
  2303.     CurrentPageReset();
  2304. }
  2305. //-------------------------------------------------------------------------
  2306. bool  TfrmApcProfile::ComposeRenesasField( void )
  2307. {
  2308.     if(  cbC3ModeEnable->Checked )
  2309.     {
  2310.         b5p_coef.tx.c3mode = 1;
  2311.     }
  2312.     else
  2313.     {
  2314.         b5p_coef.tx.c3mode = 0;
  2315.     }
  2316.     RF_APC_Obj->Compose_wordC3( c3mode, b5p_coef.tx.wordC3);
  2317.     RF_APC_Obj->Compose_word6_4_0(bvw640, b5p_coef.tx.word6_4_0);
  2318.     RF_APC_Obj->Compose_word6_5_0(bvw650, b5p_coef.tx.word6_5_0);
  2319.     RF_APC_Obj->Compose_word6_6_0(bvw660, b5p_coef.tx.word6_6_0);
  2320.     RF_APC_Obj->Compose_word6_7_0(bvw670, b5p_coef.tx.word6_7_0);
  2321.     return true;
  2322. }
  2323. //---------------------------------------------------------------------------
  2324. bool  TfrmApcProfile::DeComposeRenesasField( void )
  2325. {
  2326.     RF_APC_Obj->DeCompose_wordC3( b5p_coef.tx.wordC3, c3mode );
  2327.     c3mode.c3mode = b5p_coef.tx.c3mode;
  2328.     RF_APC_Obj->DeCompose_word6_x_0(b5p_coef.tx.word6_4_0, bvw640);
  2329.     RF_APC_Obj->DeCompose_word6_x_0(b5p_coef.tx.word6_5_0, bvw650);
  2330.     RF_APC_Obj->DeCompose_word6_x_0(b5p_coef.tx.word6_6_0, bvw660);
  2331.     RF_APC_Obj->DeCompose_word6_x_0(b5p_coef.tx.word6_7_0, bvw670);
  2332.     return true;
  2333. }
  2334. //---------------------------------------------------------------------------
  2335. void TfrmApcProfile::read_APC_files_setup( AnsiString asSetupFile, AnsiString asExeName )
  2336. {
  2337.     AnsiString as_NVRAM_DB_File;
  2338.     AnsiString asPath;
  2339.     if ( getPathFromStr(asExeName, asPath) &&
  2340.          withPath( asPath) &&
  2341.          !withPath( asSetupFile)
  2342.        )
  2343.     {
  2344.        asSetupFile = asPath + asSetupFile;
  2345.     }
  2346.     TIniFile *ini;
  2347.     try
  2348.     {
  2349.         ini = new TIniFile( asSetupFile );
  2350.         if(ini != NULL)
  2351.         {
  2352.             //stNVRAMDB->Caption  = ini->ReadString("RF tool","NVRAM database file", "");
  2353.            // if ( stNVRAMDB->Caption.Length() >0)
  2354.            // {
  2355.            //     read_APC_db_file( stNVRAMDB->Caption );
  2356.            // }
  2357.            as_NVRAM_DB_File = ini->ReadString("RF tool","NVRAM database file", "");
  2358.            if( read_db_file( as_NVRAM_DB_File ) )
  2359.            {
  2360.                UpdateDBFileCaption(as_NVRAM_DB_File);
  2361.                frmRFTool->UpdateDBFileCaption(as_NVRAM_DB_File);
  2362.                //frm8PskApcProfile->UpdateDBFileCaption(as_NVRAM_DB_File);
  2363.            }
  2364.             delete ini;
  2365.             ini = NULL;
  2366.         }
  2367.     }
  2368.     catch (...)
  2369.     {
  2370.        AnsiString as_warning_msg;
  2371.        as_warning_msg = " RF tool : read setup file : " + asSetupFile + " error ";
  2372.        Application->MessageBox( as_warning_msg.c_str(), "Warning", MB_OK );
  2373.     }
  2374. }
  2375. //---------------------------------------------------------------------------
  2376. void TfrmApcProfile::read_APC_db_file( AnsiString asFileName )
  2377. {
  2378.     unsigned long nvram_idb;
  2379.     if( ! NVRAMMan->Get_IsInit() )
  2380.     {
  2381.         frmMainSel->FDMDatabaseInit( asFileName.c_str());
  2382.     }
  2383.     if( ! NVRAMMan->Get_IsInit() )
  2384.     {
  2385.          MessageBox(NULL, "Open NVRAM database error", NULL, MB_OK);
  2386.     }
  2387.     else
  2388.     {
  2389.          stNVRAMDB->Caption = asFileName;
  2390.         
  2391.     }
  2392. }
  2393. //---------------------------------------------------------------------------
  2394. bool TfrmApcProfile::read_db_file( AnsiString asFileName )
  2395. {
  2396.     unsigned long nvram_idb;
  2397.     if(! NVRAMMan->Get_IsInit() || asFileName.AnsiCompareIC(NVRAMMan->Get_NVRAM_DB_File()) )
  2398.     {
  2399.         frmMainSel->FDMDatabaseInit( asFileName.c_str());
  2400.     }
  2401.     if(! NVRAMMan->Get_IsInit() )
  2402.     {
  2403.          Application->MessageBox( " Initialize NVRAM database fail", "Fail", MB_OK );
  2404.          return false;
  2405.     }
  2406.     return true;
  2407. }
  2408. //---------------------------------------------------------------------------
  2409. void TfrmApcProfile::UpdateDBFileCaption(AnsiString asFileName)
  2410. {
  2411.     stNVRAMDB->Caption = asFileName;
  2412. }
  2413. //---------------------------------------------------------------------------
  2414. void TfrmApcProfile::write_APC_files_setup( AnsiString asSetupFile, AnsiString asExeName )
  2415. {
  2416.     AnsiString asPath;
  2417.     if ( getPathFromStr(asExeName, asPath) &&
  2418.          withPath( asPath) &&
  2419.          !withPath( asSetupFile)
  2420.        )
  2421.     {
  2422.         asSetupFile = asPath + asSetupFile;
  2423.     }
  2424.     TIniFile *ini;
  2425.     try
  2426.     {
  2427.         ini = new TIniFile( asSetupFile );
  2428.         if(ini != NULL)
  2429.         {
  2430.             ini->WriteString("RF tool","NVRAM database file", stNVRAMDB->Caption );
  2431.             delete ini;
  2432.             ini = NULL;
  2433.         }
  2434.     }
  2435.     catch (...)
  2436.     {
  2437.         AnsiString as_warning_msg;
  2438.         as_warning_msg = " RF tool : write setup file : " + asSetupFile + " error ";
  2439.         Application->MessageBox( as_warning_msg.c_str(), "Warning", MB_OK );
  2440.     }
  2441. }
  2442. //---------------------------------------------------------------------------
  2443. void __fastcall TfrmApcProfile::FormClose(TObject *Sender,
  2444.       TCloseAction &Action)
  2445. {
  2446.    if( stNVRAMDB->Caption.AnsiCompareIC("") != 0 )
  2447.    {
  2448.        write_APC_files_setup( "MF_setup.txt", Application->ExeName );
  2449.    }
  2450.     if( btnTXStart->Tag == 1)
  2451.     {
  2452.         btnTXStopClick(this);
  2453.     }
  2454. }
  2455. //---------------------------------------------------------------------------
  2456. void TfrmApcProfile::Get_CurrentWord6s( unsigned int &cur_w6s )
  2457. {
  2458.     if( lblBVReg->Caption.AnsiCompareIC("W6-4-0")==0 )
  2459.     {
  2460.         RF_APC_Obj->Compose_word6_4_0( bvw640, cur_w6s);
  2461.     }
  2462.     else if( lblBVReg->Caption.AnsiCompareIC("W6-5-0")==0 )
  2463.     {
  2464.         RF_APC_Obj->Compose_word6_5_0( bvw650, cur_w6s);
  2465.     }
  2466.     else if( lblBVReg->Caption.AnsiCompareIC("W6-6-0")==0 )
  2467.     {
  2468.         RF_APC_Obj->Compose_word6_6_0( bvw660, cur_w6s);
  2469.     }
  2470.     else if( lblBVReg->Caption.AnsiCompareIC("W6-7-0")==0 )
  2471.     {
  2472.         RF_APC_Obj->Compose_word6_7_0( bvw670, cur_w6s);
  2473.     }
  2474. }
  2475. //---------------------------------------------------------------------------
  2476. void __fastcall TfrmApcProfile::edtAfcDacCheck(TObject *Sender)
  2477. {
  2478.     short  sdata;
  2479.     AnsiString  text;
  2480.     TEdit *edit = (TEdit*)Sender;
  2481.     char  hint[] = " value shall be 0~8191 ";
  2482.     text = edit->Text;
  2483.     if (!IsValidAFC(text, sdata))
  2484.     {
  2485.         ShowHintLabel(edit, hint);
  2486.         edit->Text = IntToStr(Default_AFC);
  2487.         edit->SetFocus();
  2488.         return;
  2489.     }
  2490. }
  2491. //---------------------------------------------------------------------------
  2492. //===========================================================================
  2493. //////////////////////////////// Global information /////////////////////////
  2494. //===========================================================================
  2495. void TfrmApcProfile::Set_RF_APC_Obj( CRFAPC  *rf_apc_obj )
  2496. {
  2497.     RF_APC_Obj = rf_apc_obj;
  2498. }
  2499. //---------------------------------------------------------------------------
  2500. void TfrmApcProfile::Set_RF_TX_Obj( CRFTX   *rf_tx_obj )
  2501. {
  2502.     RF_TX_Obj = rf_tx_obj;
  2503. }
  2504. //---------------------------------------------------------------------------
  2505. void TfrmApcProfile::Init(void)
  2506. {
  2507.     m_bInit = true;
  2508.     m_bTADOSupport = false;
  2509.     CurrentPageReset();
  2510. }
  2511. //---------------------------------------------------------------------------
  2512. void TfrmApcProfile::Set_Tsc( int  tsc )
  2513. {
  2514.     m_cTsc = tsc;
  2515. }
  2516. //---------------------------------------------------------------------------
  2517. void TfrmApcProfile::Set_AfcDac( int afc_dac )
  2518. {
  2519.     m_sAfcDac = afc_dac;
  2520. }
  2521. //---------------------------------------------------------------------------
  2522. void TfrmApcProfile::Set_BurstType(APCTxPattern burst_type)
  2523. {
  2524.     m_eBurstType = burst_type;
  2525. }
  2526. //--------------------------------------------------------------------------
  2527. void __fastcall TfrmApcProfile::edtLowApcDcOffsetCheck(TObject *Sender)
  2528. {
  2529.     unsigned short usdata;
  2530.     int  band = m_eCurBand;
  2531.     AnsiString  text;
  2532.     TEdit *edit = (TEdit*)Sender;
  2533.     char  hint[] = " value shall be 0~1023 ";
  2534.     text = edit->Text;
  2535.     if (!IsValidPCLDac(text, usdata))
  2536.     {
  2537.         ShowHintLabel(edit, hint);
  2538.         edit->SetFocus();
  2539.         return;
  2540.     }
  2541.     m_usLowApcDcOffset[band] = usdata;
  2542. }
  2543. //---------------------------------------------------------------------------
  2544. void __fastcall TfrmApcProfile::edtAPCLowestPowerCheck(TObject *Sender)
  2545. {
  2546.     int  i_data;
  2547.     int  band = m_eCurBand;
  2548.     AnsiString  text;
  2549.     TEdit *edit = (TEdit*)Sender;
  2550.     char  hint[][256] =
  2551.     {
  2552.         " value shall be 0~36 ",
  2553.         " value shall be 0~33 ",
  2554.         " value shall be 0~33 ",
  2555.         " value shall be 0~36 ",
  2556.     };
  2557.     text = edit->Text;
  2558.     if( !IsValidApcLowestPower( text, m_eCurBand, i_data ) )
  2559.     {   ShowHintLabel( edit, hint[m_eCurBand] );
  2560.         edit->SetFocus();
  2561.         return;
  2562.     }
  2563.     m_iApcLowestPower[band] = i_data;
  2564. }
  2565. //---------------------------------------------------------------------------