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

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.  *   bt_info.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   MT6601 BT info NVRAM access 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  _BT_INFO_MT6601_H_
  68. #include "bt_info_mt6601.h"
  69. #endif
  70. #ifndef  _MAN_FDM_H_
  71. #include "man_fdm.h"
  72. #endif
  73. #ifndef  _MAN_ACTIVE_H_
  74. #include "man_active.h"
  75. #endif
  76. // misc
  77. #ifndef  _MISC_H_
  78. #include "misc.h"
  79. #endif
  80. #ifndef  _FT_UTILS_H_
  81. #include "ft_utils.h"
  82. #endif
  83. // NVRAM
  84. #ifndef  _NVRAM_VER_H_
  85. #include "nvram_ver.h"
  86. #endif
  87. #define MT6601_BT_CAP_ID_IDX  2
  88. //===========================================================================
  89. static CBTINFO6601* g_bt_info_ptr;
  90. static bool g_bIsRunning = false;
  91. //===========================================================================
  92. static void CNF_ReadFromNVRAM(void)
  93. {
  94.     g_bt_info_ptr->CNF_ReadFromNVRAM();
  95. }
  96. //-------------------------------------------------------------------------
  97. static void CNF_WriteToNVRAM(void)
  98. {
  99.     g_bt_info_ptr->CNF_WriteToNVRAM();
  100. }
  101. //===========================================================================
  102. CBTINFO6601::CBTINFO6601(void)
  103. {
  104.     g_bIsRunning = false;
  105.     ConfirmCallback = NULL;
  106.     m_uiBufSize = NULL;
  107.     m_cBuf = NULL;
  108. }
  109. //---------------------------------------------------------------------------
  110. CBTINFO6601::~CBTINFO6601()
  111. {
  112.    g_bIsRunning = false;
  113.    ConfirmCallback = 0;
  114.    if(m_cBuf)
  115.    {
  116.       delete [] m_cBuf;
  117.       m_cBuf = NULL;
  118.    }
  119. }
  120. //---------------------------------------------------------------------------
  121. void CBTINFO6601::REQ_Stop(void)
  122. {
  123.     if(!g_bIsRunning)
  124.     {
  125.         return;
  126.     }
  127.     NVRAMMan->REQ_Stop();
  128.     Confirm(METAAPP_STOP);
  129. }
  130. //---------------------------------------------------------------------------
  131. void  CBTINFO6601::Confirm(E_METAAPP_RESULT_T confirm_state)
  132. {
  133.     if (!g_bIsRunning)
  134.     {
  135.         return;
  136.     }
  137.     g_bIsRunning = false;
  138.     if (NULL == ConfirmCallback)
  139.     {
  140.         return;
  141.     }
  142.     m_eConfirmState = confirm_state;
  143.     ActiveMan->SetActiveFunction(ConfirmCallback);
  144. }
  145. //===========================================================================
  146. void CBTINFO6601::REQ_Read_From_NVRAM_Start(void)
  147. {
  148.     g_bt_info_ptr = this;
  149.     g_bIsRunning = true;
  150.     m_bDownloadTrigger = false;
  151.     REQ_Read_From_NVRAM();
  152. }
  153. //---------------------------------------------------------------------------
  154. void CBTINFO6601::REQ_Read_From_NVRAM(void)
  155. {
  156.     if (!g_bIsRunning)
  157.     {
  158.         return;
  159.     }
  160.     if (NULL == m_cBuf)
  161.     {
  162.         META_RESULT MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_BTRADIO_MT6601_LID", (int *) &m_uiBufSize);
  163.         if (MetaResult != META_SUCCESS)
  164.         {
  165.             Confirm(METAAPP_FAIL);
  166.             return;
  167.         }
  168.         m_cBuf = new  char[m_uiBufSize];
  169.     }
  170.     NVRAMMan->ConfirmCallback = ::CNF_ReadFromNVRAM;
  171.     NVRAMMan->REQ_ReadNVRAM_Start("NVRAM_EF_BTRADIO_MT6601_LID",
  172.                                    1,
  173.                                    m_uiBufSize,
  174.                                    m_cBuf
  175.                                  );
  176. }
  177. //-------------------------------------
  178. void CBTINFO6601::CNF_ReadFromNVRAM(void)
  179. {
  180.     if (!g_bIsRunning)
  181.     {
  182.         return;
  183.     }
  184.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  185.     switch (state)
  186.     {
  187.         case METAAPP_SUCCESS:
  188.         {
  189.             META_RESULT MetaResult = META_NVRAM_BT_Decompose_MT6601Radio(&m_sBtInfo,
  190.                                                                              m_cBuf,
  191.                                                                              m_uiBufSize);
  192.             if (MetaResult != META_SUCCESS)
  193.             {
  194.                 Confirm(METAAPP_FAIL);
  195.                 return;
  196.             }
  197.             if (m_bDownloadTrigger)
  198.             {
  199.                 m_sBtInfo.Radio[MT6601_BT_CAP_ID_IDX] = m_ucCapID;
  200.                 REQ_Write_To_NVRAM();
  201.             }
  202.             else
  203.             {
  204.                 m_ucCapID = m_sBtInfo.Radio[MT6601_BT_CAP_ID_IDX];
  205.                 Confirm(METAAPP_SUCCESS);
  206.             }
  207.         }
  208.         break;
  209.         default:
  210.         {
  211.             Confirm(state);
  212.         }
  213.         break;
  214.     }
  215. }
  216. //===========================================================================
  217. void CBTINFO6601::REQ_Write_To_NVRAM_Start(void)
  218. {
  219.     g_bt_info_ptr = this;
  220.     g_bIsRunning = true;
  221.     m_bDownloadTrigger = true;
  222.     REQ_Read_From_NVRAM();
  223. }
  224. //---------------------------------------------------------------------------
  225. void CBTINFO6601::REQ_Write_To_NVRAM(void)
  226. {
  227.     if (!g_bIsRunning)
  228.     {
  229.         return;
  230.     }
  231.     META_RESULT MetaResult;
  232.    // unsigned short lid_ver;
  233.    // MetaResult = META_NVRAM_GetLIDVersion("NVRAM_EF_BTRADIO_MT6601_LID", &lid_ver);
  234.    // if (lid_ver > NVRAM_EF_BTRADIO_MT6601_LID_VERNO)
  235.    // {
  236.    //     Confirm(METAAPP_NVRAM_LID_VER_NOT_SUPPORT);
  237.    //     return;
  238.    // }
  239.     if (NULL == m_cBuf)
  240.     {
  241.         MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_BTRADIO_MT6601_LID", (int *) &m_uiBufSize);
  242.         if (MetaResult != META_SUCCESS)
  243.         {
  244.             Confirm(METAAPP_FAIL);
  245.             return;
  246.         }
  247.         m_cBuf = new char[m_uiBufSize];
  248.     }
  249.     MetaResult = META_NVRAM_BT_Compose_MT6601Radio(&m_sBtInfo,
  250.                                                    m_cBuf,
  251.                                                    m_uiBufSize);
  252.     if (MetaResult != META_SUCCESS)
  253.     {
  254.         Confirm(METAAPP_FAIL);
  255.         return;
  256.     }
  257.     NVRAMMan->ConfirmCallback = ::CNF_WriteToNVRAM;
  258.     NVRAMMan->REQ_WriteNVRAM_Start("NVRAM_EF_BTRADIO_MT6601_LID",
  259.                                  1,
  260.                                    m_uiBufSize,
  261.                                    m_cBuf);
  262. }
  263. //-------------------------------------
  264. void CBTINFO6601::CNF_WriteToNVRAM(void)
  265. {
  266.     if (!g_bIsRunning)
  267.     {
  268.         return;
  269.     }
  270.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  271.     Confirm(state);
  272. }
  273. //===========================================================================
  274. //////////////////////////////////  INI file   //////////////////////////////
  275. //===========================================================================
  276. static const AnsiString as_SECTION_NAME = "BT Info";
  277. static const AnsiString as_KEY_NAME = "Crystal CAP ID";
  278. //---------------------------------------------------------------------------
  279. bool CBTINFO6601::BtCapIdSectionExist(char *filename)
  280. {
  281.     TIniFile *ini_file;
  282.     ini_file = new TIniFile(filename);
  283.     if (NULL == ini_file)
  284.     {
  285.         return false;
  286.     }
  287.     if (!ini_file->SectionExists(as_SECTION_NAME))
  288.     {
  289.         delete ini_file;
  290.         return false;
  291.     }
  292.     delete ini_file;
  293.     return true;
  294. }
  295. //---------------------------------------------------------------------------
  296. bool CBTINFO6601::REQ_Read_From_File(char *filename)
  297. {
  298.     TIniFile   *ini_file;
  299.     ini_file = new TIniFile(filename);
  300.     if (NULL == ini_file)
  301.     {
  302.         return false;
  303.     }
  304.     m_ucCapID = ini_file->ReadInteger(as_SECTION_NAME,
  305.                                                  as_KEY_NAME,
  306.                                                  127);
  307.     m_sBtInfo.Radio[MT6601_BT_CAP_ID_IDX] = m_ucCapID;
  308.     delete  ini_file;
  309.     return true;
  310. }
  311. //---------------------------------------------------------------------------
  312. bool CBTINFO6601::REQ_Write_To_File(char *filename)
  313. {
  314.     TIniFile *ini_file;
  315.     ini_file = new TIniFile(filename);
  316.     if (NULL == ini_file)
  317.     {
  318.         return  false;
  319.     }
  320.     ini_file->WriteString(as_SECTION_NAME,
  321.                           as_KEY_NAME,
  322.                           IntToStr(m_ucCapID));
  323.     delete ini_file;
  324.     return true;
  325. }
  326. //===========================================================================
  327. /////////////////////////  Global information  //////////////////////////////
  328. //===========================================================================
  329. E_METAAPP_RESULT_T CBTINFO6601::Get_ConfirmState(void)
  330. {
  331.     return  m_eConfirmState;
  332. }
  333. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  334. void  CBTINFO6601::Get_BTInfo(nvram_ef_btradio_mt6601_struct& bt_info)
  335. {
  336.     bt_info = m_sBtInfo;
  337. }
  338. //---------------------------------------------------------------------------
  339. void CBTINFO6601::Set_BTInfo(nvram_ef_btradio_mt6601_struct bt_info)
  340. {
  341.     m_sBtInfo = bt_info;
  342. }
  343. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  344. unsigned char CBTINFO6601::Get_BT_CAP_ID(void)
  345. {
  346.     return m_ucCapID;
  347. }
  348. //---------------------------------------------------------------------------
  349. void CBTINFO6601::Set_BT_CAP_ID(unsigned char cap_id)
  350. {
  351.     m_ucCapID = cap_id;
  352.     m_sBtInfo.Radio[MT6601_BT_CAP_ID_IDX] = cap_id;
  353. }