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

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_InterSlotRampSetting.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   Inter slot ramp setting 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. #include "form_InterSlotRampSetting.h"
  69. //#include "form_RFApcProfile.h"
  70. #include "form_main.h"
  71. #include "misc.h"
  72. #include "man_fdm.h"
  73. #ifndef  _RF_COMMON_H_
  74. #include "rf_common.h"
  75. #endif
  76. //---------------------------------------------------------------------------
  77. #pragma package(smart_init)
  78. #pragma resource "*.dfm"
  79. TfrmInterSlotRampSetting *frmInterSlotRampSetting;
  80. HANDLE p_MultiTxStop_Event;
  81. //=============================================================================
  82. static void  CNF_WriteToNVRAM( void )
  83. {   frmInterSlotRampSetting->DownloadToFlashDone();
  84. }
  85. //---------------------------------------------------------------------------
  86. static void  CNF_ReadFromNVRAM( void )
  87. {   frmInterSlotRampSetting->UploadFromFlashDone();
  88. }
  89. //---------------------------------------------------------------------------
  90. static void  ConfirmCallback_MultiSlotTX( void )
  91. {
  92.     frmInterSlotRampSetting->ConfirmCallback_MultiSlotTX();
  93. }
  94. //--------------------------------------------------------------------------
  95. static void  ConfirmCallback_QueryRfMsCapability( void )
  96. {
  97.     frmRFTool->ConfirmCallback_QueryRfMsCapability();
  98. }
  99. //=============================================================================
  100. void TfrmInterSlotRampSetting::Init(void)
  101. {
  102.     m_bInit = true;
  103. }
  104. //----------------------------------------------------------------------------
  105. void __fastcall TfrmInterSlotRampSetting::FormCreate(TObject *Sender)
  106. {
  107.     isInterRampCircleOnDrag = false;
  108.     isDragTrigger = false;
  109.     Init();
  110. }
  111. //---------------------------------------------------------------------------
  112. void __fastcall TfrmInterSlotRampSetting::FormActivate(TObject *Sender)
  113. {
  114.     if (m_bInit)
  115.     {
  116.         m_bInit = false;
  117.         m_bMultiSlotTxExSupport = frmRFTool->Get_MultiSlotTxExSupport();
  118.     }
  119. }
  120. //---------------------------------------------------------------------------
  121. void  TfrmInterSlotRampSetting::ConfirmCallback_MultiSlotTX( void )
  122. {
  123.     E_METAAPP_RESULT_T state = RF_MULTI_SLOT_TX_Obj->Get_ConfirmState();
  124.     if (isDragTrigger)
  125.     {
  126.         imRampProfile->Enabled = true;
  127.         isDragTrigger = false;
  128.     }
  129.     switch (state)
  130.     {
  131.         case METAAPP_SUCCESS:
  132.         {
  133.             sbISR->Panels->Items[0]->Text = (AnsiString) "  Multi slot TX progressing";
  134.         }
  135.         break;
  136.         case METAAPP_FAIL:
  137.         {
  138.             sbISR->Panels->Items[0]->Text = (AnsiString) "  Multi slot TX fail";
  139.             Application->MessageBox( "Execution Failure : Multi slot TX", "FAILURE", MB_OK );
  140.             frmRFTool->Force_RF_Stop();
  141.             CurrentPageReset();
  142.         }
  143.         break;
  144.         case METAAPP_TIMEOUT:
  145.         {
  146.             sbISR->Panels->Items[0]->Text = (AnsiString) "  Multi slot TX timeout";
  147.             Application->MessageBox("Execution Timeout : Multi slot TX", "TIMEOUT", MB_OK);
  148.             frmRFTool->Force_RF_Stop();
  149.             CurrentPageReset();
  150.         }
  151.         break;
  152.         case METAAPP_STOP:
  153.         {
  154.             sbISR->Panels->Items[0]->Text = (AnsiString) "  Multi slot TX stop";
  155.         }
  156.         break;
  157.         default:
  158.         {
  159.         }
  160.         break;
  161.     }
  162. }
  163. //---------------------------------------------------------------------------
  164. bool  TfrmInterSlotRampSetting::CheckFields( void )
  165. {
  166.     int  i;
  167.     unsigned char  ucdata[16];
  168.     int  band = m_eCurBand;
  169.     AnsiString  text;
  170.     for(i=0; i<16; i++)
  171.     {
  172.         text = edtInterRamp[i]->Text;  if( !IsValidRamp( text, ucdata[i] ) )           {  edtInterRampCheck(edtInterRamp[i]);   return(false);   }
  173.     }
  174.     for(i=0; i<16; i++)
  175.     {
  176.         Inter_RamTable[band].interRampData[i] = ucdata[i];
  177.     }
  178.     return true;
  179. }
  180. //---------------------------------------------------------------------------
  181. void  TfrmInterSlotRampSetting::ShowHintLabel( TControl *sender, char* hint )
  182. {
  183.     TPoint pt0 = this->ClientOrigin;
  184.     TPoint pt1 = sender->ClientOrigin;
  185.     lblHint->Left = (pt1.x-pt0.x);
  186.     lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  187.     lblHint->Caption = hint;
  188.     lblHint->Visible = true;
  189.     HintTimer->Enabled = true;
  190. }
  191. //---------------------------------------------------------------------------
  192. __fastcall TfrmInterSlotRampSetting::TfrmInterSlotRampSetting(TComponent* Owner)
  193.         : TForm(Owner)
  194. {
  195.     m_sTestArfcn[BANDSEL_GSM900 ] = 0;
  196.     m_sTestArfcn[BANDSEL_DCS1800] = 512;
  197.     m_sTestArfcn[BANDSEL_PCS1900] = 512;
  198.     m_sTestArfcn[BANDSEL_GSM850] = 128;
  199.     lastTabIndex = 0; // GSM 900
  200.     edtInterRamp[ 0]=edtInterRamp00;
  201.     edtInterRamp[ 1]=edtInterRamp01;
  202.     edtInterRamp[ 2]=edtInterRamp02;
  203.     edtInterRamp[ 3]=edtInterRamp03;
  204.     edtInterRamp[ 4]=edtInterRamp04;
  205.     edtInterRamp[ 5]=edtInterRamp05;
  206.     edtInterRamp[ 6]=edtInterRamp06;
  207.     edtInterRamp[ 7]=edtInterRamp07;
  208.     edtInterRamp[ 8]=edtInterRamp08;
  209.     edtInterRamp[ 9]=edtInterRamp09;
  210.     edtInterRamp[10]=edtInterRamp10;
  211.     edtInterRamp[11]=edtInterRamp11;
  212.     edtInterRamp[12]=edtInterRamp12;
  213.     edtInterRamp[13]=edtInterRamp13;
  214.     edtInterRamp[14]=edtInterRamp14;
  215.     edtInterRamp[15]=edtInterRamp15;
  216.     lblVertical[0] = lblVertical0;
  217.     lblVertical[1] = lblVertical1;
  218.     lblVertical[2] = lblVertical2;
  219.     lblVertical[3] = lblVertical3;
  220.     lblVertical[4] = lblVertical4;
  221.     lblVertical[5] = lblVertical5;
  222.     lblVertical[6] = lblVertical6;
  223.     lblVertical[7] = lblVertical7;
  224.     lblVertical[8] = lblVertical8;
  225.     lblVertical[9] = lblVertical9;
  226.     lblRampH[0] = lblRampH0;
  227.     lblRampH[1] = lblRampH1;
  228.     lblRampH[2] = lblRampH2;
  229.     lblRampH[3] = lblRampH3;
  230.     lblRampH[4] = lblRampH4;
  231.     lblRampH[5] = lblRampH5;
  232.     lblRampH[6] = lblRampH6;
  233.     lblRampH[7] = lblRampH7;
  234.     lblRampH[8] = lblRampH8;
  235.     lblRampH[9] = lblRampH9;
  236.     lblRampH[10] = lblRampH10;
  237.     lblRampH[11] = lblRampH11;
  238.     lblRampH[12] = lblRampH12;
  239.     lblRampH[13] = lblRampH13;
  240.     lblRampH[14] = lblRampH14;
  241.     lblRampH[15] = lblRampH15;
  242. }
  243. //---------------------------------------------------------------------------
  244. void __fastcall TfrmInterSlotRampSetting::btnLoadFromFileClick(
  245.       TObject *Sender)
  246. {
  247.     char str[512];
  248.     bool ok;
  249.     int  band;
  250.     int  total_band_num;
  251.     ok = OpenDialog->Execute();
  252.     if( !ok )
  253.     {
  254.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Load inter slot ramp profile from file fail";
  255.         return;
  256.     }
  257.     strcpy( str, OpenDialog->FileName.c_str() );
  258.     ok = RF_INTER_SLOT_RAMP_Obj.REQ_Read_From_File( str );
  259.     if( ok )
  260.     {
  261.         if(frmMainSel->cbGSM850->Checked)
  262.         //frmMainSel->Get_FinalBandSupport( band_support );
  263.         //if( band_support.GSM850 )
  264.         {   total_band_num = 4;
  265.         }
  266.         else
  267.         {
  268.             total_band_num = 3;
  269.         }
  270.         for(band=0; band<total_band_num; band++)
  271.         {   Inter_RamTable[band] = RF_INTER_SLOT_RAMP_Obj.Inter_RamTable[band];
  272.         }
  273.         ReDrawFields(DRAW_INTER_RAMP);
  274.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Load inter slot ramp profile from file successfully";
  275.     }
  276.     else
  277.     {   Application->MessageBox( "Execution Failure : Load APC profile from file", "FAILURE", MB_OK );
  278.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Load inter slot ramp profile from file fail";
  279.     }
  280. }
  281. //---------------------------------------------------------------------------
  282. void __fastcall TfrmInterSlotRampSetting::btnSaveToFileClick(
  283.       TObject *Sender)
  284. {
  285.     char str[512];
  286.     bool ok;
  287.     int  band, i;
  288.     int  total_band_num;
  289.     ok = CheckFields();
  290.     if(!ok)
  291.     {
  292.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Save inter slot ramp profile to file fail";
  293.         Application->MessageBox( "Execution Failure : Save inter slot ramp profile to file", "FAILURE", MB_OK );
  294.         return;
  295.     }
  296.     ok = SaveDialog->Execute();
  297.     if( !ok )
  298.     {
  299.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Save inter slot ramp profile to file fail";
  300.         return;
  301.     }
  302.     if(frmMainSel->cbGSM850->Checked)
  303.     //frmMainSel->Get_FinalBandSupport( band_support );
  304.     //if( band_support.GSM850 )
  305.     {   total_band_num = 4;
  306.     }
  307.     else
  308.     {
  309.         total_band_num = 3;
  310.     }
  311.     for(band=0; band<total_band_num; band++)
  312.     {
  313.         for(i=0; i<16; i++)
  314.         {
  315.             RF_INTER_SLOT_RAMP_Obj.Inter_RamTable[band].interRampData[i] = Inter_RamTable[band].interRampData[i];
  316.         }
  317.     }
  318.     strcpy( str, SaveDialog->FileName.c_str() );
  319.     ok = RF_INTER_SLOT_RAMP_Obj.REQ_Write_To_File( str );
  320.     if( !ok )
  321.     {
  322.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Save inter slot ramp profile to file fail";
  323.         Application->MessageBox( "Execution Failure : Save Inter slot ramp profile to file", "FAILURE", MB_OK );
  324.         return;
  325.     }
  326.     sbISR->Panels->Items[0]->Text = (AnsiString) "  Save inter slot ramp profile to file successfully";
  327. }
  328. //---------------------------------------------------------------------------
  329. void  TfrmInterSlotRampSetting::ReDrawFields( int draw_mask )
  330. {
  331.     int  i;
  332.     int  band = m_eCurBand;
  333.     char str[256];
  334.     if(draw_mask&DRAW_INTER_RAMP)
  335.     {
  336.         for(i=0; i<16; i++)
  337.         {
  338.             edtInterRamp[i]->Text = Inter_RamTable[band].interRampData[i];
  339.         }
  340.     }
  341. }
  342. //------------------------------------------------------------------------------
  343. void __fastcall TfrmInterSlotRampSetting::FormShow(TObject *Sender)
  344. {
  345.     static bool  init=true;
  346.     if(init)
  347.     {
  348.         
  349.         ReDrawFields(DRAW_RAMP);
  350.         init = false;
  351.     }
  352.     PlotCurve( PLOT_INTER_RAMP_GRID | PLOT_INTER_RAMP_PROFILE_CURVE );
  353. }
  354. //---------------------------------------------------------------------------
  355. void __fastcall TfrmInterSlotRampSetting::tclInterSlotRampSettingChange(
  356.       TObject *Sender)
  357. {
  358.     if (!frmMainSel->cbGSM850->Checked)
  359.     {
  360.         if (BANDSEL_GSM850 == (E_BANDSEL) tclInterSlotRampSetting->TabIndex)
  361.         {
  362.             tclInterSlotRampSetting->TabIndex = lastTabIndex;
  363.             Application->MessageBox( "Please check GSM 850 on main menu", "FAILURE", MB_OK );
  364.             return;
  365.         }
  366.     }
  367.     if( !CheckFields() )
  368.     {
  369.         tclInterSlotRampSetting->TabIndex = m_eCurBand;
  370.         return;
  371.     }
  372.     m_eCurBand = (E_BANDSEL) tclInterSlotRampSetting->TabIndex;
  373.     lastTabIndex =  tclInterSlotRampSetting->TabIndex;
  374.     if (BTN_TAG_START == btnTXStart->Tag)
  375.     {
  376.         btnTXStopClick(this);
  377.     }
  378.     ReDrawFields( DRAW_INTER_RAMP );
  379.     PlotCurve( PLOT_INTER_RAMP_GRID | PLOT_INTER_RAMP_PROFILE_CURVE );
  380. }
  381. //---------------------------------------------------------------------------
  382. void __fastcall TfrmInterSlotRampSetting::edtInterRampCheck(
  383.       TObject *Sender)
  384. {
  385.     unsigned char  ucdata;
  386.     AnsiString  text;
  387.     TEdit *edit = (TEdit*)Sender;
  388.     char  hint[] = " value shall be 0~255 ";
  389.     text = edit->Text;
  390.     if( !IsValidRamp( text, ucdata ) )
  391.     {
  392.         ShowHintLabel( edit, hint );
  393.         edit->SetFocus();
  394.         return;
  395.     }
  396.     Inter_RamTable[m_eCurBand].interRampData[edit->Tag] = ucdata;
  397. }
  398. //---------------------------------------------------------------------------
  399. void __fastcall TfrmInterSlotRampSetting::HintTimerTimer(TObject *Sender)
  400. {
  401.     HintTimer->Enabled = false;
  402.     lblHint->Visible = false;
  403. }
  404. //---------------------------------------------------------------------------
  405. void __fastcall TfrmInterSlotRampSetting::btnRightClick(TObject *Sender)
  406. {
  407.     int  i;
  408.     for(i=15; i>=1; i--)
  409.     {
  410.         Inter_RamTable[m_eCurBand].interRampData[i] =
  411.         Inter_RamTable[m_eCurBand].interRampData[i-1];
  412.         OldInter_RamTable[m_eCurBand].interRampData[i] =
  413.         OldInter_RamTable[m_eCurBand].interRampData[i-1];
  414.     }
  415.     ReDrawFields( DRAW_INTER_RAMP );
  416.     PlotCurve( PLOT_INTER_RAMP_GRID | PLOT_INTER_RAMP_PROFILE_CURVE );
  417. }
  418. //---------------------------------------------------------------------------
  419. void __fastcall TfrmInterSlotRampSetting::btnLeftClick(TObject *Sender)
  420. {
  421.     //TButton *button = (TButton*)Sender;
  422.     int  i;
  423.     for(i=0; i<15; i++)
  424.     {
  425.         Inter_RamTable[m_eCurBand].interRampData[i] =
  426.         Inter_RamTable[m_eCurBand].interRampData[i+1];
  427.         OldInter_RamTable[m_eCurBand].interRampData[i] =
  428.         OldInter_RamTable[m_eCurBand].interRampData[i+1];
  429.     }
  430.     ReDrawFields( DRAW_INTER_RAMP );
  431.     PlotCurve( PLOT_INTER_RAMP_GRID | PLOT_INTER_RAMP_PROFILE_CURVE );
  432. }
  433. //---------------------------------------------------------------------------
  434. void __fastcall TfrmInterSlotRampSetting::btnDownloadToFlashClick(TObject *Sender)
  435. {
  436.     int  band, i;
  437.     int  total_band_num;
  438.     if( !CheckFields() )  return;
  439.     if( ! NVRAMMan->Get_IsInit() )
  440.     {   frmMainSel->mnuFDMDatabaseClick(Sender);
  441.     }
  442.     if( ! NVRAMMan->Get_IsInit() )
  443.     {
  444.         sbISR->Panels->Items[0]->Text = (AnsiString) "  NVRAM database file initialize fail";
  445.         Application->MessageBox( "Execution Failure : NVRAM database file initialize fail", "FAILURE", MB_OK );
  446.         return;
  447.     }
  448.     if(frmMainSel->cbGSM850->Checked)
  449.     //frmMainSel->Get_FinalBandSupport( band_support );
  450.     //if( band_support.GSM850 )
  451.     {   total_band_num = 4;
  452.     }
  453.     else
  454.     {
  455.         total_band_num = 3;
  456.     }
  457.     for(band=0; band<total_band_num; band++)
  458.     {
  459.         for(i=0; i<16; i++)
  460.         {
  461.             RF_INTER_SLOT_RAMP_Obj.Inter_RamTable[band].interRampData[i] = Inter_RamTable[band].interRampData[i];
  462.         }
  463.     }
  464.    RF_INTER_SLOT_RAMP_Obj.ConfirmCallback = ::CNF_WriteToNVRAM;
  465.    RF_INTER_SLOT_RAMP_Obj.REQ_Write_To_NVRAM();
  466.    btnUploadFromFlash->Enabled = false;
  467.    btnDownloadToFlash->Enabled = false;
  468. }
  469. //---------------------------------------------------------------------------
  470. void __fastcall TfrmInterSlotRampSetting::btnUploadFromFlashClick(
  471.       TObject *Sender)
  472. {
  473.     if( ! NVRAMMan->Get_IsInit() )
  474.     {   frmMainSel->mnuFDMDatabaseClick(Sender);
  475.     }
  476.     if( ! NVRAMMan->Get_IsInit() )
  477.     {
  478.         sbISR->Panels->Items[0]->Text = (AnsiString) "  NVRAM database file initialize fail";
  479.         Application->MessageBox( "Execution Failure : NVRAM database file initialize fail", "FAILURE", MB_OK );
  480.         return;
  481.     }
  482.     RF_INTER_SLOT_RAMP_Obj.ConfirmCallback = ::CNF_ReadFromNVRAM;
  483.     RF_INTER_SLOT_RAMP_Obj.REQ_Read_From_NVRAM();
  484.     btnUploadFromFlash->Enabled = false;
  485.     btnDownloadToFlash->Enabled = false;
  486. }
  487. //---------------------------------------------------------------------------
  488. void  TfrmInterSlotRampSetting::DownloadToFlashDone( void )
  489. {
  490.     int state = RF_INTER_SLOT_RAMP_Obj.Get_ConfirmState();
  491.     btnUploadFromFlash->Enabled = true;
  492.     btnDownloadToFlash->Enabled = true;
  493.     if( state==STATE_INTER_SLOT_RAMP_OK )
  494.     {
  495.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Download inter slot ramp profile to flash successfully";
  496.        // ReDrawFields(DRAW_RAMP);
  497.         if( isDragTrigger )
  498.         {
  499.             btnTXStartClick( this );
  500.             //SetEvent(p_TxStart_Event);
  501.         }
  502.     }
  503.     else  if( state==STATE_INTER_SLOT_RAMP_FAIL )
  504.     {
  505.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Download inter slot ramp profile to flash fail, please check the version of load and NVRAM database are same.";
  506.         Application->MessageBox( "Execution Failure : Download inter slot ramp profile to flash, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  507.     }
  508.     else  if( state==STATE_INTER_SLOT_RAMP_TIMEOUT )
  509.     {
  510.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Download inter slot ramp profile to flash timeout";
  511.         Application->MessageBox( "Execution Timeout : Download inter slot ramp profile to flash", "TIMEOUT", MB_OK );
  512.     }
  513.     else  if( state==STATE_INTER_SLOT_RAMP_STOP )
  514.     {
  515.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Download inter slot ramp profile to flash stop";
  516.     }
  517. }
  518. //---------------------------------------------------------------------------
  519. void  TfrmInterSlotRampSetting::UploadFromFlashDone( void )
  520. {
  521.     int state = RF_INTER_SLOT_RAMP_Obj.Get_ConfirmState();
  522.     int band, i;
  523.     btnUploadFromFlash->Enabled = true;
  524.     btnDownloadToFlash->Enabled = true;
  525.     if( state==STATE_INTER_SLOT_RAMP_OK )
  526.     {
  527.         int total_band_num;
  528.         if(frmMainSel->cbGSM850->Checked)
  529.         //frmMainSel->Get_FinalBandSupport( band_support );
  530.         //if( band_support.GSM850 )
  531.         {   total_band_num = 4;
  532.         }
  533.         else
  534.         {
  535.             total_band_num = 3;
  536.         }
  537.         for(band=0; band<total_band_num; band++)
  538.         {
  539.            // for(i=0; i<16; i++)
  540.            // {
  541.            //     Inter_RamTable[band].interRampData[i] = RF_INTER_SLOT_RAMP_Obj.Inter_RamTable[band].interRampData[i];
  542.            // }
  543.             Inter_RamTable[band] = RF_INTER_SLOT_RAMP_Obj.Inter_RamTable[band];
  544.         }
  545.         if( InterRampDataChange( &Inter_RamTable[m_eCurBand], &OldInter_RamTable[m_eCurBand] ) )
  546.         {
  547.             for(band=0; band<total_band_num; band++)
  548.             {
  549.                 OldInter_RamTable[band] = Inter_RamTable[band];
  550.             }
  551.             PlotCurve( PLOT_INTER_RAMP_GRID | PLOT_INTER_RAMP_PROFILE_CURVE );
  552.         }
  553.         ReDrawFields(DRAW_INTER_RAMP);
  554.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Upload inter slot ramp profile from flash successfully";
  555.     }
  556.     else  if( state==STATE_INTER_SLOT_RAMP_FAIL )
  557.     {
  558.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Upload inter slot ramp profile from flash fail, please check the version of load and NVRAM database are same.";
  559.         Application->MessageBox( "Execution Failure : Upload APC profile from flash, please check the version of load and NVRAM database are same.", "FAILURE", MB_OK );
  560.     }
  561.     else  if( state==STATE_INTER_SLOT_RAMP_TIMEOUT )
  562.     {
  563.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Upload inter slot ramp profile from flash timeout";
  564.         Application->MessageBox( "Execution Timeout : Upload APC profile from flash", "TIMEOUT", MB_OK );
  565.     }
  566.     else  if( state==STATE_INTER_SLOT_RAMP_STOP )
  567.     {
  568.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Upload inter slot ramp profile from flash stop";
  569.     }
  570. }
  571. //--------------------------------------------------------------------------
  572. void __fastcall TfrmInterSlotRampSetting::btnChangeDBClick(TObject *Sender)
  573. {
  574.     frmMainSel->mnuFDMDatabaseClick(Sender);
  575.     if( ! NVRAMMan->Get_IsInit() )
  576.     {
  577.         sbISR->Panels->Items[0]->Text = (AnsiString) "  NVRAM database file initialization fail";
  578.         Application->MessageBox( "Execution Failure : NVRAM database file initialization fail", "FAILURE", MB_OK );
  579.         return;
  580.     }
  581.     sbISR->Panels->Items[0]->Text = (AnsiString) " Change NVRAM database file successfully";
  582. }
  583. //---------------------------------------------------------------------------
  584. //==============================================================================
  585. void TfrmInterSlotRampSetting::ClearImage( void )
  586. {
  587.     imRampProfile->Canvas->Brush->Color = clWhite;
  588.     imRampProfile->Canvas->Brush->Style = bsSolid;
  589.     imRampProfile->Canvas->FillRect(Rect(0,0,imRampProfile->Width,imRampProfile->Height));
  590. }
  591. //--------------------------------------------------------------------------
  592. void TfrmInterSlotRampSetting::PlotCurve( int plot_mask )
  593. {
  594.     // plot grid
  595.     double min_y, max_y;
  596.     if( plot_mask & PLOT_INTER_RAMP_GRID )
  597.     {
  598.             PlotGrid( 0, 32, 0, 255);
  599.     }
  600.     // plot ramp profile curve
  601.     if( plot_mask & PLOT_INTER_RAMP_PROFILE_CURVE )
  602.     {
  603.         PlotRampProfileCurve();
  604.         PlotRampProfileCircle();
  605.     }
  606. }
  607. //---------------------------------------------------------------------------
  608. void TfrmInterSlotRampSetting::PlotGrid(int min_x, int max_x, int min_y, int max_y)
  609. {
  610.      int i;
  611.      double range;
  612.      ClearImage();
  613.      max_y_grid = max_y;
  614.      min_y_grid = min_y - 40;
  615.      range = max_y_grid - min_y_grid;
  616.      for( i=1; i<=100; i++ )
  617.      {
  618.          vScale = i*INTER_RAMP_VSCALE_UNIT;
  619.          if( vScale * 8 > range)
  620.          {
  621.             break;
  622.          }
  623.      }
  624.      vDistance = imRampProfile->Height / (range +10) * vScale;
  625.      Segments = (range / vScale) + 1;
  626.     imRampProfile->Canvas->Pen->Color = clBlack;
  627.     imRampProfile->Canvas->Pen->Width = 1;
  628.     imRampProfile->Canvas->Pen->Style = psDot;
  629.     // plot horizotal grid & label
  630.     for( i=0; i<Segments && i<INTER_RAMP_VERTICAL_LABEL_NUM; i++ )
  631.     {
  632.         if( (i*vDistance + vStart) > imRampProfile->Height || (i*vScale) > MAX_INTER_RAMP_DATA_VALUE )
  633.         {
  634.             lblVertical[i]->Visible = true;
  635.             lblVertical[i]->Top = imRampProfile->Top + imRampProfile->Height - vDistance*(1.0*MAX_INTER_RAMP_DATA_VALUE/vScale) - vStart - 5 ;
  636.             lblVertical[i]->Left = imRampProfile->Left - 20;
  637.             lblVertical[i]->Caption = (AnsiString) "255";
  638.             imRampProfile->Canvas->MoveTo( 1, imRampProfile->Height - vDistance*(1.0*MAX_INTER_RAMP_DATA_VALUE/vScale) - vStart );
  639.             imRampProfile->Canvas->LineTo( 1 + imRampProfile->Width, imRampProfile->Height - vDistance*(1.0*MAX_INTER_RAMP_DATA_VALUE/vScale) - vStart );
  640.             Segments = i;
  641.             break;
  642.         }
  643.         lblVertical[i]->Visible = true;
  644.         lblVertical[i]->Top =  imRampProfile->Top + imRampProfile->Height - i*vDistance - vStart - 5 ;
  645.         lblVertical[i]->Left = imRampProfile->Left - 20;
  646.         lblVertical[i]->Caption = IntToStr( i*vScale );
  647.         imRampProfile->Canvas->MoveTo( 1, imRampProfile->Height - i*vDistance - vStart );
  648.         imRampProfile->Canvas->LineTo( 1 + imRampProfile->Width, imRampProfile->Height - i*vDistance - vStart );
  649.     }
  650.     for(i=Segments+1; i<INTER_RAMP_VERTICAL_LABEL_NUM; i++)
  651.     {
  652.         lblVertical[i]->Visible = false;
  653.     }
  654.     // plot vertical grid
  655.     lblRampH[0]->Left = imRampProfile->Left - 5;
  656.     lblRampH[0]->Top = imRampProfile->Top + imRampProfile->Height + 5;
  657.     lblRampH[0]->Caption = IntToStr(0);
  658.     hDistance = imRampProfile->Width / INTER_RAMP_SAMPLE_NUM ;
  659.     for( i=1; i<INTER_RAMP_SAMPLE_NUM; i++ )
  660.     {
  661.         imRampProfile->Canvas->MoveTo( i * hDistance, 1 );
  662.         imRampProfile->Canvas->LineTo( i * hDistance, imRampProfile->Height );
  663.         if( i<INTER_RAMP_SAMPLE_NUM) // ramp
  664.         {
  665.             lblRampH[i]->Left = imRampProfile->Left + i * hDistance - 5;
  666.             lblRampH[i]->Top = imRampProfile->Top + imRampProfile->Height + 5;
  667.             lblRampH[i]->Caption = IntToStr(i);
  668.         }
  669.     }
  670. }
  671. //---------------------------------------------------------------------------
  672. void TfrmInterSlotRampSetting::PlotRampProfileCurve( void )
  673. {
  674.     int i;
  675.    // isOrgCurvePlot = true;
  676.     imRampProfile->Canvas->Pen->Color = clBlue;
  677.     imRampProfile->Canvas->Pen->Width = 1;
  678.     imRampProfile->Canvas->Pen->Style = psSolid;
  679.     // ramp
  680.     imRampProfile->Canvas->MoveTo( 1, imRampProfile->Height - vDistance*(1.0*(Inter_RamTable[m_eCurBand].interRampData[0])/vScale) - vStart )  ;
  681.     for( i=0; i<INTER_RAMP_SAMPLE_NUM; i++)
  682.     {
  683.         InterRampPoint.x[i] = hDistance*i;
  684.         InterRampPoint.y[i] = imRampProfile->Height - vDistance*(1.0*( Inter_RamTable[m_eCurBand].interRampData[i])/vScale )- vStart;
  685.         imRampProfile->Canvas->LineTo( InterRampPoint.x[i], InterRampPoint.y[i] );
  686.     }
  687.     // midamble
  688.    // imRampProfile->Canvas->Pen->Color = clPurple;
  689.    // imRampProfile->Canvas->Pen->Width = 1;
  690.    // imRampProfile->Canvas->Pen->Style = psSolid;
  691.    // imRampProfile->Canvas->MoveTo( hDistance*(INTER_RAMP_SAMPLE_NUM-1), imRampProfile->Height - vDistance*(1.0*MAX_INTER_RAMP_DATA_VALUE/vScale )- vStart );
  692.    // imRampProfile->Canvas->LineTo( hDistance*(INTER_RAMP_SAMPLE_NUM-1), imRampProfile->Height - vDistance*(1.0*MAX_INTER_RAMP_DATA_VALUE/vScale )- vStart  );
  693. }
  694. //------------------------------------------------------------------------------
  695. void  TfrmInterSlotRampSetting::PlotRampProfileCircle( void )
  696. {
  697.     imRampProfile->Canvas->Brush->Color = clLime;
  698.     // ramp
  699.     for(int i=0; i<INTER_RAMP_SAMPLE_NUM; i++)
  700.     {
  701.         imRampProfile->Canvas->Ellipse(InterRampPoint.x[i]-INTER_RAMP_CIRCLE_RADIOUS, InterRampPoint.y[i]-INTER_RAMP_CIRCLE_RADIOUS, InterRampPoint.x[i]+INTER_RAMP_CIRCLE_RADIOUS, InterRampPoint.y[i]+INTER_RAMP_CIRCLE_RADIOUS);
  702.     }
  703. }
  704. //---------------------------------------------------------------------------
  705. bool TfrmInterSlotRampSetting::InterRampDataChange(l1cal_interRampData_T  *p_Inter_RamTable1, l1cal_interRampData_T  *p_Inter_RamTable2)
  706. {
  707.     for(int i=0; i<INTER_RAMP_SAMPLE_NUM; i++)
  708.     {
  709.         if( p_Inter_RamTable1->interRampData[i] != p_Inter_RamTable2->interRampData[i] )
  710.         {
  711.             return true;
  712.         }
  713.     }
  714.     return false;
  715. }
  716. //------------------------------------------------------------------------------
  717. void __fastcall TfrmInterSlotRampSetting::imRampProfileDragOver(
  718.       TObject *Sender, TObject *Source, int X, int Y, TDragState State,
  719.       bool &Accept)
  720. {
  721.     if( State == dsDragEnter )
  722.     {
  723.        CheckFields( );
  724.        // char buf[20];
  725.        // sprintf(buf, " (x=%d, y=%d) ", X, Y);
  726.        // sbAudioCal->Panels->Items[0]->Text = (AnsiString) buf;
  727.         // ramp
  728.         for(int i=0; i<INTER_RAMP_SAMPLE_NUM; i++)
  729.         {
  730.             if( InterRampPoint.x[i]-INTER_RAMP_CIRCLE_RADIOUS<=X && X<=InterRampPoint.x[i]+INTER_RAMP_CIRCLE_RADIOUS &&
  731.                 InterRampPoint.y[i]-INTER_RAMP_CIRCLE_RADIOUS<=Y && Y<=InterRampPoint.y[i]+INTER_RAMP_CIRCLE_RADIOUS )
  732.             {
  733.                 isInterRampCircleOnDrag = true;
  734.                 RampCircleOnDragIndex = i;
  735.                 if( btnTXStart->Tag == BTN_TAG_START )
  736.                 {
  737.                    p_MultiTxStop_Event = CreateEvent(NULL, TRUE, FALSE, NULL);
  738.                    ResetEvent( p_MultiTxStop_Event );
  739.                    btnTXStopClick( this ); // stop TX burst
  740.                    WaitForSingleObject( p_MultiTxStop_Event, 5000 );
  741.                 }
  742.                 return;
  743.             }
  744.         }
  745.     }
  746. }
  747. //---------------------------------------------------------------------------
  748. void __fastcall TfrmInterSlotRampSetting::imRampProfileEndDrag(
  749.       TObject *Sender, TObject *Target, int X, int Y)
  750. {
  751.     if( isInterRampCircleOnDrag )
  752.     {
  753.         int result;
  754.         if( X == 0 && Y == 0 ) // outside image
  755.         {
  756.             Application->MessageBox( " Destination coordinates is outside image range", "Warning", MB_OK );
  757.             return;
  758.         }
  759.         result = ImageRangeCheck(X, Y);
  760.         if( result == OUT_OF_TOP_RANGE )
  761.         {
  762.             Y = imRampProfile->Height - vDistance*(1.0*(255)/vScale) - vStart;
  763.         }
  764.         else if( result == OUT_OF_BOTTOM_RANGE )
  765.         {
  766.             Y = imRampProfile->Height - vStart;
  767.         }
  768.         if( isInterRampCircleOnDrag ) // ramp up
  769.         {
  770.             InterRampPoint.y[RampCircleOnDragIndex] = Y;
  771.             UpdateInterRampdata( RampCircleOnDragIndex );
  772.             isInterRampCircleOnDrag = false;
  773.         }
  774.         PlotCurve( PLOT_INTER_RAMP_GRID | PLOT_INTER_RAMP_PROFILE_CURVE );
  775.         ReDrawFields( DRAW_INTER_RAMP );
  776.         isDragTrigger = true;
  777.         imRampProfile->Enabled = false;
  778.         //p_TxStart_Event = CreateEvent(NULL, TRUE, FALSE, NULL);
  779.        // ResetEvent( p_TxStart_Event );
  780.         btnDownloadToFlashClick( this );
  781.         //WaitForSingleObject( p_TxStart_Event, 5000 );
  782.     }
  783. }
  784. //---------------------------------------------------------------------------
  785. void __fastcall TfrmInterSlotRampSetting::btnTXStartClick(TObject *Sender)
  786. {
  787.     
  788.     AnsiString  text;
  789.     if (1 == btnTXStart->Tag)
  790.     {
  791.         return;
  792.     }
  793.     frmRFTool->Force_RF_Stop();
  794.     TimeSlotMask = 0; // initial value
  795.     if (frmRFTool->cbTimeSlot0->Checked)
  796.     {
  797.         TimeSlotMask = TimeSlotMask | 0x01;
  798.     }
  799.     if (frmRFTool->cbTimeSlot1->Checked)
  800.     {
  801.         TimeSlotMask = TimeSlotMask | 0x02;
  802.     }
  803.     if (frmRFTool->cbTimeSlot2->Checked)
  804.     {
  805.         TimeSlotMask = TimeSlotMask | 0x04;
  806.     }
  807.     if (frmRFTool->cbTimeSlot3->Checked)
  808.     {
  809.         TimeSlotMask = TimeSlotMask | 0x08;
  810.     }
  811.     m_eCurBand = (E_BANDSEL) frmRFTool->cbxMultiSlotTxBand->ItemIndex;
  812.     Tsc = frmRFTool->cbxMultiSlotTxTSC->ItemIndex;
  813.     CS[0]  = frmRFTool->cbxCSTS0->ItemIndex + 1;
  814.     CS[1]  = frmRFTool->cbxCSTS1->ItemIndex + 1;
  815.     CS[2]  = frmRFTool->cbxCSTS2->ItemIndex + 1;
  816.     CS[3]  = frmRFTool->cbxCSTS3->ItemIndex + 1;
  817.    // text = edtTestArfcn->Text;           if( !IsValidARFCN( text, m_eCurBand, arfcn ) )      {  edtArfcnCheck(edtTestArfcn);      return;   }
  818.     text = frmRFTool->edtPCLTS0->Text;              if( !IsValidPCL( text, m_eCurBand, PCL[0] ) )       {  PCL[0]=10;                  return;   }
  819.     text = frmRFTool->edtPCLTS1->Text;              if( !IsValidPCL( text, m_eCurBand, PCL[1] ) )       {  PCL[1]=10;                  return;   }
  820.     text = frmRFTool->edtPCLTS2->Text;              if( !IsValidPCL( text, m_eCurBand, PCL[2] ) )       {  PCL[2]=10;                  return;   }
  821.     text = frmRFTool->edtPCLTS3->Text;              if( !IsValidPCL( text, m_eCurBand, PCL[3] ) )       {  PCL[3]=10;                  return;   }
  822.     text = frmRFTool->edtMultiSlotTxAFC->Text;      if( !IsValidAFC( text, m_sAfcDac ) )                {  m_sAfcDac = 4100;   return;   }
  823.     text = frmRFTool->edtMultiSlotTxTA->Text;       if( !IsValidTA( text, TA ) )                     {  TA = 0;           return;   }
  824.     if( frmRFTool->gbMultiSlotTxBurstType->Visible )
  825.     {
  826.         isEDGEsupport = true;
  827.         if( frmRFTool->rbMultiSlotTxNBAll0->Checked )       Pattern = NB_TX_ALL_ZEROS_WITHOUT_TSC;
  828.         else if( frmRFTool->rbMultiSlotTxNBAll1->Checked )  Pattern = NB_TX_ALL_ONES_WITHOUT_TSC;
  829.         else if( frmRFTool->rbMultiSlotTxNB->Checked )      Pattern = NB_TX_RANDOM_WITH_TSC;
  830.         else                                                Pattern = NB_TX_PATTERN_WITHOUT_TSC;
  831.         if( frmRFTool->rbMultiSlotTxPattern->Checked )
  832.         {
  833.              text = frmRFTool->edtMultiSlotTxPattern->Text;       if( !IsValidMultiSlotTxPattern( text, Pattern_data ) )                  {  Pattern_data = 0101010101010101;            return;   }
  834.         }
  835.     }
  836.     else
  837.     {
  838.         isEDGEsupport = false;
  839.     }
  840.     CurrentPageLock();
  841.     frmRFTool->CurrentPageLock();
  842.     S_MULTI_SLOT_TX_T multi_slot_tx;
  843.     multi_slot_tx.b_MultiSlotTXExSupport = m_bMultiSlotTxExSupport;
  844.     multi_slot_tx.e_bandsel = (E_BANDSEL)m_eCurBand;
  845.     multi_slot_tx.req.arfcn = m_sTestArfcn[m_eCurBand];
  846.     multi_slot_tx.req.bsic  = Tsc;
  847.     multi_slot_tx.req.timeSlotmask = TimeSlotMask;
  848.     for (int i=0; i<4; i++)
  849.     {
  850.         multi_slot_tx.req.powerLev[i] = PCL[i];
  851. multi_slot_tx.req.cs[i]       = (CodingScheme) CS[i];
  852.     }
  853.     multi_slot_tx.req.ta = TA;
  854.     multi_slot_tx.req.frames = -99;
  855.     multi_slot_tx.req.dacValue = m_sAfcDac;
  856.     multi_slot_tx.req.pattern = (APCTxPattern) Pattern;
  857.     multi_slot_tx.req.pattern_data = Pattern_data;
  858.     RF_MULTI_SLOT_TX_Obj->ConfirmCallback   = ::ConfirmCallback_MultiSlotTX;
  859.     RF_MULTI_SLOT_TX_Obj->REQ_Start(multi_slot_tx);
  860.     sbISR->Panels->Items[0]->Text = (AnsiString) "  Multi slot TX progressing";
  861. }
  862. //---------------------------------------------------------------------------
  863. void __fastcall TfrmInterSlotRampSetting::btnTXStopClick(TObject *Sender)
  864. {
  865.     if(btnTXStart->Tag==BTN_TAG_START)
  866.     {
  867.         frmRFTool->Force_RF_Stop();
  868.         frmRFTool->pctlToolSel->Enabled = true;
  869.         frmRFTool->btnTXStart->Enabled = true;
  870.         btnTXStart->Tag = 0;
  871.         CurrentPageReset();
  872.         frmRFTool->CurrentPageReset();
  873.         sbISR->Panels->Items[0]->Text = (AnsiString) "  Multi slot TX stop";
  874.     }
  875. }
  876. //---------------------------------------------------------------------------
  877. //==============================================================================
  878. int  TfrmInterSlotRampSetting::ImageRangeCheck( int X, int Y )
  879. {
  880.     sRfImageRange  ImageRange;
  881.     getImageValidRange(&ImageRange);
  882.     if(  Y <= ImageRange.LeftTop.y )
  883.     {
  884.         return  OUT_OF_TOP_RANGE;
  885.     }
  886.     else if(  Y >= ImageRange.RightBottom.y )
  887.     {
  888.         return  OUT_OF_BOTTOM_RANGE;
  889.     }
  890.     return  IN_RANGE;
  891. }
  892. //==============================================================================
  893. void  TfrmInterSlotRampSetting::UpdateInterRampdata( int idx )
  894. {
  895.     if( idx >= 0 )
  896.     {
  897.         Inter_RamTable[m_eCurBand].interRampData[idx] = 1.0*(imRampProfile->Height -InterRampPoint.y[idx] - vStart)*vScale/vDistance;
  898.         OldInter_RamTable[m_eCurBand].interRampData[idx] = Inter_RamTable[m_eCurBand].interRampData[idx];
  899.     }
  900. }
  901. //-------------------------------------------------------------------------
  902. void  TfrmInterSlotRampSetting::getImageValidRange( sRfImageRange  *p_ImageRange )
  903. {
  904.     p_ImageRange->LeftTop.x = 1;
  905.     p_ImageRange->LeftTop.y = imRampProfile->Height - vDistance*(1.0*MAX_INTER_RAMP_DATA_VALUE/vScale) - vStart;
  906.     p_ImageRange->RightBottom.x = (INTER_RAMP_SAMPLE_NUM-1)*hDistance;
  907.     p_ImageRange->RightBottom.y = imRampProfile->Height - vStart;
  908. }
  909. //==============================================================================
  910. void  TfrmInterSlotRampSetting::CurrentPageLock( void )
  911. {
  912.     int i;
  913.     // button
  914.     btnTXStart->Enabled = false;
  915.     btnTXStart->Tag = BTN_TAG_START;
  916.     btnLeft->Enabled = false;
  917.     btnRight->Enabled = false;
  918.     btnUploadFromFlash->Enabled = false;
  919.     btnDownloadToFlash->Enabled = false;
  920.     btnChangeDB->Enabled = false;
  921.     btnLoadFromFile->Enabled = false;
  922.     btnSaveToFile->Enabled = false;
  923.     for(i=0; i<INTER_RAMP_SAMPLE_NUM; i++ )
  924.     {
  925.         edtInterRamp[i]->Enabled = false;
  926.     }
  927. }
  928. //---------------------------------------------------------------------------
  929. void  TfrmInterSlotRampSetting::CurrentPageReset( void )
  930. {
  931.     int i;
  932.     // button
  933.     btnTXStart->Enabled = true;
  934.     btnTXStart->Tag = BTN_TAG_STOP;
  935.     btnLeft->Enabled = true;
  936.     btnRight->Enabled = true;
  937.     btnUploadFromFlash->Enabled = true;
  938.     btnDownloadToFlash->Enabled = true;
  939.     btnChangeDB->Enabled = true;
  940.     btnLoadFromFile->Enabled = true;
  941.     btnSaveToFile->Enabled = true;
  942.     for(i=0; i<INTER_RAMP_SAMPLE_NUM; i++ )
  943.     {
  944.         edtInterRamp[i]->Enabled = true;
  945.     }
  946. }
  947. //---------------------------------------------------------------------------
  948. void  TfrmInterSlotRampSetting::Set_RF_MULTI_SLOT_TX_Obj( CRFMULTISLOTTX   *rf_multi_slot_tx_obj)
  949. {
  950.     RF_MULTI_SLOT_TX_Obj = rf_multi_slot_tx_obj;
  951. }
  952. //--------------------------------------------------------------------------
  953. void __fastcall TfrmInterSlotRampSetting::edtTestArfcnCheck(TObject *Sender)
  954. {
  955.     short sdata;
  956.     AnsiString  text;
  957.     TEdit *edit = (TEdit*)Sender;
  958.     char  hint[][256] =
  959.     {   " value shall be 0~124 or 975~1023 ",
  960.        " value shall be 512~885 ",
  961.        " value shall be 512~810 ",
  962.        " value shall be 128~251 ",
  963.     };
  964.     text = edit->Text;
  965.     if (!IsValidARFCN(text, m_eCurBand, sdata))
  966.     {
  967.         ShowHintLabel(edit, hint[m_eCurBand]);
  968.         edit->SetFocus();
  969.         return;
  970.     }
  971.     m_sTestArfcn[m_eCurBand] = sdata;
  972. }
  973. //---------------------------------------------------------------------------
  974. void __fastcall TfrmInterSlotRampSetting::FormClose(TObject *Sender,
  975.       TCloseAction &Action)
  976. {
  977.     if( btnTXStart->Tag == 1)
  978.     {
  979.         btnTXStopClick(this);
  980.     }    
  981. }
  982. //---------------------------------------------------------------------------