📄 form_bt.cpp
字号:
//---------------------------------------------------------------------------
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 + -