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

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 packet 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 <stdio.h>
  42. #pragma hdrstop
  43. // BT
  44. #ifndef  _BT_PKT_H_
  45. #include "bt_pkt.h"
  46. #endif
  47. #ifndef  _BT_HCI_COMMON_H_
  48. #include "bt_hci_common.h"
  49. #endif
  50. // man
  51. //#ifndef  _MAN_TIMER_H_
  52. //#include "man_timer.h"
  53. //#endif
  54. #ifndef  _MAN_ACTIVE_H_
  55. #include "man_active.h"
  56. #endif
  57. // misc
  58. #ifndef  _FT_UTILS_H_
  59. #include "ft_utils.h"
  60. #endif
  61. // message
  62. #ifndef _META_LAB_MSG_H_
  63. #include "meta_lab_msg.h"
  64. #endif
  65. //==============================================================================
  66. static CBTPKT*  gs_bt_pkt_ptr;
  67. static bool g_bIsRunning = false;
  68. //==============================================================================
  69. static void REQ_Pkt_Test(void)
  70. {
  71.     gs_bt_pkt_ptr->REQ_Pkt_Test();
  72. }
  73. //------------------------------------------------------------------------------
  74. static void __stdcall CNF_ResetBDHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  75. {
  76.     gs_bt_pkt_ptr->CNF_ResetBDHCIEvent(cnf, token, usrData);
  77. }
  78. //------------------------------------------------------------------------------
  79. static void __stdcall CNF_ReadBDAddressHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  80. {
  81.     gs_bt_pkt_ptr->CNF_ReadBDAddressHCIEvent(cnf, token, usrData);
  82. }
  83. //------------------------------------------------------------------------------
  84. static void __stdcall CNF_DUTEnterTestModeHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  85. {
  86.     gs_bt_pkt_ptr->CNF_DUTEnterTestModeHCIEvent(cnf, token, usrData);
  87. }
  88. //------------------------------------------------------------------------------
  89. static void __stdcall CNF_DUTScanEnableHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  90. {
  91.     gs_bt_pkt_ptr->CNF_DUTScanEnableHCIEvent(cnf, token, usrData);
  92. }
  93. //------------------------------------------------------------------------------
  94. static void __stdcall CNF_DUTAutoAcceptHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  95. {
  96.     gs_bt_pkt_ptr->CNF_DUTAutoAcceptHCIEvent(cnf, token, usrData);
  97. }
  98. //------------------------------------------------------------------------------
  99. static void __stdcall CNF_TesterCreateConnectionHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  100. {
  101.     gs_bt_pkt_ptr->CNF_TesterCreateConnectionHCIEvent(cnf, token, usrData);
  102. }
  103. //------------------------------------------------------------------------------
  104. static void __stdcall CNF_TesterTCIActivateRemoteDUTHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  105. {
  106.     gs_bt_pkt_ptr->CNF_TesterTCIActivateRemoteDUTHCIEvent(cnf, token, usrData);
  107. }
  108. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  109. static void REQ_Tester_TCI_Control_Remote_DUT(void)
  110. {
  111.     gs_bt_pkt_ptr->REQ_Tester_TCI_Control_Remote_DUT();
  112. }
  113. //------------------------------------------------------------------------------
  114. static void __stdcall CNF_TesterTCIControlRemoteDUTHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  115. {
  116.     gs_bt_pkt_ptr->CNF_TesterTCIControlRemoteDUTHCIEvent(cnf, token, usrData);
  117. }
  118. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  119. static void REQ_Read_TX_RX_Count(void)
  120. {
  121.     gs_bt_pkt_ptr->REQ_Read_TX_RX_Count();
  122. }
  123. //------------------------------------------------------------------------------
  124. static void __stdcall CNF_ReadDeviceTxRxCountHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  125. {
  126.     gs_bt_pkt_ptr->CNF_ReadDeviceTxRxCountHCIEvent(cnf, token, usrData);
  127. }
  128. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  129. static void REQ_Read_EDR_TX_RX_Count(void)
  130. {
  131.     gs_bt_pkt_ptr->REQ_Read_EDR_TX_RX_Count();
  132. }
  133. //------------------------------------------------------------------------------
  134. static void __stdcall CNF_ReadDeviceEDRTxRxCountHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  135. {
  136.     gs_bt_pkt_ptr->CNF_ReadDeviceEDRTxRxCountHCIEvent(cnf, token, usrData);
  137. }
  138. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  139. static void REQ_Stop(void)
  140. {
  141.     gs_bt_pkt_ptr->REQ_Stop();
  142. }
  143. //===========================================================================
  144. CBTPKT::CBTPKT(void)
  145. {
  146.     g_bIsRunning = false;
  147.     ConfirmCallback = NULL;
  148.     m_bTeserAct = false;
  149. }
  150. //---------------------------------------------------------------------------
  151. CBTPKT::~CBTPKT(void)
  152. {
  153.     g_bIsRunning = false;
  154.     ConfirmCallback = NULL;
  155. }
  156. //---------------------------------------------------------------------------
  157. void  CBTPKT::Confirm(E_METAAPP_RESULT_T confirm_state)
  158. {
  159.    if (! g_bIsRunning)
  160.    {
  161.         return;
  162.    }
  163.    g_bIsRunning = false;
  164.    if (NULL == ConfirmCallback)
  165.    {
  166.         return;
  167.    }
  168.    m_eConfirmState = confirm_state;
  169.    ActiveMan->SetActiveFunction( ConfirmCallback );
  170. }
  171. //============================================================================
  172. void CBTPKT::REQ_Start(S_BT_PKT &bt_pkt)
  173. {
  174.     gs_bt_pkt_ptr  = this;
  175.     g_bIsRunning  = true;
  176.     m_bStop = false;
  177.     m_sBTPKT = bt_pkt;
  178.     ActiveMan->SetActiveFunction(::REQ_Pkt_Test);
  179.     //ActiveMan->SetActiveFunction(::REQ_DUT_Send_Read_BDAdrress_HCI_command);
  180. }
  181. //--------------------------------------------------------------------------
  182. void CBTPKT::REQ_Pkt_Test(void)
  183. {
  184.     E_METAAPP_RESULT_T METAAPP_Result;
  185.     // step1: (DUT) reset 
  186.     METAAPP_Result = REQ_ResetBD(BT_PACKET_DUT);
  187.     if (METAAPP_Result != METAAPP_SUCCESS)
  188.     {
  189.         Confirm(METAAPP_Result);
  190.         return;
  191.     }
  192.     if (m_bStop)
  193.     {
  194.         return;
  195.     }
  196.     // (tester) reset
  197.     METAAPP_Result = REQ_ResetBD(BT_PACKET_TESTER);
  198.     if (METAAPP_Result != METAAPP_SUCCESS)
  199.     {
  200.         Confirm(METAAPP_Result);
  201.         return;
  202.     }
  203.     if (m_bStop)
  204.     {
  205.         return;
  206.     }
  207.     // step 2: (DUT) read BD address
  208.     METAAPP_Result = REQ_Read_BDAdrress(BT_PACKET_DUT);
  209.     if (METAAPP_Result != METAAPP_SUCCESS)
  210.     {
  211.         Confirm(METAAPP_Result);
  212.         return;
  213.     }
  214.     if (m_bStop)
  215.     {
  216.         return;
  217.     }
  218.     // (tester) read BD address
  219.     METAAPP_Result = REQ_Read_BDAdrress(BT_PACKET_TESTER);
  220.     if (METAAPP_Result != METAAPP_SUCCESS)
  221.     {
  222.         Confirm(METAAPP_Result);
  223.         return;
  224.     }
  225.     if (m_bStop)
  226.     {
  227.         return;
  228.     }
  229.     // step 3: (DUT) Enter Test Mode/Enable Scan/Auto accept
  230.     METAAPP_Result = REQ_DUT_Enter_Test_mode();
  231.     if (METAAPP_Result != METAAPP_SUCCESS)
  232.     {
  233.         Confirm(METAAPP_Result);
  234.         return;
  235.     }
  236.     if (m_bStop)
  237.     {
  238.         return;
  239.     }
  240.     METAAPP_Result = REQ_DUT_Scan_Enable();
  241.     if (METAAPP_Result != METAAPP_SUCCESS)
  242.     {
  243.         Confirm(METAAPP_Result);
  244.         return;
  245.     }
  246.     if (m_bStop)
  247.     {
  248.         return;
  249.     }
  250.     METAAPP_Result = REQ_DUT_Auto_Accept();
  251.     if (METAAPP_Result != METAAPP_SUCCESS)
  252.     {
  253.         Confirm(METAAPP_Result);
  254.         return;
  255.     }
  256.     // step 4: (tester) create connection
  257.     METAAPP_Result = REQ_Tester_Create_Connection();
  258.     if (METAAPP_Result != METAAPP_SUCCESS)
  259.     {
  260.         Confirm(METAAPP_Result);
  261.         return;
  262.     }
  263.     // step 5: (tester) activate remote DUT
  264.     METAAPP_Result = REQ_Tester_TCI_Activate_Remote_DUT();
  265.     if (METAAPP_Result != METAAPP_SUCCESS)
  266.     {
  267.         Confirm(METAAPP_Result);
  268.         return;
  269.     }
  270.     Confirm(METAAPP_SUCCESS);
  271. }
  272. // step 1: reset BD
  273. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  274. E_METAAPP_RESULT_T CBTPKT::REQ_ResetBD(E_BT_PACKET_DEVICE_T device)
  275. {
  276.     //if (!g_bIsRunning)
  277.     //{
  278.     //    return METAAPP_UNEXPECTED_FAIL;
  279.     //}
  280.     m_sPktDevice = device;
  281.     //m_bEventOk = false;
  282.     BT_HCI_COMMAND hci_cmd;
  283.     m_cBT_HCI_FT_Obj.Compose_Reset_HCI_Command(hci_cmd);
  284.     AddTxLogToStringList(hci_cmd, device);
  285.     META_RESULT MetaResult;
  286.     if (BT_PACKET_TESTER == m_sPktDevice)
  287.     {
  288.         MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_MainHandle(), 750, &hci_cmd, ::CNF_ResetBDHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  289.     }
  290.     else
  291.     {
  292.         MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_SecondHandle(), 750, &hci_cmd, ::CNF_ResetBDHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  293.     }
  294.     if ((META_SUCCESS != MetaResult) || (!m_bEventOk))
  295.     {
  296.         if (META_TIMEOUT == MetaResult)
  297.         {
  298.             return METAAPP_TIMEOUT;
  299.         }
  300.         else if (META_CANCEL == MetaResult)
  301.         {
  302.             return METAAPP_CANCEL;
  303.         }
  304.         else
  305.         {
  306.             return METAAPP_FAIL;
  307.         }
  308.     }
  309.     return METAAPP_SUCCESS;
  310. }
  311. //-----------------------------------------------------
  312. void __stdcall CBTPKT::CNF_ResetBDHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  313. {
  314.     if (!g_bIsRunning)
  315.     {
  316.         return;
  317.     }
  318.     if (0xFF == cnf->m_event) // LMP
  319.     {
  320.         return;
  321.     }
  322.     AddRxLogToStringList(*cnf, m_sPktDevice);
  323.     m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_Reset_HCI_Event(*cnf);
  324. }
  325. // Step 2: Read BD Addr (X6:X5:X4:X3:X2:X1):
  326. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  327. E_METAAPP_RESULT_T CBTPKT::REQ_Read_BDAdrress(E_BT_PACKET_DEVICE_T device)
  328. {
  329.     m_sPktDevice = device;
  330.    // m_bEventOk = false;
  331.     BT_HCI_COMMAND hci_cmd;
  332.     m_cBT_HCI_FT_Obj.Compose_Read_BD_Addr_HCI_Command(hci_cmd);
  333.     AddTxLogToStringList(hci_cmd, m_sPktDevice);
  334.     META_RESULT MetaResult;
  335.     if (BT_PACKET_TESTER == m_sPktDevice)
  336.     {
  337.          MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_ReadBDAddressHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  338.     }
  339.     else
  340.     {
  341.          MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_SecondHandle(), 5000, &hci_cmd, ::CNF_ReadBDAddressHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  342.     }
  343.     if ((META_SUCCESS != MetaResult) || (!m_bEventOk))
  344.     {
  345.         if (META_TIMEOUT == MetaResult)
  346.         {
  347.             return METAAPP_TIMEOUT;
  348.         }
  349.         else if (META_CANCEL == MetaResult)
  350.         {
  351.             return METAAPP_CANCEL;
  352.         }
  353.         else
  354.         {
  355.             return METAAPP_FAIL;
  356.         }
  357.     }
  358.     return METAAPP_SUCCESS;
  359. }
  360. //---------------------------------------------------------------------------
  361. void __stdcall CBTPKT::CNF_ReadBDAddressHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  362. {
  363.     if (!g_bIsRunning)
  364.     {
  365.         return;
  366.     }
  367.     if (0xFF == cnf->m_event) // LMP
  368.     {
  369.         return;
  370.     }
  371.     AddRxLogToStringList(*cnf, BT_PACKET_DUT);
  372.     if (BT_PACKET_TESTER == m_sPktDevice)
  373.     {
  374.         m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_Read_BD_Addr_HCI_Event(*cnf, m_sBTPKT.s_tester_bd_addr);
  375.     }
  376.     else
  377.     {
  378.         m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_Read_BD_Addr_HCI_Event(*cnf, m_sBTPKT.s_dut_bd_addr);
  379.     }
  380.     PostMessage(m_sBTPKT.hPostMsgDestHandle,
  381.                 WM_ML_BT_BD_ADDRESS_MSG,
  382.                 (WPARAM) m_sPktDevice,
  383.                 0
  384.                 );
  385. }
  386. // Step 3: (DUT) Enter Test Mode/Enable Scan/Auto accept
  387. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  388. E_METAAPP_RESULT_T CBTPKT::REQ_DUT_Enter_Test_mode(void)
  389. {
  390.     //if(!g_bIsRunning)  return;
  391.     BT_HCI_COMMAND hci_cmd;
  392.     m_cBT_HCI_FT_Obj.Compose_Enter_Test_Mode_HCI_Command(hci_cmd);
  393.     AddTxLogToStringList(hci_cmd, BT_PACKET_DUT);
  394.     META_RESULT MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_SecondHandle(), 5000, &hci_cmd, ::CNF_DUTEnterTestModeHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  395.     if ((META_SUCCESS != MetaResult) || (!m_bEventOk))
  396.     {
  397.         if (META_TIMEOUT == MetaResult)
  398.         {
  399.             return METAAPP_TIMEOUT;
  400.         }
  401.         else if (META_CANCEL == MetaResult)
  402.         {
  403.             return METAAPP_CANCEL;
  404.         }
  405.         else
  406.         {
  407.             return METAAPP_FAIL;
  408.         }
  409.     }
  410.     return METAAPP_SUCCESS;
  411.     //ActiveMan->SetActiveFunction( ::REQ_DUT_Send_Scan_Enable_HCI_command );
  412. }
  413. //---------------------------------------------------------------------------
  414. void __stdcall CBTPKT::CNF_DUTEnterTestModeHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  415. {
  416.     if (!g_bIsRunning)
  417.     {
  418.         return;
  419.     }
  420.     if (0xFF == cnf->m_event) // LMP
  421.     {
  422.         return;
  423.     }
  424.     AddRxLogToStringList(*cnf, BT_PACKET_DUT);
  425.     m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_Enter_Test_Mode_HCI_Event(*cnf);
  426. }
  427. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  428. E_METAAPP_RESULT_T CBTPKT::REQ_DUT_Scan_Enable(void)
  429. {
  430.    // if(!g_bIsRunning)  return;
  431.     BT_HCI_COMMAND hci_cmd;
  432.     m_cBT_HCI_FT_Obj.Compose_Scan_Enable_HCI_Command(hci_cmd);
  433.     AddTxLogToStringList(hci_cmd, BT_PACKET_DUT);
  434.     META_RESULT MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_SecondHandle(), 5000, &hci_cmd, ::CNF_DUTScanEnableHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  435.     if ((META_SUCCESS != MetaResult) || (!m_bEventOk))
  436.     {
  437.         if (META_TIMEOUT == MetaResult)
  438.         {
  439.             return METAAPP_TIMEOUT;
  440.         }
  441.         else if (META_CANCEL == MetaResult)
  442.         {
  443.             return METAAPP_CANCEL;
  444.         }
  445.         else
  446.         {
  447.             return METAAPP_FAIL;
  448.         }
  449.     }
  450.     return METAAPP_SUCCESS;
  451. //    ActiveMan->SetActiveFunction( ::REQ_DUT_Send_Auto_Accept_HCI_command );
  452. }
  453. //---------------------------------------------------------------------------
  454. void __stdcall CBTPKT::CNF_DUTScanEnableHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  455. {
  456.     if (!g_bIsRunning)
  457.     {
  458.         return;
  459.     }
  460.     if (0xFF == cnf->m_event) // LMP
  461.     {
  462.         return;
  463.     }
  464.     AddRxLogToStringList(*cnf, BT_PACKET_DUT);
  465.     m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_Scan_Enable_HCI_Event(*cnf);
  466. }
  467. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  468. E_METAAPP_RESULT_T CBTPKT::REQ_DUT_Auto_Accept(void)
  469. {
  470.     //if(!g_bIsRunning)  return;
  471.     BT_HCI_COMMAND hci_cmd;
  472.     m_cBT_HCI_FT_Obj.Compose_Auto_Accept_HCI_Command(hci_cmd);
  473.     AddTxLogToStringList(hci_cmd, BT_PACKET_DUT);
  474.     META_RESULT MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_SecondHandle(), 5000, &hci_cmd, ::CNF_DUTAutoAcceptHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  475.     if ((META_SUCCESS != MetaResult) || (!m_bEventOk))
  476.     {
  477.         if (META_TIMEOUT == MetaResult)
  478.         {
  479.             return METAAPP_TIMEOUT;
  480.         }
  481.         else if (META_CANCEL == MetaResult)
  482.         {
  483.             return METAAPP_CANCEL;
  484.         }
  485.         else
  486.         {
  487.             return METAAPP_FAIL;
  488.         }
  489.     }
  490.     return METAAPP_SUCCESS;
  491.     //ActiveMan->SetActiveFunction( ::REQ_Tester_Send_Create_Connection_HCI_command );
  492. }
  493. //---------------------------------------------------------------------------
  494. void __stdcall CBTPKT::CNF_DUTAutoAcceptHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  495. {
  496.     if (!g_bIsRunning)
  497.     {
  498.         return;
  499.     }
  500.     if (0xFF == cnf->m_event) // LMP
  501.     {
  502.         return;
  503.     }
  504.     AddRxLogToStringList(*cnf, BT_PACKET_DUT);
  505.     m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_Auto_Accept_HCI_Event(*cnf);
  506. }
  507. // Step 4: (TESTER) Create Connection with DUT
  508. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  509. E_METAAPP_RESULT_T CBTPKT::REQ_Tester_Create_Connection(void)
  510. {
  511.     //if(!g_bIsRunning)  return;
  512.     BT_HCI_COMMAND hci_cmd;
  513.     m_cBT_HCI_FT_Obj.Compose_ACL_Connect_HCI_Command(m_sBTPKT.s_dut_bd_addr, hci_cmd);
  514.     AddTxLogToStringList(hci_cmd, BT_PACKET_TESTER);
  515.     m_iEventCount = 1;
  516.     META_RESULT MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_MainHandle(), 10000, &hci_cmd, ::CNF_TesterCreateConnectionHCIEvent, NULL, HCE_CONNECT_COMPLETE );
  517.     if ((META_SUCCESS != MetaResult) || (!m_bEventOk))
  518.     {
  519.         if (META_TIMEOUT == MetaResult)
  520.         {
  521.             return METAAPP_TIMEOUT;
  522.         }
  523.         else if (META_CANCEL == MetaResult)
  524.         {
  525.             return METAAPP_CANCEL;
  526.         }
  527.         else
  528.         {
  529.             return METAAPP_FAIL;
  530.         }
  531.     }
  532.     return METAAPP_SUCCESS;
  533.    // ActiveMan->SetActiveFunction( ::REQ_Tester_Send_TCI_Activate_Remote_DUT_HCI_command );
  534. }
  535. //---------------------------------------------------------------------------
  536. void __stdcall CBTPKT::CNF_TesterCreateConnectionHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  537. {
  538.     if (!g_bIsRunning)
  539.     {
  540.         return;
  541.     }
  542.     if (0xFF == cnf->m_event) // LMP
  543.     {
  544.         return;
  545.     }
  546.     AddRxLogToStringList(*cnf, BT_PACKET_TESTER);
  547.     switch (m_iEventCount)
  548.     {
  549.         case 1:
  550.         {
  551.             m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_ACL_Connect_HCI_Event1(*cnf);
  552.         }
  553.         break;
  554.         case 2:
  555.         {
  556.             m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_ACL_Connect_HCI_Event2(*cnf, m_sBTPKT.s_dut_bd_addr, m_sBTPKT.uc_h1, m_sBTPKT.uc_h2);
  557.         }
  558.         break;
  559.         case 3:
  560.         {
  561.             m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_ACL_Connect_HCI_Event3(*cnf, m_sBTPKT.uc_h1, m_sBTPKT.uc_h2);
  562.         }
  563.         break;
  564.         case 4:
  565.         {
  566.             m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_ACL_Connect_HCI_Event4(*cnf, m_sBTPKT.uc_h1, m_sBTPKT.uc_h2);
  567.         }
  568.         break;
  569.     }
  570.     m_iEventCount++;
  571. }
  572. // Step 5: (TESTER) TCI_Activate_Remote_DUT
  573. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  574. E_METAAPP_RESULT_T CBTPKT::REQ_Tester_TCI_Activate_Remote_DUT(void)
  575. {
  576.     //if (!g_bIsRunning)
  577.    // {
  578.    //     return;
  579.    // }
  580.     BT_HCI_COMMAND hci_cmd;
  581.     m_cBT_HCI_FT_Obj.Compose_TCI_Activate_Remote_DUT_HCI_Command(m_sBTPKT.uc_h1, m_sBTPKT.uc_h2, hci_cmd);
  582.     AddTxLogToStringList(hci_cmd, BT_PACKET_TESTER);
  583.     m_iEventCount = 1;
  584.     META_RESULT MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_MainHandle(), 10000, &hci_cmd, ::CNF_TesterTCIActivateRemoteDUTHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  585.     if ((META_SUCCESS != MetaResult) || (!m_bEventOk))
  586.     {
  587.         if (META_TIMEOUT == MetaResult)
  588.         {
  589.             return METAAPP_TIMEOUT;
  590.         }
  591.         else if (META_CANCEL == MetaResult)
  592.         {
  593.             return METAAPP_CANCEL;
  594.         }
  595.         else
  596.         {
  597.             return METAAPP_FAIL;
  598.         }
  599.     }
  600.     return METAAPP_SUCCESS;
  601. }
  602. //---------------------------------------------------------------------------
  603. void __stdcall CBTPKT::CNF_TesterTCIActivateRemoteDUTHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  604. {
  605.     if (!g_bIsRunning)
  606.     {
  607.         return;
  608.     }
  609.     if (0xFF == cnf->m_event) // LMP
  610.     {
  611.         return;
  612.     }
  613.     AddRxLogToStringList(*cnf, BT_PACKET_TESTER);
  614.     if (0x0F == cnf->m_event)
  615.     {
  616.         m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_TCI_Activate_Remote_DUT_HCI_Event1(*cnf);
  617.     }
  618.     else if (0x0E == cnf->m_event)
  619.     {
  620.         m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_TCI_Activate_Remote_DUT_HCI_Event2(*cnf);
  621.     }
  622.     m_iEventCount++;
  623. }
  624. //===========================================================================
  625. //////////// (TESTER) TCI_Control_Remote_DUT DM1 packet no whiten  //////////
  626. //===========================================================================
  627. void CBTPKT::REQ_TCI_Control_Remote_DUT_Start(S_BT_PKT_TCI tci)
  628. {
  629.      gs_bt_pkt_ptr  = this;
  630.      g_bIsRunning  = true;
  631.      m_sBTTCI = tci;
  632.      ActiveMan->SetActiveFunction(::REQ_Tester_TCI_Control_Remote_DUT);
  633. }
  634. //---------------------------------------------------------------------------
  635. void CBTPKT::REQ_Tester_TCI_Control_Remote_DUT(void)
  636. {
  637.     //if (!g_bIsRunning)
  638.     //{
  639.     //    return;
  640.     //}
  641.     BT_HCI_COMMAND hci_cmd;
  642.     m_cBT_HCI_FT_Obj.Compose_TCI_Control_Remote_DUT_HCI_Command(m_sBTPKT.uc_h1, m_sBTPKT.uc_h2, m_sBTTCI, hci_cmd);
  643.     AddTxLogToStringList(hci_cmd, BT_PACKET_TESTER);
  644.     m_iEventCount = 1;
  645.     META_RESULT MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_TesterTCIControlRemoteDUTHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  646.     if ((META_SUCCESS != MetaResult) || (!m_bEventOk))
  647.     {
  648.         if (META_TIMEOUT == MetaResult)
  649.         {
  650.             Confirm(METAAPP_TIMEOUT);
  651.             return;
  652.         }
  653.         else if (META_CANCEL == MetaResult)
  654.         {
  655.             Confirm(METAAPP_CANCEL);
  656.             return;
  657.         }
  658.         else
  659.         {
  660.             Confirm(METAAPP_FAIL);
  661.             return;
  662.         }
  663.     }
  664.     Confirm(METAAPP_SUCCESS);
  665. }
  666. //---------------------------------------------------------------------------
  667. void __stdcall CBTPKT::CNF_TesterTCIControlRemoteDUTHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  668. {
  669.     if (!g_bIsRunning)
  670.     {
  671.         return;
  672.     }
  673.     if (0xFF == cnf->m_event) // LMP
  674.     {
  675.         return;
  676.     }
  677.     AddRxLogToStringList(*cnf, BT_PACKET_TESTER);
  678.     if (1 == m_iEventCount)
  679.     {
  680.         m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_TCI_Control_Remote_DUT_HCI_Event1(*cnf);
  681.     }
  682.     else
  683.     {
  684.         m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_TCI_Control_Remote_DUT_HCI_Event2(*cnf);
  685.     }
  686. }
  687. //============================================================================
  688. //////////////////////////   read TX/RX count   //////////////////////////////
  689. //============================================================================
  690. void CBTPKT::REQ_Read_TX_RX_Count_Start(void)
  691. {
  692.     gs_bt_pkt_ptr  = this;
  693.     g_bIsRunning  = true;
  694.     ActiveMan->SetActiveFunction(::REQ_Read_TX_RX_Count);
  695.     //ActiveMan->SetActiveFunction( ::REQ_Tester_Send_Read_TX_RX_Count_HCI_command );
  696. }
  697. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  698. void CBTPKT::REQ_Read_TX_RX_Count(void)
  699. {
  700.     if (!g_bIsRunning)
  701.     {
  702.         return;
  703.     }
  704.     E_METAAPP_RESULT_T METAAPP_Result;
  705.     METAAPP_Result = REQ_Read_Device_TX_RX_Count(BT_PACKET_TESTER);
  706.     if (METAAPP_Result != METAAPP_SUCCESS)
  707.     {
  708.         Confirm(METAAPP_Result);
  709.         return;
  710.     }
  711.     if (m_bStop)
  712.     {
  713.         return;
  714.     }
  715.     METAAPP_Result = REQ_Read_Device_TX_RX_Count(BT_PACKET_DUT);
  716.     if (METAAPP_Result != METAAPP_SUCCESS)
  717.     {
  718.         Confirm(METAAPP_Result);
  719.         return;
  720.     }
  721.     Confirm(METAAPP_SUCCESS);
  722. }
  723. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  724. E_METAAPP_RESULT_T CBTPKT::REQ_Read_Device_TX_RX_Count(E_BT_PACKET_DEVICE_T device)
  725. {
  726.     //if(!g_bIsRunning)  return;
  727.     BT_HCI_COMMAND hci_cmd;
  728.     m_sPktDevice = device;
  729.     m_cBT_HCI_FT_Obj.Compose_Read_TX_RX_Count_HCI_Command(hci_cmd);
  730.     AddTxLogToStringList(hci_cmd, BT_PACKET_TESTER);
  731.     META_RESULT MetaResult;
  732.     if (BT_PACKET_TESTER == m_sPktDevice)
  733.     {
  734.         MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_ReadDeviceTxRxCountHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  735.     }
  736.     else
  737.     {
  738.         MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_SecondHandle(), 5000, &hci_cmd, ::CNF_ReadDeviceTxRxCountHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  739.     }
  740.     if ((META_SUCCESS != MetaResult) || (!m_bEventOk))
  741.     {
  742.         if (META_TIMEOUT == MetaResult)
  743.         {
  744.             return METAAPP_TIMEOUT;
  745.         }
  746.         else if (META_CANCEL == MetaResult)
  747.         {
  748.             return METAAPP_CANCEL;
  749.         }
  750.         else
  751.         {
  752.             return METAAPP_FAIL;
  753.         }
  754.     }
  755.     return METAAPP_SUCCESS;
  756.     //ActiveMan->SetActiveFunction( ::REQ_DUT_Send_Read_TX_RX_Count_HCI_command );
  757. }
  758. //---------------------------------------------------------------------------
  759. void __stdcall CBTPKT::CNF_ReadDeviceTxRxCountHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  760. {
  761.     if (!g_bIsRunning)
  762.     {
  763.         return;
  764.     }
  765.     if (0xFF == cnf->m_event) // LMP
  766.     {
  767.         return;
  768.     }
  769.     AddRxLogToStringList(*cnf, m_sPktDevice);
  770.     if (BT_PACKET_TESTER == m_sPktDevice)
  771.     {
  772.         m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_Read_TX_RX_Count_HCI_Event(*cnf, m_sBTMonCnf.s_tester_monitor);
  773.     }
  774.     else
  775.     {
  776.         m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_Read_TX_RX_Count_HCI_Event(*cnf, m_sBTMonCnf.s_dut_monitor);
  777.     }
  778. }
  779. //============================================================================
  780. //////////////////////////   read EDR TX/RX count   //////////////////////////
  781. //============================================================================
  782. void CBTPKT::REQ_Read_EDR_TX_RX_Count_Start(void)
  783. {
  784.     gs_bt_pkt_ptr  = this;
  785.     g_bIsRunning  = true;
  786.     ActiveMan->SetActiveFunction(::REQ_Read_EDR_TX_RX_Count);
  787. }
  788. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  789. void CBTPKT::REQ_Read_EDR_TX_RX_Count(void)
  790. {
  791.     if (!g_bIsRunning)
  792.     {
  793.         return;
  794.     }
  795.     E_METAAPP_RESULT_T METAAPP_Result;
  796.     METAAPP_Result = REQ_Read_Device_EDR_TX_RX_Count(BT_PACKET_TESTER);
  797.     if (METAAPP_Result != METAAPP_SUCCESS)
  798.     {
  799.         Confirm(METAAPP_Result);
  800.         return;
  801.     }
  802.     if (m_bStop)
  803.     {
  804.         return;
  805.     }
  806.     METAAPP_Result = REQ_Read_Device_EDR_TX_RX_Count(BT_PACKET_DUT);
  807.     if (METAAPP_Result != METAAPP_SUCCESS)
  808.     {
  809.         Confirm(METAAPP_Result);
  810.         return;
  811.     }
  812.     Confirm(METAAPP_SUCCESS);
  813. }
  814. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  815. E_METAAPP_RESULT_T CBTPKT::REQ_Read_Device_EDR_TX_RX_Count(E_BT_PACKET_DEVICE_T device)
  816. {
  817.     //if (!g_bIsRunning)
  818.     //{
  819.     //    return;
  820.     //}
  821.     m_sPktDevice = device;
  822.     BT_HCI_COMMAND hci_cmd;
  823.     m_cBT_HCI_FT_Obj.Compose_Read_EDR_TX_RX_Count_HCI_Command(hci_cmd);
  824.     AddTxLogToStringList(hci_cmd, BT_PACKET_TESTER);
  825.     META_RESULT MetaResult;
  826.     if (BT_PACKET_TESTER == m_sPktDevice)
  827.     {
  828.         MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &hci_cmd, ::CNF_ReadDeviceEDRTxRxCountHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  829.     }
  830.     else
  831.     {
  832.         MetaResult = META_BT_SendHCICommand_r(m_META_HANDLE_Obj.Get_SecondHandle(), 5000, &hci_cmd, ::CNF_ReadDeviceEDRTxRxCountHCIEvent, NULL, HCE_COMMAND_COMPLETE);
  833.     }
  834.     if ((META_SUCCESS != MetaResult) || (!m_bEventOk))
  835.     {
  836.         if (META_TIMEOUT == MetaResult)
  837.         {
  838.             return METAAPP_TIMEOUT;
  839.         }
  840.         else if (META_CANCEL == MetaResult)
  841.         {
  842.             return METAAPP_CANCEL;
  843.         }
  844.         else
  845.         {
  846.             return METAAPP_FAIL;
  847.         }
  848.     }
  849.     return METAAPP_SUCCESS;
  850.     //ActiveMan->SetActiveFunction(::REQ_DUT_Send_Read_EDR_TX_RX_Count_HCI_command);
  851. }
  852. //---------------------------------------------------------------------------
  853. void __stdcall CBTPKT::CNF_ReadDeviceEDRTxRxCountHCIEvent(const BT_HCI_EVENT *cnf, const short token, void *usrData)
  854. {
  855.     if (!g_bIsRunning)
  856.     {
  857.         return;
  858.     }
  859.     if (0xFF == cnf->m_event)  // LMP
  860.     {
  861.         return;
  862.     }
  863.     AddRxLogToStringList(*cnf, m_sPktDevice);
  864.     if (BT_PACKET_TESTER == m_sPktDevice)
  865.     {
  866.         m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_Read_EDR_TX_RX_Count_HCI_Event(*cnf, m_sBTMonCnf.s_tester_monitor);
  867.     }
  868.     else
  869.     {
  870.         m_bEventOk = m_cBT_HCI_FT_Obj.DeCompose_Read_EDR_TX_RX_Count_HCI_Event(*cnf, m_sBTMonCnf.s_dut_monitor);
  871.     }
  872. }
  873. //==========================================================================
  874. void CBTPKT::REQ_Stop_Start(void)
  875. {
  876.     gs_bt_pkt_ptr  = this;
  877.     g_bIsRunning  = true;
  878.     m_bStop = true;
  879.     META_CancelAllBlockingCall_r(m_META_HANDLE_Obj.Get_MainHandle());
  880.     META_CancelAllBlockingCall_r(m_META_HANDLE_Obj.Get_SecondHandle());
  881.     ActiveMan->SetActiveFunction(::REQ_Stop);
  882. }
  883. //---------------------------------------------------------------------------
  884. void CBTPKT::REQ_Stop(void)
  885. {
  886.     E_METAAPP_RESULT_T METAAPP_Result;
  887.     // step1: (DUT) reset 
  888.     METAAPP_Result = REQ_ResetBD(BT_PACKET_DUT);
  889.     if (METAAPP_Result != METAAPP_SUCCESS)
  890.     {
  891.         Confirm(METAAPP_Result);
  892.         return;
  893.     }
  894.     // (tester) reset
  895.     METAAPP_Result = REQ_ResetBD(BT_PACKET_TESTER);
  896.     if (METAAPP_Result != METAAPP_SUCCESS)
  897.     {
  898.         Confirm(METAAPP_Result);
  899.         return;
  900.     }
  901.     Confirm(METAAPP_SUCCESS);
  902. }
  903. //===========================================================================
  904. ////////////////////////////   Log  information   ////////////////////////
  905. //===========================================================================
  906. void  CBTPKT::AddTxLogToStringList(BT_HCI_COMMAND hci_cmd, E_BT_PACKET_DEVICE_T device)
  907. {
  908.     char str[1024];
  909.     AnsiString as_log;
  910.     sprintf(str, "%X,", hci_cmd.m_opcode & 0x00FF);
  911.     AnsiString as_opcode_low(str);
  912.     sprintf(str, "%X,", (hci_cmd.m_opcode & 0xFF00)>>8);
  913.     AnsiString as_opcode_high(str);
  914.     Array_To_Hex_String_UnsignedChar(str, hci_cmd.m_cmd, hci_cmd.m_len, ',');
  915.     AnsiString as_cmd((const char*)str);
  916.     if (0 == hci_cmd.m_len)
  917.     {
  918.         as_cmd = "";
  919.     }
  920.     sprintf(str, "%X,", hci_cmd.m_len);
  921.     AnsiString as_length(str);
  922.     if (BT_PACKET_TESTER == device)
  923.     {
  924.         as_log = "[" + TimeToStr(Time()) + "] Tester TX: " + as_opcode_low + as_opcode_high + as_length  + as_cmd;
  925.     }
  926.     else
  927.     {
  928.         as_log = "[" + TimeToStr(Time()) + "] DUT TX: " + as_opcode_low + as_opcode_high + as_length  + as_cmd;
  929.     }
  930.     m_sBTPKT.log->Add(as_log);
  931.     PostMessage(m_sBTPKT.hPostMsgDestHandle,
  932.                 WM_ML_BT_PRINT_MSG,
  933.                 PAGEIDX_BT_PKT,
  934.                 0
  935.                 );
  936. }
  937. //--------------------------------------------------------------------------
  938. void  CBTPKT::AddRxLogToStringList(BT_HCI_EVENT hci_event, E_BT_PACKET_DEVICE_T device)
  939. {
  940.     unsigned char str[1024];
  941.     AnsiString as_log;
  942.     sprintf(str, "%X,", hci_event.m_event);
  943.     AnsiString as_event((const char*) str);
  944.     sprintf(str, "%X,", hci_event.m_len);
  945.     AnsiString as_length((const char*) str);
  946.     Array_To_Hex_String_UnsignedChar(str, hci_event.m_parms, hci_event.m_len, ',');
  947.     AnsiString as_param((const char*) str);
  948.     if (0 == hci_event.m_len)
  949.     {
  950.         as_param = "";
  951.     }
  952.     if (BT_PACKET_TESTER == device)
  953.     {
  954.         as_log = "[" + TimeToStr(Time()) + "] Tester RX: " + as_event + as_length + as_param;
  955.     }
  956.     else
  957.     {   as_log = "[" + TimeToStr(Time()) + "] DUT RX: " + as_event + as_length + as_param;
  958.     }
  959.     m_sBTPKT.log->Add(as_log);
  960.     PostMessage(m_sBTPKT.hPostMsgDestHandle,
  961.                 WM_ML_BT_PRINT_MSG,
  962.                 PAGEIDX_BT_PKT,
  963.                 0
  964.                 );
  965. }
  966. //===========================================================================
  967. ////////////////////////////   Global  information   ////////////////////////
  968. //===========================================================================
  969. E_METAAPP_RESULT_T CBTPKT::Get_ConfirmState(void)
  970. {
  971.     return  m_eConfirmState;
  972. }
  973. //---------------------------------------------------------------------------
  974. S_BD_ADDR CBTPKT::Get_TesterBDAddress( void )
  975. {   return m_sBTPKT.s_tester_bd_addr;
  976. }
  977. //----------------------------------------------------------------------------
  978. S_BD_ADDR CBTPKT::Get_DUTBDAddress( void )
  979. {   return m_sBTPKT.s_dut_bd_addr;
  980. }
  981. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  982. S_BT_PKT_MONITOR_CNF CBTPKT::Get_MonitorResult( void )
  983. {
  984.     return m_sBTMonCnf;
  985. }