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

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.  *   MT6611 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. // BT
  68. #ifndef  _BT_HCI_COMMON_H_
  69. #include "bt_hci_common.h"
  70. #endif
  71. #ifndef  _BT_HCI_FT_H_
  72. #include "bt_hci_ft.h"
  73. #endif
  74. #ifndef  _BT_INFO_MT6611_H_
  75. #include "bt_info_mt6611.h"
  76. #endif
  77. // man
  78. #ifndef  _MAN_FDM_H_
  79. #include "man_fdm.h"
  80. #endif
  81. #ifndef  _MAN_ACTIVE_H_
  82. #include "man_active.h"
  83. #endif
  84. // misc
  85. #ifndef  _MISC_H_
  86. #include "misc.h"
  87. #endif
  88. #ifndef  _FT_UTILS_H_
  89. #include "ft_utils.h"
  90. #endif
  91. // NVRAM
  92. #ifndef  _NVRAM_VER_H_
  93. #include "nvram_ver.h"
  94. #endif
  95. #define MT6611_BT_CAP_ID_IDX  0
  96. //===========================================================================
  97. static CBTINFO6611* g_bt_info_ptr;
  98. static bool g_bIsRunning = false;
  99. //===========================================================================
  100. static void __stdcall CNF_Calibrate_Cyrstal_Clock_HCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  101. {
  102.     g_bt_info_ptr->CNF_Calibrate_Cyrstal_Clock_HCIEvent(cnf, token, usrData);
  103. }
  104. //-------------------------------------------------------------------------
  105. static void __stdcall CNF_Get_Result_HCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  106. {
  107.     g_bt_info_ptr->CNF_Get_Result_HCIEvent(cnf, token, usrData);
  108. }
  109. //-------------------------------------------------------------------------
  110. static void __stdcall CNF_Set_CapId_HCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  111. {
  112.     g_bt_info_ptr->CNF_Set_CapId_HCIEvent(cnf, token, usrData);
  113. }
  114. //-------------------------------------------------------------------------
  115. static void CNF_ReadFromNVRAM(void)
  116. {
  117.     g_bt_info_ptr->CNF_ReadFromNVRAM();
  118. }
  119. //-------------------------------------------------------------------------
  120. static void CNF_WriteToNVRAM(void)
  121. {
  122.     g_bt_info_ptr->CNF_WriteToNVRAM();
  123. }
  124. //===========================================================================
  125. CBTINFO6611::CBTINFO6611(void)
  126. {
  127.     g_bIsRunning = false;
  128.     ConfirmCallback = NULL;
  129.     m_uiBufSize = NULL;
  130.     m_cBuf = NULL;
  131. }
  132. //---------------------------------------------------------------------------
  133. CBTINFO6611::~CBTINFO6611()
  134. {
  135.    g_bIsRunning = false;
  136.    ConfirmCallback = 0;
  137.    if(m_cBuf)
  138.    {
  139.       delete [] m_cBuf;
  140.       m_cBuf = NULL;
  141.    }
  142. }
  143. //---------------------------------------------------------------------------
  144. void CBTINFO6611::REQ_Stop(void)
  145. {
  146.     if(!g_bIsRunning)
  147.     {
  148.         return;
  149.     }
  150.     NVRAMMan->REQ_Stop();
  151.     Confirm(METAAPP_STOP);
  152. }
  153. //---------------------------------------------------------------------------
  154. void  CBTINFO6611::Confirm(E_METAAPP_RESULT_T confirm_state)
  155. {
  156.     if (!g_bIsRunning)
  157.     {
  158.         return;
  159.     }
  160.     g_bIsRunning = false;
  161.     if (NULL == ConfirmCallback)
  162.     {
  163.         return;
  164.     }
  165.     m_eConfirmState = confirm_state;
  166.     ActiveMan->SetActiveFunction(ConfirmCallback);
  167. }
  168. //===========================================================================
  169. bool CBTINFO6611::REQ_Enable_PCM_Clock_Sync_Signal(void)
  170. {
  171.     META_RESULT MetaResult = META_BT_EnablePcmClockSyncSignal_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000);
  172.     if (MetaResult != META_SUCCESS)
  173.     {
  174.         return false;
  175.     }
  176.     return true;
  177. }
  178. //===========================================================================
  179. bool CBTINFO6611::REQ_Start_Calibrate_Crystal_Clock(void)
  180. {
  181.     g_bt_info_ptr = this;
  182.     g_bIsRunning  = true;
  183.     CBTHCIFT HCI_FT_Obj;
  184.     BT_HCI_COMMAND s_hci_cmd;
  185.     HCI_FT_Obj.Reset_HCI_Command(s_hci_cmd);
  186.     // C7 FC 04 02 01 32 00
  187.     s_hci_cmd.m_opcode = 0xFCC7;
  188.     s_hci_cmd.m_len = 0x04;
  189.     s_hci_cmd.m_cmd[0] = 0x02;
  190.     s_hci_cmd.m_cmd[1] = 0x01;
  191.     s_hci_cmd.m_cmd[2] = 0x32;
  192.     s_hci_cmd.m_cmd[3] = 0x00;
  193.     META_RESULT MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &s_hci_cmd, ::CNF_Calibrate_Cyrstal_Clock_HCIEvent, NULL, HCE_COMMAND_COMPLETE);
  194.     if (MetaResult != META_SUCCESS)
  195.     {
  196.         return false;
  197.     }
  198.     return true;
  199. }
  200. //--------------------------------------------------------------------------
  201. void CBTINFO6611::CNF_Calibrate_Cyrstal_Clock_HCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  202. {
  203.     if (!g_bIsRunning)
  204.     {
  205.         return;
  206.     }
  207. }
  208. //===========================================================================
  209. bool CBTINFO6611::REQ_Get_Result(void)
  210. {
  211.     g_bt_info_ptr = this;
  212.     g_bIsRunning  = true;
  213.     CBTHCIFT HCI_FT_Obj;
  214.     BT_HCI_COMMAND s_hci_cmd;
  215.     HCI_FT_Obj.Reset_HCI_Command(s_hci_cmd);
  216.     // C8 FC 00
  217.     s_hci_cmd.m_opcode = 0xFCC8;
  218.     s_hci_cmd.m_len = 0x00;
  219.     META_RESULT MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &s_hci_cmd, ::CNF_Get_Result_HCIEvent, NULL, HCE_COMMAND_COMPLETE);
  220.     if ((MetaResult != META_SUCCESS) || (!m_bEventOk))
  221.     {
  222.         return false;
  223.     }
  224.     return true;
  225. }
  226. //--------------------------------------------------------------------------
  227. void CBTINFO6611::CNF_Get_Result_HCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  228. {
  229.     if (!g_bIsRunning)
  230.     {
  231.         return;
  232.     }
  233.     // 0E 0C 01 C8 FC 00 CC CC DD DD DD DD EE EE
  234.     if ((0x01 != cnf->m_parms[0]) ||  // connect not successfully
  235.         (0xC8 != cnf->m_parms[1]) ||
  236.         (0xFC != cnf->m_parms[2]) ||
  237.         (0x00 != cnf->m_parms[3])
  238.        )
  239.     {
  240.         m_bEventOk = false;
  241.         return;
  242.     }
  243.     m_uiLpoPllCount = (cnf->m_parms[9] << 24) |
  244.                       (cnf->m_parms[8] << 16) |
  245.                       (cnf->m_parms[7] << 8)  |
  246.                        cnf->m_parms[6];
  247.     m_bEventOk = true;
  248. }
  249. //===========================================================================
  250. bool CBTINFO6611::REQ_Set_CapId(unsigned char cap_id)
  251. {
  252.     g_bt_info_ptr = this;
  253.     g_bIsRunning  = true;
  254.     CBTHCIFT HCI_FT_Obj;
  255.     BT_HCI_COMMAND s_hci_cmd;
  256.     HCI_FT_Obj.Reset_HCI_Command(s_hci_cmd);
  257.     // 7F FC 01 xx
  258.     s_hci_cmd.m_opcode = 0xFC7F;
  259.     s_hci_cmd.m_len = 0x01;
  260.     s_hci_cmd.m_cmd[0] = cap_id;
  261.     META_RESULT MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &s_hci_cmd, ::CNF_Set_CapId_HCIEvent, NULL, HCE_COMMAND_COMPLETE);
  262.     if (MetaResult != META_SUCCESS)
  263.     {
  264.         return false;
  265.     }
  266.     return true;
  267. }
  268. //--------------------------------------------------------------------------
  269. void CBTINFO6611::CNF_Set_CapId_HCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  270. {
  271.     if (!g_bIsRunning)
  272.     {
  273.         return;
  274.     }
  275.     m_bEventOk = true;
  276. }
  277. //===========================================================================
  278. void CBTINFO6611::REQ_Read_From_NVRAM_Start(void)
  279. {
  280.     g_bt_info_ptr = this;
  281.     g_bIsRunning = true;
  282.     m_bDownloadTrigger = false;
  283.     REQ_Read_From_NVRAM();
  284. }
  285. //---------------------------------------------------------------------------
  286. void CBTINFO6611::REQ_Read_From_NVRAM(void)
  287. {
  288.     if (!g_bIsRunning)
  289.     {
  290.         return;
  291.     }
  292.     if (NULL == m_cBuf)
  293.     {
  294.         META_RESULT MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_BTRADIO_MT6611_LID", (int *) &m_uiBufSize);
  295.         if (MetaResult != META_SUCCESS)
  296.         {
  297.             Confirm(METAAPP_FAIL);
  298.             return;
  299.         }
  300.         m_cBuf = new  char[m_uiBufSize];
  301.     }
  302.     NVRAMMan->ConfirmCallback = ::CNF_ReadFromNVRAM;
  303.     NVRAMMan->REQ_ReadNVRAM_Start("NVRAM_EF_BTRADIO_MT6611_LID",
  304.                                    1,
  305.                                    m_uiBufSize,
  306.                                    m_cBuf
  307.                                  );
  308. }
  309. //-------------------------------------
  310. void CBTINFO6611::CNF_ReadFromNVRAM(void)
  311. {
  312.     if (!g_bIsRunning)
  313.     {
  314.         return;
  315.     }
  316.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  317.     switch (state)
  318.     {
  319.         case METAAPP_SUCCESS:
  320.         {
  321.             META_RESULT MetaResult = META_NVRAM_BT_Decompose_MT6611Radio(&m_sBtInfo,
  322.                                                                              m_cBuf,
  323.                                                                              m_uiBufSize);
  324.             if (MetaResult != META_SUCCESS)
  325.             {
  326.                 Confirm(METAAPP_FAIL);
  327.                 return;
  328.             }
  329.             if (m_bDownloadTrigger)
  330.             {
  331.                 m_sBtInfo.Radio[MT6611_BT_CAP_ID_IDX] = m_ucCapID;
  332.                 REQ_Write_To_NVRAM();
  333.             }
  334.             else
  335.             {
  336.                 m_ucCapID = m_sBtInfo.Radio[MT6611_BT_CAP_ID_IDX];
  337.                 Confirm(METAAPP_SUCCESS);
  338.             }
  339.         }
  340.         break;
  341.         default:
  342.         {
  343.             Confirm(state);
  344.         }
  345.         break;
  346.     }
  347. }
  348. //===========================================================================
  349. void CBTINFO6611::REQ_Write_To_NVRAM_Start(void)
  350. {
  351.     g_bt_info_ptr = this;
  352.     g_bIsRunning = true;
  353.     m_bDownloadTrigger = true;
  354.     REQ_Read_From_NVRAM();
  355. }
  356. //---------------------------------------------------------------------------
  357. void CBTINFO6611::REQ_Write_To_NVRAM(void)
  358. {
  359.     if (!g_bIsRunning)
  360.     {
  361.         return;
  362.     }
  363.     META_RESULT MetaResult;
  364.     if (NULL == m_cBuf)
  365.     {
  366.         MetaResult = META_NVRAM_GetRecLen("NVRAM_EF_BTRADIO_MT6611_LID", (int *) &m_uiBufSize);
  367.         if (MetaResult != META_SUCCESS)
  368.         {
  369.             Confirm(METAAPP_FAIL);
  370.             return;
  371.         }
  372.         m_cBuf = new char[m_uiBufSize];
  373.     }
  374.     MetaResult = META_NVRAM_BT_Compose_MT6611Radio(&m_sBtInfo,
  375.                                                    m_cBuf,
  376.                                                    m_uiBufSize);
  377.     if (MetaResult != META_SUCCESS)
  378.     {
  379.         Confirm(METAAPP_FAIL);
  380.         return;
  381.     }
  382.     NVRAMMan->ConfirmCallback = ::CNF_WriteToNVRAM;
  383.     NVRAMMan->REQ_WriteNVRAM_Start("NVRAM_EF_BTRADIO_MT6611_LID",
  384.                                  1,
  385.                                    m_uiBufSize,
  386.                                    m_cBuf);
  387. }
  388. //-------------------------------------
  389. void CBTINFO6611::CNF_WriteToNVRAM(void)
  390. {
  391.     if (!g_bIsRunning)
  392.     {
  393.         return;
  394.     }
  395.     E_METAAPP_RESULT_T state = NVRAMMan->Get_ConfirmState();
  396.     Confirm(state);
  397. }
  398. //===========================================================================
  399. //////////////////////////////////  INI file   //////////////////////////////
  400. //===========================================================================
  401. static const AnsiString as_SECTION_NAME = "BT Info";
  402. static const AnsiString as_KEY_NAME = "Crystal CAP ID";
  403. //---------------------------------------------------------------------------
  404. bool CBTINFO6611::BtCapIdSectionExist(char *filename)
  405. {
  406.     TIniFile *ini_file;
  407.     ini_file = new TIniFile(filename);
  408.     if (NULL == ini_file)
  409.     {
  410.         return false;
  411.     }
  412.     if (!ini_file->SectionExists(as_SECTION_NAME))
  413.     {
  414.         delete ini_file;
  415.         return false;
  416.     }
  417.     delete ini_file;
  418.     return true;
  419. }
  420. //---------------------------------------------------------------------------
  421. bool CBTINFO6611::REQ_Read_From_File(char *filename)
  422. {
  423.     TIniFile   *ini_file;
  424.     ini_file = new TIniFile(filename);
  425.     if (NULL == ini_file)
  426.     {
  427.         return false;
  428.     }
  429.     m_ucCapID = ini_file->ReadInteger(as_SECTION_NAME,
  430.                                                  as_KEY_NAME,
  431.                                                  127);
  432.     m_sBtInfo.Radio[MT6611_BT_CAP_ID_IDX] = m_ucCapID;
  433.     delete  ini_file;
  434.     return true;
  435. }
  436. //---------------------------------------------------------------------------
  437. bool CBTINFO6611::REQ_Write_To_File(char *filename)
  438. {
  439.     TIniFile *ini_file;
  440.     ini_file = new TIniFile(filename);
  441.     if (NULL == ini_file)
  442.     {
  443.         return  false;
  444.     }
  445.     ini_file->WriteString(as_SECTION_NAME,
  446.                           as_KEY_NAME,
  447.                           IntToStr(m_ucCapID));
  448.     delete ini_file;
  449.     return true;
  450. }
  451. //===========================================================================
  452. /////////////////////////  Global information  //////////////////////////////
  453. //===========================================================================
  454. E_METAAPP_RESULT_T CBTINFO6611::Get_ConfirmState(void)
  455. {
  456.     return  m_eConfirmState;
  457. }
  458. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  459. void CBTINFO6611::Get_BTInfo(nvram_ef_btradio_mt6611_struct& s_bt_info)
  460. {
  461.     s_bt_info = m_sBtInfo;
  462. }
  463. //---------------------------------------------------------------------------
  464. void CBTINFO6611::Set_BTInfo(nvram_ef_btradio_mt6611_struct bt_info)
  465. {
  466.     m_sBtInfo = bt_info;
  467. }
  468. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  469. unsigned char CBTINFO6611::Get_BT_CAP_ID(void)
  470. {
  471.     return m_ucCapID;
  472. }
  473. //---------------------------------------------------------------------------
  474. void CBTINFO6611::Set_BT_CAP_ID(unsigned char cap_id)
  475. {
  476.     m_ucCapID = cap_id;
  477.     m_sBtInfo.Radio[MT6611_BT_CAP_ID_IDX] = cap_id;
  478. }
  479. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  480. unsigned int CBTINFO6611::Get_LpoPllCount(void)
  481. {
  482.     return m_uiLpoPllCount;
  483. }