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

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.  *   crystal_afc.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *  Crystal 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. //---------------------------------------------------------------------------
  66. #include <vcl.h>
  67. #include <IniFiles.hpp>
  68. #pragma hdrstop
  69. // NVRAM
  70. #ifndef  _NVRAM_VER_H_
  71. #include "nvram_ver.h"
  72. #endif
  73. #include "form_RFTool.h"
  74. #include "crystal_afc.h"
  75. #include "man_fdm.h"
  76. #include "man_active.h"
  77. //==============================================================================
  78. static CCRYSTALAFC*  crystal_afc_ptr;
  79. static bool g_bIsRunning = false;
  80. //==============================================================================
  81. static void  REQ_SelectBand(void)
  82. {
  83.     crystal_afc_ptr->REQ_SelectBand();
  84. }
  85. //------------------------------------------------------------------------------
  86. static void __stdcall CNF_SelectBand(const unsigned char cnf, const short token, void *usrData)
  87. {
  88.     crystal_afc_ptr->CNF_SelectBand(cnf, token, usrData);
  89. }
  90. //------------------------------------------------------------------------------
  91. static void REQ_NormalTX(void)
  92. {
  93.     crystal_afc_ptr->REQ_NormalTX();
  94. }
  95. //------------------------------------------------------------------------------
  96. static void REQ_SetCapID(void)
  97. {
  98.     crystal_afc_ptr->REQ_SetCapID();
  99. }
  100. //------------------------------------------------------------------------------
  101. static void __stdcall CNF_NormalTX(const unsigned char cnf, const short token, void *usrData)
  102. {
  103.     crystal_afc_ptr->CNF_NormalTX(cnf, token, usrData);
  104. }
  105. //------------------------------------------------------------------------------
  106. static  void  CNF_ReadCrystalAfcDataFromNVRAM(void)
  107. {
  108.     crystal_afc_ptr->CNF_ReadCrystalAfcDataFromNVRAM();
  109. }
  110. //------------------------------------------------------------------------------
  111. static void  CNF_WriteCrystalAfcDataToNVRAM(void)
  112. {
  113.     crystal_afc_ptr->CNF_WriteCrystalAfcDataToNVRAM();
  114. }
  115. //------------------------------------------------------------------------------
  116. static void  REQ_TimeOut(void)
  117. {
  118.     crystal_afc_ptr->REQ_TimeOut();
  119. }
  120. //------------------------------------------------------------------------------
  121. static void  REQ_Finish( void )
  122. {
  123.     crystal_afc_ptr->REQ_Finish();
  124. }
  125. //------------------------------------------------------------------------------
  126. static void  REQ_Read_CAPID_From_NVRAM( void )
  127. {
  128.     crystal_afc_ptr->REQ_Read_CAPID_From_NVRAM();
  129. }
  130. //------------------------------------------------------------------------------
  131. static  void  CNF_CAPID_ReadFromNVRAM( void )
  132. {
  133.     crystal_afc_ptr->CNF_CAPID_ReadFromNVRAM();
  134. }
  135. //------------------------------------------------------------------------------
  136. static  void  REQ_Write_CAPID_To_NVRAM (void)
  137. {
  138.     crystal_afc_ptr->REQ_Write_CAPID_To_NVRAM();
  139. }
  140. //------------------------------------------------------------------------------
  141. static void  CNF_CAPID_WriteToNVRAM( void )
  142. {
  143.     crystal_afc_ptr->CNF_CAPID_WriteToNVRAM( );
  144. }
  145. //==============================================================================
  146. CCRYSTALAFC::CCRYSTALAFC(void)
  147. {
  148.     m_uiCrystalAfcBufSize = 0;
  149.     m_cCrystalAfcBuf = NULL;
  150.     RFReq_AFC = NULL;
  151.     RFReq_TX = NULL;
  152.     CapIDBuf = NULL;
  153.     CapIDBufSize = 0;
  154.     g_bIsRunning = false;
  155. }
  156. //------------------------------------------------------------------------------
  157. CCRYSTALAFC::~CCRYSTALAFC()
  158. {
  159.    if(m_cCrystalAfcBuf)
  160.    {
  161.        delete  m_cCrystalAfcBuf;
  162.        m_cCrystalAfcBuf = NULL;
  163.    }
  164.    if(RFReq_AFC)
  165.    {
  166.        delete  RFReq_AFC;
  167.        RFReq_AFC = NULL;
  168.    }
  169.    if(RFReq_TX)
  170.    {
  171.        delete  RFReq_TX;
  172.        RFReq_TX = NULL;
  173.    }
  174.    if(CapIDBuf)
  175.    {
  176.        delete  CapIDBuf;
  177.        CapIDBuf = NULL;
  178.    }
  179. }
  180. //---------------------------------------------------------------------------
  181. void CCRYSTALAFC::REQ_Finish(void)
  182. {
  183.    if(!g_bIsRunning)  return;
  184.    Confirm(METAAPP_SUCCESS);
  185.    g_bIsRunning = false;
  186. }
  187. //---------------------------------------------------------------------------
  188. void  CCRYSTALAFC::REQ_Stop( void )
  189. {
  190.    if(!g_bIsRunning)  return;
  191.    META_Cancel_r( m_META_HANDLE_Obj.Get_MainHandle(), CRYSTALID_AFC );
  192.    Confirm( METAAPP_STOP );
  193.    g_bIsRunning = false;
  194. }
  195. //------------------------------------------------------------------------------
  196. void  CCRYSTALAFC::REQ_TimeOut( void )
  197. {
  198.    if(!g_bIsRunning)  return;
  199.    META_Cancel_r( m_META_HANDLE_Obj.Get_MainHandle(), CRYSTALID_AFC );
  200.    Confirm( METAAPP_TIMEOUT );
  201.    g_bIsRunning = false;
  202. }
  203. //---------------------------------------------------------------------------
  204. void  CCRYSTALAFC::Confirm(E_METAAPP_RESULT_T confirm_state)
  205. {
  206.    if(!g_bIsRunning)  return;
  207.    if(ConfirmCallback==0)  return;
  208.    m_eConfirmState = confirm_state;
  209.    ActiveMan->SetActiveFunction( ConfirmCallback );
  210. }
  211. //===========================================================================
  212. void  CCRYSTALAFC::REQ_Start_TX(int band, short arfcn, int bsic, int pcl, int frames, int afc_dac)
  213. {
  214.     crystal_afc_ptr = this;
  215.     g_bIsRunning  = true;
  216.     Band = band;
  217.     m_sArfcn = arfcn;
  218.     Bsic = bsic;
  219.     PCL = pcl;
  220.     Frames = frames;
  221.     AFCDac = afc_dac;
  222.     BurstType = 1;
  223.     ActiveMan->SetActiveFunction( ::REQ_SelectBand );
  224. }
  225. //===========================================================================
  226. void  CCRYSTALAFC::REQ_SelectBand( void )
  227. {
  228.     if(!g_bIsRunning)  return;
  229.     unsigned char select_PCS1900;
  230.     if(Band==BANDSEL_PCS1900)
  231.         select_PCS1900 = 1;
  232.     else
  233.         select_PCS1900 = 0;
  234.     META_RESULT MetaResult = META_Rf_SelectFrequencyBand1900_r( m_META_HANDLE_Obj.Get_MainHandle(), select_PCS1900, ::CNF_SelectBand, &CRYSTALID_AFC, NULL );
  235.     if(MetaResult!=META_SUCCESS)
  236.     {  Confirm( METAAPP_FAIL );  return;  }
  237. }
  238. //-------------------------------------
  239. void __stdcall CCRYSTALAFC::CNF_SelectBand( const unsigned char cnf, const short token, void *usrData )
  240. {
  241.     if(!g_bIsRunning)  return;
  242.     if(cnf==false)
  243.     {  Confirm(METAAPP_FAIL);  return;  }
  244.     ActiveMan->SetActiveFunction( ::REQ_NormalTX );
  245. }
  246. //-------------------------------------
  247. void  CCRYSTALAFC::REQ_NormalTX( void )
  248. {
  249.     if(!g_bIsRunning)  return;
  250.     if(RFReq_TX == NULL)
  251.     {
  252.         RFReq_TX = new RfNbtx_Req;
  253.     }
  254.     RFReq_TX->arfcn       = m_sArfcn;
  255.     RFReq_TX->bsic        = Bsic;
  256.     RFReq_TX->power       = PCL;
  257.     RFReq_TX->frames      = Frames;
  258.     RFReq_TX->dacValue    = AFCDac;
  259.     if(BurstType==0)  RFReq_TX->burstTypeNB = AB_TX_RANDOM_WITH_SYNC_SEQ;
  260.     if(BurstType==1)  RFReq_TX->burstTypeNB = NB_TX_RANDOM_WITH_TSC;
  261.     if(BurstType==2)  RFReq_TX->burstTypeNB = NB_TX_ALL_ONES_WITHOUT_TSC;
  262.     META_RESULT MetaResult = META_Rf_NB_TX_r( m_META_HANDLE_Obj.Get_MainHandle(), RFReq_TX, ::CNF_NormalTX, &CRYSTALID_AFC, NULL );
  263.     if(MetaResult!=META_SUCCESS)
  264.     {  Confirm( METAAPP_FAIL );  return;  }
  265. }
  266. //-------------------------------------
  267. void __stdcall CCRYSTALAFC::CNF_NormalTX(const unsigned char cnf, const short token, void *usrData)
  268. {
  269.     if(!g_bIsRunning)  return;
  270.     if(cnf==false)
  271.     {  Confirm( METAAPP_FAIL );  return;  }
  272.     ActiveMan->SetActiveFunction( ::REQ_Finish );
  273. }
  274. //===========================================================================
  275. void CCRYSTALAFC::REQ_SetCapID_Start(int cap_id)
  276. {
  277.     crystal_afc_ptr = this;
  278.     g_bIsRunning  = true;
  279.     m_iCapId = cap_id;
  280.     ActiveMan->SetActiveFunction(::REQ_SetCapID);
  281. }
  282. //---------------------------------------------------------------------------
  283. void CCRYSTALAFC::REQ_SetCapID(void)
  284. {
  285.     if (!g_bIsRunning)
  286.     {
  287.         return;
  288.     }
  289.     RfSetCrystalCfg_Req req;
  290.     req.cap_id = m_iCapId;
  291.     META_RESULT MetaResult = META_Rf_SetCrystalCapId_r(m_META_HANDLE_Obj.Get_MainHandle(), 500, (const RfSetCrystalCfg_Req *) &req);
  292.     if (MetaResult != META_SUCCESS)
  293.     {
  294.         if (MetaResult != META_TIMEOUT)
  295.         {
  296.             Confirm(METAAPP_FAIL);
  297.             return;
  298.         }
  299.         else
  300.         {
  301.             ActiveMan->SetActiveFunction(::REQ_TimeOut);
  302.             return;
  303.         }
  304.     }
  305.     ActiveMan->SetActiveFunction(::REQ_Finish);
  306. }
  307. //===========================================================================
  308. bool  CCRYSTALAFC::Decompose_crystalAfcData( void )
  309. {
  310.     META_RESULT MetaResult =  META_NVRAM_Decompose_crystalAfcData(&xo_afc, m_cCrystalAfcBuf, m_uiCrystalAfcBufSize);
  311.     if(MetaResult!=META_SUCCESS)     return(false);
  312.     return(true);
  313. }
  314. //----------------------------------------------------------------------------
  315. bool  CCRYSTALAFC::Compose_crystalAfcData( void )
  316. {
  317.     META_RESULT MetaResult = META_NVRAM_Compose_crystalAfcData(&xo_afc, m_cCrystalAfcBuf, m_uiCrystalAfcBufSize);
  318.     if(MetaResult!=META_SUCCESS)     return(false);
  319.     return(true);
  320. }
  321. //===========================================================================
  322. void  CCRYSTALAFC::REQ_Read_CrystalAfcData_From_NVRAM_Start(void)
  323. {
  324.     crystal_afc_ptr = this;
  325.     g_bIsRunning = true;
  326.     m_bDownloadCrystalAfcDataTrigger = false;
  327.     REQ_Read_CrystalAfcData_From_NVRAM();
  328. }
  329. //---------------------------------------------------------------------------
  330. void CCRYSTALAFC::REQ_Read_CrystalAfcData_From_NVRAM(void)
  331. {
  332.     if (!g_bIsRunning)
  333.     {
  334.         return;
  335.     }
  336.     if (NULL == m_cCrystalAfcBuf)
  337.     {
  338.         META_RESULT MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_L1_CRYSTAL_AFCDATA_LID",
  339.                                                       (int *) &m_uiCrystalAfcBufSize);
  340.         if (MetaResult != META_SUCCESS)
  341.         {
  342.             Confirm(METAAPP_FAIL);
  343.             return;
  344.         }
  345.         m_cCrystalAfcBuf = new char[m_uiCrystalAfcBufSize];
  346.     }
  347.     NVRAMMan->ConfirmCallback = ::CNF_ReadCrystalAfcDataFromNVRAM;
  348.     NVRAMMan->REQ_ReadNVRAM_Start( "NVRAM_EF_L1_CRYSTAL_AFCDATA_LID",
  349.                                   1,
  350.                                   m_uiCrystalAfcBufSize,
  351.                                   m_cCrystalAfcBuf );
  352. }
  353. //---------------------------------------------------------------------------
  354. void  CCRYSTALAFC::CNF_ReadCrystalAfcDataFromNVRAM(void)
  355. {
  356.     if (!g_bIsRunning)
  357.     {
  358.         return;
  359.     }
  360.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  361.     if (METAAPP_SUCCESS == state)
  362.     {
  363.         if (m_bDownloadCrystalAfcDataTrigger)
  364.         {
  365.             REQ_Write_CrystalAfcData_To_NVRAM();
  366.         }
  367.         else
  368.         {
  369.             if (!Decompose_crystalAfcData())
  370.             {
  371.                 Confirm(METAAPP_FAIL);
  372.                 return;
  373.             }
  374.             ActiveMan->SetActiveFunction(::REQ_Finish);
  375.         }
  376.     }
  377.     else
  378.     {
  379.         Confirm(state);
  380.     }
  381. }
  382. //===========================================================================
  383. void  CCRYSTALAFC::REQ_Write_CrystalAfcData_To_NVRAM_Start(void)
  384. {
  385.     crystal_afc_ptr = this;
  386.     g_bIsRunning = true;
  387.     m_bDownloadCrystalAfcDataTrigger = true;
  388.     REQ_Write_CrystalAfcData_To_NVRAM();
  389. }
  390. //---------------------------------------------------------------------------
  391. void  CCRYSTALAFC::REQ_Write_CrystalAfcData_To_NVRAM(void)
  392. {
  393.     if (!g_bIsRunning)
  394.     {
  395.         return;
  396.     }
  397.     unsigned short lid_ver;
  398.     META_RESULT MetaResult;
  399.     MetaResult = META_NVRAM_GetLIDVersion("NVRAM_EF_L1_CRYSTAL_AFCDATA_LID", &lid_ver);
  400.     if (lid_ver > NVRAM_EF_L1_CRYSTAL_AFCDATA_LID_VERNO)
  401.     {
  402.         Confirm(METAAPP_NVRAM_LID_VER_NOT_SUPPORT);
  403.         return;
  404.     }
  405.     if (NULL == m_cCrystalAfcBuf)
  406.     {
  407.         MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_L1_CRYSTAL_AFCDATA_LID", (int *) &m_uiCrystalAfcBufSize);
  408.         if (MetaResult != META_SUCCESS)
  409.         {
  410.             Confirm(METAAPP_FAIL);
  411.             return;
  412.         }
  413.         m_cCrystalAfcBuf = new char[m_uiCrystalAfcBufSize];
  414.     }
  415.     if (!Compose_crystalAfcData())
  416.     {
  417.         Confirm(METAAPP_FAIL);
  418.         return;
  419.     }
  420.     NVRAMMan->ConfirmCallback = ::CNF_WriteCrystalAfcDataToNVRAM;
  421.     NVRAMMan->REQ_WriteNVRAM_Start("NVRAM_EF_L1_CRYSTAL_AFCDATA_LID",
  422.                                     1,
  423.                                     m_uiCrystalAfcBufSize,
  424.                                     m_cCrystalAfcBuf);
  425. }
  426. //-------------------------------------
  427. void CCRYSTALAFC::CNF_WriteCrystalAfcDataToNVRAM(void)
  428. {
  429.     if (!g_bIsRunning)
  430.     {
  431.         return;
  432.     }
  433.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  434.     Confirm(state);
  435. }
  436. //===========================================================================
  437. bool  CCRYSTALAFC::REQ_Read_CrystalAfcData_From_File( char *filename )
  438. {
  439.     TIniFile   *ini_file;
  440.     AnsiString as_freq_err;
  441.     ini_file = new TIniFile(filename);
  442.     if (NULL == ini_file)
  443.     {
  444.         return false;
  445.     }
  446.     int i;
  447.     m_iCapId = ini_file->ReadInteger("Crystal AFC control",
  448.                                            "cap_id",
  449.                                             0);
  450.     for (i=0; i<8; i++)
  451.     {
  452.         xo_afc.XO_SlopeAreaData[i].min_dac = ini_file->ReadInteger("Crystal AFC control",
  453.                                                                         "AFC_DAC_" + IntToStr(i),
  454.                                                                         0);
  455.         as_freq_err = ini_file->ReadString("Crystal AFC control",
  456.                                            "FREQ_ERR_" + IntToStr(i),
  457.                                            "0");
  458.         xo_afc.XO_SlopeAreaData[i].min_freq = atof(as_freq_err.c_str());
  459.     }
  460.     delete  ini_file;
  461.     return  true;
  462. }
  463. //---------------------------------------------------------------------------
  464. bool CCRYSTALAFC::REQ_Write_CrystalAfcData_To_File(char *filename)
  465. {
  466.     TIniFile   *ini_file;
  467.     ini_file = new TIniFile(filename);
  468.     if (NULL == ini_file)
  469.     {
  470.         return false;
  471.     }
  472.     int i;
  473.     ini_file->WriteInteger("Crystal AFC control",
  474.                                 "cap_id",
  475.                                  m_iCapId);
  476.     for (i=0; i<TOTAL_AFCDAC_COUNT; i++)
  477.     {
  478.         ini_file->WriteInteger("Crystal AFC control",
  479.                                     "AFC_DAC_" + IntToStr(i),
  480.                                     xo_afc.XO_SlopeAreaData[i].min_dac);
  481.     }
  482.     for (i=0; i<TOTAL_AFCDAC_COUNT; i++)
  483.     {
  484.         ini_file->WriteInteger("Crystal AFC control",
  485.                                     "FREQ_ERR_" + IntToStr(i),
  486.                                     xo_afc.XO_SlopeAreaData[i].min_freq);
  487.     }
  488.     delete  ini_file;
  489.     return true;
  490. }
  491. //===========================================================================
  492. ///////////////////////// CAP ID ////////////////////////////////////////////
  493. //===========================================================================
  494. void CCRYSTALAFC::REQ_Read_CAPID_From_NVRAM_Start(void)
  495. {
  496.     crystal_afc_ptr = this;
  497.     g_bIsRunning = true;
  498.     m_bDownloadCAPIDTrigger = false;
  499.     REQ_Read_CAPID_From_NVRAM();
  500. }
  501. //---------------------------------------------------------------------------
  502. void CCRYSTALAFC::REQ_Read_CAPID_From_NVRAM(void)
  503. {
  504.     if (!g_bIsRunning)
  505.     {
  506.         return;
  507.     }
  508.     if (NULL == CapIDBuf)
  509.     {
  510.         META_RESULT MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_L1_CRYSTAL_CAPDATA_LID",
  511.                                                         &CapIDBufSize);
  512.         if (MetaResult != META_SUCCESS)
  513.         {
  514.             Confirm(METAAPP_FAIL);
  515.             return;
  516.         }
  517.         CapIDBuf = new char[CapIDBufSize];
  518.     }
  519.     NVRAMMan->ConfirmCallback = ::CNF_CAPID_ReadFromNVRAM;
  520.     NVRAMMan->REQ_ReadNVRAM_Start("NVRAM_EF_L1_CRYSTAL_CAPDATA_LID",
  521.                            1,
  522.                                    CapIDBufSize,
  523.                                    CapIDBuf);
  524. }
  525. //---------------------------------------------------------------------------
  526. void CCRYSTALAFC::CNF_CAPID_ReadFromNVRAM(void)
  527. {
  528.     if (!g_bIsRunning)
  529.     {
  530.         return;
  531.     }
  532.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  533.     if (METAAPP_SUCCESS == state)
  534.     {
  535.         if (m_bDownloadCAPIDTrigger)
  536.         {
  537.             REQ_Write_CAPID_To_NVRAM();
  538.         }
  539.         else
  540.         {
  541.             if (!Decompose_CapID())
  542.             {
  543.                 Confirm(METAAPP_FAIL);
  544.                 return;
  545.             }
  546.             ActiveMan->SetActiveFunction(::REQ_Finish);
  547.         }
  548.     }
  549.     else
  550.     {
  551.         Confirm(state);
  552.     }
  553. }
  554. //==============================================================================
  555. void CCRYSTALAFC::REQ_Write_CAPID_To_NVRAM_Start(void)
  556. {
  557.     crystal_afc_ptr = this;
  558.     g_bIsRunning = true;
  559.     m_bDownloadCAPIDTrigger = true;
  560.     REQ_Write_CAPID_To_NVRAM();
  561. }
  562. //---------------------------------------------------------------------------
  563. void CCRYSTALAFC::REQ_Write_CAPID_To_NVRAM(void)
  564. {
  565.     if (!g_bIsRunning)
  566.     {
  567.         return;
  568.     }
  569.     unsigned short lid_ver;
  570.     META_RESULT MetaResult;
  571.     MetaResult = META_NVRAM_GetLIDVersion("NVRAM_EF_L1_CRYSTAL_CAPDATA_LID", &lid_ver);
  572.     if (lid_ver > NVRAM_EF_L1_CRYSTAL_CAPDATA_LID_VERNO)
  573.     {
  574.         Confirm(METAAPP_NVRAM_LID_VER_NOT_SUPPORT);
  575.         return;
  576.     }
  577.     if (NULL == CapIDBuf)
  578.     {
  579.         MetaResult =  MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_L1_CRYSTAL_CAPDATA_LID",
  580.                                                        &CapIDBufSize );
  581.         if(MetaResult!=META_SUCCESS)
  582.         {  Confirm( METAAPP_FAIL );  return;  }
  583.         CapIDBuf = new  char[CapIDBufSize];
  584.     }
  585.     if( !Compose_CapID() )
  586.     {  Confirm( METAAPP_FAIL );  return;  }
  587.     NVRAMMan->ConfirmCallback = ::CNF_CAPID_WriteToNVRAM;
  588.     NVRAMMan->REQ_WriteNVRAM_Start("NVRAM_EF_L1_CRYSTAL_CAPDATA_LID",
  589.                                      1,
  590.                                      CapIDBufSize,
  591.                                      CapIDBuf);
  592. }
  593. //-------------------------------------
  594. void CCRYSTALAFC::CNF_CAPID_WriteToNVRAM(void)
  595. {
  596.     if (!g_bIsRunning)
  597.     {
  598.         return;
  599.     }
  600.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  601.     Confirm(state);
  602. }
  603. //===========================================================================
  604. bool CCRYSTALAFC::Decompose_CapID(void)
  605. {
  606.     META_RESULT MetaResult = META_NVRAM_GetRecFieldValue("NVRAM_EF_L1_CRYSTAL_CAPDATA_LID",
  607.                                                          "cap_id",
  608.                                                          CapIDBuf,
  609.                                                          CapIDBufSize,
  610.                                                          &m_iCapId,
  611.                                                          sizeof(m_iCapId));
  612.     if (MetaResult!=META_SUCCESS)
  613.     {
  614.         return false;
  615.     }
  616.     return true;
  617. }
  618. //----------------------------------------------------------------------------
  619. bool CCRYSTALAFC::Compose_CapID(void)
  620. {
  621.     char str[64];
  622.     META_RESULT MetaResult = META_NVRAM_SetRecFieldValue("NVRAM_EF_L1_CRYSTAL_CAPDATA_LID",
  623.                                                          "cap_id",
  624.                                                          CapIDBuf,
  625.                                                          CapIDBufSize,
  626.                                                          &m_iCapId,
  627.                                                          sizeof(m_iCapId));
  628.     if (MetaResult != META_SUCCESS)
  629.     {
  630.         return false;
  631.     }
  632.     return true;
  633. }
  634. //===========================================================================
  635. bool CCRYSTALAFC::CrystalAfcSectionExist(char *filename)
  636. {
  637.     int         FrequencyBandStart;
  638.     TIniFile   *ini_file;
  639.     ini_file = new TIniFile(filename);
  640.     if (NULL == ini_file)
  641.     {
  642.         return false;
  643.     }
  644.     if (ini_file->SectionExists("AFC control")       &&
  645.         ini_file->SectionExists("Crystal AFC control"))
  646.     {
  647.         return true;
  648.     }
  649.     return false;
  650. }
  651. //--------------------------------------------------------------------------
  652. bool CCRYSTALAFC::REQ_Read_CAPID_From_File(char *filename)
  653. {
  654.     TIniFile   *ini_file;
  655.     float  fdata;
  656.     ini_file = new TIniFile(filename);
  657.     if (NULL == ini_file)
  658.     {
  659.         return false;
  660.     }
  661.     m_iCapId = ini_file->ReadInteger("Crystal AFC control", "cap_id", 31);
  662.     delete  ini_file;
  663.     return  true;
  664. }
  665. //---------------------------------------------------------------------------
  666. bool CCRYSTALAFC::REQ_Write_CAPID_To_File(char *filename)
  667. {
  668.     TIniFile   *ini_file;
  669.     ini_file = new TIniFile( filename);
  670.     if (NULL == ini_file)
  671.     {
  672.         return  false;
  673.     }
  674.     ini_file->WriteInteger("Crystal AFC control", "cap_id", m_iCapId);
  675.     delete  ini_file;
  676.     return true;
  677. }
  678. //===========================================================================
  679. /////////////////////////      Global information     ///////////////////////
  680. //===========================================================================
  681. E_METAAPP_RESULT_T CCRYSTALAFC::Get_ConfirmState(void)
  682. {
  683.     return  m_eConfirmState;
  684. }
  685. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  686. int CCRYSTALAFC::Get_max_cap_id(unsigned int rf_id)
  687. {
  688.     int max_cap_id;
  689.     if ((RF_ID_A60111A  == rf_id) ||
  690.         (RF_ID_AERO2    == rf_id) ||
  691.         (RF_ID_AERO2E   == rf_id) ||
  692.         (RF_ID_ALICEG2S == rf_id)
  693.       )
  694.     {
  695.         max_cap_id = CAP_ID_MAX_127;
  696.     }
  697.     else if (RF_ID_AG2550 == rf_id)
  698.     {
  699.         max_cap_id = CAP_ID_MAX_511;
  700.     }
  701.     else // AD6548, AD6546, MT6139, MT6140
  702.     {
  703.         max_cap_id = CAP_ID_MAX_63;
  704.     }
  705.     return max_cap_id;
  706. }
  707. //------------------------------------------------------------------------
  708. int CCRYSTALAFC::Get_cap_id(void)
  709. {
  710.     return m_iCapId;
  711. }
  712. //-------------------------------------------------------------------------
  713. void  CCRYSTALAFC::Set_cap_id(int cap_id_par)
  714. {
  715.     m_iCapId = cap_id_par;
  716. }