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

MTK

开发平台:

C++ Builder

  1.             return true;
  2.         }
  3.     }
  4.     else if (cbPKTDH1->Checked                       &&
  5.              (!IsPKTTestFinish(BT_PACKET_IDX_DH1))
  6.            )
  7.     {
  8.         if (IsPKTTestRunning(BT_PACKET_IDX_DH1))
  9.         {
  10.             return false;
  11.         }
  12.         else
  13.         {
  14.             m_sBTTCI.e_idx = BT_PACKET_IDX_DH1;
  15.             return true;
  16.         }
  17.     }
  18.     else if (cbPKTDM3->Checked                      &&
  19.              (!IsPKTTestFinish(BT_PACKET_IDX_DM3))
  20.            )
  21.     {
  22.         if (IsPKTTestRunning(BT_PACKET_IDX_DM3))
  23.         {
  24.             return false;
  25.         }
  26.         else
  27.         {
  28.             m_sBTTCI.e_idx = BT_PACKET_IDX_DM3;
  29.             return true;
  30.         }
  31.     }
  32.     else if (cbPKTDH3->Checked                       &&
  33.              (!IsPKTTestFinish(BT_PACKET_IDX_DH3))
  34.            )
  35.     {
  36.         if (IsPKTTestRunning(BT_PACKET_IDX_DH3))
  37.         {
  38.             return false;
  39.         }
  40.         else
  41.         {
  42.             m_sBTTCI.e_idx = BT_PACKET_IDX_DH3;
  43.             return true;
  44.         }
  45.     }
  46.     else if (cbPKTDM5->Checked                       &&
  47.              (!IsPKTTestFinish(BT_PACKET_IDX_DM5))
  48.            )
  49.     {
  50.         if (IsPKTTestRunning(BT_PACKET_IDX_DM5))
  51.         {
  52.             return false;
  53.         }
  54.         else
  55.         {
  56.             m_sBTTCI.e_idx = BT_PACKET_IDX_DM5;
  57.             return true;
  58.         }
  59.     }
  60.     else if (cbPKTDH5->Checked                       &&
  61.              (!IsPKTTestFinish(BT_PACKET_IDX_DH5))
  62.            )
  63.     {
  64.         if (IsPKTTestRunning(BT_PACKET_IDX_DH5))
  65.         {
  66.             return false;
  67.         }
  68.         else
  69.         {
  70.             m_sBTTCI.e_idx = BT_PACKET_IDX_DH5;
  71.             return true;
  72.         }
  73.     }
  74.     else if (cbPKTHV1->Checked                       &&
  75.              (!IsPKTTestFinish(BT_PACKET_IDX_HV1))
  76.            )
  77.     {
  78.         if (IsPKTTestRunning(BT_PACKET_IDX_HV1))
  79.         {
  80.             return false;
  81.         }
  82.         else
  83.         {
  84.             m_sBTTCI.e_idx = BT_PACKET_IDX_HV1;
  85.             return true;
  86.         }
  87.     }
  88.     else if (cbPKTHV2->Checked                       &&
  89.              (!IsPKTTestFinish(BT_PACKET_IDX_HV2))
  90.             )
  91.     {
  92.         if (IsPKTTestRunning(BT_PACKET_IDX_HV2))
  93.         {
  94.             return false;
  95.         }
  96.         else
  97.         {
  98.             m_sBTTCI.e_idx = BT_PACKET_IDX_HV2;
  99.             return true;
  100.         }
  101.     }
  102.     else if (cbPKTHV3->Checked                       &&
  103.              (!IsPKTTestFinish(BT_PACKET_IDX_HV3))
  104.            )
  105.     {
  106.         if (IsPKTTestRunning(BT_PACKET_IDX_HV3))
  107.         {
  108.             return false;
  109.         }
  110.         else
  111.         {
  112.             m_sBTTCI.e_idx = BT_PACKET_IDX_HV3;
  113.             return true;
  114.         }
  115.     }
  116.     else if (cbPKTEV3->Checked                      &&
  117.              (!IsPKTTestFinish(BT_PACKET_IDX_EV3))
  118.            )
  119.     {
  120.         if (IsPKTTestRunning(BT_PACKET_IDX_EV3))
  121.         {
  122.             return false;
  123.         }
  124.         else
  125.         {
  126.             m_sBTTCI.e_idx = BT_PACKET_IDX_EV3;
  127.             return true;
  128.         }
  129.     }
  130.     else if (cbPKTEV4->Checked                       &&
  131.              (!IsPKTTestFinish(BT_PACKET_IDX_EV4))
  132.            )
  133.     {
  134.         if (IsPKTTestRunning(BT_PACKET_IDX_EV4))
  135.         {
  136.             return false;
  137.         }
  138.         else
  139.         {
  140.             m_sBTTCI.e_idx = BT_PACKET_IDX_EV4;
  141.             return true;
  142.         }
  143.     }
  144.     else if (cbPKTEV5->Checked                       &&
  145.              (!IsPKTTestFinish(BT_PACKET_IDX_EV5))
  146.            )
  147.     {
  148.         if (IsPKTTestRunning(BT_PACKET_IDX_EV5))
  149.         {
  150.             return false;
  151.         }
  152.         else
  153.         {
  154.             m_sBTTCI.e_idx = BT_PACKET_IDX_EV5;
  155.             return true;
  156.         }
  157.     }
  158.     if (BTMODULE_MT6611 == m_cBtId)
  159.     {
  160.         E_BT_PACKET_IDX ePkt20[] =
  161.         {
  162.             BT_PACKET_IDX_2DH1,
  163.             BT_PACKET_IDX_2EV3,
  164.             BT_PACKET_IDX_2DH3,
  165.             BT_PACKET_IDX_2EV5,
  166.             BT_PACKET_IDX_2DH5,
  167.             BT_PACKET_IDX_3EV3,
  168.             BT_PACKET_IDX_3DH1,
  169.             BT_PACKET_IDX_3DH3,
  170.             BT_PACKET_IDX_3EV5,
  171.             BT_PACKET_IDX_3DH5,
  172.         };
  173.     }
  174.     return false;
  175. #endif
  176. }
  177. //---------------------------------------------------------------------------
  178. void __fastcall TfrmBT::MonitorTimerTimer(TObject *Sender)
  179. {
  180.     if (IsAllPKTTestFinish())
  181.     {
  182.         MonitorTimer->Enabled = false;
  183.         sbPKT->Panels->Items[0]->Text = (AnsiString)"  BT packet test finish";
  184.         CurrentPageReset();
  185.     }
  186.     if (IsNewTciRequired())
  187.     {
  188.         if( ! CheckPKTFields( CHECK_MASK_PKT_TCI ) )
  189.         {
  190.             MonitorTimer->Enabled = false;
  191.             sbPKT->Panels->Items[0]->Text = (AnsiString) "  BT packet test fail";
  192.             Application->MessageBox( "Execution Failure : BT packet test", "FAILURE", MB_OK );
  193.             return;
  194.         }
  195.         m_sPKTStatus.e_state[m_sBTTCI.e_idx] = PKT_STATE_RUNNING;
  196.         m_BT_PKT_Obj.ConfirmCallback = ::CNF_PKT_TCI;
  197.         m_BT_PKT_Obj.REQ_TCI_Control_Remote_DUT_Start(m_sBTTCI);
  198.     }
  199.     else
  200.     {
  201.         m_BT_PKT_Obj.ConfirmCallback = ::CNF_PKT_Read_TxRxCount;
  202.         m_BT_PKT_Obj.REQ_Read_TX_RX_Count_Start();
  203.     }
  204. }
  205. //---------------------------------------------------------------------------
  206. void TfrmBT::CNF_PKT_TCI( void )
  207. {
  208.     E_METAAPP_RESULT_T state = m_BT_PKT_Obj.Get_ConfirmState();
  209.     switch (state)
  210.     {
  211.         case METAAPP_SUCCESS:
  212.         {
  213.            // sbPKT->Panels->Items[0]->Text = (AnsiString)"  Read packet TX/RX count successfully";
  214.         }
  215.         break;
  216.         case METAAPP_FAIL:
  217.         {
  218.             MonitorTimer->Enabled = false;
  219.             sbPKT->Panels->Items[0]->Text = (AnsiString)" Read packet TX/RX count fail";
  220.             Application->MessageBox("Execution Fail : Read packet TX/RX count", "FAIL", MB_OK);
  221.             CurrentPageReset();
  222.         }
  223.         break;
  224.         case METAAPP_TIMEOUT:
  225.         {
  226.             MonitorTimer->Enabled = false;
  227.             sbPKT->Panels->Items[0]->Text = (AnsiString)"  Read packet TX/RX count timeout";
  228.             Application->MessageBox("Execution Timeout : Read packet TX/RX count", "TIMEOUT", MB_OK);
  229.             CurrentPageReset();
  230.         }
  231.         break;
  232.         case METAAPP_STOP:
  233.         {
  234.             MonitorTimer->Enabled = false;
  235.             sbPKT->Panels->Items[0]->Text = (AnsiString)"  Read packet TX/RX count stop";
  236.             CurrentPageReset();
  237.         }
  238.         break;
  239.     }
  240. }
  241. //---------------------------------------------------------------------------
  242. void TfrmBT::CNF_PKT_Read_TxRxCount(void)
  243. {
  244.     E_METAAPP_RESULT_T state = m_BT_PKT_Obj.Get_ConfirmState();
  245.     switch (state)
  246.     {
  247.         case METAAPP_SUCCESS:
  248.         {
  249.             if (BTMODULE_MT6611 != m_cBtId)
  250.             {
  251.                 SetPKTFinish(m_sBTTCI.e_idx);
  252.                 m_sBTMonCnf = m_BT_PKT_Obj.Get_MonitorResult();
  253.                 ReDrawPKTFields(DRAM_MASK_PKT_MONITOR);
  254.             }
  255.             else
  256.             {
  257.                 m_BT_PKT_Obj.ConfirmCallback = ::CNF_PKT_Read_EDRTxRxCount;
  258.                 m_BT_PKT_Obj.REQ_Read_EDR_TX_RX_Count_Start();
  259.             }
  260.            // sbPKT->Panels->Items[0]->Text = (AnsiString)"  Read packet TX/RX count successfully";
  261.         }
  262.         break;
  263.         case METAAPP_FAIL:
  264.         {
  265.             MonitorTimer->Enabled = false;
  266.             sbPKT->Panels->Items[0]->Text = (AnsiString)" Read packet TX/RX count fail";
  267.             Application->MessageBox("Execution Fail : Read packet TX/RX count", "FAIL", MB_OK);
  268.             CurrentPageReset();
  269.         }
  270.         break;
  271.         case METAAPP_TIMEOUT:
  272.         {
  273.             MonitorTimer->Enabled = false;
  274.             sbPKT->Panels->Items[0]->Text = (AnsiString)"  Read packet TX/RX count timeout";
  275.             Application->MessageBox("Execution Timeout : Read packet TX/RX count", "TIMEOUT", MB_OK);
  276.             CurrentPageReset();
  277.         }
  278.         break;
  279.         case METAAPP_STOP:
  280.         {
  281.             MonitorTimer->Enabled = false;
  282.             sbPKT->Panels->Items[0]->Text = (AnsiString)"  Read packet TX/RX count stop";
  283.             CurrentPageReset();
  284.         }
  285.         break;
  286.     }
  287. }
  288. //---------------------------------------------------------------------------
  289. void TfrmBT::CNF_PKT_Read_EDRTxRxCount(void)
  290. {
  291.     E_METAAPP_RESULT_T state = m_BT_PKT_Obj.Get_ConfirmState();
  292.     switch (state)
  293.     {
  294.         case METAAPP_SUCCESS:
  295.         {
  296.             SetPKTFinish(m_sBTTCI.e_idx);
  297.             m_sBTMonCnf = m_BT_PKT_Obj.Get_MonitorResult();
  298.             ReDrawPKTFields(DRAM_MASK_PKT_MONITOR);
  299.            // sbPKT->Panels->Items[0]->Text = (AnsiString)"  Read packet TX/RX count successfully";
  300.         }
  301.         break;
  302.         case METAAPP_FAIL:
  303.         {
  304.             MonitorTimer->Enabled = false;
  305.             sbPKT->Panels->Items[0]->Text = (AnsiString)" Read EDR packet TX/RX count fail";
  306.             Application->MessageBox("Execution Fail : Read EDR packet TX/RX count", "FAIL", MB_OK);
  307.             CurrentPageReset();
  308.         }
  309.         break;
  310.         case METAAPP_TIMEOUT:
  311.         {
  312.             MonitorTimer->Enabled = false;
  313.             sbPKT->Panels->Items[0]->Text = (AnsiString)"  Read EDR packet TX/RX count timeout";
  314.             Application->MessageBox("Execution Timeout : Read EDR packet TX/RX count", "TIMEOUT", MB_OK);
  315.             CurrentPageReset();
  316.         }
  317.         break;
  318.         case METAAPP_STOP:
  319.         {
  320.             MonitorTimer->Enabled = false;
  321.             sbPKT->Panels->Items[0]->Text = (AnsiString)"  Read EDR packet TX/RX count stop";
  322.             CurrentPageReset();
  323.         }
  324.         break;
  325.     }
  326. }
  327. //--------------------------------------------------------------------------
  328. void __fastcall TfrmBT::edtPKTDataLenCheck(TObject *Sender)
  329. {
  330.     AnsiString  text;
  331.     AnsiString  as_hint;
  332.     TEdit *edit = (TEdit*)Sender;
  333.     unsigned short  us_min_len = Get_PKTTxDataMinLen((E_BT_PACKET_IDX) edit->Tag);
  334.     unsigned short  us_max_len = Get_PKTTxDataMaxLen((E_BT_PACKET_IDX) edit->Tag);
  335.     unsigned short  us_data;
  336.     if( us_min_len != us_max_len )
  337.     {
  338.         as_hint = " value should be " + IntToStr( us_min_len ) +"~" + IntToStr( us_max_len );
  339.     }
  340.     else
  341.     {   as_hint = " value should be " + IntToStr( us_min_len );
  342.     }
  343.     text = edit->Text;
  344.     if( !IsValidBTTxDataLength( text, us_data, us_min_len, us_max_len ) )
  345.     {
  346.         edit->Text = Get_PKTTxDataDefaultLen((E_BT_PACKET_IDX) edit->Tag);
  347.         ShowHintLabel( edit, as_hint.c_str() );
  348.         edit->SetFocus();
  349.         return;
  350.     }
  351. }
  352. //---------------------------------------------------------------------------
  353. void __fastcall TfrmBT::edtPKTPollPeriodCheck(TObject *Sender)
  354. {
  355.     unsigned char  uc_data;
  356.     AnsiString  text;
  357.     TEdit *edit = (TEdit*)Sender;
  358.     char  hint[] =
  359.     {   " value should be 0~255 "
  360.     };
  361.     text = edit->Text;
  362.     if( !IsValidBTTxPollPeriod( text, uc_data ) )
  363.     {
  364.         edit->Text = 0;
  365.         ShowHintLabel( edit, hint );
  366.         edit->SetFocus();
  367.         return;
  368.     }
  369. }
  370. //---------------------------------------------------------------------------
  371. void __fastcall TfrmBT::edtPKTCountCheck(TObject *Sender)
  372. {
  373.     unsigned int  ui_data;
  374.     AnsiString  text;
  375.     TEdit *edit = (TEdit*)Sender;
  376.     char  hint[] =
  377.     {   " value should be 0~4294967295 "
  378.     };
  379.     text = edit->Text;
  380.     if( !IsValidBTTxPacketCount( text, ui_data ) )
  381.     {
  382.         edit->Text = 1000;
  383.         ShowHintLabel( edit, hint );
  384.         edit->SetFocus();
  385.         return;
  386.     }
  387. }
  388. //---------------------------------------------------------------------------
  389. void __fastcall TfrmBT::btnSCTFileClick(TObject *Sender)
  390. {
  391.     char str[512];
  392.     bool ok;
  393.     ok = dlgOpenSCTFile->Execute();
  394.     if( ! ::CheckFileExist(dlgOpenSCTFile->FileName))
  395.         ok = false;
  396.     if( !ok )
  397.     {
  398.         sbSCT->Panels->Items[0]->Text = (AnsiString) "  Load script file fail";
  399.         return;
  400.     }
  401.     m_sBTSCT.hPostMsgDestHandle = this->Handle;
  402.     m_sBTSCT.filename           = dlgOpenSCTFile->FileName;
  403.     m_sBTSCT.log                = m_pSCTLog;
  404.     m_BT_SCT_Obj.ConfirmCallback = ::ConfirmCallback_SetupSCTFile;
  405.     m_BT_SCT_Obj.REQ_Read_From_File_Start( m_sBTSCT );
  406.     sbSCT->Panels->Items[0]->Text = (AnsiString) "  Setup script file progressing";
  407. }
  408. //---------------------------------------------------------------------------
  409. void TfrmBT::ConfirmCallback_SetupSCTFile(void)
  410. {
  411.     E_METAAPP_RESULT_T state = m_BT_SCT_Obj.Get_ConfirmState();
  412.     switch (state)
  413.     {
  414.         case METAAPP_SUCCESS:
  415.         {
  416.             stSCTFile->Caption = m_sBTSCT.filename;
  417.             m_pvScript = m_BT_SCT_Obj.Get_ScriptVector();
  418.             DisplaySCTUI();
  419.             sbSCT->Panels->Items[0]->Text = (AnsiString)"  Setup script file successfully";
  420.         }
  421.         break;
  422.         case METAAPP_FAIL:
  423.         {
  424.             sbSCT->Panels->Items[0]->Text = (AnsiString)"  Setup script file fail";
  425.             Application->MessageBox( "Execution Fail : Setup script file", "FAIL", MB_OK );
  426.         }
  427.         break;
  428.         case METAAPP_TIMEOUT:
  429.         {
  430.             sbSCT->Panels->Items[0]->Text = (AnsiString)"  Setup script file timeout";
  431.             Application->MessageBox( "Execution Timeout : Setup script file", "TIMEOUT", MB_OK );
  432.         }
  433.         break;
  434.         case METAAPP_CANCEL:
  435.         case METAAPP_STOP:
  436.         {
  437.             sbSCT->Panels->Items[0]->Text = (AnsiString)"  Setup script file stop";
  438.         }    
  439.         break;
  440.     }
  441.     CurrentPageReset();
  442. }
  443. //---------------------------------------------------------------------------
  444. void TfrmBT::DisplaySCTUI( void )
  445. {
  446.     vector<S_BT_SCT_SCRIPT>:: iterator iter_script;
  447.    // S_BT_SCT_SCRIPT script;
  448.    // int i;
  449.    // for( i=0; i<MAX_SCRIPT_NUM; i++ )
  450.    // {  // m_btnSCTTest[i]->Visible = false;
  451.    //     m_btnSCTTest[i]->Enabled = false;
  452.    // }
  453.     lbSCT->Clear();
  454.     for( iter_script = m_pvScript->begin(); iter_script != m_pvScript->end(); iter_script++ )
  455.     {
  456.        lbSCT->Items->Add( iter_script->as_script_name );
  457.        // script = *iter_script;
  458.        // for( int i=1; i<=MAX_SCRIPT_NUM; i++ )
  459.        // {
  460.        //     if( script.as_script_tag.AnsiPos(IntToStr(i)) != 0 )
  461.        //     {
  462.        //         m_btnSCTTest[i-1]->Enabled = true;
  463.        //        // m_btnSCTTest[i-1]->Visible = true;
  464.        //         m_btnSCTTest[i-1]->Caption = script.as_script_name;
  465.        //         break;
  466.        //     }
  467.        // }
  468.     }
  469. }
  470. //---------------------------------------------------------------------------
  471. void __fastcall TfrmBT::btnSCTTestClick(TObject *Sender)
  472. {
  473.     TButton *btn = (TButton *)Sender;
  474.     m_sBTSCT.hPostMsgDestHandle = this->Handle;
  475.     m_sBTSCT.filename           = stSCTFile->Caption;
  476.     m_sBTSCT.log                = m_pSCTLog;
  477.     m_sBTSCT.as_script_name     = btn->Caption;
  478.     CurrentPageLock();
  479.     sbSCT->Panels->Items[0]->Text = (AnsiString) "  Script test progressing";
  480.     m_BT_SCT_Obj.ConfirmCallback  = ::ConfirmCallback_SCT;
  481.     m_BT_SCT_Obj.REQ_Start( m_sBTSCT );
  482. }
  483. //---------------------------------------------------------------------------
  484. void TfrmBT::ConfirmCallback_SCT(void)
  485. {
  486.     E_METAAPP_RESULT_T state = m_BT_SCT_Obj.Get_ConfirmState();
  487.     switch (state)
  488.     {
  489.         case METAAPP_SUCCESS:
  490.         {
  491.             sbSCT->Panels->Items[0]->Text = (AnsiString)"  Script test successfully";
  492.         }
  493.         break;
  494.         case METAAPP_FAIL:
  495.         {
  496.             sbSCT->Panels->Items[0]->Text = (AnsiString)"  Script test fail";
  497.             Application->MessageBox( "Execution Fail : Script test", "FAIL", MB_OK );
  498.         }
  499.         break;
  500.         case METAAPP_TIMEOUT:
  501.         {
  502.             Force_BT_Stop(true);
  503.             sbSCT->Panels->Items[0]->Text = (AnsiString)"  Script test timeout";
  504.             Application->MessageBox( "Execution Timeout : Script test", "TIMEOUT", MB_OK );
  505.         }
  506.         break;
  507.         case METAAPP_CANCEL:
  508.         case METAAPP_STOP:
  509.         {
  510.             sbSCT->Panels->Items[0]->Text = (AnsiString)"  Send HCI command stop";
  511.         }    
  512.         break;
  513.     }
  514.     CurrentPageReset();
  515. }
  516. //---------------------------------------------------------------------------
  517. void __fastcall TfrmBT::btnPKTStopClick(TObject *Sender)
  518. {
  519.     if( btnPKTStart->Tag==1 )
  520.     {
  521.         MonitorTimer->Enabled = false;
  522.         sbHCI->Panels->Items[0]->Text = (AnsiString)"  Stop packet test successfully";
  523.         m_BT_PKT_Obj.ConfirmCallback = ::CNF_PKT_Stop;
  524.         m_BT_PKT_Obj.REQ_Stop_Start();
  525.     }
  526. }
  527. //--------------------------------------------------------------------------
  528. void TfrmBT::CNF_PKT_Stop(void)
  529. {
  530.     CurrentPageReset();
  531. }
  532. //--------------------------------------------------------------------------
  533. void TfrmBT::FillSCTResult( void )
  534. {
  535.     for(int i=0; i<m_pSCTLog->Count; i++ )
  536.     {
  537.         AnsiString as = m_pSCTLog->Strings[i];
  538.         memSCTResult->Lines->Add( as );
  539.     }
  540.     m_pSCTLog->Clear();
  541. }
  542. //---------------------------------------------------------------------------
  543. void __fastcall TfrmBT::btnRFTxStopClick(TObject *Sender)
  544. {
  545.     if( btnRFTxStart->Tag==1 )
  546.     {
  547.         Force_BT_Stop( true );
  548.         m_BT_RF_Obj.REQ_Stop_Start();
  549.         CurrentPageReset();
  550.         sbRF->Panels->Items[0]->Text = (AnsiString)"  Stop RF TX test successfully";
  551.         return;
  552.     }
  553. }
  554. //---------------------------------------------------------------------------
  555. void __fastcall TfrmBT::cbHCICategoryChange(TObject *Sender)
  556. {
  557.     DisplayHCIUI( DRAW_MASK_HCI_COMMAND | DRAW_MASK_HCI_PARAMETER, cbHCICategory->ItemIndex, 0 );    
  558. }
  559. //---------------------------------------------------------------------------
  560. void __fastcall TfrmBT::btnHCIStartClick(TObject *Sender)
  561. {
  562.     if( ! CheckSendHCIValue() )
  563.     {
  564.         return;
  565.     }
  566.     m_sBTHCI.hPostMsgDestHandle = this->Handle;
  567.     m_sBTHCI.filename           = stHCIFile->Caption;
  568.     m_sBTHCI.log                = m_pHCILog;
  569.     m_sBTHCI.ui_ms_timeout      = edtHCITimeout->Text.ToInt();
  570.     ComposeHCICommand( m_sBTHCI );
  571.     CurrentPageLock();
  572.     sbHCI->Panels->Items[0]->Text = (AnsiString) "  Start HCI commander test progressing";
  573.     m_BT_HCI_Obj.ConfirmCallback  = ::ConfirmCallback_HCI;
  574.     m_BT_HCI_Obj.REQ_Start( m_sBTHCI );    
  575. }
  576. //---------------------------------------------------------------------------
  577. void __fastcall TfrmBT::btnHCIStopClick(TObject *Sender)
  578. {
  579.     if( btnHCIStart->Tag==1 )
  580.     {
  581.         Force_BT_Stop( false );
  582.         m_BT_HCI_Obj.REQ_Stop();
  583.         CurrentPageReset();
  584.         sbHCI->Panels->Items[0]->Text = (AnsiString)"  Stop HCI commander test successfully";
  585.         return;
  586.     }
  587. }
  588. //---------------------------------------------------------------------------
  589. void  TfrmBT::Force_BT_Stop(bool reset)
  590. {
  591.     m_cBT_STOP_Obj.REQ_Start( reset );
  592. }
  593. //--------------------------------------------------------------------------
  594. //void __fastcall TfrmBT::btnRFRxStopClick(TObject *Sender)
  595. //{
  596. //    if( btnRFRxStart->Tag==1 )
  597. //    {
  598. //        Force_BT_Stop();
  599. //        m_BT_RF_Obj.REQ_Stop_Start();
  600. //        CurrentPageReset();
  601. //        sbRF->Panels->Items[0]->Text = (AnsiString)"  Stop RF RX test successfully";
  602. //        return;
  603. //    }
  604. //}
  605. //---------------------------------------------------------------------------
  606. void __fastcall TfrmBT::btnSCTStopClick(TObject *Sender)
  607. {
  608.     Force_BT_Stop( true );
  609.     CurrentPageReset();
  610.     sbSCT->Panels->Items[0]->Text = (AnsiString)"  Stop script test successfully";
  611. }
  612. //---------------------------------------------------------------------------
  613. void __fastcall TfrmBT::btnSCTStartClick(TObject *Sender)
  614. {
  615.     //TButton *btn = (TButton *)Sender;
  616.     m_sBTSCT.hPostMsgDestHandle = this->Handle;
  617.     m_sBTSCT.filename           = stSCTFile->Caption;
  618.     m_sBTSCT.log                = m_pSCTLog;
  619.     m_sBTSCT.as_script_name     = lbSCT->Items->Strings[lbSCT->ItemIndex];
  620.     CurrentPageLock();
  621.     sbSCT->Panels->Items[0]->Text = (AnsiString) "  Script test progressing";
  622.     m_BT_SCT_Obj.ConfirmCallback  = ::ConfirmCallback_SCT;
  623.     m_BT_SCT_Obj.REQ_Start( m_sBTSCT );
  624. }
  625. //---------------------------------------------------------------------------
  626. void __fastcall TfrmBT::btnSCTClearLogClick(TObject *Sender)
  627. {
  628.     memSCTResult->Clear();    
  629. }
  630. //---------------------------------------------------------------------------
  631. void __fastcall TfrmBT::btnHCIClearLogClick(TObject *Sender)
  632. {
  633.     memHCIResult->Clear();    
  634. }
  635. //---------------------------------------------------------------------------
  636. void __fastcall TfrmBT::btnRFClearLogClick(TObject *Sender)
  637. {
  638.     memRFResult->Clear();    
  639. }
  640. //---------------------------------------------------------------------------
  641. void __fastcall TfrmBT::btnPKTClearLogClick(TObject *Sender)
  642. {
  643.     memPKTResult->Clear();    
  644. }
  645. //===========================================================================
  646. //////////////////////////////  Throughput test   ///////////////////////////
  647. //===========================================================================
  648. void __fastcall TfrmBT::btnTHClearLogClick(TObject *Sender)
  649. {
  650.     memTTResult->Clear();
  651. }
  652. //---------------------------------------------------------------------------
  653. void __fastcall TfrmBT::btnTHConnectDUTClick(TObject *Sender)
  654. {
  655. #if 0
  656.     shpTHConnect->Brush->Color = clRed;
  657.     if( m_bConnectingTarget )
  658.     {
  659.         m_sCWT.iBootStop = BOOT_STOP;
  660.         if( NULL != m_pT_CWT )
  661.         {
  662.             WaitForSingleObject( m_sCWT.METADLL_Connect_Event, 5000 );
  663.         }
  664.         m_sCWT.iBootStop = 0;
  665.     }
  666.     else
  667.     {
  668.         m_sCWT.iBootStop = 0;
  669.     }
  670.     m_sCWT.i_meta_handle             = m_META_HANDLE_Obj.Get_SecondHandle();
  671.     SetTHMetaConnectReq( m_sCWT.META_connect_req );
  672.     m_sCWT.neSuccess = on_THConnectWithTarget_Success;
  673.     m_sCWT.neByUser  = on_THConnectWithTarget_ByUser;
  674.     if( m_bConnectTargetok )
  675.     {
  676.         META_ShutDownTarget_r( m_META_HANDLE_Obj.Get_SecondHandle() );
  677.         META_DisconnectWithTarget_r( m_META_HANDLE_Obj.Get_SecondHandle() );
  678.         m_bConnectTargetok = false;
  679.     }
  680.     if( NULL != m_pT_CWT )
  681.     {
  682.             WaitForSingleObject( m_sCWT.METADLL_Connect_Event, 5000 );
  683.     }
  684.     m_pT_CWT = new T_META_ConnectWithTarget(
  685.                                                          true,
  686.                                                          &m_sCWT
  687.                                                      );
  688.     if( NULL != m_pT_CWT )
  689.     {
  690.         m_pT_CWT->FreeOnTerminate = true;
  691.         m_pT_CWT->OnTerminate = on_THConnectWithTarget_Fail;
  692.         m_pT_CWT->Priority = tpHighest;
  693.     }
  694.     else
  695.     {
  696.         m_pTHLog->Add( DateToStr(Date()) +  " " + TimeToStr(Time()) +
  697.                              " FAIL: connect with target"
  698.                             );
  699.         PostMessage(
  700.                               this->Handle,
  701.                               WM_ML_BT_PRINT_MSG,
  702.                               0,
  703.                               0
  704.                             );
  705.                  return;
  706.     }
  707.     if( NULL != m_pT_CWT )
  708.     {
  709.         m_bConnectingTarget = true;
  710.         m_pT_CWT->Resume();
  711.     }
  712. #endif
  713. }
  714. //---------------------------------------------------------------------------
  715. void TfrmBT::SetTHMetaConnectReq( META_Connect_Req &META_connect_req )
  716. {
  717. #if 0
  718.     AnsiString  as_BootTimeout, as_METAConnectTimeout;
  719.     as_BootTimeout = read_Boot_timeout("MF_setup.txt", Application->ExeName);
  720.     if( as_BootTimeout.AnsiCompareIC( "infinite" ) == 0 )
  721.     {
  722.         META_connect_req.boot_meta_arg.m_ms_boot_timeout = BOOT_INFINITE;
  723.     }
  724.     else
  725.     {
  726.         META_connect_req.boot_meta_arg.m_ms_boot_timeout = as_BootTimeout.ToInt();
  727.     }
  728.     META_connect_req.com_port = m_usComPortArray[cbTHCOM->ItemIndex];
  729.     META_connect_req.boot_meta_arg.m_bbchip_type = frmMainSel->Get_CurBBChipType();
  730.     META_connect_req.boot_meta_arg.m_ext_clock = frmMainSel->Get_CurExternalClockType();
  731.     switch ( (E_BAUD_RATE_INDEX) cbPKTBaudRate->ItemIndex )
  732.     {
  733.         case BAUD_RATE_AUTO_INDEX:
  734.         {
  735.             META_connect_req.baudrate[0] = META_BAUD57600;
  736.             META_connect_req.baudrate[1] = META_BAUD115200;
  737.             META_connect_req.baudrate[2] = META_BAUD230400;
  738.             META_connect_req.baudrate[3] = META_BAUD460800;
  739.             META_connect_req.baudrate[4] = META_BAUD921600;
  740.             META_connect_req.baudrate[5] = META_BAUD_END;
  741.         }
  742.         break;
  743.         case BAUD_RATE_57600_INDEX:
  744.         {
  745.              META_connect_req.baudrate[0] = META_BAUD57600;
  746.              META_connect_req.baudrate[1] = META_BAUD_END;
  747.         }
  748.         break;
  749.         case BAUD_RATE_115200_INDEX:
  750.         {
  751.              META_connect_req.baudrate[0] = META_BAUD115200;
  752.              META_connect_req.baudrate[1] = META_BAUD_END;
  753.         }
  754.         break;
  755.         case BAUD_RATE_230400_INDEX:
  756.         {
  757.              META_connect_req.baudrate[0] = META_BAUD230400;
  758.              META_connect_req.baudrate[1] = META_BAUD_END;
  759.         }
  760.         break;
  761.         case BAUD_RATE_460800_INDEX:
  762.         {
  763.              META_connect_req.baudrate[0] = META_BAUD460800;
  764.              META_connect_req.baudrate[1] = META_BAUD_END;
  765.         }
  766.         break;
  767.         case BAUD_RATE_921600_INDEX:
  768.         {
  769.              META_connect_req.baudrate[0] = META_BAUD921600;
  770.              META_connect_req.baudrate[1] = META_BAUD_END;
  771.         }
  772.         break;
  773.         default: // set baud rate = AUTO
  774.         {
  775.              META_connect_req.baudrate[0] = META_BAUD115200;
  776.              META_connect_req.baudrate[1] = META_BAUD_END;
  777.         }
  778.         break;
  779.     }
  780.     META_connect_req.flowctrl = META_SW_FLOWCTRL;
  781.     as_METAConnectTimeout = read_META_Connect_timeout("MF_setup.txt", Application->ExeName);
  782.     META_connect_req.ms_connect_timeout = as_METAConnectTimeout.ToInt();
  783.     META_connect_req.boot_meta_arg.m_cb_in_brom_stage = NULL;
  784.     META_connect_req.boot_meta_arg.m_cb_in_brom_stage_arg = NULL;
  785.     // security
  786.     META_connect_req.boot_meta_arg.m_speedup_brom_baudrate = _TRUE; //115200
  787.     META_connect_req.boot_meta_arg.m_ready_power_on_wnd_handle = NULL;
  788.     META_connect_req.boot_meta_arg.m_ready_power_on_wparam = NULL;
  789.     META_connect_req.boot_meta_arg.m_ready_power_on_lparam = NULL;
  790.     META_connect_req.boot_meta_arg.m_auth_handle = frmMainSel->Get_SLA_Object()->Get_AuthHandle();
  791.     META_connect_req.boot_meta_arg.m_cb_sla_challenge = SLA_Challenge;
  792.     META_connect_req.boot_meta_arg.m_cb_sla_challenge_arg = NULL;
  793.     META_connect_req.boot_meta_arg.m_cb_sla_challenge_end = SLA_Challenge_END;
  794.     META_connect_req.boot_meta_arg.m_cb_sla_challenge_end_arg = NULL;
  795.     // EDGE PC card
  796.     META_connect_req.boot_meta_arg.m_cb_com_init_stage = ::cb_PowerOnOxford;
  797.     META_connect_req.boot_meta_arg.m_cb_com_init_stage_arg = NULL;
  798. #endif
  799. }
  800. //---------------------------------------------------------------------------
  801. void __fastcall TfrmBT::on_THConnectWithTarget_Success(TObject *Sender)
  802. {
  803. #if 0
  804.     shpTHConnect->Brush->Color = clYellow;
  805.     m_bConnectTargetok = true;
  806. #endif
  807. }
  808. //---------------------------------------------------------------------------
  809. void __fastcall TfrmBT::on_THConnectWithTarget_Fail(TObject *Sender)
  810. {
  811. }
  812. //---------------------------------------------------------------------------
  813. void __fastcall TfrmBT::on_THConnectWithTarget_ByUser(TObject *Sender)
  814. {
  815. }
  816. void __fastcall TfrmBT::cbTHCOMChange(TObject *Sender)
  817. {
  818.      //m_sCWT.iBootStop = BOOT_STOP;
  819. }
  820. //---------------------------------------------------------------------------
  821. void __fastcall TfrmBT::ComboBox1Change(TObject *Sender)
  822. {
  823.     //m_sCWT.iBootStop = BOOT_STOP;
  824. }
  825. //---------------------------------------------------------------------------
  826. void __fastcall TfrmBT::btnRFEnterTestModeClick(TObject *Sender)
  827. {
  828.     m_sBtRf.hPostMsgDestHandle = this->Handle;
  829.     m_sBtRf.log                = m_pRFLog;
  830.     CurrentPageLock();
  831.     sbRF->Panels->Items[0]->Text = (AnsiString) "  Enter BT test mode progressing";
  832.     m_BT_RF_Obj.ConfirmCallback  = ::ConfirmCallback_RFEnterTestMode;
  833.     m_BT_RF_Obj.REQ_Enter_Test_Mode_Start( m_sBtRf );
  834. }
  835. //---------------------------------------------------------------------------
  836. void TfrmBT::ConfirmCallback_RFEnterTestMode(void)
  837. {
  838.     E_METAAPP_RESULT_T state = m_BT_RF_Obj.Get_ConfirmState();
  839.     switch (state)
  840.     {
  841.         case METAAPP_SUCCESS:
  842.         {
  843.             sbRF->Panels->Items[0]->Text = (AnsiString)"  Enter BT test mode finish";
  844.         }
  845.         break;
  846.         case METAAPP_FAIL:
  847.         {
  848.             sbRF->Panels->Items[0]->Text = (AnsiString)"  Enter BT test mode fail";
  849.             Application->MessageBox( "Execution Failure : Enter BT test mode", "FAILURE", MB_OK );
  850.             Application->BringToFront();
  851.             CurrentPageReset();
  852.         }
  853.         break;
  854.         case METAAPP_TIMEOUT:
  855.         {
  856.              Force_BT_Stop( true );
  857.              sbRF->Panels->Items[0]->Text = (AnsiString)"  Enter BT test mode timeout";
  858.              Application->MessageBox( "Execution Timeout : Enter BT test mode", "TIMEOUT", MB_OK );
  859.              CurrentPageReset();
  860.         }
  861.         break;
  862.         case METAAPP_STOP:
  863.         {
  864.              sbRF->Panels->Items[0]->Text = (AnsiString)"  Enter BT test mode stop";
  865.              CurrentPageReset();
  866.         }
  867.         break;
  868.     }
  869.     CurrentPageReset();
  870. }
  871. //--------------------------------------------------------------------------
  872. void __fastcall TfrmBT::edtRFBDAddressCheck(TObject *Sender)
  873. {
  874.     S_BD_ADDR  bd_addr;
  875.     AnsiString  text;
  876.     TEdit *edit = (TEdit*)Sender;
  877.     char  hint[] =
  878.     {   " BD address is not valid "
  879.     };
  880.     text = edit->Text;
  881.     if( !IsValidHexBDAddress( text, bd_addr ) )
  882.     {
  883.         ShowHintLabel( edit, hint );
  884.         edit->SetFocus();
  885.         return;
  886.     }
  887.     m_sRFBdAddr = bd_addr;
  888.     SyncLAPAndAccessCode();
  889.     ReDrawRFFields( DRAM_MASK_RF_ACCESS_CODE );    
  890. }
  891. //---------------------------------------------------------------------------
  892. void __fastcall TfrmBT::btnRFQueryBdAddrClick(TObject *Sender)
  893. {
  894.     m_sBtRf.hPostMsgDestHandle = this->Handle;
  895.     m_sBtRf.log                = m_pRFLog;
  896.     CurrentPageLock();
  897.     sbRF->Panels->Items[0]->Text = (AnsiString) "  Query BD address progressing";
  898.     m_BT_RF_Obj.ConfirmCallback  = ::ConfirmCallback_QueryBDAddress;
  899.     m_BT_RF_Obj.REQ_QueryBDAddress_Start( m_sBtRf );
  900. }
  901. //---------------------------------------------------------------------------
  902. void TfrmBT::ConfirmCallback_QueryBDAddress(void)
  903. {
  904.     E_METAAPP_RESULT_T state = m_BT_RF_Obj.Get_ConfirmState();
  905.     switch( state )
  906.     {
  907.         case METAAPP_SUCCESS:
  908.         {
  909.             m_sRFBdAddr = m_BT_RF_Obj.Get_BdAddress();
  910.             ReDrawRFFields( DRAM_MASK_RF_BD_ADDRESS );
  911.             SyncLAPAndAccessCode();
  912.             ReDrawRFFields( DRAM_MASK_RF_ACCESS_CODE );
  913.             sbRF->Panels->Items[0]->Text = (AnsiString)"  Query BD address finish";
  914.         }
  915.         break;
  916.         case METAAPP_FAIL:
  917.         {
  918.             sbRF->Panels->Items[0]->Text = (AnsiString)"  Query BD address fail";
  919.             Application->MessageBox( "Execution Failure : Query BD address ", "FAILURE", MB_OK );
  920.             Application->BringToFront();
  921.         }
  922.         break;
  923.         case METAAPP_TIMEOUT:
  924.         {
  925.              Force_BT_Stop( true );
  926.              sbRF->Panels->Items[0]->Text = (AnsiString)"  Query BD address timeout";
  927.              Application->MessageBox( "Execution Timeout : Query BD address ", "TIMEOUT", MB_OK );
  928.         }
  929.         break;
  930.         case METAAPP_STOP:
  931.         {
  932.              sbRF->Panels->Items[0]->Text = (AnsiString)"  Query BD address stop";
  933.         }
  934.         break;
  935.     }
  936.     CurrentPageReset();
  937. }
  938. void __fastcall TfrmBT::cbRFTxPowerCtrlClick(TObject *Sender)
  939. {
  940.     if( (cbRFTxPowerCtrl->Checked) && (! btnRFTxStart->Enabled) )
  941.         btnRFChangeLevel->Enabled = true;
  942. }
  943. //---------------------------------------------------------------------------
  944. void __fastcall TfrmBT::btnRFChangeLevelClick(TObject *Sender)
  945. {
  946.     m_sBtRf.hPostMsgDestHandle = this->Handle;
  947.     m_sBtRf.log                = m_pRFLog;
  948.     CurrentPageLock();
  949.     sbRF->Panels->Items[0]->Text = (AnsiString) "  Change power control level progressing";
  950.     m_BT_RF_Obj.ConfirmCallback  = ::ConfirmCallback_ChangePCL;
  951.     m_BT_RF_Obj.REQ_ChangePCL_Start( m_sBtRf );
  952. }
  953. //--------------------------------------------------
  954. void TfrmBT::ConfirmCallback_ChangePCL(void)
  955. {
  956.     E_METAAPP_RESULT_T state = m_BT_RF_Obj.Get_ConfirmState();
  957.     switch (state)
  958.     {
  959.         case METAAPP_SUCCESS:
  960.         {
  961.             sbRF->Panels->Items[0]->Text = (AnsiString)"  Change power control level finish";
  962.         }
  963.         break;
  964.         case METAAPP_FAIL:
  965.         {
  966.             sbRF->Panels->Items[0]->Text = (AnsiString)"  Change power control level fail";
  967.             Application->MessageBox( "Execution Failure : Change power control level", "FAILURE", MB_OK );
  968.             Application->BringToFront();
  969.         }
  970.         break;
  971.         case METAAPP_TIMEOUT:
  972.         {
  973.              Force_BT_Stop( true );
  974.              sbRF->Panels->Items[0]->Text = (AnsiString)"  Change power control level timeout";
  975.              Application->MessageBox( "Execution Timeout : Change power control level", "TIMEOUT", MB_OK );
  976.         }
  977.         break;
  978.         case METAAPP_STOP:
  979.         {
  980.              sbRF->Panels->Items[0]->Text = (AnsiString)"  Change power control level stop";
  981.         }
  982.         break;
  983.     }
  984.     CurrentPageReset();
  985. }
  986. void __fastcall TfrmBT::ToggleHideExecute(TObject *Sender)
  987. {
  988.     g_bHideEnable = g_bHideEnable ? false : true;
  989.     ApplyHideProperty();
  990. }
  991. //---------------------------------------------------------------------------
  992. void TfrmBT::ApplyHideProperty(void)
  993. {
  994.     bool visible = g_bHideEnable ? false : true;
  995.     tsHCI->Visible = visible;
  996.     tsHCI->TabVisible = visible;
  997.     tsSCT->Visible = visible;
  998.     tsSCT->TabVisible = visible;
  999.     m_tsMT->Visible = visible;
  1000.     m_tsMT->TabVisible = visible;
  1001. }
  1002. //--------------------------------------------------------------------------
  1003. void __fastcall TfrmBT::edtRFNAPCheck(TObject *Sender)
  1004. {
  1005. #if 0
  1006.     AnsiString  text;
  1007.     unsigned char  ucdata;
  1008.     TEdit *edit = (TEdit*)Sender;
  1009.     char  hint[] = " value shall be 0~F ";
  1010.     text = edit->Text;
  1011.     if( !IsValidHexBDAddress( text, ucdata ) )
  1012.     {
  1013.         ShowHintLabel( edit, hint );
  1014.         edit->SetFocus();
  1015.         return;
  1016.     }
  1017.     if( 3 == edit->Tag % 4 )
  1018.     {
  1019.         m_sBtRf.s_BDAddr.us_NAP = (m_sBtRf.s_BDAddr.us_NAP & 0x0FFF) | ((ucdata &0xF)<<12);
  1020.     }
  1021.     else if( 2 == edit->Tag % 4 )
  1022.     {
  1023.         m_sBtRf.s_BDAddr.us_NAP = (m_sBtRf.s_BDAddr.us_NAP & 0xF0FF) | ((ucdata &0xF)<<8);
  1024.     }
  1025.     else if( 1 == edit->Tag % 4 )
  1026.     {
  1027.         m_sBtRf.s_BDAddr.us_NAP = (m_sBtRf.s_BDAddr.us_NAP & 0xFF0F) | ((ucdata &0xF)<<4);
  1028.     }
  1029.     else
  1030.     {
  1031.         m_sBtRf.s_BDAddr.us_NAP = (m_sBtRf.s_BDAddr.us_NAP & 0xFFF0) | (ucdata &0xF);
  1032.     }
  1033. #endif
  1034. }
  1035. //---------------------------------------------------------------------------
  1036. void __fastcall TfrmBT::edtRFUAPCheck(TObject *Sender)
  1037. {
  1038. #if 0
  1039.     AnsiString  text;
  1040.     unsigned char  ucdata;
  1041.     TEdit *edit = (TEdit*)Sender;
  1042.     char  hint[] = " value shall be 0~F ";
  1043.     text = edit->Text;
  1044.     if( !IsValidHexBDAddress( text, ucdata ) )
  1045.     {
  1046.         ShowHintLabel( edit, hint );
  1047.         edit->SetFocus();
  1048.         return;
  1049.     }
  1050.     if( 1 == edit->Tag % 2 )
  1051.     {
  1052.         m_sBtRf.s_BDAddr.uc_UAP = (m_sBtRf.s_BDAddr.uc_UAP & 0x0F) | ((ucdata & 0xF)<<4);
  1053.     }
  1054.     else
  1055.     {
  1056.         m_sBtRf.s_BDAddr.uc_UAP = (m_sBtRf.s_BDAddr.uc_UAP & 0xF0) | (ucdata & 0xF);
  1057.     }
  1058. #endif
  1059. }
  1060. //---------------------------------------------------------------------------
  1061. void __fastcall TfrmBT::edtRFLAPCheck(TObject *Sender)
  1062. {
  1063. #if 0
  1064.     AnsiString  text;
  1065.     unsigned char  ucdata;
  1066.     TEdit *edit = (TEdit*)Sender;
  1067.     char  hint[] = " value shall be 0~F ";
  1068.     text = edit->Text;
  1069.     if( !IsValidHexBDAddress( text, ucdata ) )
  1070.     {
  1071.         ShowHintLabel( edit, hint );
  1072.         edit->SetFocus();
  1073.         return;
  1074.     }
  1075.     if( 5 == edit->Tag % 6 )
  1076.     {
  1077.         m_sBtRf.s_BDAddr.ui_LAP = (m_sBtRf.s_BDAddr.ui_LAP & 0x0FFFFF) | ((ucdata & 0xF)<<20);
  1078.     }
  1079.     else if( 4 == edit->Tag % 6 )
  1080.     {
  1081.         m_sBtRf.s_BDAddr.ui_LAP = (m_sBtRf.s_BDAddr.ui_LAP & 0xF0FFFF) | ((ucdata & 0xF)<<16);
  1082.     }
  1083.     else if( 3 == edit->Tag % 6 )
  1084.     {
  1085.         m_sBtRf.s_BDAddr.ui_LAP = (m_sBtRf.s_BDAddr.ui_LAP & 0xFF0FFF) | ((ucdata & 0xF)<<12);
  1086.     }
  1087.     else if( 2 == edit->Tag % 6 )
  1088.     {
  1089.         m_sBtRf.s_BDAddr.ui_LAP = (m_sBtRf.s_BDAddr.ui_LAP & 0xFFF0FF) | ((ucdata & 0xF)<<8);
  1090.     }
  1091.     else if( 1 == edit->Tag % 6 )
  1092.     {
  1093.         m_sBtRf.s_BDAddr.ui_LAP = (m_sBtRf.s_BDAddr.ui_LAP & 0xFFFF0F) | ((ucdata & 0xF)<<4);
  1094.     }
  1095.     else
  1096.     {
  1097.         m_sBtRf.s_BDAddr.ui_LAP = (m_sBtRf.s_BDAddr.ui_LAP & 0xFFFFF0) | (ucdata & 0xF);
  1098.     }
  1099. #endif    
  1100. }
  1101. //============================================================================
  1102. //////////////////////////  Connection test  /////////////////////////////////
  1103. //============================================================================
  1104. void  TfrmBT::ReDrawCTFields( E_DRAM_MASK_CT draw_mask )
  1105. {
  1106.     if( draw_mask & DRAM_MASK_CT_LOCAL_BDADDR )
  1107.     {
  1108.         char str[20];
  1109.         // NAP
  1110.         sprintf( str, "%X", (m_sLocalBdAddr.us_NAP & 0xF000) >> 12 );
  1111.         edtCTLDINAP3->Text = (AnsiString) str;
  1112.         sprintf( str, "%X", (m_sLocalBdAddr.us_NAP & 0x0F00) >>  8 );
  1113.         edtCTLDINAP2->Text = (AnsiString) str;
  1114.         sprintf( str, "%X", (m_sLocalBdAddr.us_NAP & 0x00F0) >>  4 );
  1115.         edtCTLDINAP1->Text = (AnsiString) str;
  1116.         sprintf( str, "%X", m_sLocalBdAddr.us_NAP & 0x000F );
  1117.         edtCTLDINAP0->Text = (AnsiString) str;
  1118.         // UAP
  1119.         sprintf( str, "%X", (m_sLocalBdAddr.uc_UAP & 0xF0) >> 4 );
  1120.         edtCTLDIUAP1->Text = (AnsiString) str;
  1121.         sprintf( str, "%X", m_sLocalBdAddr.uc_UAP & 0x0F );
  1122.         edtCTLDIUAP0->Text = (AnsiString) str;
  1123.         // LAP
  1124.         sprintf( str, "%X", (m_sLocalBdAddr.ui_LAP & 0x00F00000) >> 20 );
  1125.         edtCTLDILAP5->Text = (AnsiString) str;
  1126.         sprintf( str, "%X", (m_sLocalBdAddr.ui_LAP & 0x000F0000) >> 16 );
  1127.         edtCTLDILAP4->Text = (AnsiString) str;
  1128.         sprintf( str, "%X", (m_sLocalBdAddr.ui_LAP & 0x0000F000) >> 12 );
  1129.         edtCTLDILAP3->Text = (AnsiString) str;
  1130.         sprintf( str, "%X", (m_sLocalBdAddr.ui_LAP & 0x00000F00) >>  8 );
  1131.         edtCTLDILAP2->Text = (AnsiString) str;
  1132.         sprintf( str, "%X", (m_sLocalBdAddr.ui_LAP & 0x000000F0) >>  4 );
  1133.         edtCTLDILAP1->Text = (AnsiString) str;
  1134.         sprintf( str, "%X", m_sLocalBdAddr.ui_LAP & 0x0000000F );
  1135.         edtCTLDILAP0->Text = (AnsiString) str;
  1136.     }
  1137.     // ACL BD address
  1138.     if( draw_mask & DRAM_MASK_CT_ACL_BDADDR )
  1139.     {
  1140.         AnsiString as_bd_addr;
  1141.         char str[3];
  1142.         for( int i=BD_ADDRESS_LEN-1; i>=0; i-- )
  1143.         {
  1144.             if( m_sCTACLBdAddr.uc_BD_Addr[i] <= 0x0F )
  1145.                 sprintf( str, "0%X", m_sCTACLBdAddr.uc_BD_Addr[i] );
  1146.             else
  1147.                 sprintf( str, "%X", m_sCTACLBdAddr.uc_BD_Addr[i] );
  1148.             AnsiString as_str(str);
  1149.             if( i != 0 )  as_str += ":";
  1150.             as_bd_addr+= as_str;
  1151.         }
  1152.         m_stCTACLBDAddr->Caption = as_bd_addr;
  1153.     }
  1154.     // SCO BD address
  1155.     if( draw_mask & DRAM_MASK_CT_SCO_BDADDR )
  1156.     {
  1157.         AnsiString as_bd_addr;
  1158.         char str[3];
  1159.         for( int i=BD_ADDRESS_LEN-1; i>=0; i-- )
  1160.         {
  1161.             if( m_sSCOBdAddr.uc_BD_Addr[i] <= 0x0F )
  1162.                 sprintf( str, "0%X", m_sSCOBdAddr.uc_BD_Addr[i] );
  1163.             else
  1164.                 sprintf( str, "%X", m_sSCOBdAddr.uc_BD_Addr[i] );
  1165.             AnsiString as_str(str);
  1166.             if( i != 0 )  as_str += ":";
  1167.             as_bd_addr+= as_str;
  1168.         }
  1169.         m_stCTSCOBDAddr->Caption = as_bd_addr;
  1170.     }
  1171.     // discovered list
  1172.     if( draw_mask & DRAM_MASK_CT_DISCOVERED_LIST )
  1173.     {
  1174.         DisplayInquiryBDList();
  1175.     }
  1176.     // connect list
  1177.     if( draw_mask & DRAM_MASK_CT_CONNECT_LIST )
  1178.     {
  1179.         DisplayConnectBDList();
  1180.     }
  1181.     // ACL connect status
  1182.     if( draw_mask & DRAM_MASK_CT_ACL_STATUS )
  1183.     {
  1184.         vector<S_BT_CT_RES>:: iterator iter;
  1185.         vector<S_BT_CT_RES> *pvCTRes = m_cBT_CT_Obj.Get_CtResVector();
  1186.         bool match = false;
  1187.         for( iter = pvCTRes->begin(); iter != pvCTRes->end(); iter++ )
  1188.         {
  1189.              match = true;
  1190.              for(int i=0; i<BD_ADDRESS_LEN; i++ )
  1191.              {
  1192.                  if( iter->s_bd_addr.uc_BD_Addr[i] != m_sCTACLBdAddr.uc_BD_Addr[i] )
  1193.                  {
  1194.                      match = false;
  1195.                      break;
  1196.                  }
  1197.              }
  1198.              if( match )
  1199.                  break;
  1200.         }
  1201.         if (match)
  1202.         {
  1203.             switch (iter->e_acl_status)
  1204.             {
  1205.                 case BT_ACL_STATUS_SUCCESS:
  1206.                 {
  1207.                      stCTACLStatus->Caption = (AnsiString) STR_BT_ACL_SUCCESS;
  1208.                 }
  1209.                 break;
  1210.                 case BT_ACL_STATUS_PAGE_TIMEOUT:
  1211.                 {
  1212.                      stCTACLStatus->Caption = (AnsiString) STR_BT_ACL_PAGE_TIMEOUT;
  1213.                 }
  1214.                 break;
  1215.                 case BT_ACL_STATUS_FAIL:
  1216.                 {
  1217.                      stCTACLStatus->Caption = (AnsiString) STR_BT_ACL_FAIL;
  1218.                 }
  1219.                 break;
  1220.                 case BT_ACL_STATUS_NONE:
  1221.                 default:
  1222.                 {
  1223.                      stCTACLStatus->Caption = (AnsiString) "";
  1224.                 }
  1225.                 break;
  1226.             }
  1227.         }
  1228.     }
  1229.     // SCO connect status
  1230.     if (draw_mask & DRAM_MASK_CT_SCO_STATUS)
  1231.     {
  1232.         vector<S_BT_CT_RES>:: iterator iter;
  1233.         vector<S_BT_CT_RES> *pvCTRes = m_cBT_CT_Obj.Get_CtResVector();
  1234.         bool match;
  1235.         for (iter = pvCTRes->begin(); iter != pvCTRes->end(); iter++)
  1236.         {
  1237.              match = true;
  1238.              for(int i=0; i<BD_ADDRESS_LEN; i++ )
  1239.              {
  1240.                  if (iter->s_bd_addr.uc_BD_Addr[i] != m_sSCOBdAddr.uc_BD_Addr[i])
  1241.                  {
  1242.                      match = false;
  1243.                      break;
  1244.                  }
  1245.              }
  1246.              if (match)
  1247.              {
  1248.                  break;
  1249.              }
  1250.         }
  1251.         if (match)
  1252.         {
  1253.             switch (iter->e_sco_status)
  1254.             {
  1255.                 case BT_CT_SCO_STATUS_SUCCESS:
  1256.                 {
  1257.                      stCTSCOStatus->Caption = (AnsiString) STR_BT_CT_SCO_SUCCESS;
  1258.                 }
  1259.                 break;
  1260.                 case BT_CT_SCO_STATUS_FAIL:
  1261.                 {
  1262.                      stCTSCOStatus->Caption = (AnsiString) STR_BT_CT_SCO_FAIL;
  1263.                 }
  1264.                 break;
  1265.                 default:
  1266.                 case BT_CT_SCO_STATUS_NONE:
  1267.                 {
  1268.                      stCTSCOStatus->Caption = (AnsiString) "";
  1269.                 }
  1270.                 break;
  1271.             }
  1272.         }
  1273.     }
  1274.     // button
  1275.     if (draw_mask & DRAM_MASK_CT_BUTTON)
  1276.     {
  1277.         if (1 == btnCTInquiryStart->Tag)
  1278.         {
  1279.             btnCTScan->Enabled = false;
  1280.             btnCTAutoAccept->Enabled = false;
  1281.             btnCTEnterPIN->Enabled = false;
  1282.             btnCTConnectSCO->Enabled = false;
  1283.             btnCTDisconnectSCO->Enabled = false;
  1284.             btnCTConnectACL->Enabled = false;
  1285.             btnCTDisconnectACL->Enabled = false;
  1286.             btnCTChangeAclPktType->Enabled = false;
  1287.         }
  1288.         else
  1289.         {
  1290.             int acl_result = stCTACLStatus->Caption.AnsiCompareIC(STR_BT_ACL_SUCCESS);
  1291.             int sco_result = stCTSCOStatus->Caption.AnsiCompareIC(STR_BT_CT_SCO_SUCCESS);
  1292.             btnCTScan->Enabled = true;
  1293.             btnCTAutoAccept->Enabled = true;
  1294.             btnCTEnterPIN->Enabled = false;
  1295.             if (1 == acl_result)
  1296.             {
  1297.                 btnCTConnectSCO->Enabled = false;
  1298.                 btnCTDisconnectSCO->Enabled = false;
  1299.             }
  1300.             else
  1301.             {
  1302.                 btnCTConnectSCO->Enabled = sco_result;
  1303.                 btnCTDisconnectSCO->Enabled = !sco_result;
  1304.             }
  1305.             btnCTConnectACL->Enabled = acl_result;
  1306.             btnCTDisconnectACL->Enabled = !acl_result;
  1307.             if ((0 == acl_result) && (0 != sco_result))
  1308.             {
  1309.                 btnCTChangeAclPktType->Enabled = true;
  1310.             }
  1311.             else
  1312.             {
  1313.                 btnCTChangeAclPktType->Enabled = false;
  1314.             }    
  1315.         }
  1316.     }
  1317. }
  1318. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1319. void __fastcall TfrmBT::btnCTLDIReadClick(TObject *Sender)
  1320. {
  1321.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  1322.     m_sBTCT.log                = m_pCTLog;
  1323.     CurrentPageLock();
  1324.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Read local BD address progressing";
  1325.     m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_ReadLocalBDAddr;
  1326.     m_cBT_CT_Obj.REQ_ReadLocalBDAddress_Start( m_sBTCT );
  1327. }
  1328. //---------------------------------------------
  1329. void  TfrmBT::CNF_CT_ReadLocalBDAddr( void )
  1330. {
  1331.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  1332.     switch (state)
  1333.     {
  1334.         case METAAPP_SUCCESS:
  1335.         {
  1336.             m_sLocalBdAddr = m_cBT_CT_Obj.Get_LocalBdAddr();
  1337.             ReDrawCTFields(DRAM_MASK_CT_LOCAL_BDADDR);
  1338.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Read local BD address successfully";
  1339.         }
  1340.         break;
  1341.         case METAAPP_FAIL:
  1342.         {
  1343.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Read local BD address fail";
  1344.             Application->MessageBox( "Execution Failure : Read local BD address", "FAILURE", MB_OK );
  1345.             Application->BringToFront();
  1346.             
  1347.         }
  1348.         break;
  1349.         case METAAPP_TIMEOUT:
  1350.         {
  1351.              Force_BT_Stop( false );
  1352.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Read local BD address timeout";
  1353.              Application->MessageBox( "Execution Timeout : Read local BD address", "TIMEOUT", MB_OK );
  1354.              Application->BringToFront();
  1355.         }
  1356.         break;
  1357.         case METAAPP_CANCEL:
  1358.         case METAAPP_STOP:
  1359.         {
  1360.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Read local BD address stop";
  1361.         }
  1362.         break;
  1363.     }
  1364.     CurrentPageReset();
  1365. }
  1366. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1367. void __fastcall TfrmBT::btnCTResetLDClick(TObject *Sender)
  1368. {
  1369.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  1370.     m_sBTCT.log                = m_pCTLog;
  1371.     CurrentPageLock();
  1372.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Reset local device progressing";
  1373.     m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_Reset;
  1374.     m_cBT_CT_Obj.REQ_Reset_Start( m_sBTCT );
  1375. }
  1376. //---------------------------------------------
  1377. void  TfrmBT::CNF_CT_Reset( void )
  1378. {
  1379.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  1380.     CurrentPageReset();
  1381.     switch( state )
  1382.     {
  1383.         case METAAPP_SUCCESS:
  1384.         {
  1385.             ReDrawCTFields( DRAM_MASK_CT_DISCOVERED_LIST |
  1386.                             DRAM_MASK_CT_CONNECT_LIST    |
  1387.                             DRAM_MASK_CT_BUTTON          |
  1388.                             DRAM_MASK_CT_ACL_STATUS      |
  1389.                             DRAM_MASK_CT_SCO_STATUS
  1390.                           );  
  1391.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Reset local device successfully";
  1392.         }
  1393.         break;
  1394.         case METAAPP_FAIL:
  1395.         {
  1396.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Reset local device fail";
  1397.             Application->MessageBox( "Execution Failure : Reset local device", "FAILURE", MB_OK );
  1398.             Application->BringToFront();
  1399.         }
  1400.         break;
  1401.         case METAAPP_TIMEOUT:
  1402.         {
  1403.              Force_BT_Stop( false );
  1404.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Reset local device timeout";
  1405.              Application->MessageBox( "Execution Timeout : Reset local device", "TIMEOUT", MB_OK );
  1406.              Application->BringToFront();
  1407.         }
  1408.         break;
  1409.         case METAAPP_CANCEL:
  1410.         case METAAPP_STOP:
  1411.         {
  1412.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Reset local device stop";
  1413.         }
  1414.         break;
  1415.     }
  1416. }
  1417. //--------------------------------------------------------------------------
  1418. void TfrmBT::FillCTResult( void )
  1419. {
  1420.     for(int i=0; i<m_pCTLog->Count; i++ )
  1421.     {
  1422.         AnsiString as = m_pCTLog->Strings[i];
  1423.         memCTResult->Lines->Add( as );
  1424.     }
  1425.     m_pCTLog->Clear();
  1426. }
  1427. void __fastcall TfrmBT::btnCTLDIWriteClick(TObject *Sender)
  1428. {
  1429.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  1430.     m_sBTCT.log                = m_pCTLog;
  1431.     m_cBT_CT_Obj.Set_LocalBdAddr( m_sLocalBdAddr );
  1432.     CurrentPageLock();
  1433.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Write local BD address progressing";
  1434.     m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_WriteLocalBDAddr;
  1435.     m_cBT_CT_Obj.REQ_WriteLocalBDAddress_Start( m_sBTCT );    
  1436. }
  1437. //---------------------------------------------
  1438. void  TfrmBT::CNF_CT_WriteLocalBDAddr(void)
  1439. {
  1440.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  1441.     switch (state)
  1442.     {
  1443.         case METAAPP_SUCCESS:
  1444.         {
  1445.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Write local BD address successfully";
  1446.         }
  1447.         break;
  1448.         case METAAPP_FAIL:
  1449.         {
  1450.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Read local BD address fail";
  1451.             Application->MessageBox( "Execution Failure : Read local BD address", "FAILURE", MB_OK );
  1452.             Application->BringToFront();
  1453.         }
  1454.         break;
  1455.         case METAAPP_TIMEOUT:
  1456.         {
  1457.              Force_BT_Stop( false );
  1458.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Read local BD address timeout";
  1459.              Application->MessageBox( "Execution Timeout : Read local BD address", "TIMEOUT", MB_OK );
  1460.              Application->BringToFront();
  1461.         }
  1462.         break;
  1463.         case METAAPP_CANCEL:
  1464.         case METAAPP_STOP:
  1465.         {
  1466.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Read local BD address stop";
  1467.         }
  1468.         break;
  1469.     }
  1470.     CurrentPageReset();
  1471. }
  1472. //------------------------------------------------------------------------
  1473. void __fastcall TfrmBT::edtCTLDINAPCheck(TObject *Sender)
  1474. {
  1475.     AnsiString  text;
  1476.     unsigned char  ucdata;
  1477.     TEdit *edit = (TEdit*)Sender;
  1478.     char  hint[] = " value shall be 0~F ";
  1479.     text = edit->Text;
  1480.     if( !IsValidHexBDAddress( text, ucdata ) )
  1481.     {
  1482.         ShowHintLabel( edit, hint );
  1483.         edit->SetFocus();
  1484.         return;
  1485.     }
  1486.     if( 3 == edit->Tag )
  1487.     {
  1488.         m_sLocalBdAddr.us_NAP = (m_sLocalBdAddr.us_NAP & 0x0FFF) | ((ucdata &0xF)<<12);
  1489.     }
  1490.     else if( 2 == edit->Tag )
  1491.     {
  1492.         m_sLocalBdAddr.us_NAP = (m_sLocalBdAddr.us_NAP & 0xF0FF) | ((ucdata &0xF)<<8);
  1493.     }
  1494.     else if( 1 == edit->Tag )
  1495.     {
  1496.         m_sLocalBdAddr.us_NAP = (m_sLocalBdAddr.us_NAP & 0xFF0F) | ((ucdata &0xF)<<4);
  1497.     }
  1498.     else
  1499.     {
  1500.         m_sLocalBdAddr.us_NAP = (m_sLocalBdAddr.us_NAP & 0xFFF0) | (ucdata &0xF);
  1501.     }
  1502. }
  1503. //---------------------------------------------------------------------------
  1504. void __fastcall TfrmBT::edtCTLDIUAPCheck(TObject *Sender)
  1505. {
  1506.     AnsiString  text;
  1507.     unsigned char  ucdata;
  1508.     TEdit *edit = (TEdit*)Sender;
  1509.     char  hint[] = " value shall be 0~F ";
  1510.     text = edit->Text;
  1511.     if( !IsValidHexBDAddress( text, ucdata ) )
  1512.     {
  1513.         ShowHintLabel( edit, hint );
  1514.         edit->SetFocus();
  1515.         return;
  1516.     }
  1517.     if( 1 == edit->Tag )
  1518.     {
  1519.         m_sLocalBdAddr.uc_UAP = (m_sLocalBdAddr.uc_UAP & 0x0F) | ((ucdata & 0xF)<<4);
  1520.     }
  1521.     else
  1522.     {
  1523.         m_sLocalBdAddr.uc_UAP = (m_sLocalBdAddr.uc_UAP & 0xF0) | (ucdata & 0xF);
  1524.     }
  1525. }
  1526. //---------------------------------------------------------------------------
  1527. void __fastcall TfrmBT::edtCTLDILAPCheck(TObject *Sender)
  1528. {
  1529.     AnsiString  text;
  1530.     unsigned char  ucdata;
  1531.     TEdit *edit = (TEdit*)Sender;
  1532.     char  hint[] = " value shall be 0~F ";
  1533.     text = edit->Text;
  1534.     if( !IsValidHexBDAddress( text, ucdata ) )
  1535.     {
  1536.         ShowHintLabel( edit, hint );
  1537.         edit->SetFocus();
  1538.         return;
  1539.     }
  1540.     if( 5 == edit->Tag )
  1541.     {
  1542.         m_sLocalBdAddr.ui_LAP = (m_sLocalBdAddr.ui_LAP & 0x0FFFFF) | ((ucdata & 0xF)<<20);
  1543.     }
  1544.     else if( 4 == edit->Tag )
  1545.     {
  1546.         m_sLocalBdAddr.ui_LAP = (m_sLocalBdAddr.ui_LAP & 0xF0FFFF) | ((ucdata & 0xF)<<16);
  1547.     }
  1548.     else if( 3 == edit->Tag )
  1549.     {
  1550.         m_sLocalBdAddr.ui_LAP = (m_sLocalBdAddr.ui_LAP & 0xFF0FFF) | ((ucdata & 0xF)<<12);
  1551.     }
  1552.     else if( 2 == edit->Tag )
  1553.     {
  1554.         m_sLocalBdAddr.ui_LAP = (m_sLocalBdAddr.ui_LAP & 0xFFF0FF) | ((ucdata & 0xF)<<8);
  1555.     }
  1556.     else if( 1 == edit->Tag )
  1557.     {
  1558.         m_sLocalBdAddr.ui_LAP = (m_sLocalBdAddr.ui_LAP & 0xFFFF0F) | ((ucdata & 0xF)<<4);
  1559.     }
  1560.     else
  1561.     {
  1562.         m_sLocalBdAddr.ui_LAP = (m_sLocalBdAddr.ui_LAP & 0xFFFFF0) | (ucdata & 0xF);
  1563.     }
  1564. }
  1565. //---------------------------------------------------------------------------
  1566. void __fastcall TfrmBT::btnCTInquiryStartClick(TObject *Sender)
  1567. {
  1568.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  1569.     m_sBTCT.log                = m_pCTLog;
  1570.     m_sBTCT.list               = lbCTDisDevices->Items;
  1571.     m_cBT_CT_Obj.Set_InquiryTimeout( m_uiInquiryTimeout );
  1572.   //  lbCTDisDevices->Clear();
  1573.     CurrentPageLock();
  1574.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Inquiry progressing";
  1575.     m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_Inquiry;
  1576.     m_cBT_CT_Obj.REQ_Inquiry_Start( m_sBTCT );
  1577. }
  1578. //-----------------------------------------
  1579. void TfrmBT::CNF_CT_Inquiry(void)
  1580. {
  1581.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  1582.     switch( state )
  1583.     {
  1584.         case METAAPP_SUCCESS:
  1585.         {
  1586.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Inquiry successfully";
  1587.         }
  1588.         break;
  1589.         case METAAPP_FAIL:
  1590.         {
  1591.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Inquiry fail";
  1592.             Application->MessageBox( "Execution Failure : Inquiry", "FAILURE", MB_OK );
  1593.             Application->BringToFront();
  1594.         }
  1595.         break;
  1596.         case METAAPP_TIMEOUT:
  1597.         {
  1598.             Force_BT_Stop(false);
  1599.             m_sBTCT.hPostMsgDestHandle = this->Handle;
  1600.             m_sBTCT.log                = m_pCTLog;
  1601.             m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_InquiryCancel;
  1602.             m_cBT_CT_Obj.REQ_Inquiry_Cancel_Start(m_sBTCT);
  1603.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Inquiry timeout";
  1604.             Application->MessageBox( "Execution Timeout : Inquiry", "TIMEOUT", MB_OK );
  1605.             Application->BringToFront();
  1606.         }
  1607.         break;
  1608.         case METAAPP_CANCEL:
  1609.         case METAAPP_STOP:
  1610.         {
  1611.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Inquiry stop";
  1612.         }
  1613.         break;
  1614.     }
  1615.     CurrentPageReset();
  1616. }
  1617. //---------------------------------------------------------------------------
  1618. void TfrmBT::DisplayInquiryBDList( void )
  1619. {
  1620.     vector<S_BT_CT_RES> *pvCTRes = m_cBT_CT_Obj.Get_CtResVector();
  1621.     vector<S_BT_CT_RES>:: iterator iter;
  1622.     lbCTDisDevices->Clear();
  1623.     for( iter = pvCTRes->begin(); iter != pvCTRes->end(); iter++ )
  1624.     {
  1625.         if( iter->e_acl_status != BT_ACL_STATUS_SUCCESS )
  1626.         {
  1627.             AnsiString as_bd_addr;
  1628.             char str[3];
  1629.             for( int i=BD_ADDRESS_LEN-1; i>=0; i-- )
  1630.             {
  1631.                 if( iter->s_bd_addr.uc_BD_Addr[i] <= 0x0F )
  1632.                     sprintf( str, "0%X", iter->s_bd_addr.uc_BD_Addr[i] );
  1633.                 else
  1634.                     sprintf( str, "%X", iter->s_bd_addr.uc_BD_Addr[i] );
  1635.                 AnsiString as_str(str);
  1636.                 if( i != 0 )
  1637.                     as_bd_addr+= as_str + ":";
  1638.                 else
  1639.                     as_bd_addr+= as_str;
  1640.             }
  1641.             lbCTDisDevices->Items->Add( as_bd_addr );
  1642.         }    
  1643.     }
  1644. }
  1645. //---------------------------------------------------------------------------
  1646. void TfrmBT::DisplayConnectBDList( void )
  1647. {
  1648.     vector<S_BT_CT_RES> *pvCTRes = m_cBT_CT_Obj.Get_CtResVector();
  1649.     vector<S_BT_CT_RES>:: iterator iter;
  1650.     lbCTConDevices->Clear();
  1651.     for( iter = pvCTRes->begin(); iter != pvCTRes->end(); iter++ )
  1652.     {
  1653.         if(  BT_ACL_STATUS_SUCCESS == iter->e_acl_status )
  1654.         {
  1655.             AnsiString as_bd_addr;
  1656.             char str[3];
  1657.             for( int i=BD_ADDRESS_LEN-1; i>=0; i-- )
  1658.             {
  1659.                 if( iter->s_bd_addr.uc_BD_Addr[i] <= 0x0F )
  1660.                     sprintf( str, "0%X", iter->s_bd_addr.uc_BD_Addr[i] );
  1661.                 else
  1662.                     sprintf( str, "%X", iter->s_bd_addr.uc_BD_Addr[i] );
  1663.                 AnsiString as_str(str);
  1664.                 if( i != 0 )
  1665.                     as_bd_addr+= as_str + ":";
  1666.                 else
  1667.                     as_bd_addr+= as_str;
  1668.             }
  1669.             lbCTConDevices->Items->Add( as_bd_addr );
  1670.         }
  1671.     }
  1672. }
  1673. //--------------------------------------------------------------------------
  1674. S_BD_ADDR TfrmBT::Get_BDAddrFromString( AnsiString as_str )
  1675. {
  1676.     int iLD;
  1677.    // AnsiString as_bd_addr;
  1678.     S_BD_ADDR bd_addr;
  1679.     unsigned char str[BD_ADDRESS_LEN];
  1680.     AnsiString_Hex_To_Array_UnsignedChar( as_str, str, BD_ADDRESS_LEN, ':' );
  1681.     for( int i=0; i<BD_ADDRESS_LEN; i++ )
  1682.     {   bd_addr.uc_BD_Addr[i] = str[BD_ADDRESS_LEN-i-1];
  1683.     }
  1684.     return  bd_addr;
  1685. }
  1686. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1687. void __fastcall TfrmBT::edtCTInquiryTimeoutCheck(TObject *Sender)
  1688. {
  1689.     AnsiString  text;
  1690.     unsigned int  uidata;
  1691.     TEdit *edit = (TEdit*)Sender;
  1692.     char  hint[] = " value shall be 0~10000000 ";
  1693.     text = edit->Text;
  1694.     if( !IsValidBTTimeout( text, uidata ) )
  1695.     {
  1696.         ShowHintLabel( edit, hint );
  1697.         edit->SetFocus();
  1698.         return;
  1699.     }
  1700.     m_uiInquiryTimeout = uidata * 1.28 * 1000;
  1701. }
  1702. //---------------------------------------------------------------------------
  1703. void __fastcall TfrmBT::btCTClearLogClick(TObject *Sender)
  1704. {
  1705.     memCTResult->Clear();
  1706. }
  1707. //-------------------------------------------------------------------------
  1708. void __fastcall TfrmBT::btnCTScanClick(TObject *Sender)
  1709. {
  1710.     S_BT_SCAN scan;
  1711.     scan.e_scan_type = (E_BT_SCAN_TYPE) cbCTScanType->ItemIndex;
  1712.     scan.b_interlaced_inquiry_scan = cbCTInterlacedInquiryScan->Checked;
  1713.     scan.b_interlaced_page_scan = cbInterlacedPageScan->Checked;
  1714.     m_cBT_CT_Obj.Set_ScanParameter( scan );
  1715.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  1716.     m_sBTCT.log                = m_pCTLog;
  1717.     CurrentPageLock();
  1718.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Set scan parameter progressing";
  1719.     m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_Scan;
  1720.     m_cBT_CT_Obj.REQ_Scan_Start( m_sBTCT );
  1721. }
  1722. //---------------------------------------------
  1723. void TfrmBT::CNF_CT_Scan(void)
  1724. {
  1725.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  1726.     switch( state )
  1727.     {
  1728.         case METAAPP_SUCCESS:
  1729.         {
  1730.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Set scan parameter successfully";
  1731.         }
  1732.         break;
  1733.         case METAAPP_FAIL:
  1734.         {
  1735.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Set scan parameter fail";
  1736.             Application->MessageBox( "Execution Failure : Set scan parameter", "FAILURE", MB_OK );
  1737.             Application->BringToFront();
  1738.         }
  1739.         break;
  1740.         case METAAPP_TIMEOUT:
  1741.         {
  1742.              Force_BT_Stop( false );
  1743.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Set scan parameter timeout";
  1744.              Application->MessageBox( "Execution Timeout : Set scan parameter", "TIMEOUT", MB_OK );
  1745.              Application->BringToFront();
  1746.         }
  1747.         break;
  1748.         case METAAPP_CANCEL:
  1749.         case METAAPP_STOP:
  1750.         {
  1751.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Set scan parameter stop";
  1752.         }
  1753.         break;
  1754.     }
  1755.     CurrentPageReset();
  1756. }
  1757. //---------------------------------------------------------------------------
  1758. void __fastcall TfrmBT::lbCTDisDevicesClick(TObject *Sender)
  1759. {
  1760.     m_sCTACLBdAddr = Get_BDAddrFromString( lbCTDisDevices->Items->Strings[lbCTDisDevices->ItemIndex] );
  1761.     m_sSCOBdAddr = m_sCTACLBdAddr;
  1762.     ReDrawCTFields( DRAM_MASK_CT_ACL_BDADDR |
  1763.                     DRAM_MASK_CT_SCO_BDADDR |
  1764.                     DRAM_MASK_CT_ACL_STATUS |
  1765.                     DRAM_MASK_CT_SCO_STATUS |
  1766.                     DRAM_MASK_CT_BUTTON);
  1767. }
  1768. //---------------------------------------------------------------------------
  1769. unsigned short TfrmBT::Get_CTAclPacketType( void )
  1770. {
  1771.     unsigned short pkt_type=0;
  1772.     if( cbCTDM1->Checked )
  1773.     {   pkt_type |= ACL_PKT_MASK_DM1;
  1774.     }
  1775.     if( cbCTDH1->Checked )
  1776.     {   pkt_type |= ACL_PKT_MASK_DH1;
  1777.     }
  1778.     if( cbCTDM3->Checked )
  1779.     {   pkt_type |= ACL_PKT_MASK_DM3;
  1780.     }
  1781.     if( cbCTDH3->Checked )
  1782.     {   pkt_type |= ACL_PKT_MASK_DH3;
  1783.     }
  1784.     if( cbCTDM5->Checked )
  1785.     {   pkt_type |= ACL_PKT_MASK_DM5;
  1786.     }
  1787.     if( cbCTDH5->Checked )
  1788.     {   pkt_type |= ACL_PKT_MASK_DH5;
  1789.     }
  1790.     // BT 2.0
  1791.     if( ! cbCT2DH1->Checked )
  1792.     {   pkt_type |= ACL_PKT_MASK_2DH1;
  1793.     }
  1794.     if( ! cbCT3DH1->Checked )
  1795.     {   pkt_type |= ACL_PKT_MASK_3DH1;
  1796.     }
  1797.     if( ! cbCT2DH3->Checked )
  1798.     {   pkt_type |= ACL_PKT_MASK_2DH3;
  1799.     }
  1800.     if( ! cbCT3DH3->Checked )
  1801.     {   pkt_type |= ACL_PKT_MASK_3DH3;
  1802.     }
  1803.     if( ! cbCT2DH5->Checked )
  1804.     {   pkt_type |= ACL_PKT_MASK_2DH5;
  1805.     }
  1806.     if( ! cbCT3DH5->Checked )
  1807.     {   pkt_type |= ACL_PKT_MASK_3DH5;
  1808.     }
  1809.     return pkt_type;
  1810. }
  1811. //---------------------------------------------------------------------------
  1812. E_SCO_PKT_MASK TfrmBT::Get_ScoPacketType( void )
  1813. {
  1814.     return (E_SCO_PKT_MASK) cbCTSCOPktType->ItemIndex;
  1815. }
  1816. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1817. void __fastcall TfrmBT::btnCTConnectACLClick(TObject *Sender)
  1818. {
  1819.     if ((!cbCTDM1->Checked) &&
  1820.         (!cbCTDH1->Checked) &&
  1821.         (!cbCTDM3->Checked) &&
  1822.         (!cbCTDH3->Checked) &&
  1823.         (!cbCTDM5->Checked) &&
  1824.         (!cbCTDH5->Checked) &&
  1825.         (!cbCT2DH1->Checked) &&
  1826.         (!cbCT2DH3->Checked) &&
  1827.         (!cbCT2DH5->Checked) &&
  1828.         (!cbCT3DH1->Checked) &&
  1829.         (!cbCT3DH3->Checked) &&
  1830.         (!cbCT3DH5->Checked)
  1831.     )
  1832.     {
  1833.         Application->MessageBox("Please select at least one ACL packet type", "WARRNING", MB_OK);
  1834.         Application->BringToFront();
  1835.         return;
  1836.     }
  1837.     if (m_stCTACLBDAddr->Caption.AnsiCompareIC("") == 0)
  1838.     {
  1839.         Application->MessageBox("BD address is incorrect", "WARRNING", MB_OK);
  1840.         Application->BringToFront();
  1841.         return;
  1842.     }
  1843.     S_BT_CONNECT_ACL connect;
  1844.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  1845.     m_sBTCT.log                = m_pCTLog;
  1846.     connect.us_acl_pkt_type = Get_CTAclPacketType();
  1847.     connect.s_bd_addr       = m_sCTACLBdAddr;
  1848.     m_cBT_CT_Obj.Set_ConnectACLParameter(connect);
  1849.     CurrentPageLock();
  1850.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Connect ACL link progressing";
  1851.     m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_ConnectACL;
  1852.     m_cBT_CT_Obj.REQ_ConnectACL_Start( m_sBTCT );
  1853. }
  1854. //-----------------------------------------
  1855. void TfrmBT::CNF_CT_ConnectACL(void)
  1856. {
  1857.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  1858.     CurrentPageReset();
  1859.     switch( state )
  1860.     {
  1861.         case METAAPP_SUCCESS:
  1862.         {
  1863.             ReDrawCTFields( DRAM_MASK_CT_DISCOVERED_LIST |
  1864.                             DRAM_MASK_CT_CONNECT_LIST    |
  1865.                             DRAM_MASK_CT_ACL_STATUS      |
  1866.                             DRAM_MASK_CT_BUTTON );
  1867.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Connect ACL link successfully";
  1868.         }
  1869.         break;
  1870.         case METAAPP_FAIL:
  1871.         {
  1872.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Connect ACL link fail";
  1873.             Application->MessageBox( "Execution Failure : Connect ACL link", "FAILURE", MB_OK );
  1874.             Application->BringToFront();
  1875.         }
  1876.         break;
  1877.         case METAAPP_TIMEOUT:
  1878.         {
  1879.              Force_BT_Stop( false );
  1880.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Connect ACL link timeout";
  1881.              Application->MessageBox( "Execution Timeout : Connect ACL link", "TIMEOUT", MB_OK );
  1882.              Application->BringToFront();
  1883.         }
  1884.         break;
  1885.         case METAAPP_CANCEL:
  1886.         case METAAPP_STOP:
  1887.         {
  1888.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Connect ACL link stop";
  1889.         }
  1890.         break;
  1891.     }
  1892. }
  1893. //---------------------------------------------------------------------------
  1894. void __fastcall TfrmBT::btnCTInquiryStopClick(TObject *Sender)
  1895. {
  1896.     Force_BT_Stop( false );
  1897.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  1898.     m_sBTCT.log                = m_pCTLog;
  1899.     CurrentPageLock();
  1900.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Cancel inquiry progressing";
  1901.     m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_InquiryCancel;
  1902.     m_cBT_CT_Obj.REQ_Inquiry_Cancel_Start( m_sBTCT );
  1903. }
  1904. //-----------------------------------------
  1905. void TfrmBT::CNF_CT_InquiryCancel(void)
  1906. {
  1907.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  1908.     switch (state)
  1909.     {
  1910.         case METAAPP_SUCCESS:
  1911.         {
  1912.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Cancel inquiry successfully";
  1913.         }
  1914.         break;
  1915.         case METAAPP_FAIL:
  1916.         {
  1917.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Cancel inquiry fail";
  1918.             Application->MessageBox( "Execution Failure : Cancel inquiry", "FAILURE", MB_OK );
  1919.             Application->BringToFront();
  1920.         }
  1921.         break;
  1922.         case METAAPP_TIMEOUT:
  1923.         {
  1924.              DisplayInquiryBDList();
  1925.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Cancel inquiry timeout";
  1926.              Application->MessageBox( "Execution Timeout : Cancel inquiry", "TIMEOUT", MB_OK );
  1927.              Application->BringToFront();
  1928.         }
  1929.         break;
  1930.         case METAAPP_CANCEL:
  1931.         case METAAPP_STOP:
  1932.         {
  1933.              DisplayInquiryBDList();
  1934.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Cancel inquiry stop";
  1935.         }
  1936.         break;
  1937.     }
  1938.     CurrentPageReset();
  1939. }
  1940. void __fastcall TfrmBT::btnCTAutoAcceptClick(TObject *Sender)
  1941. {
  1942.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  1943.     m_sBTCT.log                = m_pCTLog;
  1944.     CurrentPageLock();
  1945.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Auto accept progressing";
  1946.     m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_AutoAccept;
  1947.     m_cBT_CT_Obj.REQ_Auto_Accept_Start( m_sBTCT );
  1948. }
  1949. //---------------------------------------------
  1950. void TfrmBT::CNF_CT_AutoAccept(void)
  1951. {
  1952.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  1953.     switch( state )
  1954.     {
  1955.         case METAAPP_SUCCESS:
  1956.         {
  1957.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Auto accept successfully";
  1958.         }
  1959.         break;
  1960.         case METAAPP_FAIL:
  1961.         {
  1962.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Auto accept fail";
  1963.             Application->MessageBox( "Execution Failure : Auto accept", "FAILURE", MB_OK );
  1964.             Application->BringToFront();
  1965.         }
  1966.         break;
  1967.         case METAAPP_TIMEOUT:
  1968.         {
  1969.              Force_BT_Stop( false );
  1970.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Auto accept timeout";
  1971.              Application->MessageBox( "Execution Timeout : Auto accept", "TIMEOUT", MB_OK );
  1972.              Application->BringToFront();
  1973.         }
  1974.         break;
  1975.         case METAAPP_CANCEL:
  1976.         case METAAPP_STOP:
  1977.         {
  1978.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Auto accept stop";
  1979.         }
  1980.         break;
  1981.     }
  1982.     CurrentPageReset();
  1983. }
  1984. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  1985. void __fastcall TfrmBT::btnCTDisconnectACLClick(TObject *Sender)
  1986. {
  1987.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  1988.     m_sBTCT.log                = m_pCTLog;
  1989.     S_BT_DISCONNECT_ACL disconnect;
  1990.     disconnect.s_bd_addr       = m_sCTACLBdAddr;
  1991.     m_cBT_CT_Obj.Set_DisconnectACLParameter( disconnect );
  1992.     CurrentPageLock();
  1993.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Disconnect progressing";
  1994.     m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_DisconnectACL;
  1995.     m_cBT_CT_Obj.REQ_DisconnectACL_Start( m_sBTCT );
  1996. }
  1997. //-----------------------------------------
  1998. void TfrmBT::CNF_CT_DisconnectACL(void)
  1999. {
  2000.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  2001.     switch (state)
  2002.     {
  2003.         case METAAPP_SUCCESS:
  2004.         {
  2005.             ReDrawCTFields( DRAM_MASK_CT_DISCOVERED_LIST |
  2006.                             DRAM_MASK_CT_CONNECT_LIST    |
  2007.                             DRAM_MASK_CT_ACL_STATUS      |
  2008.                             DRAM_MASK_CT_BUTTON);
  2009.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Disconnect successfully";
  2010.         }
  2011.         break;
  2012.         case METAAPP_FAIL:
  2013.         {
  2014.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Disconnect fail";
  2015.             Application->MessageBox( "Execution Failure : Disconnect", "FAILURE", MB_OK );
  2016.             Application->BringToFront();
  2017.         }
  2018.         break;
  2019.         case METAAPP_TIMEOUT:
  2020.         {
  2021.              Force_BT_Stop( false );
  2022.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Disconnect timeout";
  2023.              Application->MessageBox( "Execution Timeout : Disconnect", "TIMEOUT", MB_OK );
  2024.              Application->BringToFront();
  2025.         }
  2026.         break;
  2027.         case METAAPP_CANCEL:
  2028.         case METAAPP_STOP:
  2029.         {
  2030.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Disconnect stop";
  2031.         }
  2032.         break;
  2033.     }
  2034.     CurrentPageReset();
  2035. }
  2036. void __fastcall TfrmBT::lbCTConDevicesClick(TObject *Sender)
  2037. {
  2038.     m_sCTACLBdAddr = Get_BDAddrFromString( lbCTConDevices->Items->Strings[lbCTConDevices->ItemIndex] );
  2039.     m_sSCOBdAddr = m_sCTACLBdAddr;
  2040.     ReDrawCTFields( DRAM_MASK_CT_ACL_BDADDR |
  2041.                     DRAM_MASK_CT_SCO_BDADDR |
  2042.                     DRAM_MASK_CT_ACL_STATUS |
  2043.                     DRAM_MASK_CT_SCO_STATUS |
  2044.                     DRAM_MASK_CT_BUTTON);
  2045. }
  2046. //---------------------------------------------------------------------------
  2047. void __fastcall TfrmBT::btnCTChangeAclPktTypeClick(TObject *Sender)
  2048. {
  2049.     if( (! cbCTDM1->Checked) &&
  2050.         (! cbCTDH1->Checked) &&
  2051.         (! cbCTDM3->Checked) &&
  2052.         (! cbCTDH3->Checked) &&
  2053.         (! cbCTDM5->Checked) &&
  2054.         (! cbCTDH5->Checked)
  2055.     )
  2056.     {
  2057.         Application->MessageBox( "Please select at least one ACL packet type", "WARRNING", MB_OK );
  2058.         Application->BringToFront();
  2059.         return;
  2060.     }
  2061.     S_BT_CONNECT_ACL connect;
  2062.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  2063.     m_sBTCT.log                = m_pCTLog;
  2064.     connect.us_acl_pkt_type = Get_CTAclPacketType();
  2065.     connect.s_bd_addr       = m_sCTACLBdAddr;
  2066.     m_cBT_CT_Obj.Set_ConnectACLParameter( connect );
  2067.     CurrentPageLock();
  2068.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Change ACL packet type progressing";
  2069.     m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_ChangeACLPacketType;
  2070.     m_cBT_CT_Obj.REQ_Change_ACL_Packet_Type_Start( m_sBTCT );
  2071. }
  2072. //-----------------------------------------
  2073. void TfrmBT::CNF_CT_ChangeACLPacketType(void)
  2074. {
  2075.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  2076.     switch (state)
  2077.     {
  2078.         case METAAPP_SUCCESS:
  2079.         {
  2080.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Change ACL packet type successfully";
  2081.         }
  2082.         break;
  2083.         case METAAPP_FAIL:
  2084.         {
  2085.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Change ACL packet type fail";
  2086.             Application->MessageBox( "Execution Failure : Change ACL packet type", "FAILURE", MB_OK );
  2087.             Application->BringToFront();
  2088.         }
  2089.         break;
  2090.         case METAAPP_TIMEOUT:
  2091.         {
  2092.              Force_BT_Stop( false );
  2093.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Change ACL packet type timeout";
  2094.              Application->MessageBox( "Execution Timeout : Change ACL packet type", "TIMEOUT", MB_OK );
  2095.              Application->BringToFront();
  2096.         }
  2097.         break;
  2098.         case METAAPP_CANCEL:
  2099.         case METAAPP_STOP:
  2100.         {
  2101.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Change ACL packet type stop";
  2102.         }
  2103.         break;
  2104.     }
  2105.     CurrentPageReset();
  2106. }
  2107. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2108. void __fastcall TfrmBT::btnCTConnectSCOClick(TObject *Sender)
  2109. {
  2110.     if (m_stCTSCOBDAddr->Caption.AnsiCompareIC("") == 0)
  2111.     {
  2112.         Application->MessageBox("BD address is incorrect", "WARRNING", MB_OK);
  2113.         Application->BringToFront();
  2114.         return;
  2115.     }
  2116.     CurrentPageLock();
  2117.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Connect SCO link progressing";
  2118.     S_BT_CT_CONNECT_SCO connect;
  2119.     connect.s_bd_addr  = m_sSCOBdAddr;
  2120.     connect.e_pkt_type = Get_ScoPacketType();
  2121.     m_cBT_CT_Obj.Set_ConnectSCOParameter(connect);
  2122.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  2123.     m_sBTCT.log                = m_pCTLog;
  2124.     m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_ConnectSCO;
  2125.     m_cBT_CT_Obj.REQ_ConnectSCO_Start( m_sBTCT );
  2126. }
  2127. //-----------------------------------------
  2128. void TfrmBT::CNF_CT_ConnectSCO(void)
  2129. {
  2130.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  2131.     switch (state)
  2132.     {
  2133.         case METAAPP_SUCCESS:
  2134.         {
  2135.             ReDrawCTFields( DRAM_MASK_CT_SCO_STATUS | DRAM_MASK_CT_BUTTON );
  2136.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Connect SCO link successfully";
  2137.         }
  2138.         break;
  2139.         case METAAPP_FAIL:
  2140.         {
  2141.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Connect SCO link fail";
  2142.             Application->MessageBox( "Execution Failure : Connect SCO link ", "FAILURE", MB_OK );
  2143.             Application->BringToFront();
  2144.         }
  2145.         break;
  2146.         case METAAPP_TIMEOUT:
  2147.         {
  2148.              Force_BT_Stop( false );
  2149.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Connect SCO link timeout";
  2150.              Application->MessageBox( "Execution Timeout : Connect SCO link ", "TIMEOUT", MB_OK );
  2151.              Application->BringToFront();
  2152.         }
  2153.         break;
  2154.         case METAAPP_CANCEL:
  2155.         case METAAPP_STOP:
  2156.         {
  2157.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Connect SCO link stop";
  2158.         }
  2159.         break;
  2160.     }
  2161.     CurrentPageReset();
  2162. }
  2163. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2164. void __fastcall TfrmBT::btnCTDisconnectSCOClick(TObject *Sender)
  2165. {
  2166.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  2167.     m_sBTCT.log                = m_pCTLog;
  2168.     S_BT_CT_DISCONNECT_SCO disconnect;
  2169.     disconnect.s_bd_addr  = m_sSCOBdAddr;
  2170.     m_cBT_CT_Obj.Set_DisconnectSCOParameter(disconnect);
  2171.     CurrentPageLock();
  2172.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Disconnect SCO link progressing";
  2173.     m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_DisconnectSCO;
  2174.     m_cBT_CT_Obj.REQ_DisconnectSCO_Start(m_sBTCT);
  2175. }
  2176. //-----------------------------------------
  2177. void TfrmBT::CNF_CT_DisconnectSCO(void)
  2178. {
  2179.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  2180.     switch (state)
  2181.     {
  2182.         case METAAPP_SUCCESS:
  2183.         {
  2184.             ReDrawCTFields(DRAM_MASK_CT_SCO_STATUS | DRAM_MASK_CT_BUTTON);
  2185.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Disconnect SCO link successfully";
  2186.         }
  2187.         break;
  2188.         case METAAPP_FAIL:
  2189.         {
  2190.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Disconnect SCO link fail";
  2191.             Application->MessageBox("Execution Failure : Disconnect SCO link ", "FAILURE", MB_OK);
  2192.             Application->BringToFront();
  2193.         }
  2194.         break;
  2195.         case METAAPP_TIMEOUT:
  2196.         {
  2197.              Force_BT_Stop(false);
  2198.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Disconnect SCO link timeout";
  2199.              Application->MessageBox("Execution Timeout : Disconnect SCO link ", "TIMEOUT", MB_OK);
  2200.              Application->BringToFront();
  2201.         }
  2202.         break;
  2203.         case METAAPP_CANCEL:
  2204.         case METAAPP_STOP:
  2205.         {
  2206.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Disconnect SCO link stop";
  2207.         }
  2208.         break;
  2209.     }
  2210.     CurrentPageReset();
  2211. }
  2212. //-------------------------------------------------------------------------
  2213. void __fastcall TfrmBT::edtCTPINCheck(TObject *Sender)
  2214. {
  2215.     AnsiString  text;
  2216.     S_BT_PIN  pin;
  2217.     TEdit *edit = (TEdit*)Sender;
  2218.     char  hint[] = " value shall be 0x0~0xFFFFFFFFFFFFFFFF ";
  2219.     text = edit->Text;
  2220.     if( !IsValidHexBTPIN( text, pin ) )
  2221.     {
  2222.         ShowHintLabel( edit, hint );
  2223.         edit->SetFocus();
  2224.         return;
  2225.     }
  2226.     m_sBTPIN = pin;
  2227. }
  2228. //---------------------------------------------------------------------------
  2229. void __fastcall TfrmBT::btnCTEnterPINClick(TObject *Sender)
  2230. {
  2231.     S_BT_ENTER_PIN enter_pin;
  2232.     m_sBTCT.hPostMsgDestHandle = this->Handle;
  2233.     m_sBTCT.log                = m_pCTLog;
  2234.     enter_pin.s_bd_addr  = m_sSCOBdAddr;
  2235.     enter_pin.s_bt_pin   = m_sBTPIN;
  2236.     m_cBT_CT_Obj.Set_EnterPINParameter( enter_pin );
  2237.     CurrentPageLock();
  2238.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Enter PIN progressing";
  2239.    // m_cBT_CT_Obj.ConfirmCallback  = ::CNF_CT_EnterPIN;
  2240.     if( ! m_cBT_CT_Obj.REQ_EnterPIN_Start( m_sBTCT ) )
  2241.     {
  2242.         sbCT->Panels->Items[0]->Text = (AnsiString)"  Enter PIN successfully";
  2243.         return;
  2244.     }
  2245.     sbCT->Panels->Items[0]->Text = (AnsiString)"  Enter PIN fail";
  2246. }
  2247. //-----------------------------------------
  2248. void TfrmBT::CNF_CT_EnterPIN(void)
  2249. {
  2250.     E_METAAPP_RESULT_T state = m_cBT_CT_Obj.Get_ConfirmState();
  2251.     switch( state )
  2252.     {
  2253.         case METAAPP_SUCCESS:
  2254.         {
  2255.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Enter PIN successfully";
  2256.         }
  2257.         break;
  2258.         case METAAPP_FAIL:
  2259.         {
  2260.             sbCT->Panels->Items[0]->Text = (AnsiString)"  Enter PIN fail";
  2261.             Application->MessageBox( "Execution Failure : Enter PIN ", "FAILURE", MB_OK );
  2262.             Application->BringToFront();
  2263.         }
  2264.         break;
  2265.         case METAAPP_TIMEOUT:
  2266.         {
  2267.              Force_BT_Stop( false );
  2268.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Enter PIN timeout";
  2269.              Application->MessageBox( "Execution Timeout : Enter PIN ", "TIMEOUT", MB_OK );
  2270.              Application->BringToFront();
  2271.         }
  2272.         break;
  2273.         case METAAPP_CANCEL:
  2274.         case METAAPP_STOP:
  2275.         {                                                             
  2276.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Enter PIN stop";
  2277.         }
  2278.         break;
  2279.     }
  2280.     CurrentPageReset();
  2281. }
  2282. //============================================================================
  2283. ///////////////////////////  Throughput test  ////////////////////////////////
  2284. //============================================================================
  2285. void  TfrmBT::ReDrawTTFields( E_DRAM_MASK_TT draw_mask )
  2286. {
  2287.     if( draw_mask & DRAM_MASK_TT_ACL_STATUS )
  2288.     {
  2289.         switch( m_sBTTTRes.e_acl_status )
  2290.         {
  2291.             case BT_ACL_STATUS_SUCCESS:
  2292.                  stTTACLStatus->Caption = (AnsiString ) STR_BT_ACL_SUCCESS;
  2293.             break;
  2294.             case BT_ACL_STATUS_PAGE_TIMEOUT:
  2295.                  stTTACLStatus->Caption = (AnsiString ) STR_BT_ACL_PAGE_TIMEOUT;
  2296.             break;
  2297.             case BT_ACL_STATUS_FAIL:
  2298.                  stTTACLStatus->Caption = (AnsiString ) STR_BT_ACL_FAIL;
  2299.             break;
  2300.             default:
  2301.             case BT_ACL_STATUS_NONE:
  2302.                  stTTACLStatus->Caption = (AnsiString ) "";
  2303.             break;
  2304.         }
  2305.     }
  2306.     if( draw_mask & DRAM_MASK_TT_BUTTON )
  2307.     {
  2308.         int acl_result = stTTACLStatus->Caption.AnsiCompareIC(STR_BT_ACL_SUCCESS);
  2309.         btnTTScan->Enabled                = true;
  2310.         btnTTAutoAccept->Enabled          = true;
  2311.         btnTTConnect->Enabled             = (bool) acl_result;
  2312.         btnTTDisconnect->Enabled          = ! (bool) acl_result;
  2313.         btnTTChangeACLPacketType->Enabled = ! (bool) acl_result;
  2314.         btnTTTxStart->Enabled             = ! (bool) acl_result;
  2315.         btnTTTxStart->Tag                 = 0;
  2316.         btnTTRxStart->Enabled             = ! (bool) acl_result;
  2317.         btnTTRxStart->Tag                 = 0;
  2318.     }
  2319. }
  2320. //----------------------------------------------------------------------------
  2321. bool  TfrmBT::CheckTTFields( E_CHECK_MASK_TT mask )
  2322. {
  2323.     if( CHECK_MASK_TT_BD_ADDR == mask )
  2324.     {
  2325.         AnsiString text;
  2326.         text = edtTTBDAddr->Text;      if( !IsValidHexBDAddress( text, m_sTTACLBdAddr ) )         {  edtTTBdAddrCheck(edtTTBDAddr);        return false;   }
  2327.     }
  2328.     else if( CHECK_MASK_TT_TX == mask )
  2329.     {
  2330.     }
  2331.     return true;
  2332. }
  2333. //----------------------------------------------------------------------------
  2334. void  TfrmBT::FillTTResult( void )
  2335. {
  2336.     for(int i=0; i<m_pTTLog->Count; i++ )
  2337.     {
  2338.         AnsiString as = m_pTTLog->Strings[i];
  2339.         memTTResult->Lines->Add( as );
  2340.     }
  2341.     m_pTTLog->Clear();
  2342. }
  2343. //----------------------------------------------------------------------------
  2344. unsigned short TfrmBT::Get_TTAclPacketType( void )
  2345. {
  2346.     unsigned short pkt_type=0;
  2347.     if( cbTTDM1->Checked )
  2348.     {   pkt_type |= ACL_PKT_MASK_DM1;
  2349.     }
  2350.     if( cbTTDH1->Checked )
  2351.     {   pkt_type |= ACL_PKT_MASK_DH1;
  2352.     }
  2353.     if( cbTTDM3->Checked )
  2354.     {   pkt_type |= ACL_PKT_MASK_DM3;
  2355.     }
  2356.     if( cbTTDH3->Checked )
  2357.     {   pkt_type |= ACL_PKT_MASK_DH3;
  2358.     }
  2359.     if( cbTTDM5->Checked )
  2360.     {   pkt_type |= ACL_PKT_MASK_DM5;
  2361.     }
  2362.     if( cbTTDH5->Checked )
  2363.     {   pkt_type |= ACL_PKT_MASK_DH5;
  2364.     }
  2365.     return pkt_type;
  2366. }
  2367. //--------------------------------------------------------------------------
  2368. void __fastcall TfrmBT::btnTTConnectClick(TObject *Sender)
  2369. {
  2370.     if ((!cbTTDM1->Checked) &&
  2371.         (!cbTTDH1->Checked) &&
  2372.         (!cbTTDM3->Checked) &&
  2373.         (!cbTTDH3->Checked) &&
  2374.         (!cbTTDM5->Checked) &&
  2375.         (!cbTTDH5->Checked) &&
  2376.         (!m_cbTT2DH1->Checked) &&
  2377.         (!m_cbTT2DH3->Checked) &&
  2378.         (!m_cbTT2DH5->Checked) &&
  2379.         (!m_cbTT3DH1->Checked) &&
  2380.         (!m_cbTT3DH3->Checked) &&
  2381.         (!m_cbTT3DH5->Checked)
  2382.        )
  2383.     {
  2384.         Application->MessageBox( "Please select at least one ACL packet type", "WARRNING", MB_OK );
  2385.         Application->BringToFront();
  2386.         return;
  2387.     }
  2388.     if( ! CheckTTFields( CHECK_MASK_TT_BD_ADDR ) )
  2389.     {
  2390.         return;
  2391.     }
  2392.     S_BT_CONNECT_ACL connect;
  2393.     m_sBTTT.hPostMsgDestHandle = this->Handle;
  2394.     m_sBTTT.log                = m_pTTLog;
  2395.     connect.us_acl_pkt_type = Get_TTAclPacketType();
  2396.     connect.s_bd_addr       = m_sTTACLBdAddr;
  2397.     m_cBT_TT_Obj.Set_ConnectACLParameter( connect );
  2398.     CurrentPageLock();
  2399.     sbCT->Panels->Items[0]->Text = (AnsiString) "  Connect ACL link progressing";
  2400.     m_cBT_TT_Obj.ConfirmCallback  = ::CNF_TT_ConnectACL;
  2401.     m_cBT_TT_Obj.REQ_ConnectACL_Start( m_sBTTT );
  2402. }
  2403. //-----------------------------------------
  2404. void TfrmBT::CNF_TT_ConnectACL(void)
  2405. {
  2406.     E_METAAPP_RESULT_T state = m_cBT_TT_Obj.Get_ConfirmState();
  2407.     CurrentPageReset();
  2408.     switch (state)
  2409.     {
  2410.         case METAAPP_SUCCESS:
  2411.         {
  2412.             m_sBTTTRes = m_cBT_TT_Obj.Get_TTResult();
  2413.             ReDrawTTFields( DRAM_MASK_TT_ACL_STATUS |
  2414.                             DRAM_MASK_TT_BUTTON );
  2415.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Connect ACL link successfully";
  2416.         }
  2417.         break;
  2418.         case METAAPP_FAIL:
  2419.         {
  2420.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Connect ACL link fail";
  2421.             Application->MessageBox( "Execution Failure : Connect ACL link", "FAILURE", MB_OK );
  2422.             Application->BringToFront();
  2423.         }
  2424.         break;
  2425.         case METAAPP_TIMEOUT:
  2426.         {
  2427.              Force_BT_Stop( false );
  2428.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Connect ACL link timeout";
  2429.              Application->MessageBox( "Execution Timeout : Connect ACL link", "TIMEOUT", MB_OK );
  2430.              Application->BringToFront();
  2431.         }
  2432.         break;
  2433.         case METAAPP_CANCEL:
  2434.         case METAAPP_STOP:
  2435.         {
  2436.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Connect ACL link stop";
  2437.         }
  2438.         break;
  2439.     }
  2440. }
  2441. //----------------------------------------------------------------------------
  2442. void __fastcall TfrmBT::btnTTDisconnectClick(TObject *Sender)
  2443. {
  2444.     m_sBTTT.hPostMsgDestHandle = this->Handle;
  2445.     m_sBTTT.log                = m_pTTLog;
  2446.     S_BT_DISCONNECT_ACL disconnect;
  2447.     disconnect.s_bd_addr       = m_sTTACLBdAddr;
  2448.     m_cBT_TT_Obj.Set_DisconnectACLParameter( disconnect );
  2449.     CurrentPageLock();
  2450.     sbTT->Panels->Items[0]->Text = (AnsiString) "  Disconnect progressing";
  2451.     m_cBT_TT_Obj.ConfirmCallback  = ::CNF_TT_DisconnectACL;
  2452.     m_cBT_TT_Obj.REQ_DisconnectACL_Start( m_sBTTT );
  2453. }
  2454. //-----------------------------------------
  2455. void TfrmBT::CNF_TT_DisconnectACL(void)
  2456. {
  2457.     E_METAAPP_RESULT_T state = m_cBT_TT_Obj.Get_ConfirmState();
  2458.     switch( state )
  2459.     {
  2460.         case METAAPP_SUCCESS:
  2461.         {
  2462.             m_sBTTTRes = m_cBT_TT_Obj.Get_TTResult();
  2463.             ReDrawTTFields(
  2464.                             DRAM_MASK_TT_ACL_STATUS      |
  2465.                             DRAM_MASK_TT_BUTTON);
  2466.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Disconnect successfully";
  2467.         }
  2468.         break;
  2469.         case METAAPP_FAIL:
  2470.         {
  2471.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Disconnect fail";
  2472.             Application->MessageBox( "Execution Failure : Disconnect", "FAILURE", MB_OK );
  2473.             Application->BringToFront();
  2474.         }
  2475.         break;
  2476.         case METAAPP_TIMEOUT:
  2477.         {
  2478.              Force_BT_Stop( false );
  2479.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Disconnect timeout";
  2480.              Application->MessageBox( "Execution Timeout : Disconnect", "TIMEOUT", MB_OK );
  2481.              Application->BringToFront();
  2482.         }
  2483.         break;
  2484.         case METAAPP_CANCEL:
  2485.         case METAAPP_STOP:
  2486.         {
  2487.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Disconnect stop";
  2488.         }
  2489.         break;
  2490.     }
  2491.     CurrentPageReset();
  2492. }
  2493. //---------------------------------------------------------------------------
  2494. void __fastcall TfrmBT::edtTTDataLenCheck(TObject *Sender)
  2495. {
  2496.     bool ok;
  2497.     AnsiString  text;
  2498.     TEdit *edit = (TEdit*)Sender;
  2499.     unsigned short  us_data;
  2500.     AnsiString as_hint[] = {" value should be 1~339 ", " value should be 1~1021 "};
  2501.     text = edit->Text;
  2502.     if (BTMODULE_MT6611 != m_cBtId)
  2503.     {
  2504.         ok = IsValidBTTxDataLength(text, us_data, 1, 339);
  2505.     }
  2506.     else
  2507.     {
  2508.         ok = IsValidBTTxDataLength(text, us_data, 1, 1021);
  2509.     }
  2510.     if (!ok)
  2511.     {
  2512.         if (BTMODULE_MT6611 != m_cBtId)
  2513.         {
  2514.             edit->Text = IntToStr(339);
  2515.             ShowHintLabel( edit, as_hint[0].c_str());
  2516.         }
  2517.         else
  2518.         {
  2519.             edit->Text = IntToStr(1021);
  2520.             ShowHintLabel( edit, as_hint[1].c_str());
  2521.         }
  2522.         edit->SetFocus();
  2523.         return;
  2524.     }
  2525. }
  2526. //---------------------------------------------------------------------------
  2527. void __fastcall TfrmBT::edtTTPacketCountCheck(TObject *Sender)
  2528. {
  2529.     unsigned int  ui_data;
  2530.     AnsiString  text;
  2531.     TEdit *edit = (TEdit*)Sender;
  2532.     char  hint[] =
  2533.     {   " value should be 0~4294967295 "
  2534.     };
  2535.     text = edit->Text;
  2536.     if( !IsValidBTTxPacketCount( text, ui_data ) )
  2537.     {
  2538.         edit->Text = 1000;
  2539.         ShowHintLabel( edit, hint );
  2540.         edit->SetFocus();
  2541.         return;
  2542.     }    
  2543. }
  2544. //---------------------------------------------------------------------------
  2545. void __fastcall TfrmBT::btnTTChangeACLPacketTypeClick(TObject *Sender)
  2546. {
  2547.     if( (! cbTTDM1->Checked) &&
  2548.         (! cbTTDH1->Checked) &&
  2549.         (! cbTTDM3->Checked) &&
  2550.         (! cbTTDH3->Checked) &&
  2551.         (! cbTTDM5->Checked) &&
  2552.         (! cbTTDH5->Checked)
  2553.     )
  2554.     {
  2555.         Application->MessageBox( "Please select at least one ACL packet type", "WARRNING", MB_OK );
  2556.         Application->BringToFront();
  2557.         return;
  2558.     }
  2559.     S_BT_CONNECT_ACL connect;
  2560.     m_sBTTT.hPostMsgDestHandle = this->Handle;
  2561.     m_sBTTT.log                = m_pTTLog;
  2562.     connect.us_acl_pkt_type = Get_TTAclPacketType();
  2563.     connect.s_bd_addr       = m_sTTACLBdAddr;
  2564.     m_cBT_TT_Obj.Set_ConnectACLParameter( connect );
  2565.     CurrentPageLock();
  2566.     sbTT->Panels->Items[0]->Text = (AnsiString) "  Change ACL packet type progressing";
  2567.     m_cBT_TT_Obj.ConfirmCallback  = ::CNF_TT_ChangeACLPacketType;
  2568.     m_cBT_TT_Obj.REQ_Change_ACL_Packet_Type_Start( m_sBTTT );
  2569. }
  2570. //-----------------------------------------
  2571. void TfrmBT::CNF_TT_ChangeACLPacketType(void)
  2572. {
  2573.     E_METAAPP_RESULT_T state = m_cBT_TT_Obj.Get_ConfirmState();
  2574.     switch( state )
  2575.     {
  2576.         case METAAPP_SUCCESS:
  2577.         {
  2578.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Change ACL packet type successfully";
  2579.         }
  2580.         break;
  2581.         case METAAPP_FAIL:
  2582.         {
  2583.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Change ACL packet type fail";
  2584.             Application->MessageBox( "Execution Failure : Change ACL packet type", "FAILURE", MB_OK );
  2585.             Application->BringToFront();
  2586.         }
  2587.         break;
  2588.         case METAAPP_TIMEOUT:
  2589.         {
  2590.              Force_BT_Stop( false );
  2591.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Change ACL packet type timeout";
  2592.              Application->MessageBox( "Execution Timeout : Change ACL packet type", "TIMEOUT", MB_OK );
  2593.              Application->BringToFront();
  2594.         }
  2595.         break;
  2596.         case METAAPP_CANCEL:
  2597.         case METAAPP_STOP:
  2598.         {
  2599.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Change ACL packet type stop";
  2600.         }
  2601.         break;
  2602.     }
  2603.     CurrentPageReset();
  2604. }
  2605. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2606. void __fastcall TfrmBT::btnTTTxStartClick(TObject *Sender)
  2607. {
  2608.     CurrentPageLock();
  2609.     m_sBTTT.hPostMsgDestHandle = this->Handle;
  2610.     m_sBTTT.log                = m_pTTLog;
  2611.     stTTTxCount->Caption = "0";
  2612.     stTTTxThroughput->Caption = "0";
  2613.     S_BT_TT_TX_PARAMETER tx_par;
  2614.     tx_par.us_data_len     = edtTTDataLen->Text.ToInt();
  2615.     tx_par.us_packet_count = edtTTPacketCount->Text.ToInt();
  2616.     m_cBT_TT_Obj.Set_TxParameter( tx_par );
  2617.     m_sTTTxStartTime = ::Get_CurrentTime();
  2618.     sbTT->Panels->Items[0]->Text = (AnsiString) "  Transmit BT data progressing";
  2619.     m_cBT_TT_Obj.ConfirmCallback  = ::CNF_TT_TxData;
  2620.     m_cBT_TT_Obj.REQ_TX_Data_Start(m_eTtVer, m_sBTTT);
  2621. }
  2622. //----------------------------------
  2623. void TfrmBT::CNF_TT_TxData(void)
  2624. {
  2625.     E_METAAPP_RESULT_T state = m_cBT_TT_Obj.Get_ConfirmState();
  2626.     switch( state )
  2627.     {
  2628.         case METAAPP_SUCCESS:
  2629.         {
  2630.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Transmit BT data successfully";
  2631.         }
  2632.         break;
  2633.         case METAAPP_FAIL:
  2634.         {
  2635.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Transmit BT data fail";
  2636.             Application->MessageBox( "Execution Failure : Transmit BT data", "FAILURE", MB_OK );
  2637.             Application->BringToFront();
  2638.         }
  2639.         break;
  2640.         case METAAPP_TIMEOUT:
  2641.         {
  2642.              Force_BT_Stop( false );
  2643.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Transmit BT data timeout";
  2644.              Application->MessageBox( "Execution Timeout : Transmit BT data", "TIMEOUT", MB_OK );
  2645.              Application->BringToFront();
  2646.         }
  2647.         break;
  2648.         case METAAPP_CANCEL:
  2649.         case METAAPP_STOP:
  2650.         {
  2651.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Transmit BT data stop";
  2652.         }
  2653.         break;
  2654.     }
  2655.     CurrentPageReset();
  2656. }
  2657. void __fastcall TfrmBT::edtTTBdAddrCheck(TObject *Sender)
  2658. {
  2659.     S_BD_ADDR  bd_addr;
  2660.     AnsiString  text;
  2661.     TEdit *edit = (TEdit*)Sender;
  2662.     char  hint[] =
  2663.     {   " BD address is not valid "
  2664.     };
  2665.     text = edit->Text;
  2666.     if( !IsValidHexBDAddress( text, bd_addr ) )
  2667.     {
  2668.         ShowHintLabel( edit, hint );
  2669.         edit->SetFocus();
  2670.         return;
  2671.     }
  2672.     m_sTTACLBdAddr = bd_addr;
  2673. }
  2674. //---------------------------------------------------------------------------
  2675. void __fastcall TfrmBT::btnTTRxStartClick(TObject *Sender)
  2676. {
  2677.     CurrentPageLock();
  2678.     m_sBTTT.hPostMsgDestHandle = this->Handle;
  2679.     m_sBTTT.log                = m_pTTLog;
  2680.     stTTRxBytes->Caption = "0";
  2681.     stTTRxThroughput->Caption = "0";
  2682.     m_sTTRxStartTime = ::Get_CurrentTime();
  2683.     sbTT->Panels->Items[0]->Text = (AnsiString) "  Receive BT data progressing";
  2684.     m_cBT_TT_Obj.ConfirmCallback  = ::CNF_TT_RxData;
  2685.     m_cBT_TT_Obj.REQ_RX_Data_Start(m_eTtVer, m_sBTTT);
  2686. }
  2687. //----------------------------------
  2688. void TfrmBT::CNF_TT_RxData(void)
  2689. {
  2690.     E_METAAPP_RESULT_T state = m_cBT_TT_Obj.Get_ConfirmState();
  2691.     switch( state )
  2692.     {
  2693.         case METAAPP_SUCCESS:
  2694.         {
  2695.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Receive BT data successfully";
  2696.         }
  2697.         break;
  2698.         case METAAPP_FAIL:
  2699.         {
  2700.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Receive BT data fail";
  2701.             Application->MessageBox( "Execution Failure : Receive BT data", "FAILURE", MB_OK );
  2702.             Application->BringToFront();
  2703.         }
  2704.         break;
  2705.         case METAAPP_TIMEOUT:
  2706.         {
  2707.              Force_BT_Stop( false );
  2708.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Receive BT data timeout";
  2709.              Application->MessageBox( "Execution Timeout : Receive BT data", "TIMEOUT", MB_OK );
  2710.              Application->BringToFront();
  2711.         }
  2712.         break;
  2713.         case METAAPP_CANCEL:
  2714.         case METAAPP_STOP:
  2715.         {
  2716.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Receive BT data stop";
  2717.         }
  2718.         break;
  2719.     }
  2720.     CurrentPageReset();
  2721. }
  2722. void __fastcall TfrmBT::btnTTScanClick(TObject *Sender)
  2723. {
  2724.     S_BT_SCAN scan;
  2725.     scan.e_scan_type = (E_BT_SCAN_TYPE) cbCTScanType->ItemIndex;
  2726.     scan.b_interlaced_inquiry_scan = cbCTInterlacedInquiryScan->Checked;
  2727.     scan.b_interlaced_page_scan = cbInterlacedPageScan->Checked;
  2728.     m_cBT_TT_Obj.Set_ScanParameter( scan );
  2729.     m_sBTTT.hPostMsgDestHandle = this->Handle;
  2730.     m_sBTTT.log                = m_pTTLog;
  2731.     CurrentPageLock();
  2732.     sbTT->Panels->Items[0]->Text = (AnsiString) "  Set scan parameter progressing";
  2733.     m_cBT_TT_Obj.ConfirmCallback  = ::CNF_CT_Scan;
  2734.     m_cBT_TT_Obj.REQ_Scan_Start( m_sBTTT );
  2735. }
  2736. //---------------------------------------------
  2737. void TfrmBT::CNF_TT_Scan(void)
  2738. {
  2739.     E_METAAPP_RESULT_T state = m_cBT_TT_Obj.Get_ConfirmState();
  2740.     switch (state)
  2741.     {
  2742.         case METAAPP_SUCCESS:
  2743.         {
  2744.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Set scan parameter successfully";
  2745.         }
  2746.         break;
  2747.         case METAAPP_FAIL:
  2748.         {
  2749.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Set scan parameter fail";
  2750.             Application->MessageBox( "Execution Failure : Set scan parameter", "FAILURE", MB_OK );
  2751.             Application->BringToFront();
  2752.         }
  2753.         break;
  2754.         case METAAPP_TIMEOUT:
  2755.         {
  2756.              Force_BT_Stop( false );
  2757.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Set scan parameter timeout";
  2758.              Application->MessageBox( "Execution Timeout : Set scan parameter", "TIMEOUT", MB_OK );
  2759.              Application->BringToFront();
  2760.         }
  2761.         break;
  2762.         case METAAPP_CANCEL:
  2763.         case METAAPP_STOP:
  2764.         {
  2765.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Set scan parameter stop";
  2766.         }
  2767.         break;
  2768.     }
  2769.     CurrentPageReset();
  2770. }
  2771. void __fastcall TfrmBT::btnTTAutoAcceptClick(TObject *Sender)
  2772. {
  2773.     m_sBTTT.hPostMsgDestHandle = this->Handle;
  2774.     m_sBTTT.log                = m_pTTLog;
  2775.     CurrentPageLock();
  2776.     sbTT->Panels->Items[0]->Text = (AnsiString) "  Auto accept progressing";
  2777.     m_cBT_TT_Obj.ConfirmCallback  = ::CNF_TT_AutoAccept;
  2778.     m_cBT_TT_Obj.REQ_Auto_Accept_Start( m_sBTTT );
  2779. }
  2780. //---------------------------------------------
  2781. void TfrmBT::CNF_TT_AutoAccept(void)
  2782. {
  2783.     E_METAAPP_RESULT_T state = m_cBT_TT_Obj.Get_ConfirmState();
  2784.     switch (state)
  2785.     {
  2786.         case METAAPP_SUCCESS:
  2787.         {
  2788.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Auto accept successfully";
  2789.         }
  2790.         break;
  2791.         case METAAPP_FAIL:
  2792.         {
  2793.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Auto accept fail";
  2794.             Application->MessageBox( "Execution Failure : Auto accept", "FAILURE", MB_OK );
  2795.             Application->BringToFront();
  2796.         }
  2797.         break;
  2798.         case METAAPP_TIMEOUT:
  2799.         {
  2800.              Force_BT_Stop( false );
  2801.              sbCT->Panels->Items[0]->Text = (AnsiString)"  Auto accept timeout";
  2802.              Application->MessageBox( "Execution Timeout : Auto accept", "TIMEOUT", MB_OK );
  2803.              Application->BringToFront();
  2804.         }
  2805.         break;
  2806.         case METAAPP_CANCEL:
  2807.         case METAAPP_STOP:
  2808.         {
  2809.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Auto accept stop";
  2810.         }
  2811.         break;
  2812.     }
  2813.     CurrentPageReset();
  2814. }
  2815. void __fastcall TfrmBT::btnTTTxStopClick(TObject *Sender)
  2816. {
  2817.     m_cBT_TT_Obj.REQ_Stop_Start();
  2818.     CurrentPageReset();   
  2819. }
  2820. //---------------------------------------------------------------------------
  2821. void __fastcall TfrmBT::edtCTTxBandwidthCheck(TObject *Sender)
  2822. {
  2823.     AnsiString  text;
  2824.     unsigned int  ui_data;
  2825.     TEdit *edit = (TEdit*)Sender;
  2826.     char  hint[] = " value shall be 0x0~0xFFFFFFFF ";
  2827.     text = edit->Text;
  2828.     if( !IsValidTxBandwidth( text, ui_data ) )
  2829.     {
  2830.         ShowHintLabel( edit, hint );
  2831.         edit->SetFocus();
  2832.         return;
  2833.     }
  2834.     m_uiTxBandwidth = ui_data;
  2835. }
  2836. //---------------------------------------------------------------------------
  2837. void __fastcall TfrmBT::edtCTRxBandwidthCheck(TObject *Sender)
  2838. {
  2839.     AnsiString  text;
  2840.     unsigned int  ui_data;
  2841.     TEdit *edit = (TEdit*)Sender;
  2842.     char  hint[] = " value shall be 0x0~0xFFFFFFFF ";
  2843.     text = edit->Text;
  2844.     if( !IsValidRxBandwidth( text, ui_data ) )
  2845.     {
  2846.         ShowHintLabel( edit, hint );
  2847.         edit->SetFocus();
  2848.         return;
  2849.     }
  2850.     m_uiRxBandwidth = ui_data;
  2851. }
  2852. //---------------------------------------------------------------------------
  2853. void __fastcall TfrmBT::edtCTMaxLatencyCheck(TObject *Sender)
  2854. {
  2855.     AnsiString  text;
  2856.     unsigned short  us_data;
  2857.     TEdit *edit = (TEdit*)Sender;
  2858.     char  hint[] = " value shall be 0x0~0xFFFF ";
  2859.     text = edit->Text;
  2860.     if( !IsValidMaxLatency( text, us_data ) )
  2861.     {
  2862.         ShowHintLabel( edit, hint );
  2863.         edit->SetFocus();
  2864.         return;
  2865.     }
  2866.     m_usMaxLatency = us_data;
  2867. }
  2868. //---------------------------------------------------------------------------
  2869. void __fastcall TfrmBT::edtCTRetransmitEffortCheck(TObject *Sender)
  2870. {
  2871.     AnsiString  text;
  2872.     unsigned char uc_data;
  2873.     TEdit *edit = (TEdit*)Sender;
  2874.     char  hint[] = " value shall be 0x0~0xFF ";
  2875.     text = edit->Text;
  2876.     if (!IsValidRetransmissionEffort(text, uc_data))
  2877.     {
  2878.         ShowHintLabel(edit, hint);
  2879.         edit->SetFocus();
  2880.         return;
  2881.     }
  2882.     m_ucRetransmissionEffort = uc_data;
  2883. }
  2884. //---------------------------------------------------------------------------
  2885. void __fastcall TfrmBT::btnTTRxStopClick(TObject *Sender)
  2886. {
  2887.     CurrentPageLock();
  2888.     m_sBTTT.hPostMsgDestHandle = this->Handle;
  2889.     m_sBTTT.log                = m_pTTLog;
  2890.     sbTT->Panels->Items[0]->Text = (AnsiString) "  Stop Receiving BT data progressing";
  2891.     m_cBT_TT_Obj.ConfirmCallback  = ::CNF_TT_Stop_RxData;
  2892.     m_cBT_TT_Obj.REQ_Stop_RX_Data_Start(m_sBTTT);
  2893. }
  2894. //----------------------------------
  2895. void TfrmBT::CNF_TT_Stop_RxData(void)
  2896. {
  2897.     E_METAAPP_RESULT_T state = m_cBT_TT_Obj.Get_ConfirmState();
  2898.     switch (state)
  2899.     {
  2900.         case METAAPP_SUCCESS:
  2901.         {
  2902.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Stop Receiving BT data successfully";
  2903.         }
  2904.         break;
  2905.         case METAAPP_FAIL:
  2906.         {
  2907.             sbTT->Panels->Items[0]->Text = (AnsiString)"  Stop Receiving BT data fail";
  2908.             Application->MessageBox( "Execution Failure : Stop Receiving BT data", "FAILURE", MB_OK );
  2909.             Application->BringToFront();
  2910.         }
  2911.         break;
  2912.         case METAAPP_TIMEOUT:
  2913.         {
  2914.              Force_BT_Stop( false );
  2915.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Stop Receiving BT data timeout";
  2916.              Application->MessageBox( "Execution Timeout : Stop Receiving BT data", "TIMEOUT", MB_OK );
  2917.              Application->BringToFront();
  2918.         }
  2919.         break;
  2920.         case METAAPP_CANCEL:
  2921.         case METAAPP_STOP:
  2922.         {
  2923.              sbTT->Panels->Items[0]->Text = (AnsiString)"  Stop Receiving BT data stop";
  2924.         }
  2925.         break;
  2926.     }
  2927.     CurrentPageReset();
  2928. }
  2929. //---------------------------------------------------------------------------
  2930. void __fastcall TfrmBT::cbPKTCOMChange(TObject *Sender)
  2931. {
  2932.     AbortConnectWithTarget();
  2933. }
  2934. //---------------------------------------------------------------------------
  2935. void __fastcall TfrmBT::cbPKTBaudRateChange(TObject *Sender)
  2936. {
  2937.     AbortConnectWithTarget();    
  2938. }
  2939. //---------------------------------------------------------------------------
  2940. void __fastcall TfrmBT::m_tmMTTimer(TObject *Sender)
  2941. {
  2942.     m_tmMT->Enabled = false;
  2943.     // Add Logging String
  2944.     Script[ActIdx]->TimerTick();
  2945.     //int len = strlen(Script[ActIdx]->LogString);
  2946.     int len = Script[ActIdx]->Get_LogStringLen();
  2947.     if (len >= 2)
  2948.     {
  2949.        // if (Script[ActIdx]->LogString[len-2] == 'n')
  2950.         if (Script[ActIdx]->Get_LogString(len-2) == 'n')
  2951.         {
  2952.             //Script[ActIdx]->LogString[len-2] = 0;
  2953.             Script[ActIdx]->Set_LogString(len-2, 0);
  2954.         }
  2955.         //m_edtMTLog->Lines->Add(Script[ActIdx]->LogString);
  2956.         m_edtMTLog->Lines->Add(Script[ActIdx]->Get_LogString());
  2957.     }
  2958.     // Update progress group
  2959.     //if (Script[ActIdx]->LastProc!=Script[ActIdx]->CurProc)
  2960.     if (Script[ActIdx]->Get_LastProc() != Script[ActIdx]->Get_CurProc())
  2961.     {
  2962.         UpdateProcessGroup();
  2963.         //Script[ActIdx]->LastProc = Script[ActIdx]->CurProc;
  2964.         Script[ActIdx]->Set_LastProc(Script[ActIdx]->Get_CurProc());
  2965.         m_edtMTLog->Lines->Clear();
  2966.     }
  2967.     // Exit Timer
  2968.     //if (Script[ActIdx]->ErrorCode != ERR_FILEEND)
  2969.     if (Script[ActIdx]->Get_ErrorCode() != ERR_FILEEND)
  2970.     {
  2971.         m_tmMT->Enabled = true;
  2972.     }
  2973.     else   // End of this testing
  2974.     {
  2975.         m_tmMT->Enabled = false;
  2976.         m_btnMTRunClick(0);
  2977.        // if (Script[ActIdx]->FailCount != 0)
  2978.         if (Script[ActIdx]->Get_FailCount() != 0)
  2979.         {
  2980.             m_lblMTStatus->Font->Color = clRed;
  2981.             m_lblMTStatus->Caption = "FAIL";
  2982.             //m_edtMTLog->Lines->Add(Script[ActIdx]->LogString);
  2983.              m_edtMTLog->Lines->Add(Script[ActIdx]->Get_LogString());
  2984.         }
  2985.         else
  2986.         {
  2987.             m_lblMTStatus->Font->Color = clBlue;
  2988.             m_lblMTStatus->Caption = "PASS";
  2989.         }
  2990.         if ((LoopCount > 0) && (LoopCount != 99999))
  2991.         {
  2992.             LoopCount--;
  2993.         }
  2994.         if (LoopCount != 0)
  2995.         {
  2996.             m_edtMTRepeat->Text = LoopCount;
  2997.             scrTestItemList->Position = scrTestItemList->Min;
  2998.             m_btnMTRunClick(0);
  2999.         }
  3000.     }
  3001. }
  3002. //---------------------------------------------------------------------------
  3003. int  TfrmBT::UpdateProcessGroup(void)
  3004. {
  3005.     int n, base;
  3006.     char str[256];
  3007.     int cidx = ActIdx;
  3008.     CBTMT *scr = Script[cidx];
  3009.     //grpTestItemList->Caption = scr->Title;
  3010.     grpTestItemList->Caption = scr->Get_Title();
  3011.     scrTestItemList->Min = 0;
  3012.     //n = scr->ProcCount - BT_MT_MAX_PROC_NUM;
  3013.     n = scr->Get_ProcCount() - BT_MT_MAX_PROC_NUM;
  3014.     scrTestItemList->Max = (n>0) ? n : 0;
  3015.     if (m_btnMTRun->Tag) //Running
  3016.     {
  3017.         //base = (scr->CurProc < BT_MT_MAX_PROC_NUM) ? 0 : (scr->CurProc-BT_MT_MAX_PROC_NUM+1);
  3018.         base = (scr->Get_CurProc() < BT_MT_MAX_PROC_NUM) ? 0 : (scr->Get_CurProc() - BT_MT_MAX_PROC_NUM + 1);
  3019.     }
  3020.     else
  3021.     {
  3022.         base = scrTestItemList->Position;
  3023.     }
  3024.     for (n=0; n<BT_MT_MAX_PROC_NUM; n++)
  3025.     {
  3026.         //if (base + n >= scr->CurProc)
  3027.         if (base + n >= scr->Get_CurProc())
  3028.         {
  3029.             break;
  3030.         }
  3031.         //if (scr->ProcFail[base+n] != 0)
  3032.         if (scr->Get_ProcFail(base+n) != 0)
  3033.         {
  3034.             lblItem[n]->Font->Color = clRed;
  3035.             lblItem[n]->Font->Style = TFontStyles()<< fsBold ;
  3036.             //sprintf(str, "%s (Fail)", scr->ProcName[base+n]);
  3037.             sprintf(str, "%s (Fail)", scr->Get_ProcName(base+n));
  3038.             lblItem[n]->Caption = str;
  3039.             lblItem[n]->Visible = true;
  3040.         }
  3041.         else
  3042.         {
  3043.             lblItem[n]->Font->Color = clBlue;
  3044.             lblItem[n]->Font->Style = TFontStyles()<< fsBold ;
  3045.             //sprintf(str, "%s (Pass)", scr->ProcName[base+n]);
  3046.             sprintf(str, "%s (Pass)", scr->Get_ProcName(base+n));
  3047.             lblItem[n]->Caption = str;
  3048.             lblItem[n]->Visible = true;
  3049.         }
  3050.     }
  3051.     if (n < BT_MT_MAX_PROC_NUM)
  3052.     {
  3053.         //if (base+n == scr->CurProc)
  3054.         if (base+n == scr->Get_CurProc())
  3055.         {
  3056.             lblItem[n]->Font->Color = clBlack;
  3057.             lblItem[n]->Font->Style = TFontStyles()<< fsBold ;
  3058.             //sprintf(str, "%s", scr->ProcName[base+n]);
  3059.             sprintf(str, "%s", scr->Get_ProcName(base+n));
  3060.             lblItem[n]->Caption = str;
  3061.             lblItem[n]->Visible = true;
  3062.             n++;
  3063.         }
  3064.     }
  3065.     for (; n<BT_MT_MAX_PROC_NUM; n++)
  3066.     {
  3067.         //if (base+n < scr->ProcCount)
  3068.         if (base+n < scr->Get_ProcCount())
  3069.         {
  3070.             lblItem[n]->Font->Color = clBlack;
  3071.             lblItem[n]->Font->Style = TFontStyles();
  3072.             //sprintf(str, "%s", scr->ProcName[base+n]);
  3073.             sprintf(str, "%s", scr->Get_ProcName(base+n));
  3074.             lblItem[n]->Caption = str;
  3075.             lblItem[n]->Visible = true;
  3076.         }
  3077.         else
  3078.         {
  3079.             lblItem[n]->Visible = false;
  3080.         }
  3081.     }
  3082.     return(1);
  3083. }
  3084. //---------------------------------------------------------------------------
  3085. int TfrmBT::ReloadScriptFiles(void)
  3086. {
  3087.     int ok;
  3088.     char str[256];
  3089.     FILE *fs ;
  3090.     scrTestItemList->LargeChange = BT_MT_MAX_PROC_NUM;
  3091.     for (int n=0; n < BT_MT_TESTCASE_NUM; n++)
  3092.     {
  3093.         sprintf(str, "Item%d.txt", n+1);
  3094.         fs = fopen(str, "r");
  3095.         if (NULL == fs)
  3096.         {
  3097.             if (Script[n] != NULL)
  3098.             {
  3099.                 delete Script[n];
  3100.             }
  3101.             Script[n] = 0;
  3102.             m_rbTestItem[n]->Caption = "TBD";
  3103.             m_rbTestItem[n]->Enabled = false;
  3104.             continue;
  3105.         }
  3106.         fclose(fs);
  3107.         if (Script[n] != NULL)
  3108.         {
  3109.             delete Script[n];
  3110.         }
  3111.         Script[n] = new CBTMT;
  3112.         ok = Script[n]->OpenScript(str);
  3113.         if (!ok)
  3114.         {
  3115.             if(Script[n]!=NULL) delete Script[n];
  3116.          Script[n] = 0;
  3117.          m_rbTestItem[n]->Caption = "TBD";
  3118.          m_rbTestItem[n]->Enabled = false;
  3119.          continue;
  3120.       }
  3121.       //m_rbTestItem[n]->Caption = Script[n]->Title;
  3122.       m_rbTestItem[n]->Caption = Script[n]->Get_Title();
  3123.       m_rbTestItem[n]->Enabled = true;
  3124.       if(ActIdx<0)  ActIdx = n;
  3125.    }
  3126.    m_rbTestItem[ActIdx]->Checked = true;
  3127.   // btnCheckCOMClick(this);
  3128.    return(1);
  3129. }
  3130. //---------------------------------------------------------------------------
  3131. void __fastcall TfrmBT::m_btnMTReloadClick(TObject *Sender)
  3132. {
  3133.     ReloadScriptFiles();
  3134.     UpdateProcessGroup();
  3135. }
  3136. //---------------------------------------------------------------------------
  3137. void __fastcall TfrmBT::m_btnMTRunClick(TObject *Sender)
  3138. {
  3139.     TSpeedButton* btn;
  3140.     btn = (Sender!=0) ? (TSpeedButton*)Sender : m_btnMTRun;
  3141.     if (0 == btn->Tag)
  3142.     {
  3143.         btn->Tag = 1;
  3144.         btn->Caption = "Stop";
  3145.         for (int n = 0; n < BT_MT_TESTCASE_NUM; n++)
  3146.         {
  3147.             m_rbTestItem[n]->Enabled = false;
  3148.         }
  3149.         Script[ActIdx]->Set_BTTrans(0, BT_META);
  3150.         if (m_cbMETAMode->Checked)
  3151.         {
  3152.             Script[ActIdx]->Set_BTTrans(1, BT_META);
  3153.         }
  3154.         else
  3155.         {
  3156.             Script[ActIdx]->Set_ComPort(m_usComPortArray[m_cbMTBT2COM->ItemIndex]);
  3157.             Script[ActIdx]->Set_BTTrans(1, BT_RS232);
  3158.         }
  3159.         m_lblMTStatus->Font->Color = clBlue;
  3160.         m_lblMTStatus->Caption = "RUNNING";
  3161.         Script[ActIdx]->Reset();
  3162.         m_edtMTLog->Lines->Clear();
  3163.         m_tmMT->Enabled =true;
  3164.     }
  3165.     else
  3166.     {
  3167.         btn->Tag = 0;
  3168.         m_tmMT->Enabled =false;
  3169.         btn->Caption = "Run";
  3170.         for (int n=0; n<BT_MT_TESTCASE_NUM; n++)
  3171.         {
  3172.             m_rbTestItem[n]->Enabled = (Script[n]!=0);
  3173.         }
  3174.         m_lblMTStatus->Font->Color = clBlack;
  3175.         m_lblMTStatus->Caption = "STOP";
  3176.         Script[ActIdx]->CloseScript();
  3177.         UpdateProcessGroup();
  3178.     }
  3179. }
  3180. //---------------------------------------------------------------------------
  3181. void __fastcall TfrmBT::m_btnMTConnectClick(TObject *Sender)
  3182. {
  3183.     m_shpMTConnect->Brush->Color = clRed;
  3184.     m_sCWT.i_meta_handle = m_META_HANDLE_Obj.Get_SecondHandle();
  3185.     SetMetaConnectReq(m_sCWT.META_connect_req);
  3186.     m_sCWT.neSuccess = on_PKTConnectWithTarget_Success;
  3187.     m_sCWT.neByUser  = on_PKTConnectWithTarget_ByUser;
  3188.     AbortConnectWithTarget();
  3189.     m_pT_CWT = new T_META_ConnectWithTarget(true, &m_sCWT);
  3190.     if (NULL != m_pT_CWT)
  3191.     {
  3192.         m_pT_CWT->FreeOnTerminate = true;
  3193.         m_pT_CWT->OnTerminate = on_PKTConnectWithTarget_Fail;
  3194.         m_pT_CWT->Priority = tpHighest;
  3195.     }
  3196.     else
  3197.     {
  3198.         m_pPKTLog->Add( DateToStr(Date()) +  " " + TimeToStr(Time()) +
  3199.                              " FAIL: connect with target"
  3200.                             );
  3201.         PostMessage(
  3202.                               this->Handle,
  3203.                               WM_ML_BT_PRINT_MSG,
  3204.                               0,
  3205.                               0
  3206.                             );
  3207.                  return;
  3208.     }
  3209.     if( NULL != m_pT_CWT )
  3210.     {
  3211.         m_pT_CWT->Resume();
  3212.     }
  3213. }
  3214. //---------------------------------------------------------------------------
  3215. void __fastcall TfrmBT::m_cbMETAModeClick(TObject *Sender)
  3216. {
  3217.     m_btnMTConnect->Enabled = m_cbMETAMode->Checked;    
  3218. }
  3219. //---------------------------------------------------------------------------
  3220. void __fastcall TfrmBT::scrTestItemListChange(TObject *Sender)
  3221. {
  3222.     UpdateProcessGroup();    
  3223. }
  3224. //---------------------------------------------------------------------------