⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form_bt.cpp

📁 MTK 手机软件开发 META 源代码,开发环境: C++ Builder
💻 CPP
📖 第 1 页 / 共 5 页
字号:

//---------------------------------------------------------------------------
bool  TfrmBT::CheckRFFields( E_CHECK_MASK_RF check_mask )
{
    AnsiString text;

    if( CHECK_MASK_RF_TX == check_mask )
    {
        // pattern
        if( cbRFTxPattern->Text.AnsiCompareIC("0000") == 0 )
        {   m_sBtRf.e_pattern = BT_TX_ALL_ZEROS;
        }
        else if( cbRFTxPattern->Text.AnsiCompareIC("1111") == 0 )
        {   m_sBtRf.e_pattern = BT_TX_ALL_ONES;
        }
        else if( cbRFTxPattern->Text.AnsiCompareIC("1010") == 0 )
        {   m_sBtRf.e_pattern = BT_TX_ALTER_BITS;
        }
        else if( cbRFTxPattern->Text.AnsiCompareIC("1100") == 0 )
        {   m_sBtRf.e_pattern = BT_TX_ONES_ZEROS;
        }
        else if( cbRFTxPattern->Text.AnsiCompareIC("pseudorandom bit sequence") == 0 )
        {   m_sBtRf.e_pattern = BT_TX_PSEUDO_RANDOM;
        }
        else if( cbRFTxPattern->Text.AnsiCompareIC("loopback ACL with whitening") == 0 )
        {   m_sBtRf.e_pattern = BT_TX_LOOPBACK_ACL_WITH_WHITENING;
        }
        else if( cbRFTxPattern->Text.AnsiCompareIC("loopback SCO with whitening") == 0 )
        {   m_sBtRf.e_pattern = BT_TX_LOOPBACK_SCO_WITH_WHITENING;
        }
       // else if( cbRFTxPattern->Text.AnsiCompareIC("loopback ACL without whitening") == 0 )
       // {   m_sBtRf.e_pattern = BT_TX_LOOPBACK_ACL_WITHOUT_WHITENING;
       // }
        else
        {   m_sBtRf.e_pattern = BT_TX_LOOPBACK_SCO_WITHOUT_WHITENING;
        }
    }
    else
    {
        m_sBtRf.e_pattern = BT_RX_TEST;
    }

    // whiten
    if( cbRFTxWhiten->Checked )
    {   m_sBtRf.e_whiten = BT_TX_WHITEN_ON;
    }
    else
    {   m_sBtRf.e_whiten = BT_TX_WHITEN_OFF;
    }

    // freuency type
    if( rbRFTxSingleFreq->Checked )
    {
        m_sBtRf.e_freq_type = BT_FREQ_SINGLE;
    }
    else
    {   m_sBtRf.e_freq_type = BT_FREQ_HOPPING;
    }

    // packet
    if( cbRFTxType->Text.AnsiCompareIC("NULL") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_NULL;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("POLL") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_POLL;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("FHS") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_FHS;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("DM1") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_DM1;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("DH1") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_DH1;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("HV1") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_HV1;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("HV2") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_HV2;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("HV3") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_HV3;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("DV") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_DV;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("AUX") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_AUX;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("DM3") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_DM3;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("DH3") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_DH3;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("DM5") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_DM5;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("DH5") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_DH5;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("EV3") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_EV3;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("EV4") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_EV4;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("EV5") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_EV5;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("2-DH1") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_2DH1;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("2-EV3") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_2EV3;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("2-DH3") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_2DH3;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("2-EV5") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_2EV5;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("2-DH5") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_2DH5;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("3-EV3") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_3EV3;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("3-DH1") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_3DH1;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("3-DH3") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_3DH3;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("3-EV5") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_3EV5;
    }
    else if( cbRFTxType->Text.AnsiCompareIC("3-DH5") == 0 )
    {   m_sBtRf.e_packet_type = BT_RF_PACKET_3DH5;
    }
        // power control
#if 0
    }
    else // RX
    {


        // freuency type
        if( rbRFRxSingleFreq->Checked )
        {
            m_sBtRf.e_freq_type = BT_FREQ_SINGLE;
        }
        else
        {   m_sBtRf.e_freq_type = BT_FREQ_HOPPING;
        }

        // packet
        if( rbRFRxContRx->Checked )
        {   m_sBtRf.e_packet_type = BT_TX_PACKET_CONT_RX;
        }
        else
        {   m_sBtRf.e_packet_type = BT_TX_PACKET_BURST_RX;
        }
    }
#endif
    text = edtRFTxSignleFreq->Text;      if( !IsValidBTFreq( text, m_sBtRf.uc_freq ) )         {  edtRFTxSignleFreqCheck(edtRFTxSignleFreq);        return false;   }
