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

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.  *   rf_afc.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   RF AFC 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. #include <IniFiles.hpp>
  66. #pragma hdrstop
  67. #ifndef  _RF_COMMON_H_
  68. #include "rf_common.h"
  69. #endif
  70. #ifndef  _RF_AFC_H_
  71. #include "rf_afc.h"
  72. #endif
  73. #ifndef  _MAN_ACTIVE_H_
  74. #include "man_active.h"
  75. #endif
  76. #ifndef  _MAN_FDM_H_
  77. #include "man_fdm.h"
  78. #endif
  79. #ifndef  _MAN_HANDLE_H_
  80. #include "man_handle.h"
  81. #endif
  82. // NVRAM
  83. #ifndef  _NVRAM_VER_H_
  84. #include "nvram_ver.h"
  85. #endif
  86. //===========================================================================
  87. static CRFAFC* g_rf_afc_ptr;
  88. static bool g_bIsRunning = false;
  89. //===========================================================================
  90. static void REQ_SelectBand(void)
  91. {  g_rf_afc_ptr->REQ_SelectBand( );
  92. }
  93. //------------------------------------------------------------------------------
  94. static void __stdcall CNF_SelectBand( const unsigned char cnf, const short token, void *usrData )
  95. {
  96.    g_rf_afc_ptr->CNF_SelectBand( cnf, token, usrData );
  97. }
  98. //------------------------------------------------------------------------------
  99. static void  REQ_MeasureAFC( void )
  100. {  g_rf_afc_ptr->REQ_MeasureAFC( );
  101. }
  102. //------------------------------------------------------------------------------
  103. static void __stdcall CNF_MeasureAFC(const RfAfc_Cnf *cnf, const short token, void *usrData)
  104. {
  105.   g_rf_afc_ptr->CNF_MeasureAFC( cnf, token, usrData);
  106. }
  107. //------------------------------------------------------------------------------
  108. static  void  CNF_ReadFromNVRAM( void )
  109. {
  110.   g_rf_afc_ptr->CNF_ReadFromNVRAM();
  111. }
  112. //------------------------------------------------------------------------------
  113. static void  CNF_WriteToNVRAM( void )
  114. {
  115.   g_rf_afc_ptr->CNF_WriteToNVRAM( );
  116. }
  117. //------------------------------------------------------------------------------
  118. static void  REQ_TimeOut( void )
  119. {  g_rf_afc_ptr->REQ_TimeOut();
  120. }
  121. //------------------------------------------------------------------------------
  122. static void  REQ_Finish( void )
  123. {   g_rf_afc_ptr->REQ_Finish();
  124. }
  125. //------------------------------------------------------------------------------
  126. static void  REQ_SetAfcDacValue(short dacValue)
  127. {   g_rf_afc_ptr->REQ_SetAfcDacValue(dacValue);
  128. }
  129. //------------------------------------------------------------------------------
  130. static void __stdcall CNF_RfSet_AFCDACValue(const unsigned char cnf, const short token, void *usrData)
  131. {   g_rf_afc_ptr->CNF_RfSet_AFCDACValue(cnf, token, usrData);
  132. }
  133. //--------------------------------------------------------------------------
  134. // continuous sine wave
  135. static void  Query_ContSineSupport( void )
  136. {
  137.     g_rf_afc_ptr->Query_ContSineSupport();
  138. }
  139. //--------------------------------------------------------------------------
  140. static void  REQ_SetAfcSinWaveDetection(void)
  141. {
  142.     g_rf_afc_ptr->REQ_SetAfcSinWaveDetection();
  143. }
  144. //===========================================================================
  145. CRFAFC::CRFAFC(void)
  146. {
  147.    g_bIsRunning = false;
  148.    ConfirmCallback = 0;
  149.     m_psRFReq_AFC = NULL;
  150.     m_iAfcBufSize = 0;
  151.     m_cAfcBuf = NULL;
  152.     m_sEvalAfcDac[0]  = 4100;
  153.     m_sEvalAfcDac[1]  = 4100;
  154.     m_iEvalFreqErr[0] = 0;
  155.     m_iEvalFreqErr[1] = 0;
  156. }
  157. //---------------------------------------------------------------------------
  158. CRFAFC::~CRFAFC()
  159. {
  160.    g_bIsRunning = false;
  161.    ConfirmCallback = 0;
  162.    if(m_psRFReq_AFC)
  163.    {
  164.       delete m_psRFReq_AFC;
  165.       m_psRFReq_AFC = NULL;
  166.    }
  167.    if(m_cAfcBuf)
  168.    {
  169.       delete [] m_cAfcBuf;
  170.       m_cAfcBuf = NULL;
  171.    }
  172. }
  173. //---------------------------------------------------------------------------
  174. void CRFAFC::REQ_Finish(void)
  175. {
  176.     if (!g_bIsRunning)
  177.     {
  178.         return;
  179.     }
  180.     Confirm(METAAPP_SUCCESS);
  181. }
  182. //---------------------------------------------------------------------------
  183. void CRFAFC::REQ_Stop(void)
  184. {
  185.     if (!g_bIsRunning)
  186.     {
  187.         return;
  188.     }
  189.     META_Cancel_r(m_META_HANDLE_Obj.Get_MainHandle(), m_sRFID_AFC);
  190.     Confirm(METAAPP_STOP);
  191. }
  192. //---------------------------------------------------------------------------
  193. void CRFAFC::REQ_TimeOut(void)
  194. {
  195.     if (!g_bIsRunning)
  196.     {
  197.         return;
  198.     }
  199.     META_Cancel_r( m_META_HANDLE_Obj.Get_MainHandle(), m_sRFID_AFC );
  200.     Confirm( METAAPP_TIMEOUT );
  201. }
  202. //---------------------------------------------------------------------------
  203. void CRFAFC::Confirm(E_METAAPP_RESULT_T confirm_state)
  204. {
  205.     if (!g_bIsRunning)
  206.     {
  207.         return;
  208.     }
  209.     if (confirm_state != METAAPP_SECTION_OK)
  210.     {
  211.         g_bIsRunning = false;
  212.     }
  213.         
  214.     if (NULL == ConfirmCallback)
  215.     {
  216.         return;
  217.     }
  218.     m_eConfirmState = confirm_state;
  219.     ActiveMan->SetActiveFunction(ConfirmCallback);
  220. }
  221. //===========================================================================
  222. void  CRFAFC::REQ_Start( int band, int arfcn, int gain, int afc_dac, short test_count )
  223. {
  224.     g_rf_afc_ptr = this;
  225.     g_bIsRunning  = true;
  226.         m_iBand = band;
  227.        m_sArfcn = arfcn;
  228.         m_iGain = gain;
  229.       m_sAfcDac = afc_dac;
  230.    m_sTestCount = test_count;
  231.    m_bAfcSweep = false;
  232.    ActiveMan->SetActiveFunction( ::REQ_SelectBand );
  233. }
  234. //--------------------------------------------------------------------------------------------------
  235. void  CRFAFC::REQ_Start( int band, int arfcn, int gain, int minafc_dac, short test_count, int maxafc_dac, int stepafc_dac )
  236. {
  237.     g_rf_afc_ptr = this;
  238.     g_bIsRunning  = true;
  239.     m_iBand = band;
  240.     m_sArfcn = arfcn;
  241.     m_iGain = gain;
  242.     m_sAfcDac = minafc_dac;
  243.     m_sTestCount = test_count;
  244.     m_sCurAFC = minafc_dac;
  245.     m_sAFCMin = minafc_dac;
  246.     m_sAFCMax = maxafc_dac;
  247.      m_sAFCStep = stepafc_dac;
  248.     m_bAfcSweep = true;
  249.     ActiveMan->SetActiveFunction( ::REQ_SelectBand );
  250. }
  251. //---------------------------------------------------------------------------
  252. void  CRFAFC::REQ_SelectBand( void )
  253. {
  254.    if(!g_bIsRunning)  return;
  255.    unsigned char select_PCS1900;
  256.    if(m_iBand==BANDSEL_PCS1900)
  257.       select_PCS1900 = 1;
  258.    else
  259.       select_PCS1900 = 0;
  260.    META_RESULT  MetaResult = META_Rf_SelectFrequencyBand1900_r( m_META_HANDLE_Obj.Get_MainHandle(), select_PCS1900, ::CNF_SelectBand, &m_sRFID_AFC, NULL );
  261.    if(MetaResult!=META_SUCCESS)
  262.    {  Confirm( METAAPP_FAIL );  return;  }
  263. }
  264. //-------------------------------------
  265. void __stdcall CRFAFC::CNF_SelectBand( const unsigned char cnf, const short token, void *usrData )
  266. {
  267.    if(!g_bIsRunning)  return;
  268.    if(cnf==false)
  269.    {  Confirm( METAAPP_FAIL );  return;  }
  270.    ActiveMan->SetActiveFunction( ::REQ_MeasureAFC );
  271. }
  272. //---------------------------------------------------------------------------
  273. void  CRFAFC::REQ_MeasureAFC( void )
  274. {
  275.     if (!g_bIsRunning)
  276.     {
  277.         return;
  278.     }
  279.     if (NULL == m_psRFReq_AFC)
  280.     {
  281.         m_psRFReq_AFC = new RfAfc_Req;
  282.     }
  283.     if (!m_bAfcSweep)
  284.     {
  285.         m_psRFReq_AFC->arfcn      = m_sArfcn;
  286.         m_psRFReq_AFC->gain       = m_iGain;
  287.         m_psRFReq_AFC->dacValue   = m_sAfcDac;
  288.         m_psRFReq_AFC->testNumber = m_sTestCount;
  289.         META_RESULT  MetaResult = META_Rf_AFC_r( m_META_HANDLE_Obj.Get_MainHandle(), m_psRFReq_AFC, ::CNF_MeasureAFC, &m_sRFID_AFC, NULL );
  290.         if (MetaResult != META_SUCCESS)
  291.         {
  292.             Confirm(METAAPP_FAIL);
  293.             return;
  294.         }
  295.     }
  296.     else
  297.     {
  298.        if( m_bHasMeasured )
  299.        {
  300.         m_sDisplayAFC = m_sCurAFC -  m_sAFCStep;
  301.         Confirm( METAAPP_SECTION_OK );
  302.        }
  303.        m_psRFReq_AFC->arfcn      = m_sArfcn;
  304.        m_psRFReq_AFC->gain       = m_iGain;
  305.        m_psRFReq_AFC->dacValue   = m_sCurAFC;
  306.        m_psRFReq_AFC->testNumber = m_sTestCount;
  307.        m_bHasMeasured = false;
  308.        META_RESULT  MetaResult = META_Rf_AFC_r( m_META_HANDLE_Obj.Get_MainHandle(), m_psRFReq_AFC, ::CNF_MeasureAFC, &m_sRFID_AFC, NULL );
  309.         if (MetaResult != META_SUCCESS)
  310.         {
  311.             Confirm(METAAPP_FAIL);
  312.             return;
  313.         }
  314.     }
  315.     m_sCurAFC +=  m_sAFCStep;
  316.     if (m_bAfcSweep)
  317.     {
  318.         if (m_sCurAFC > (m_sAFCMax +  m_sAFCStep))
  319.         {
  320.             REQ_Finish();
  321.             return;
  322.         }
  323.     }
  324. }
  325. //-------------------------------------
  326. void __stdcall CRFAFC::CNF_MeasureAFC(const RfAfc_Cnf *cnf, const short token, void *usrData)
  327. {
  328.     if (!g_bIsRunning)
  329.     {
  330.         return;
  331.     }
  332.     //int i = 0;
  333.     if (!m_bAfcSweep)
  334.     {
  335.         if (STATUS_AFC_OK == (E_AFC_STATUS_T) cnf->ok)
  336.         {
  337.             m_sRFCnf_AFC = *cnf;
  338.             if (cnf->fcb_ok_number)
  339.             {
  340.                 m_sEvalAfcDac[0]  = m_sEvalAfcDac[1];
  341.                 m_iEvalFreqErr[0] = m_iEvalFreqErr[1];
  342.                 m_sEvalAfcDac[1]  = m_sAfcDac;
  343.                 m_iEvalFreqErr[1] = cnf->freqOffset;
  344.             }
  345.             ActiveMan->SetActiveFunction( ::REQ_Finish );
  346.         }
  347.         else
  348.         {
  349.              Confirm(METAAPP_FAIL);
  350.              return;
  351.         }
  352.     }
  353.     else
  354.     {
  355.         m_bHasMeasured = true;
  356.         if (cnf->ok == STATUS_AFC_OK)
  357.         {
  358.             m_sRFCnf_AFC = *cnf;
  359.             ActiveMan->SetActiveFunction( ::REQ_MeasureAFC );
  360.         }
  361.         else
  362.         {
  363.             Confirm( METAAPP_FAIL );
  364.             return;
  365.         }
  366.     }
  367. }
  368. //===========================================================================
  369. void CRFAFC::REQ_Read_From_NVRAM_Start(void)
  370. {
  371.     g_rf_afc_ptr = this;
  372.     g_bIsRunning = true;
  373.     m_bDownloadTrigger = false;
  374.     REQ_Read_From_NVRAM();
  375. }
  376. //--------------------------------------------------------------------------
  377. void CRFAFC::REQ_Read_From_NVRAM(void)
  378. {
  379.     if (!g_bIsRunning)
  380.     {
  381.         return;
  382.     }
  383.     if (NULL == m_cAfcBuf)
  384.     {
  385.         META_RESULT  MetaResult = META_NVRAM_GetRecLen( "NVRAM_EF_L1_AFCDATA_LID",
  386.                                                         &m_iAfcBufSize );
  387.         if (MetaResult!=META_SUCCESS)
  388.         {
  389.              Confirm(METAAPP_FAIL);
  390.              return;
  391.         }
  392.         m_cAfcBuf = new  char[m_iAfcBufSize];
  393.     }
  394.     NVRAMMan->ConfirmCallback = ::CNF_ReadFromNVRAM;
  395.     NVRAMMan->REQ_ReadNVRAM_Start("NVRAM_EF_L1_AFCDATA_LID",
  396.                                1,
  397.                                   m_iAfcBufSize,
  398.                                   m_cAfcBuf);
  399. }
  400. //-------------------------------------
  401. void  CRFAFC::CNF_ReadFromNVRAM(void)
  402. {
  403.     if(!g_bIsRunning)  return;
  404.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  405.     switch (state)
  406.     {
  407.         case METAAPP_SUCCESS:
  408.         {
  409.             if (m_bDownloadTrigger)
  410.             {
  411.                 REQ_Write_To_NVRAM();
  412.             }
  413.             else
  414.             {
  415.                 META_RESULT  MetaResult = META_NVRAM_GetRecFieldValue("NVRAM_EF_L1_AFCDATA_LID",
  416.                                                                   "dacValue",
  417.                                                                   m_cAfcBuf,
  418.                                                                   m_iAfcBufSize,
  419.                                                                   &m_sAfcResult.s_InitAfcDac,
  420.                                                                   sizeof(m_sAfcResult.s_InitAfcDac));
  421.                 if (MetaResult != META_SUCCESS)
  422.                 {
  423.                     Confirm(METAAPP_FAIL);
  424.                     return;
  425.                 }
  426.                 MetaResult = META_NVRAM_GetRecFieldValue("NVRAM_EF_L1_AFCDATA_LID",
  427.                                                          "slopeInv",
  428.                                                          m_cAfcBuf,
  429.                                                          m_iAfcBufSize,
  430.                                                          &m_sAfcResult.i_AfcSlopeInv,
  431.                                                          sizeof(m_sAfcResult.i_AfcSlopeInv));
  432.                 if (MetaResult != META_SUCCESS)
  433.                 {
  434.                     Confirm(METAAPP_FAIL);
  435.                     return;
  436.                 }
  437.                 ActiveMan->SetActiveFunction(::REQ_Finish);
  438.             }
  439.         }
  440.         break;
  441.         default:
  442.         {
  443.             Confirm(state);
  444.         }
  445.         break;
  446.     }
  447. }
  448. //===========================================================================
  449. void CRFAFC::REQ_Write_To_NVRAM_Start(void)
  450. {
  451.     g_rf_afc_ptr = this;
  452.     g_bIsRunning = true;
  453.     m_bDownloadTrigger = true;
  454.     REQ_Write_To_NVRAM();
  455. }
  456. //---------------------------------------------------------------------------
  457. void CRFAFC::REQ_Write_To_NVRAM(void)
  458. {
  459.     if (!g_bIsRunning)
  460.     {
  461.         return;
  462.     }
  463.     unsigned short lid_ver;
  464.     META_RESULT MetaResult;
  465.     MetaResult = META_NVRAM_GetLIDVersion("NVRAM_EF_L1_AFCDATA_LID", &lid_ver);
  466.     if (lid_ver > NVRAM_EF_L1_AFCDATA_LID_VERNO)
  467.     {
  468.         Confirm(METAAPP_NVRAM_LID_VER_NOT_SUPPORT);
  469.         return;
  470.     }
  471.     if (NULL == m_cAfcBuf)
  472.     {
  473.       META_RESULT  MetaResult = META_NVRAM_GetRecLen( "NVRAM_EF_L1_AFCDATA_LID",
  474.                                                        &m_iAfcBufSize);
  475.         if (MetaResult != META_SUCCESS)
  476.         {
  477.             Confirm( METAAPP_FAIL );
  478.             return;
  479.         }
  480.       m_cAfcBuf = new  char[m_iAfcBufSize];
  481.     }
  482.    unsigned short  sdata = (unsigned short)m_sAfcResult.s_InitAfcDac;
  483.    MetaResult = META_NVRAM_SetRecFieldValue( "NVRAM_EF_L1_AFCDATA_LID",
  484.                                             "dacValue",
  485.                                             m_cAfcBuf,
  486.                                             m_iAfcBufSize,
  487.                                             &sdata,
  488.                                             sizeof(sdata) );
  489.    if(MetaResult!=META_SUCCESS)
  490.    {  Confirm( METAAPP_FAIL );  return;  }
  491.    MetaResult = META_NVRAM_SetRecFieldValue( "NVRAM_EF_L1_AFCDATA_LID",
  492.                                             "slopeInv",
  493.                                             m_cAfcBuf,
  494.                                             m_iAfcBufSize,
  495.                                             &m_sAfcResult.i_AfcSlopeInv,
  496.                                             sizeof(m_sAfcResult.i_AfcSlopeInv) );
  497.    if(MetaResult!=META_SUCCESS)
  498.    {  Confirm( METAAPP_FAIL );  return;  }
  499.   NVRAMMan->ConfirmCallback = ::CNF_WriteToNVRAM;
  500.   NVRAMMan->REQ_WriteNVRAM_Start( "NVRAM_EF_L1_AFCDATA_LID",
  501.                                1, // only 1 record
  502.                                m_iAfcBufSize,
  503.                                m_cAfcBuf );
  504. }
  505. //-------------------------------------
  506. void CRFAFC::CNF_WriteToNVRAM(void)
  507. {
  508.     if (!g_bIsRunning)
  509.     {
  510.         return;
  511.     }
  512.    E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  513.    Confirm(state);
  514. }
  515. //===========================================================================
  516. bool  CRFAFC::AfcSectionExist( char *filename )
  517. {
  518.     TIniFile   *ini_file;
  519.     ini_file = new TIniFile( filename );
  520.     if( ini_file == NULL ) return false;
  521.     if( ini_file->SectionExists( "AFC control" ) )
  522.     {
  523.         return true;
  524.     }
  525.     return false;
  526. }
  527. //-----------------------------------------------------------------------------
  528. bool  CRFAFC::REQ_Read_From_File( char *filename )
  529. {
  530.     TIniFile   *ini_file;
  531.     AnsiString as_slope;
  532.     double  ddata;
  533.     ini_file = new TIniFile( filename );
  534.     if( ini_file == NULL )  return false;
  535. //    if( ini_file->SectionExists( "AFC control" ) == false )
  536. //        return false;
  537.     m_sAfcResult.s_InitAfcDac = ini_file->ReadInteger( "AFC control",
  538.                                        "Initial value",
  539.                                        4100 );
  540.     as_slope = ini_file->ReadString("AFC control",
  541.                                 "Slope",
  542.                                 "1.0");
  543.     ddata = atof(as_slope.c_str());
  544.     if (0 == ddata)
  545.     {
  546.         ddata=0.0000001;
  547.     }
  548.     ddata = AFC_SLOPE_SCALE/ddata;
  549.     ddata += (ddata>=0) ? 0.5 : -0.5 ;
  550.     m_sAfcResult.i_AfcSlopeInv = (int) ddata;
  551.     delete  ini_file;
  552.     return true;
  553. }
  554. //===========================================================================
  555. bool  CRFAFC::REQ_Write_To_File( char *filename )
  556. {
  557.     TIniFile   *ini_file;
  558.     char  str[20];
  559.     float  fdata;
  560.     ini_file = new TIniFile( filename );
  561.     if(ini_file == NULL)  return  false;
  562.     ini_file->WriteInteger( "AFC control",
  563.                             "Initial value",
  564.                             m_sAfcResult.s_InitAfcDac );
  565.     if( 0 == m_sAfcResult.i_AfcSlopeInv )  m_sAfcResult.i_AfcSlopeInv=1;
  566.     fdata = 1.0*AFC_SLOPE_SCALE/m_sAfcResult.i_AfcSlopeInv;
  567.     sprintf( str, "%.4f", fdata );
  568.     ini_file->WriteString( "AFC control",
  569.                            "Slope",
  570.                            str );
  571.     delete  ini_file;
  572.    
  573.     return  true;
  574. }
  575. //===========================================================================
  576. E_BANDSEL CRFAFC::Get_Band_Index(AnsiString  as_AFC_BAND )
  577. {
  578.     E_BANDSEL band_index;
  579.     if( as_AFC_BAND.AnsiCompareIC("GSM") == 0 )
  580.     {
  581.         band_index = BANDSEL_GSM900;
  582.     }
  583.     else if( as_AFC_BAND.AnsiCompareIC("DCS") == 0 )
  584.     {
  585.         band_index = BANDSEL_DCS1800;
  586.     }
  587.     else if( as_AFC_BAND.AnsiCompareIC("PCS") == 0 )
  588.     {
  589.         band_index = BANDSEL_PCS1900;
  590.     }
  591.     else if( as_AFC_BAND.AnsiCompareIC("GSM850") == 0 )
  592.     {
  593.         band_index = BANDSEL_GSM850;
  594.     }
  595.     else if( as_AFC_BAND.AnsiCompareIC("GSM400") == 0 )
  596.     {
  597.         band_index = BANDSEL_GSM400;
  598.     }
  599.     return band_index;
  600. }
  601. //---------------------------------------------------------------------------
  602. float  CRFAFC::Get_Afc_Slope_factor( int band_index )
  603. {
  604.     float Afc_Slope_factor;
  605.     switch( band_index )
  606.     {
  607.         case BANDSEL_GSM900:
  608.              Afc_Slope_factor = 1.0;
  609.         break;
  610.         case BANDSEL_DCS1800:
  611.              Afc_Slope_factor = 900.0/1800.0;
  612.         break;
  613.         case BANDSEL_PCS1900:
  614.              Afc_Slope_factor = 900.0/1900.0;
  615.         break;
  616.         case BANDSEL_GSM850:
  617.              Afc_Slope_factor = 900.0/850.0;
  618.         break;
  619.         case BANDSEL_GSM400:
  620.              Afc_Slope_factor = 900.0/400.0;
  621.         break;
  622.         default:
  623.              Afc_Slope_factor = 1.0;
  624.         break;
  625.     }
  626.     return Afc_Slope_factor;
  627. }
  628. //---------------------------------------------------------------------------
  629. void  CRFAFC::Evaluate( E_BANDSEL band_index )
  630. {
  631.     short  d0 = m_sEvalAfcDac[0];
  632.     short  d1 = m_sEvalAfcDac[1];
  633.     int  f0 = m_iEvalFreqErr[0];
  634.     int  f1 = m_iEvalFreqErr[1];
  635.     float fdata;
  636.     float Afc_Slope_factor = Get_Afc_Slope_factor(band_index);
  637.     if(f0-f1!=0)
  638.     {
  639.         fdata =  d0 - 1.0*f0*(d0-d1)/(f0-f1);
  640.         fdata += (fdata>=0) ? 0.5 : -0.5 ;
  641.         m_sEvalInitDac = (int)fdata;
  642.         fdata =  -1.0*(d0-d1)/(f0-f1)/Afc_Slope_factor*AFC_SLOPE_SCALE;
  643.         fdata += (fdata>=0) ? 0.5 : -0.5 ;
  644.         m_iEvalSlope = (int)fdata;
  645.         if(m_iEvalSlope==0)  m_iEvalSlope=1;
  646.     }
  647. }
  648. //===========================================================================
  649. void  CRFAFC::REQ_SetAfcDacValue(short dacValue)
  650. {
  651.     if(!g_bIsRunning)  return;
  652.     m_sRFReq_SetAfcDac.dacValue = dacValue;
  653.     META_Rf_SetAfcDacValue_r(m_META_HANDLE_Obj.Get_MainHandle(), &m_sRFReq_SetAfcDac, ::CNF_RfSet_AFCDACValue, &m_sRFID_AFC, NULL );
  654. }
  655. //---------------------------------------------------------------------------
  656. void __stdcall CRFAFC::CNF_RfSet_AFCDACValue(const unsigned char cnf, const short token, void *usrData)
  657. {
  658.     if(!g_bIsRunning)  return;
  659.     if(cnf==false)
  660.     {  Confirm( METAAPP_FAIL );  return;  }
  661.     ActiveMan->SetActiveFunction( ::REQ_Finish );
  662. }
  663. //===========================================================================
  664. /////////////////////////////         Query         /////////////////////////
  665. //===========================================================================
  666. bool CRFAFC::Query_ContSineSupport_Start(void)
  667. {
  668.     g_rf_afc_ptr = this;
  669.     g_bIsRunning = true;
  670.     bool support = Query_ContSineSupport();
  671.     return support;
  672. }
  673. //-------------------------------------------------------------------------
  674. bool CRFAFC::Query_ContSineSupport(void)
  675. {
  676.     META_RESULT  MetaResult = META_QueryIfFunctionSupportedByTarget_r(m_META_HANDLE_Obj.Get_MainHandle(), 500, "META_Rf_SetAfcSinWaveDetection");
  677.     if (MetaResult!=META_SUCCESS)
  678.     {
  679.         return false;
  680.     }
  681.     return  true;
  682. }
  683. //===========================================================================
  684. void  CRFAFC::REQ_SetAfcSinWaveDetection_Start(bool b_sinewave)
  685. {
  686.     g_rf_afc_ptr = this;
  687.     g_bIsRunning = true;
  688.     m_bSineWave = b_sinewave;
  689.     ActiveMan->SetActiveFunction( ::REQ_SetAfcSinWaveDetection );
  690. }
  691. //------------------------------------------------------------------------
  692. void  CRFAFC::REQ_SetAfcSinWaveDetection(void)
  693. {
  694.     if(!g_bIsRunning)  return;
  695.     AFC_SINWAVE_DETECTION_E  bIsAfcSinWaveOn;
  696.     bIsAfcSinWaveOn = m_bSineWave ? AFC_SINWAVE_ON : AFC_SINWAVE_OFF;
  697.     META_RESULT  MetaResult = META_Rf_SetAfcSinWaveDetection_r(m_META_HANDLE_Obj.Get_MainHandle(), 500, bIsAfcSinWaveOn);
  698.     if (MetaResult != META_SUCCESS)
  699.     {
  700.        Confirm(METAAPP_FAIL);
  701.        return;
  702.     }
  703.     ActiveMan->SetActiveFunction(::REQ_Finish);
  704. }
  705. //===========================================================================
  706. /////////////////////////////   Global information  /////////////////////////
  707. //===========================================================================
  708. E_METAAPP_RESULT_T CRFAFC::Get_ConfirmState(void)
  709. {
  710.     return m_eConfirmState;
  711. }
  712. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  713. RfAfc_Cnf  CRFAFC::Get_AfcCnf( void )
  714. {   return  m_sRFCnf_AFC;
  715. }
  716. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  717. short CRFAFC::Get_EvalAfcDac( int idx )
  718. {   return m_sEvalAfcDac[idx];
  719. }
  720. //---------------------------------------------------------------------------
  721. int CRFAFC::Get_EvalFreqErr( int idx )
  722. {   return  m_iEvalFreqErr[idx];
  723. }
  724. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  725. short CRFAFC::Get_DisplayAFC( void )
  726. {   return m_sDisplayAFC;
  727. }
  728. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  729. void CRFAFC::Get_AfcResult(S_AFC_RESULT& afc_result)
  730. {
  731.     afc_result = m_sAfcResult;
  732. }
  733. //---------------------------------------------------------------------------
  734. void CRFAFC::Set_AfcResult( S_AFC_RESULT afc_result )
  735. {   m_sAfcResult = afc_result;
  736. }
  737. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  738. short CRFAFC::Get_EvalInitDac( void )
  739. {   return  m_sEvalInitDac;
  740. }
  741. //---------------------------------------------------------------------------
  742. int CRFAFC::Get_EvalSlope( void )
  743. {   return m_iEvalSlope;
  744. }