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

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