//    text = edtRFTxSignleFreq->Text;      if( !IsValidBTFreq( text, m_sBtRf.uc_rx_freq ) )         {  edtRFRxSignleFreqCheck(edtRFTxSignleFreq);        return false;   }

    text = edtRFTxDataLen->Text;      if( !IsValidBTTxDataLength( text, m_sBtRf.us_data_len, Get_RFTxDataMinLen(cbRFTxType->ItemIndex), Get_RFTxDataMaxLen(cbRFTxType->ItemIndex) ) )         {  edtRFTxDataLenCheck(edtRFTxDataLen);        return false;   }
    text = edtRFTxPollPeriod->Text;   if( !IsValidBTTxPollPeriod( text, m_sBtRf.uc_poll_period ) )      {  edtRFTxPollPeriodCheck(edtRFTxPollPeriod);        return false;   }

    // power control
    if( cbRFTxPowerCtrl->Checked )
    {   m_sBtRf.e_power_ctrl = BT_TX_POWER_CTRL_ON;
    }
    else
    {   m_sBtRf.e_power_ctrl = BT_TX_POWER_CTRL_OFF;
    }
    text = edtRFTxLevel->Text;      if( !IsValidBTTxPcl( text, m_sBtRf.uc_pcl ) )         {  edtRFTxLevelCheck(edtRFTxLevel);        return false;   }



    // access code
    for( int i=0; i<(sizeof(m_sBtRf.s_access_code.uc_access_code)/sizeof(m_sBtRf.s_access_code.uc_access_code[0])); i++ )
    {   text = m_edtRFTxAccessCode[i]->Text;      if( !IsValidHexBTTxAccessCode( text, m_sBtRf.s_access_code.uc_access_code[i] ) )         {  edtRFTxAccessCodeCheck(m_edtRFTxAccessCode[i]);        return false;   }
    }

    return true;
}

//---------------------------------------------------------------------------
void  TfrmBT::ShowHintLabel( TControl *sender, char* hint )
{
   TPoint pt0 = this->ClientOrigin;
   TPoint pt1 = sender->ClientOrigin;
   lblHint->Left = (pt1.x-pt0.x);
   lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
   lblHint->Caption = hint;
   lblHint->Visible = true;
   HintTimer->Enabled = true;
}

//---------------------------------------------------------------------------
void __fastcall TfrmBT::HintTimerTimer(TObject *Sender)
{
    HintTimer->Enabled = false;
    lblHint->Visible = false;
}

//---------------------------------------------------------------------------
void __fastcall TfrmBT::btnHCIFileClick(TObject *Sender)
{
    char str[512];
    bool ok;

    ok = dlgOpenHCIFile->Execute();
    if (!::CheckFileExist(dlgOpenHCIFile->FileName))
    {
        ok = false;
    }
    
    if( !ok )
    {
        sbHCI->Panels->Items[0]->Text = (AnsiString) "  Load HCI file fail";
        return;
    }


    m_sBTHCI.hPostMsgDestHandle = this->Handle;
    m_sBTHCI.filename           = dlgOpenHCIFile->FileName;
    m_sBTHCI.log                = m_pHCILog;

    m_BT_HCI_Obj.ConfirmCallback = ::ConfirmCallback_SetupHCIFile;
    m_BT_HCI_Obj.REQ_Read_From_File_Start( m_sBTHCI );

    sbHCI->Panels->Items[0]->Text = (AnsiString) "  Setup HCI file progressing";
}

//---------------------------------------------------------------------------
void TfrmBT::ConfirmCallback_SetupHCIFile(void)
{
    E_METAAPP_RESULT_T state = m_BT_HCI_Obj.Get_ConfirmState();

    switch (state)
    {
        case METAAPP_SUCCESS:
        {
            stHCIFile->Caption = m_sBTHCI.filename;
            if( rbHCICategory->Checked )
            {
                m_pvHCICategory = m_BT_HCI_Obj.Get_HciCategoryVector();
                DisplayHCIUI( DRAW_MASK_HCI_CATEGORY | DRAW_MASK_HCI_COMMAND | DRAW_MASK_HCI_PARAMETER, 0, 0 );
            }
            else
            {
                m_pvHCIGroup = m_BT_HCI_Obj.Get_HciGroupVector();
                DisplayHCIUI( DRAW_MASK_HCI_GROUP | DRAW_MASK_HCI_COMMAND | DRAW_MASK_HCI_PARAMETER, 0, 0 );
            }
            sbHCI->Panels->Items[0]->Text = (AnsiString)"  Setup HCI file successfully";
        }
        break;

        case METAAPP_FAIL:
        {
            sbHCI->Panels->Items[0]->Text = (AnsiString)"  Setup HCI file fail";
            Application->MessageBox( "Execution Fail : Setup HCI file", "FAIL", MB_OK );
        }
        break;

        case METAAPP_TIMEOUT:
        {
            sbHCI->Panels->Items[0]->Text = (AnsiString)"  Setup HCI file timeout";
            Application->MessageBox("Execution Timeout : Setup HCI file", "TIMEOUT", MB_OK);
        }
        break;

        case METAAPP_STOP:
            sbHCI->Panels->Items[0]->Text = (AnsiString)"  Setup HCI file stop";
        break;
    }

    CurrentPageReset();
}

