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

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) 2001
  8. *
  9. *****************************************************************************/
  10. /*****************************************************************************
  11.  *
  12.  * Filename:
  13.  * ---------
  14.  *   bt_rf.cpp
  15.  *
  16.  * Project:
  17.  * --------
  18.  *   Maui META APP
  19.  *
  20.  * Description:
  21.  * ------------
  22.  *   BT RF test source
  23.  *
  24.  * Author:
  25.  * -------
  26.  *  Andy Ueng (mtk00490)
  27.  *
  28.  *============================================================================
  29.  *             HISTORY
  30.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  31.  *------------------------------------------------------------------------------
  32.  * $Revision$
  33.  * $Modtime$
  34.  * $Log$
  35.  *
  36.  *------------------------------------------------------------------------------
  37.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  38.  *============================================================================
  39.  ****************************************************************************/
  40. //===========================================================================
  41. #include<iostream>
  42. #include <fstream>
  43. #pragma hdrstop
  44. // BT
  45. #ifndef  _BT_HCI_COMMON_H_
  46. #include "bt_hci_common.h"
  47. #endif
  48. #ifndef  _BT_RF_H_
  49. #include "bt_rf.h"
  50. #endif
  51. // man
  52. #ifndef  _MAN_ACTIVE_H_
  53. #include "man_active.h"
  54. #endif
  55. // misc
  56. #ifndef  _FT_UTILS_H_
  57. #include "ft_utils.h"
  58. #endif
  59. // message
  60. #ifndef _META_LAB_MSG_H_
  61. #include "meta_lab_msg.h"
  62. #endif
  63. #define INVALID_TAG  -1
  64. //==============================================================================
  65. static CBTRF*  gs_bt_rf_ptr;
  66. static bool g_bIsRunning = false;
  67. //==============================================================================
  68. static void  REQ_TimeOut( void )
  69. {   gs_bt_rf_ptr->REQ_TimeOut();
  70. }
  71. //------------------------------------------------------------------------------
  72. static void  REQ_Stop( void )
  73. {   gs_bt_rf_ptr->REQ_Stop();
  74. }
  75. //------------------------------------------------------------------------------
  76. static void  REQ_Finish( void )
  77. {   gs_bt_rf_ptr->REQ_Finish();
  78. }
  79. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  80. static void  REQ_Enter_Test_Mode1( void )
  81. {   gs_bt_rf_ptr->REQ_Enter_Test_Mode1();
  82. }
  83. //-----------------------------------------------------------------------------
  84. static void __stdcall CNF_EnterTestMode1HCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  85. {   gs_bt_rf_ptr->CNF_EnterTestMode1HCIEvent( cnf, token, usrData );
  86. }
  87. //-----------------------------------------------------------------------------
  88. static void __stdcall CNF_EnterTestMode2HCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  89. {   gs_bt_rf_ptr->CNF_EnterTestMode2HCIEvent( cnf, token, usrData );
  90. }
  91. //-----------------------------------------------------------------------------
  92. static void __stdcall CNF_EnterTestMode3HCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  93. {   gs_bt_rf_ptr->CNF_EnterTestMode3HCIEvent( cnf, token, usrData );
  94. }
  95. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  96. static void  REQ_Enter_Test_Mode2( void )
  97. {   gs_bt_rf_ptr->REQ_Enter_Test_Mode2();
  98. }
  99. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  100. static void  REQ_Enter_Test_Mode3( void )
  101. {   gs_bt_rf_ptr->REQ_Enter_Test_Mode3();
  102. }
  103. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  104. static void  REQ_Send_Whiten_HCI_command( void )
  105. {   gs_bt_rf_ptr->REQ_Send_Whiten_HCI_command();
  106. }
  107. //------------------------------------------------------------------------------
  108. static void __stdcall CNF_SendWhitenHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  109. {   gs_bt_rf_ptr->CNF_SendWhitenHCIEvent( cnf, token, usrData );
  110. }
  111. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  112. //static void  REQ_Send_Modulation_HCI_command( void )
  113. //{   gs_bt_rf_ptr->REQ_Send_Modulation_HCI_command();
  114. //}
  115. //------------------------------------------------------------------------------
  116. //static void __stdcall CNF_SendModulationHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  117. //{   gs_bt_rf_ptr->CNF_SendModulationHCIEvent( cnf, token, usrData );
  118. //}
  119. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  120. static void  REQ_Send_AccessCode_HCI_command( void )
  121. {   gs_bt_rf_ptr->REQ_Send_AccessCode_HCI_command();
  122. }
  123. //------------------------------------------------------------------------------
  124. static void __stdcall CNF_SendAccessCodeHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  125. {   gs_bt_rf_ptr->CNF_SendAccessCodeHCIEvent( cnf, token, usrData );
  126. }
  127. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  128. static void  REQ_Send_TxParameter_HCI_command( void )
  129. {   gs_bt_rf_ptr->REQ_Send_TxParameter_HCI_command();
  130. }
  131. //------------------------------------------------------------------------------
  132. static void __stdcall CNF_SendTxParameterHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  133. {   gs_bt_rf_ptr->CNF_SendTxParameterHCIEvent( cnf, token, usrData );
  134. }
  135. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  136. static void  REQ_Send_RxParameter_HCI_command( void )
  137. {   gs_bt_rf_ptr->REQ_Send_RxParameter_HCI_command();
  138. }
  139. //------------------------------------------------------------------------------
  140. static void __stdcall CNF_SendRxParameterHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  141. {   gs_bt_rf_ptr->CNF_SendRxParameterHCIEvent( cnf, token, usrData );
  142. }
  143. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  144. static void  REQ_SendResetHCICommand( void )
  145. {   gs_bt_rf_ptr->REQ_SendResetHCICommand();
  146. }
  147. //---------------------------------------------------------------------------
  148. static void __stdcall CNF_ResetHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  149. {   gs_bt_rf_ptr->CNF_ResetHCIEvent( cnf, token, usrData );
  150. }
  151. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  152. static void  REQ_Send_Read_BDAdrress_HCI_command( void )
  153. {   gs_bt_rf_ptr->REQ_Send_Read_BDAdrress_HCI_command();
  154. }
  155. //-----------------------------------------------------------------------------
  156. static void __stdcall CNF_SendReadBDAddressHCIEvent1(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  157. {   gs_bt_rf_ptr->CNF_SendReadBDAddressHCIEvent1( cnf, token, usrData );
  158. }
  159. //-----------------------------------------------------------------------------
  160. static void __stdcall CNF_SendReadBDAddressHCIEvent2(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  161. {   gs_bt_rf_ptr->CNF_SendReadBDAddressHCIEvent2( cnf, token, usrData );
  162. }
  163. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  164. static void REQ_ChangePCL( void )
  165. {   gs_bt_rf_ptr->REQ_ChangePCL();
  166. }
  167. //-----------------------------------------------------------------------------
  168. static void __stdcall CNF_ChangePCLHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  169. {  gs_bt_rf_ptr->CNF_ChangePCLHCIEvent( cnf, token, usrData );
  170. }
  171. //===========================================================================
  172. CBTRF::CBTRF( void )
  173. {
  174.     g_bIsRunning = false;
  175.     ConfirmCallback = 0;
  176. }
  177. //---------------------------------------------------------------------------
  178. CBTRF::~CBTRF( void )
  179. {
  180. }
  181. //---------------------------------------------------------------------------
  182. void CBTRF::REQ_Finish(void)
  183. {
  184.     if (!g_bIsRunning)
  185.     {
  186.         return;
  187.     }
  188.     Confirm(METAAPP_SUCCESS);
  189. }
  190. //---------------------------------------------------------------------------
  191. void CBTRF::REQ_Stop(void)
  192. {
  193.     if (!g_bIsRunning)
  194.     {
  195.         return;
  196.     }
  197.     Confirm(METAAPP_STOP);
  198. }
  199. //---------------------------------------------------------------------------
  200. void CBTRF::REQ_TimeOut(void)
  201. {
  202.     if (!g_bIsRunning)
  203.     {
  204.         return;
  205.     }
  206.     
  207.     Confirm( METAAPP_TIMEOUT );
  208. }
  209. //---------------------------------------------------------------------------
  210. void CBTRF::Confirm(E_METAAPP_RESULT_T confirm_state)
  211. {
  212.     if (!g_bIsRunning)
  213.     {
  214.         return;
  215.     }
  216.     g_bIsRunning = false;
  217.     if (NULL == ConfirmCallback)
  218.     {
  219.         return;
  220.     }
  221.     m_eConfirmState = confirm_state;
  222.     ActiveMan->SetActiveFunction( ConfirmCallback );
  223. }
  224. //============================================================================
  225. void CBTRF::REQ_Enter_Test_Mode_Start( S_BT_RF  bt_rf )
  226. {
  227.     gs_bt_rf_ptr  = this;
  228.     g_bIsRunning  = true;
  229.     m_sBtRf = bt_rf;
  230.     ActiveMan->SetActiveFunction( ::REQ_Enter_Test_Mode1 );
  231. }
  232. //---------------------------------------------------------------------------
  233. void CBTRF::REQ_Enter_Test_Mode1( void )
  234. {
  235.     BT_HCI_COMMAND hci_cmd;
  236.     Compose_Enter_Test_Mode1_HCI_Command( hci_cmd );
  237.     AddTxLogToStringList( hci_cmd );
  238.     META_RESULT MetaResult = META_BT_SendHCICommand_r( m_META_HANDLE_Obj.Get_MainHandle(), 7500, &hci_cmd, ::CNF_EnterTestMode1HCIEvent, NULL, HCE_COMMAND_COMPLETE );
  239.     if( META_SUCCESS != MetaResult )
  240.     {
  241.         if( META_TIMEOUT == MetaResult )
  242.         {
  243.             Confirm( METAAPP_TIMEOUT );
  244.             return;
  245.         }
  246.         else if( META_CANCEL == MetaResult )
  247.         {
  248.             Confirm( METAAPP_CANCEL );
  249.             return;
  250.         }
  251.         else
  252.         {
  253.             Confirm( METAAPP_FAIL );
  254.             return;
  255.         }
  256.     }
  257.     ActiveMan->SetActiveFunction( ::REQ_Enter_Test_Mode2 );
  258. }
  259. //---------------------------------------------------------------------------
  260. void __stdcall CBTRF::CNF_EnterTestMode1HCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  261. {
  262.     // 0E,04,01,03,18,00
  263.     if(!g_bIsRunning)  return;
  264.     AddRxLogToStringList( *cnf );
  265.     if( (cnf->m_len      != 0x04) ||
  266.         (cnf->m_parms[0] != 0x01) ||
  267.         (cnf->m_parms[1] != 0x03) ||
  268.         (cnf->m_parms[2] != 0x18) ||
  269.         (cnf->m_parms[3] != 0x00)
  270.       )
  271.     {
  272.         Confirm( METAAPP_FAIL );
  273.         return;
  274.     }
  275. }
  276. //---------------------------------------------------------------------------
  277. void CBTRF::REQ_Enter_Test_Mode2( void )
  278. {
  279.     BT_HCI_COMMAND hci_cmd;
  280.     Compose_Enter_Test_Mode2_HCI_Command( hci_cmd );
  281.     AddTxLogToStringList( hci_cmd );
  282.     META_RESULT MetaResult = META_BT_SendHCICommand_r( m_META_HANDLE_Obj.Get_MainHandle(), 7500, &hci_cmd, ::CNF_EnterTestMode2HCIEvent, NULL, HCE_COMMAND_COMPLETE );
  283.     if( META_SUCCESS != MetaResult )
  284.     {
  285.         if( META_TIMEOUT == MetaResult )
  286.         {
  287.             Confirm( METAAPP_TIMEOUT );
  288.             return;
  289.         }
  290.         else if( META_CANCEL == MetaResult )
  291.         {
  292.             Confirm( METAAPP_CANCEL );
  293.             return;
  294.         }
  295.         else
  296.         {
  297.             Confirm( METAAPP_FAIL );
  298.             return;
  299.         }
  300.     }
  301.     ActiveMan->SetActiveFunction( ::REQ_Enter_Test_Mode3 );
  302. }
  303. //---------------------------------------------------------------------------
  304. void __stdcall CBTRF::CNF_EnterTestMode2HCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  305. {
  306.     // 0E,04,01,1A,0C,00
  307.     if(!g_bIsRunning)  return;
  308.     AddRxLogToStringList( *cnf );
  309.     if( (cnf->m_len      != 0x04) ||
  310.         (cnf->m_parms[0] != 0x01) ||
  311.         (cnf->m_parms[1] != 0x1A) ||
  312.         (cnf->m_parms[2] != 0x0C) ||
  313.         (cnf->m_parms[3] != 0x00)
  314.       )
  315.     {
  316.         Confirm( METAAPP_FAIL );
  317.         return;
  318.     }
  319. }
  320. //---------------------------------------------------------------------------
  321. void CBTRF::REQ_Enter_Test_Mode3( void )
  322. {
  323.     BT_HCI_COMMAND hci_cmd;
  324.     Compose_Enter_Test_Mode3_HCI_Command( hci_cmd );
  325.     AddTxLogToStringList( hci_cmd );
  326.     META_RESULT MetaResult = META_BT_SendHCICommand_r( m_META_HANDLE_Obj.Get_MainHandle(), 7500, &hci_cmd, ::CNF_EnterTestMode3HCIEvent, NULL, HCE_COMMAND_COMPLETE );
  327.     if( META_SUCCESS != MetaResult )
  328.     {
  329.         if( META_TIMEOUT == MetaResult )
  330.         {
  331.             Confirm( METAAPP_TIMEOUT );
  332.             return;
  333.         }
  334.         else if( META_CANCEL == MetaResult )
  335.         {
  336.             Confirm( METAAPP_CANCEL );
  337.             return;
  338.         }
  339.         else
  340.         {
  341.             Confirm( METAAPP_FAIL );
  342.             return;
  343.         }
  344.     }
  345.     ActiveMan->SetActiveFunction( ::REQ_Finish );
  346. }
  347. //---------------------------------------------------------------------------
  348. void __stdcall CBTRF::CNF_EnterTestMode3HCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  349. {
  350.     // 0E,04,01,05,0C,00
  351.     if(!g_bIsRunning)  return;
  352.     AddRxLogToStringList( *cnf );
  353.     if( (cnf->m_len      != 0x04) ||
  354.         (cnf->m_parms[0] != 0x01) ||
  355.         (cnf->m_parms[1] != 0x05) ||
  356.         (cnf->m_parms[2] != 0x0C) ||
  357.         (cnf->m_parms[3] != 0x00)
  358.       )
  359.     {
  360.         Confirm( METAAPP_FAIL );
  361.         return;
  362.     }
  363. }
  364. //============================================================================
  365. void CBTRF::REQ_Start( S_BT_RF  bt_rf )
  366. {
  367.     gs_bt_rf_ptr  = this;
  368.     g_bIsRunning  = true;
  369.     m_sBtRf = bt_rf;
  370.     ActiveMan->SetActiveFunction( ::REQ_Send_Whiten_HCI_command );
  371. }
  372. //---------------------------------------------------------------------------
  373. void CBTRF::REQ_Send_Whiten_HCI_command( void )
  374. {
  375.     // sent TX access code
  376.     BT_HCI_COMMAND hci_cmd;
  377.     Compose_Whiten_HCI_Command( m_sBtRf.e_whiten, hci_cmd );
  378.    // unsigned char        str[256];
  379.    // Array_To_Hex_String_UnsignedChar( str, hci_cmd.m_cmd, hci_cmd.m_len, ',' );
  380.    // AnsiString as_cmd( (const char*)str, (unsigned int)hci_cmd.m_len );
  381.     AddTxLogToStringList( hci_cmd );
  382.     META_RESULT MetaResult = META_BT_SendHCICommand_r( m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_SendWhitenHCIEvent, NULL, HCE_COMMAND_COMPLETE );
  383.     if( META_SUCCESS != MetaResult )
  384.     {
  385.         if( META_TIMEOUT == MetaResult )
  386.         {
  387.             Confirm( METAAPP_TIMEOUT );
  388.             return;
  389.         }
  390.         else if( META_CANCEL == MetaResult )
  391.         {
  392.             Confirm( METAAPP_CANCEL );
  393.             return;
  394.         }
  395.         else
  396.         {
  397.             Confirm( METAAPP_FAIL );
  398.             return;
  399.         }
  400.     }
  401.    // ActiveMan->SetActiveFunction( ::REQ_Send_Modulation_HCI_command );
  402.     if( BT_TX == m_sBtRf.e_test_type )
  403.     {
  404.         ActiveMan->SetActiveFunction( ::REQ_Send_TxParameter_HCI_command );
  405.     }
  406.     else
  407.     {   ActiveMan->SetActiveFunction( ::REQ_Send_RxParameter_HCI_command );
  408.     }
  409. }
  410. //---------------------------------------------------------------------------
  411. void __stdcall CBTRF::CNF_SendWhitenHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  412. {
  413.     if(!g_bIsRunning)  return;
  414.     AddRxLogToStringList( *cnf );
  415. }
  416. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  417. //void CBTRF::REQ_Send_Modulation_HCI_command( void )
  418. //{
  419. //    // sent TX access code
  420. //    BT_HCI_COMMAND hci_cmd;
  421. //    Compose_Modulation_HCI_Command( m_sBtRf.e_modulation, hci_cmd );
  422. //
  423. //   // unsigned char        str[256];
  424. //   // Array_To_Hex_String_UnsignedChar( str, hci_cmd.m_cmd, hci_cmd.m_len, ',' );
  425. //  //  AnsiString as_cmd( (const char*)str, (unsigned int)hci_cmd.m_len );
  426. //    AddTxLogToStringList( hci_cmd );
  427. //
  428. //    META_RESULT MetaResult = META_BT_SendHCICommand_r( m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_SendWhitenHCIEvent, NULL, HCE_COMMAND_COMPLETE );
  429. //
  430. //    if( META_SUCCESS != MetaResult )
  431. //    {
  432. //        Confirm( METAAPP_FAIL );
  433. //        return;
  434. //    }
  435. //
  436. //    if( BT_TX == m_sBtRf.e_test_type )
  437. //    {
  438. //        ActiveMan->SetActiveFunction( ::REQ_Send_TxParameter_HCI_command );
  439. //    }
  440. //    else
  441. //    {   ActiveMan->SetActiveFunction( ::REQ_Send_RxParameter_HCI_command );
  442. //    }
  443. //
  444. //}
  445. //
  446. //---------------------------------------------------------------------------
  447. //void __stdcall CBTRF::CNF_SendModulationHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  448. //{
  449. //    if(!g_bIsRunning)  return;
  450. //
  451. //    AddRxLogToStringList( *cnf );
  452. //}
  453. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  454. void CBTRF::REQ_Send_TxParameter_HCI_command( void )
  455. {
  456.     // sent TX access code
  457.     BT_HCI_COMMAND hci_cmd;
  458.     Compose_TxParameter_HCI_command( m_sBtRf, hci_cmd );
  459.    // unsigned char        str[256];
  460.    // Array_To_Hex_String_UnsignedChar( str, hci_cmd.m_cmd, hci_cmd.m_len, ',' );
  461.    // AnsiString as_cmd( (const char*)str, (unsigned int)hci_cmd.m_len );
  462.     AddTxLogToStringList( hci_cmd );
  463.     META_RESULT MetaResult = META_BT_SendHCICommand_r( m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_SendTxParameterHCIEvent, NULL, HCE_COMMAND_COMPLETE );
  464.     if( META_SUCCESS != MetaResult )
  465.     {
  466.         if( META_TIMEOUT == MetaResult )
  467.         {
  468.             Confirm( METAAPP_TIMEOUT );
  469.             return;
  470.         }
  471.         else if( META_CANCEL == MetaResult )
  472.         {
  473.             Confirm( METAAPP_CANCEL );
  474.             return;
  475.         }
  476.         else
  477.         {
  478.             Confirm( METAAPP_FAIL );
  479.             return;
  480.         }
  481.     }
  482.     ActiveMan->SetActiveFunction( ::REQ_Send_AccessCode_HCI_command );
  483. }
  484. //---------------------------------------------------------------------------
  485. void __stdcall CBTRF::CNF_SendTxParameterHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  486. {
  487.     if(!g_bIsRunning)  return;
  488.     AddRxLogToStringList( *cnf );
  489. }
  490. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  491. void CBTRF::REQ_Send_RxParameter_HCI_command( void )
  492. {
  493.     // sent TX access code
  494.     BT_HCI_COMMAND hci_cmd;
  495.     Compose_RxParameter_HCI_command( m_sBtRf, hci_cmd );
  496.    // unsigned char        str[256];
  497.    // Array_To_Hex_String_UnsignedChar( str, hci_cmd.m_cmd, hci_cmd.m_len, ',' );
  498.    // AnsiString as_cmd( (const char*)str, (unsigned int)hci_cmd.m_len );
  499.     AddTxLogToStringList( hci_cmd );
  500.     META_RESULT MetaResult = META_BT_SendHCICommand_r( m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_SendRxParameterHCIEvent, NULL, HCE_COMMAND_COMPLETE );
  501.     if( META_SUCCESS != MetaResult )
  502.     {
  503.         if( META_TIMEOUT == MetaResult )
  504.         {
  505.             Confirm( METAAPP_TIMEOUT );
  506.             return;
  507.         }
  508.         else if( META_CANCEL == MetaResult )
  509.         {
  510.             Confirm( METAAPP_CANCEL );
  511.             return;
  512.         }
  513.         else
  514.         {
  515.             Confirm( METAAPP_FAIL );
  516.             return;
  517.         }
  518.     }
  519.     ActiveMan->SetActiveFunction( ::REQ_Send_AccessCode_HCI_command );
  520. }
  521. //---------------------------------------------------------------------------
  522. void __stdcall CBTRF::CNF_SendRxParameterHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  523. {
  524.     if(!g_bIsRunning)  return;
  525.     AddRxLogToStringList( *cnf );
  526. }
  527. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  528. void CBTRF::REQ_Send_AccessCode_HCI_command( void )
  529. {
  530.     // sent TX access code
  531.     BT_HCI_COMMAND hci_cmd;
  532.     Compose_AccessCode_HCI_Command( m_sBtRf.s_access_code, hci_cmd );
  533.    // unsigned char        str[256];
  534.    // Array_To_Hex_String_UnsignedChar( str, hci_cmd.m_cmd, hci_cmd.m_len, ',' );
  535.   //  AnsiString as_cmd( (const char*)str, (unsigned int)hci_cmd.m_len );
  536.     AddTxLogToStringList( hci_cmd );
  537.     META_RESULT MetaResult = META_BT_SendHCICommand_r( m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_SendWhitenHCIEvent, NULL, HCE_COMMAND_COMPLETE );
  538.     if( META_SUCCESS != MetaResult )
  539.     {
  540.         if( META_TIMEOUT == MetaResult )
  541.         {
  542.             Confirm( METAAPP_TIMEOUT );
  543.             return;
  544.         }
  545.         else if( META_CANCEL == MetaResult )
  546.         {
  547.             Confirm( METAAPP_CANCEL );
  548.             return;
  549.         }
  550.         else
  551.         {
  552.             Confirm( METAAPP_FAIL );
  553.             return;
  554.         }
  555.     }
  556.     ActiveMan->SetActiveFunction( ::REQ_Finish );
  557. }
  558. //---------------------------------------------------------------------------
  559. void __stdcall CBTRF::CNF_SendAccessCodeHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  560. {
  561.     if(!g_bIsRunning)  return;
  562.     AddRxLogToStringList( *cnf );
  563. }
  564. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  565. void  CBTRF::Reset_HCI_Command( BT_HCI_COMMAND &hci_cmd )
  566. {
  567.     for( int i=0; i<(sizeof(hci_cmd.m_cmd)/sizeof(hci_cmd.m_cmd[0])); i++ )
  568.     {
  569.         hci_cmd.m_cmd[i] = 0;
  570.     }
  571. }
  572. //---------------------------------------------------------------------------
  573. void  CBTRF::Compose_Enter_Test_Mode1_HCI_Command( BT_HCI_COMMAND &hci_cmd )
  574. {
  575.     hci_cmd.m_opcode = 0x1803;
  576.     hci_cmd.m_len    = 0;
  577. }
  578. //---------------------------------------------------------------------------
  579. void  CBTRF::Compose_Enter_Test_Mode2_HCI_Command( BT_HCI_COMMAND &hci_cmd )
  580. {
  581.     hci_cmd.m_opcode = 0x0C1A;
  582.     hci_cmd.m_len    = 0x01;
  583.     Reset_HCI_Command( hci_cmd );
  584.     hci_cmd.m_cmd[0] = 0x03;
  585. }
  586. //---------------------------------------------------------------------------
  587. void  CBTRF::Compose_Enter_Test_Mode3_HCI_Command( BT_HCI_COMMAND &hci_cmd )
  588. {
  589.     hci_cmd.m_opcode = 0x0C05;
  590.     hci_cmd.m_len    = 0x03;
  591.     Reset_HCI_Command( hci_cmd );
  592.     hci_cmd.m_cmd[0] = 0x02;
  593.     hci_cmd.m_cmd[1] = 0x00;
  594.     hci_cmd.m_cmd[2] = 0x02;
  595. }
  596. //---------------------------------------------------------------------------
  597. void  CBTRF::Compose_Whiten_HCI_Command( E_TX_WHITEN &whiten, BT_HCI_COMMAND &hci_cmd )
  598. {
  599.     hci_cmd.m_opcode = 0xFC15;
  600.     hci_cmd.m_len    = 1;
  601.     Reset_HCI_Command( hci_cmd );
  602.     hci_cmd.m_cmd[0] = (unsigned char) whiten;
  603. }
  604. //---------------------------------------------------------------------------
  605. void  CBTRF::DeCompose_Whiten_HCI_Event( BT_HCI_COMMAND &hci_cmd, E_TX_WHITEN &whiten )
  606. {
  607.    // whiten = (E_TX_WHITEN) hci_cmd.m_cmd[3];
  608. }
  609. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  610. void  CBTRF::Compose_Modulation_HCI_Command( E_TX_MODULATION &modulation, BT_HCI_COMMAND &hci_cmd )
  611. {
  612.     hci_cmd.m_opcode = 0xFC32;
  613.     hci_cmd.m_len    = 1;
  614.     Reset_HCI_Command( hci_cmd );
  615.     hci_cmd.m_cmd[0] = (unsigned char) modulation;
  616. }
  617. //----------------------------------------------------------------------------
  618. void  CBTRF::DeCompose_Modulation_HCI_Event( BT_HCI_COMMAND &hci_cmd, E_TX_MODULATION &modulation )
  619. {
  620.    // modulation = (E_TX_MODULATION) hci_cmd.m_cmd[3];
  621. }
  622. //---------------------------------------------------------------------------
  623. void CBTRF::Compose_AccessCode_HCI_Command( S_BT_TX_ACCESS_CODE &access_code, BT_HCI_COMMAND &hci_cmd )
  624. {
  625.     hci_cmd.m_opcode = 0xFC12;
  626.     hci_cmd.m_len    = 8;
  627.     Reset_HCI_Command( hci_cmd );
  628.     for( int i=0; i<(sizeof(access_code.uc_access_code)/sizeof(access_code.uc_access_code[0])); i++ )
  629.     {
  630.         hci_cmd.m_cmd[i] = access_code.uc_access_code[i];
  631.     }
  632. }
  633. //---------------------------------------------------------------------------
  634. void CBTRF::DeCompose_AccessCode_HCI_Event( BT_HCI_COMMAND &hci_cmd, S_BT_TX_ACCESS_CODE &access_code )
  635. {
  636.    // for( int i=0; i<(sizeof(access_code.uc_access_code)/access_code.uc_access_code[0]); i++ )
  637.    // {
  638.    //     access_code.uc_access_code[i] = hci_cmd.m_cmd[3+i];
  639.    // }
  640. }
  641. //---------------------------------------------------------------------------
  642. void CBTRF::Compose_TxParameter_HCI_command( S_BT_RF bt_rf_tx, BT_HCI_COMMAND &hci_cmd )
  643. {
  644.     hci_cmd.m_opcode  = 0xFC0D;
  645.     hci_cmd.m_len     = 23;
  646.     Reset_HCI_Command( hci_cmd );
  647.     hci_cmd.m_cmd[0]  = 0x00;
  648.     hci_cmd.m_cmd[1]  = 0x00;
  649.     hci_cmd.m_cmd[2]  = bt_rf_tx.e_pattern;
  650.     hci_cmd.m_cmd[3]  = bt_rf_tx.e_freq_type;
  651.     hci_cmd.m_cmd[4]  = bt_rf_tx.uc_freq;
  652.     hci_cmd.m_cmd[5]  = bt_rf_tx.uc_freq;
  653.     hci_cmd.m_cmd[6]  = bt_rf_tx.e_power_ctrl;
  654.     hci_cmd.m_cmd[7] = bt_rf_tx.uc_poll_period;
  655.     hci_cmd.m_cmd[8] = bt_rf_tx.e_packet_type;
  656.     hci_cmd.m_cmd[9] = bt_rf_tx.us_data_len & 0x00FF;
  657.     hci_cmd.m_cmd[10] = ( bt_rf_tx.us_data_len & 0xFF00 ) >> 8;
  658.     hci_cmd.m_cmd[11] = 0x02;
  659.     hci_cmd.m_cmd[12] = 0x00;
  660.     hci_cmd.m_cmd[13] = 0x01;
  661.     for( int i=14; i<23; i++ )
  662.     {
  663.        hci_cmd.m_cmd[i] = 0x00;
  664.     }
  665. }
  666. //---------------------------------------------------------------------------
  667. void CBTRF::DeCompose_TxParameter_HCI_Event( BT_HCI_COMMAND &hci_cmd, S_BT_RF bt_rf_tx )
  668. {
  669.   //  bt_rf_tx.e_pattern      = hci_cmd.m_cmd[5];
  670.   //  bt_rf_tx.e_freq_type    = hci_cmd.m_cmd[6];
  671.   //  bt_rf_tx.uc_freq        = hci_cmd.m_cmd[7];
  672.   //  bt_rf_tx.uc_freq        = hci_cmd.m_cmd[8];
  673.   //  bt_rf_tx.e_power_ctrl   = hci_cmd.m_cmd[9];
  674.   //  bt_rf_tx.uc_poll_period = hci_cmd.m_cmd[10];
  675.   //  bt_rf_tx.e_packet_type  = hci_cmd.m_cmd[11];
  676.   //  bt_rf_tx.uc_data_len    = hci_cmd.m_cmd[12];
  677. }
  678. //---------------------------------------------------------------------------
  679. void CBTRF::Compose_RxParameter_HCI_command( S_BT_RF bt_rf_rx, BT_HCI_COMMAND &hci_cmd )
  680. {
  681.     hci_cmd.m_opcode  = 0xFC0D;
  682.     hci_cmd.m_len     = 23;
  683.     Reset_HCI_Command( hci_cmd );
  684.     hci_cmd.m_cmd[0]  = 0x00;
  685.     hci_cmd.m_cmd[1]  = 0x00;
  686.     hci_cmd.m_cmd[2]  = bt_rf_rx.e_pattern;
  687.     hci_cmd.m_cmd[3]  = bt_rf_rx.e_freq_type;
  688.     hci_cmd.m_cmd[4]  = bt_rf_rx.uc_freq;
  689.     hci_cmd.m_cmd[5]  = bt_rf_rx.uc_freq;
  690.     hci_cmd.m_cmd[6]  = bt_rf_rx.e_power_ctrl;
  691.     hci_cmd.m_cmd[7] = bt_rf_rx.uc_poll_period;
  692.     hci_cmd.m_cmd[8] = bt_rf_rx.e_packet_type;
  693.     hci_cmd.m_cmd[9] = bt_rf_rx.us_data_len;
  694.     hci_cmd.m_cmd[10] = 0x00;
  695.     hci_cmd.m_cmd[11] = 0x02;
  696.     hci_cmd.m_cmd[12] = 0x00;
  697.     hci_cmd.m_cmd[13] = 0x01;
  698.     for( int i=14; i<23; i++ )
  699.     {
  700.        hci_cmd.m_cmd[i] = 0x00;
  701.     }
  702. }
  703. //---------------------------------------------------------------------------
  704. void CBTRF::DeCompose_RxParameter_HCI_Event( BT_HCI_COMMAND &hci_cmd, S_BT_RF bt_rf_rx )
  705. {
  706. }
  707. //==========================================================================
  708. void  CBTRF::REQ_Stop_Start( void )
  709. {
  710.     gs_bt_rf_ptr  = this;
  711.     g_bIsRunning  = true;
  712.     META_CancelAllBlockingCall_r( m_META_HANDLE_Obj.Get_MainHandle() );
  713.     //ActiveMan->SetActiveFunction( ::REQ_Stop );
  714.     ActiveMan->SetActiveFunction( ::REQ_SendResetHCICommand );
  715. }
  716. //---------------------------------------------------------------
  717. void CBTRF::REQ_SendResetHCICommand( void )
  718. {
  719.     if(!g_bIsRunning)  return;
  720.     BT_HCI_COMMAND hci_cmd;
  721.     Compose_Reset_HCI_Command( hci_cmd );
  722.     AddTxLogToStringList( hci_cmd );
  723.     META_RESULT MetaResult = META_BT_SendHCICommand_r( m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_ResetHCIEvent, NULL, HCE_COMMAND_COMPLETE );
  724.     if( META_SUCCESS != MetaResult )
  725.     {
  726.         if( META_TIMEOUT == MetaResult )
  727.         {
  728.             Confirm( METAAPP_TIMEOUT );
  729.             return;
  730.         }
  731.         else if( META_CANCEL == MetaResult )
  732.         {
  733.             Confirm( METAAPP_CANCEL );
  734.             return;
  735.         }
  736.         else
  737.         {
  738.             Confirm( METAAPP_FAIL );
  739.             return;
  740.         }
  741.     }
  742.     ActiveMan->SetActiveFunction( ::REQ_Stop );
  743. }
  744. //---------------------------------------------------------------------------
  745. void __stdcall CBTRF::CNF_ResetHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  746. {
  747.     // 0E,04,01,03,0C,00
  748.     if(!g_bIsRunning)  return;
  749.     AddRxLogToStringList( *cnf );
  750.     if( (cnf->m_len      != 0x04) ||
  751.         (cnf->m_parms[0] != 0x01) ||
  752.         (cnf->m_parms[1] != 0x03) ||
  753.         (cnf->m_parms[2] != 0x0C) ||
  754.         (cnf->m_parms[3] != 0x00)
  755.       )
  756.     {
  757.         Confirm( METAAPP_FAIL );
  758.         return;
  759.     }
  760. }
  761. //---------------------------------------------------------------------------
  762. void CBTRF::Compose_Reset_HCI_Command( BT_HCI_COMMAND &hci_cmd )
  763. {
  764.     hci_cmd.m_opcode = 0x0C03;
  765.     hci_cmd.m_len    = 0x00;
  766. }
  767. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  768. void  CBTRF::REQ_QueryBDAddress_Start( S_BT_RF  bt_rf )
  769. {
  770.     gs_bt_rf_ptr  = this;
  771.     g_bIsRunning  = true;
  772.     m_sBtRf = bt_rf;
  773.     ActiveMan->SetActiveFunction( ::REQ_Send_Read_BDAdrress_HCI_command );
  774. }
  775. //---------------------------------------------------------------------------
  776. void  CBTRF::REQ_Send_Read_BDAdrress_HCI_command( void )
  777. {
  778.     if(!g_bIsRunning)  return;
  779.     m_bEventOk = false;
  780.     BT_HCI_COMMAND hci_cmd;
  781.     Compose_Read_BD_Addr_HCI_Command1( hci_cmd );
  782.     AddTxLogToStringList( hci_cmd );
  783.     META_RESULT MetaResult = META_BT_SendHCICommand_r( m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_SendReadBDAddressHCIEvent1, NULL, HCE_COMMAND_COMPLETE );
  784.     if( (META_SUCCESS != MetaResult) || (!m_bEventOk) )
  785.     {
  786.         if( META_TIMEOUT == MetaResult )
  787.         {
  788.             Confirm( METAAPP_TIMEOUT );
  789.             return;
  790.         }
  791.         else if( META_CANCEL == MetaResult )
  792.         {
  793.             Confirm( METAAPP_CANCEL );
  794.             return;
  795.         }
  796.         else
  797.         {
  798.             Confirm( METAAPP_FAIL );
  799.             return;
  800.         }
  801.     }
  802.     Compose_Read_BD_Addr_HCI_Command2( hci_cmd );
  803.     AddTxLogToStringList( hci_cmd );
  804.     MetaResult = META_BT_SendHCICommand_r( m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_SendReadBDAddressHCIEvent2, NULL, HCE_COMMAND_COMPLETE );
  805.     if( (META_SUCCESS != MetaResult) || (!m_bEventOk) )
  806.     {
  807.         if( META_TIMEOUT == MetaResult )
  808.         {
  809.             Confirm( METAAPP_TIMEOUT );
  810.             return;
  811.         }
  812.         else if( META_CANCEL == MetaResult )
  813.         {
  814.             Confirm( METAAPP_CANCEL );
  815.             return;
  816.         }
  817.         else
  818.         {
  819.             Confirm( METAAPP_FAIL );
  820.             return;
  821.         }
  822.     }
  823.     ActiveMan->SetActiveFunction( ::REQ_Finish );
  824. }
  825. //---------------------------------------------------------------------------
  826. void __stdcall CBTRF::CNF_SendReadBDAddressHCIEvent1(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  827. {
  828.     if(!g_bIsRunning)  return;
  829.     if( 0xFF == cnf->m_event )  return; // LMP
  830.     AddRxLogToStringList( *cnf );
  831.     m_bEventOk = true;
  832. }
  833. //---------------------------------------------------------------------------
  834. void __stdcall CBTRF::CNF_SendReadBDAddressHCIEvent2(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  835. {
  836.     if(!g_bIsRunning)  return;
  837.     if( 0xFF == cnf->m_event )  return; // LMP
  838.     AddRxLogToStringList( *cnf );
  839.     m_bEventOk = DeCompose_Read_BD_Addr_HCI_Event2( *cnf, m_sBdAddr );
  840.     if (m_sBtRf.hPostMsgDestHandle != NULL)
  841.     {
  842.         PostMessage(
  843.                          m_sBtRf.hPostMsgDestHandle,
  844.                          WM_ML_BT_PRINT_MSG,
  845.                          PAGEIDX_BT_RF,
  846.                          0
  847.                         );
  848.     }
  849. }
  850. //-----------------------------------------------------------------------
  851. void  CBTRF::Compose_Read_BD_Addr_HCI_Command1( BT_HCI_COMMAND &hci_cmd )
  852. {
  853.     hci_cmd.m_opcode = 0x0C03;
  854.     hci_cmd.m_len    = 0;
  855.     Reset_HCI_Command( hci_cmd );
  856. }
  857. //--------------------------------------------------------------------------
  858. void  CBTRF::Compose_Read_BD_Addr_HCI_Command2( BT_HCI_COMMAND &hci_cmd )
  859. {
  860.     hci_cmd.m_opcode = 0x1009;
  861.     hci_cmd.m_len    = 0;
  862.     Reset_HCI_Command( hci_cmd );
  863. }
  864. //--------------------------------------------------------------------------
  865. bool  CBTRF::DeCompose_Read_BD_Addr_HCI_Event2(BT_HCI_EVENT hci_event, S_BD_ADDR &s_bd_addr)
  866. {
  867.     if(
  868.         0x09 != hci_event.m_parms[1] ||
  869.         0x10 != hci_event.m_parms[2] ||
  870.         0x00 != hci_event.m_parms[3]
  871.        )
  872.      {  return false;
  873.      }
  874.     // S_BD_ADDR bd_addr;
  875.      for( int i=0; i<BD_ADDRESS_LEN; i++ )
  876.         s_bd_addr.uc_BD_Addr[i] = hci_event.m_parms[4+i];
  877.    // s_bd_addrs.us_NAP = (bd_addr.uc_BD_Addr[5] << 8) | bd_addr.uc_BD_Addr[4];
  878.    // s_bd_addrs.uc_UAP = bd_addr.uc_BD_Addr[3];
  879.    // s_bd_addrs.ui_LAP = (bd_addr.uc_BD_Addr[2] << 16) | (bd_addr.uc_BD_Addr[1] << 8) | bd_addr.uc_BD_Addr[0];
  880.     return true;
  881. }
  882. //===========================================================================
  883. void  CBTRF::REQ_ChangePCL_Start( S_BT_RF  bt_rf )
  884. {
  885.     gs_bt_rf_ptr  = this;
  886.     g_bIsRunning  = true;
  887.     m_sBtRf = bt_rf;
  888.     ActiveMan->SetActiveFunction( ::REQ_ChangePCL );
  889. }
  890. //------------------------------------------------------
  891. void CBTRF::REQ_ChangePCL( void )
  892. {
  893.     if(!g_bIsRunning)  return;
  894.     m_bEventOk = false;
  895.     BT_HCI_COMMAND hci_cmd;
  896.     Compose_ChangePCL_HCI_Command( hci_cmd );
  897.     AddTxLogToStringList( hci_cmd );
  898.     META_RESULT MetaResult = META_BT_SendHCICommand_r( m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_ChangePCLHCIEvent, NULL, HCE_COMMAND_COMPLETE );
  899.     if( (META_SUCCESS != MetaResult) || (!m_bEventOk) )
  900.     {
  901.         if( META_TIMEOUT == MetaResult )
  902.         {
  903.             Confirm( METAAPP_TIMEOUT );
  904.             return;
  905.         }
  906.         else if( META_CANCEL == MetaResult )
  907.         {
  908.             Confirm( METAAPP_CANCEL );
  909.             return;
  910.         }
  911.         else
  912.         {
  913.             Confirm( METAAPP_FAIL );
  914.             return;
  915.         }
  916.     }
  917. }
  918. //-----------------------------------------------------
  919. void __stdcall CBTRF::CNF_ChangePCLHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  920. {
  921.     // 0E 06 01 17 FC 00 00 00
  922.     if( ! g_bIsRunning )  return;
  923.     if( 0xFF == cnf->m_event )  return; // LMP
  924.     if( ( 0x06 != cnf->m_len )      ||
  925.         ( 0x01 != cnf->m_parms[0] ) ||
  926.         ( 0x17 != cnf->m_parms[1] ) ||
  927.         ( 0xFC != cnf->m_parms[2] ) ||
  928.         ( 0x00 != cnf->m_parms[3] ) ||
  929.         ( 0x00 != cnf->m_parms[4] ) ||
  930.         ( 0x00 != cnf->m_parms[5] )
  931.       )
  932.     {
  933.         return;
  934.     }
  935.     AddRxLogToStringList( *cnf );
  936.     m_bEventOk = true;
  937. }
  938. //----------------------------------------------
  939. void  CBTRF::Compose_ChangePCL_HCI_Command( BT_HCI_COMMAND &hci_cmd )
  940. {
  941.     // 17 FC 04 00 00 PP 00
  942.     hci_cmd.m_opcode = 0xFC17;
  943.     hci_cmd.m_len    = 0x04;
  944.     Reset_HCI_Command( hci_cmd );
  945.     hci_cmd.m_cmd[0] = 0x00;
  946.     hci_cmd.m_cmd[1] = 0x00;
  947.     hci_cmd.m_cmd[2] = m_sBtRf.uc_pcl;
  948.     hci_cmd.m_cmd[3] = 0x00;
  949. }
  950. //===========================================================================
  951. ////////////////////////////   Log  information   ////////////////////////
  952. //===========================================================================
  953. void CBTRF::AddTxLogToStringList(BT_HCI_COMMAND hci_cmd)
  954. {
  955.     if (NULL == m_sBtRf.log)
  956.     {
  957.         return;
  958.     }
  959.     char        str[1024];
  960.     AnsiString as_log;
  961.     sprintf( str, "%X,", hci_cmd.m_opcode & 0x00FF );
  962.     AnsiString as_opcode_low(str);
  963.     sprintf( str, "%X,", (hci_cmd.m_opcode & 0xFF00)>>8 );
  964.     AnsiString as_opcode_high(str);
  965.     Array_To_Hex_String_UnsignedChar( str, hci_cmd.m_cmd, hci_cmd.m_len, ',' );
  966.     AnsiString as_cmd( (const char*)str );
  967.     if( 0 == hci_cmd.m_len )
  968.        as_cmd = "";
  969.     sprintf( str, "%X,", hci_cmd.m_len );
  970.     AnsiString as_length(str);
  971.     as_log = "[" + TimeToStr(Time()) + "] TX: " + as_opcode_low + as_opcode_high + as_length  + as_cmd;
  972.     m_sBtRf.log->Add( as_log );
  973.     PostMessage(
  974.                          m_sBtRf.hPostMsgDestHandle,
  975.                          WM_ML_BT_PRINT_MSG,
  976.                          PAGEIDX_BT_RF,
  977.                          0
  978.                         );
  979. }
  980. //--------------------------------------------------------------------------
  981. void CBTRF::AddRxLogToStringList(BT_HCI_EVENT hci_event)
  982. {
  983.     if (NULL == m_sBtRf.log)
  984.     {
  985.         return;
  986.     }
  987.     
  988.     unsigned char        str[1024];
  989.     AnsiString as_log;
  990.     sprintf( str, "%X,", hci_event.m_event );
  991.     AnsiString as_event( (const char*) str );
  992.     sprintf( str, "%X,", hci_event.m_len );
  993.     AnsiString as_length( (const char*) str );
  994.     Array_To_Hex_String_UnsignedChar( str, hci_event.m_parms, hci_event.m_len, ',' );
  995.     AnsiString as_param( (const char*) str );
  996.     if(  0 == hci_event.m_len )
  997.         as_param = "";
  998.         
  999.     as_log = "[" + TimeToStr(Time()) + "] RX: " + as_event + as_length + as_param;    
  1000.     m_sBtRf.log->Add(as_log);
  1001.     PostMessage(
  1002.                          m_sBtRf.hPostMsgDestHandle,
  1003.                          WM_ML_BT_PRINT_MSG,
  1004.                          PAGEIDX_BT_RF,
  1005.                          0
  1006.                         );
  1007. }
  1008. //===========================================================================
  1009. ////////////////////////////   Global  information   ////////////////////////
  1010. //===========================================================================
  1011. E_METAAPP_RESULT_T CBTRF::Get_ConfirmState(void)
  1012. {
  1013.     return  m_eConfirmState;
  1014. }
  1015. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1016. S_BD_ADDR CBTRF::Get_BdAddress(void)
  1017. {   return m_sBdAddr;
  1018. }