//---------------------------------------------------------------------------
void TfrmBT::DisplayHCIUI( int draw_mask, int category_group_idx, int cmd_idx )
{
    static vector<S_BT_HCI_CATEGORY>:: iterator iter_category;
    static vector<S_BT_HCI_GROUP>:: iterator iter_group;
    vector<S_BT_HCI_COMMAND>:: iterator iter_cmd;
    vector<S_BT_HCI_PARAMETER>:: iterator iter_par;
    S_BT_HCI_CATEGORY category;
    S_BT_HCI_GROUP group;
    S_BT_HCI_COMMAND command;
    S_BT_HCI_PARAMETER parameter;

    if( rbHCICategory->Checked )
    {
        if( draw_mask & DRAW_MASK_HCI_CATEGORY )
        {
            cbHCICategory->Clear();
            // display category
            for( iter_category = m_pvHCICategory->begin(); iter_category != m_pvHCICategory->end(); iter_category++ )
            {
                category = *iter_category;
                cbHCICategory->Items->Add( category.as_category_name );
            }
            iter_category = m_pvHCICategory->begin();
            cbHCICategory->ItemIndex = category_group_idx;
        }

        // display command
        if( draw_mask & DRAW_MASK_HCI_COMMAND )
        {
            for( iter_category = m_pvHCICategory->begin(); iter_category != m_pvHCICategory->end(); iter_category++ )
            {
                category = *iter_category;
                if( category.as_category_name.AnsiCompareIC(cbHCICategory->Text) == 0 )
                {
                    break;
                }
            }

            cbHCICommand->Clear();
            for( iter_cmd = iter_category->v_cmd.begin(); iter_cmd != iter_category->v_cmd.end(); iter_cmd++ )
            {
                command = *iter_cmd;
                cbHCICommand->Items->Add( command.as_cmd_name );
            }
            cbHCICommand->ItemIndex = cmd_idx;
        }

        // display parameter
        if( draw_mask & DRAW_MASK_HCI_PARAMETER )
        {
            // sgSendHCI->EditorMode = true;
            for( iter_cmd = iter_category->v_cmd.begin(); iter_cmd != iter_category->v_cmd.end(); iter_cmd++ )
            {
                command = *iter_cmd;
                if( command.as_cmd_name.AnsiCompareIC(cbHCICommand->Text) == 0 )
                {
                    if( ! m_pvSendHCIPar->empty() )
                    {
                        m_pvSendHCIPar->erase( m_pvSendHCIPar->begin(), m_pvSendHCIPar->end() );
                    }

                    if( ! m_pvReceiveHCIPar->empty() )
                    {
                        m_pvReceiveHCIPar->erase( m_pvReceiveHCIPar->begin(), m_pvReceiveHCIPar->end() );
                    }

                    char str[20];
                    sprintf( str, "%X", iter_cmd->us_opcode );
                    stHCIOpcode->Caption = str;

                    sprintf( str, "%X", iter_cmd->uc_last_event );
                    stHCILastEvent->Caption = str;

                    edtHCITimeout->Text = iter_cmd->ui_ms_timeout;

                    // send parameter
                    if( 0 == iter_cmd->ui_send_num )
                    {
                        sgSendHCI->FixedCols = 3;
                        sgSendHCI->FixedRows = 1;
                        sgSendHCI->ColCount = 4;
                        sgSendHCI->RowCount = 2;
                        sgSendHCI->Cells[HCI_NAME_COL_IDX][1] = "";
                        sgSendHCI->Cells[HCI_BYTE_COL_IDX][1] = "";
                        sgSendHCI->Cells[HCI_VALUE_COL_IDX][1] = "";
                    }
                    else
                    {
                        sgSendHCI->FixedCols = 2;
                        sgSendHCI->FixedRows = 1;
                        sgSendHCI->ColCount = 4;
                        sgSendHCI->RowCount = iter_cmd->ui_send_num+1;
                        for (unsigned int i=0; i<iter_cmd->ui_send_num; i++ )
                        {
                            iter_par = iter_cmd->v_send_par.begin() + i;
                            parameter = *iter_par;
                            sgSendHCI->Cells[HCI_NAME_COL_IDX][i+1] = iter_par->as_name;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -