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

📄 form_tdmb.cpp

📁 MTK 手机软件开发 META 源代码,开发环境: C++ Builder
💻 CPP
📖 第 1 页 / 共 3 页
字号:
            AnsiString as_channel[] =
            {
                "LA (1452.960 MHz)",
                "LB (1454.672 MHz)",
                "LC (1456.384 MHz)",
                "LD (1458.096 MHz)",
                "LE (1459.808 MHz)",
                "LF (1461.520 MHz)",
                "LG (1463.232 MHz)",
                "LH (1464.944 MHz)",
                "LI (1466.656 MHz)",
                "LJ (1468.368 MHz)",
                "LK (1470.080 MHz)",
                "LL (1471.792 MHz)",
                "LM (1473.504 MHz)",
                "LN (1475.216 MHz)",
                "LO (1476.928 MHz)",
                "LP (1478.640 MHz)",
                "LQ (1480.352 MHz)",
                "LR (1482.064 MHz)",
                "LS (1483.776 MHz)",
                "LT (1485.488 MHz)",
                "LU (1487.200 MHz)",
                "LV (1488.912 MHz)",
                "LW (1490.624 MHz)"
            };

            for (int i=0; i<TDMB_LBAND_CHANNEL_NUM; i++)
            {
                m_cbChannel->Items->Add(as_channel[i]);
            }
        }
        break;

        case TDMB_CHINA_BAND_IDX:
        {
            AnsiString as_channel[] =
            {
                "(208.720 MHz)",
                "(209.936 MHz)",
                "(210.432 MHz)",
                "(211.648 MHz)",
                "(212.144 MHz)",
                "(213.360 MHz)",
                "(213.856 MHz)",
                "(215.072 MHz)",
                "(216.432 MHz)",
                "(218.144 MHz)",
                "(1458.096 MHz)",
                "(1459.808 MHz)",
                "(1470.080 MHz)",
            };

            for (int i=0; i<TDMB_CHINA_BAND_CHANNEL_NUM; i++)
            {
                m_cbChannel->Items->Add(as_channel[i]);
            }
        }
        break;

        default:
        {
        }
        break;
    }
    m_cbChannel->ItemIndex = 0;
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void TfrmTDMB::Display_FreqEnsembleDB(void)
{
    TTreeNode *p_tnCurrentEnsembleDB;
    TTreeNode *p_tnCurrentLabel;
    TTreeNode *p_tnCurrentServiceDB[TDMB_MAX_SERVICEDB_NUM];
    TTreeNode *p_tnEnsembleListDB;
    TTreeNode *p_tnEnsembleLabel[TDMB_MAX_ENSEMBLEDB_NUM];
    TTreeNode *p_tnServiceDB[TDMB_MAX_SERVICEDB_NUM];

    m_tvServices->Items->Clear();

    // Current Ensemble
    p_tnCurrentEnsembleDB = m_tvServices->Items->Add(NULL , "[Current Ensemble]");
    AnsiString as(m_sFreqEnsemble.m_rCurEnsembleDB.Label);
    char str[20];
    sprintf(str, "%.3f", m_sFreqEnsemble.m_rCurEnsembleDB.Frequency / 1000.0);
    AnsiString as_str(str);
    as += " CH = " + as_str + " MHz";
    p_tnCurrentLabel = m_tvServices->Items->AddChild(p_tnCurrentEnsembleDB, as);

    for (int i=0; i<m_sFreqEnsemble.m_rCurEnsembleDB.m_ucServiceDBNum; i++)
    {
        p_tnCurrentServiceDB[i] = m_tvServices->Items->AddChild(p_tnCurrentLabel, m_sFreqEnsemble.m_rCurEnsembleDB.m_rServiceDB[i].Label);
        for (int ch=0; ch<m_sFreqEnsemble.m_rCurEnsembleDB.m_rServiceDB[i].m_ucChannelDBNum; ch++)
        {
            sprintf(str, "0x%X", m_sFreqEnsemble.m_rCurEnsembleDB.m_rServiceDB[i].Id);
            as_str = str;
            as = "[DMB][Service ID:" + as_str +
                 "][Channel ID:" + IntToStr(m_sFreqEnsemble.m_rCurEnsembleDB.m_rServiceDB[i].m_rChannelDB[ch].Id) +
                 "][PL:" + IntToStr(m_sFreqEnsemble.m_rCurEnsembleDB.m_rServiceDB[i].m_rChannelDB[ch].PL) +
                 "][" + IntToStr(m_sFreqEnsemble.m_rCurEnsembleDB.m_rServiceDB[i].m_rChannelDB[ch].BitRate) +
                 "Kbps]";
            m_tvServices->Items->AddChild(p_tnCurrentServiceDB[i], as);
        }
    }

    // Ensemble List
    p_tnEnsembleListDB = m_tvServices->Items->Add(NULL , "[Ensemble List]");
    for (int en=0; en<m_sFreqEnsemble.m_ucEnsembleNum; en++)
    {
        as = m_sFreqEnsemble.m_rEnsembleDB[en].Label;
        sprintf(str, "%.3f", m_sFreqEnsemble.m_rEnsembleDB[en].Frequency / 1000.0);
        as_str = str;
        as += " CH = " + as_str + " MHz";
        p_tnEnsembleLabel[en] = m_tvServices->Items->AddChild(p_tnEnsembleListDB, as);

        for (int sv=0; sv<m_sFreqEnsemble.m_rEnsembleDB[en].m_ucServiceDBNum; sv++)
        {
            p_tnServiceDB[sv] = m_tvServices->Items->AddChild(p_tnEnsembleLabel[en], m_sFreqEnsemble.m_rEnsembleDB[en].m_rServiceDB[sv].Label);
            for (int ch=0; ch<m_sFreqEnsemble.m_rEnsembleDB[en].m_rServiceDB[sv].m_ucChannelDBNum; ch++)
            {
                sprintf(str, "0x%X", m_sFreqEnsemble.m_rEnsembleDB[en].m_rServiceDB[sv].Id);
                as_str = str;
                as = "[DMB][Service ID:" + as_str +
                     "][Channel ID:" + IntToStr(m_sFreqEnsemble.m_rEnsembleDB[en].m_rServiceDB[sv].m_rChannelDB[ch].Id) +
                     "][PL:" + IntToStr(m_sFreqEnsemble.m_rEnsembleDB[en].m_rServiceDB[sv].m_rChannelDB[ch].PL) +
                     "][" + IntToStr(m_sFreqEnsemble.m_rEnsembleDB[en].m_rServiceDB[sv].m_rChannelDB[ch].BitRate) +
                     "Kbps]";
                m_tvServices->Items->AddChild(p_tnServiceDB[sv], as);
            }
        }
    }


}

//--------------------------------------------------------------------------
void TfrmTDMB::Display_ScanEnsembleDB(void)
{
    TTreeNode *p_tnEnsembleListDB;
    TTreeNode *p_tnEnsembleLabel[TDMB_MAX_ENSEMBLEDB_NUM];
    TTreeNode *p_tnServiceDB[TDMB_MAX_SERVICEDB_NUM];

    m_tvServices->Items->Clear();

    // Ensemble List
    p_tnEnsembleListDB = m_tvServices->Items->Add(NULL , "[Ensemble List]");
    for (int en=0; en<m_sScanEnsemble.m_ucEnsembleNum; en++)
    {
        AnsiString as = m_sScanEnsemble.m_rEnsembleDB[en].Label;
        char str[20];
        sprintf(str, "%.3f", m_sScanEnsemble.m_rEnsembleDB[en].Frequency / 1000.0);
        AnsiString as_str(str);
        as += " CH = " + as_str + " MHz";
        p_tnEnsembleLabel[en] = m_tvServices->Items->AddChild(p_tnEnsembleListDB, as);

        for (int sv=0; sv<m_sScanEnsemble.m_rEnsembleDB[en].m_ucServiceDBNum; sv++)
        {
            p_tnServiceDB[sv] = m_tvServices->Items->AddChild(p_tnEnsembleLabel[en], m_sScanEnsemble.m_rEnsembleDB[en].m_rServiceDB[sv].Label);
            for (int ch=0; ch<m_sScanEnsemble.m_rEnsembleDB[en].m_rServiceDB[sv].m_ucChannelDBNum; ch++)
            {
                sprintf(str, "0x%X", m_sScanEnsemble.m_rEnsembleDB[en].m_rServiceDB[sv].Id);
                as_str = str;
                as = "[DMB][Service ID:" + as_str +
                     "][Channel ID:" + IntToStr(m_sScanEnsemble.m_rEnsembleDB[en].m_rServiceDB[sv].m_rChannelDB[ch].Id) +
                     "][PL:" + IntToStr(m_sScanEnsemble.m_rEnsembleDB[en].m_rServiceDB[sv].m_rChannelDB[ch].PL) +
                     "][" + IntToStr(m_sScanEnsemble.m_rEnsembleDB[en].m_rServiceDB[sv].m_rChannelDB[ch].BitRate) +
                     "Kbps]";
                m_tvServices->Items->AddChild(p_tnServiceDB[sv], as);
            }
        }
    }

}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void __fastcall TfrmTDMB::m_cbBandChange(TObject *Sender)
{
    Display_Channel((E_TDMB_BAND_T) m_cbBand->ItemIndex);
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void __fastcall TfrmTDMB::m_btnSetChannelClick(TObject *Sender)
{
    m_bAction = true;
    unsigned int freq_khz = Get_TDMBFreqKHz();
    m_TDMB_RF_Obj.ConfirmCallback = ::CNF_TDMB_SetFreq;
    m_TDMB_RF_Obj.REQ_Set_Freq_Start((E_TDMB_BAND_T) m_cbBand->ItemIndex, freq_khz);

    CurrentPageLock();
}

//---------------------------------------------------------------------------
void TfrmTDMB::CNF_TDMB_SetFreq(void)
{
    E_METAAPP_RESULT_T state = m_TDMB_RF_Obj.Get_ConfirmState();
    m_bAction = false; 
    switch (state)
    {
        case METAAPP_SUCCESS:
        {
            TDMB_SET_FREQ_CNF_T* p_ensemble = m_TDMB_RF_Obj.Get_FreqEnsembleResult();
             m_sFreqEnsemble = *p_ensemble;
            ReDrawFields(TDMB_DRAW_MASK_FREQ_SERVICES);
            m_sbTDMB->Panels->Items[0]->Text = (AnsiString)"  Set frequency successfully";
            //m_tmSingal->Enabled = true;
        }
        break;

        case METAAPP_FAIL:
        {
            m_sbTDMB->Panels->Items[0]->Text = (AnsiString)"  Set frequency fail";
            Application->MessageBox("Execution Failure : Set frequency", "FAILURE", MB_OK );
        }
        break;

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

        case METAAPP_STOP:
        {
            m_sbTDMB->Panels->Items[0]->Text = (AnsiString)"  Set frequency stop";
        }
        break;

        default:
        {
        }
        break;
    }
    CurrentPageReset();
}

//---------------------------------------------------------------------------
unsigned int TfrmTDMB::Get_TDMBFreqKHz(void)
{
    unsigned int freq_khz;

    AnsiString as = m_cbChannel->Text;
    int pos1 = as.Pos("(");
    int pos2 = as.Pos("M");
    AnsiString as_freq_khz = as.SubString(pos1 + 1, pos2-pos1-2);
    freq_khz = atof(as_freq_khz.c_str()) * 1000;

    return freq_khz;

}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void __fastcall TfrmTDMB::m_btnAutoScanClick(TObject *Sender)
{
    m_bAction = true;
    m_TDMB_RF_Obj.ConfirmCallback = ::CNF_TDMB_AutoScan;
    m_TDMB_RF_Obj.REQ_AutoScan_Start((E_TDMB_BAND_T) m_cbBand->ItemIndex);

    CurrentPageLock();
}

//---------------------------------------------------------------------------
void TfrmTDMB::CNF_TDMB_AutoScan(void)
{
    E_METAAPP_RESULT_T state = m_TDMB_RF_Obj.Get_ConfirmState();
    m_bAction = false;
    switch (state)
    {
        case METAAPP_SUCCESS:
        {
            TDMB_GET_ENSM_INFO_BY_AUTO_SCAN_CNF_T* p_ensemble = m_TDMB_RF_Obj.Get_ScanEnsembleResult();
            m_sScanEnsemble = *p_ensemble;
            ReDrawFields(TDMB_DRAW_MASK_SCAN_SERVICES);
            m_sbTDMB->Panels->Items[0]->Text = (AnsiString)"  Auto scan successfully";
            //m_tmSingal->Enabled = true;
        }
        break;

        case METAAPP_FAIL:
        {
            m_sbTDMB->Panels->Items[0]->Text = (AnsiString)"  Auto scan fail";
            Application->MessageBox("Execution Failure : Auto scan", "FAILURE", MB_OK );
        }
        break;

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

        case METAAPP_STOP:
        {
            m_sbTDMB->Panels->Items[0]->Text = (AnsiString)"  Auto scan stop";
        }
        break;

        default:
        {
        }
        break;
    }
    CurrentPageReset();
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void __fastcall TfrmTDMB::m_tmSingalTimer(TObject *Sender)
{
    if (!m_bAction)
    {
        m_bAction = true;
        if (!m_TDMB_RF_Obj.REQ_Get_Signal_Start())
        {
            m_sbTDMB->Panels->Items[0]->Text = (AnsiString)"  Get signal fail";
            Application->MessageBox("Execution Failure : Get signal", "FAILURE", MB_OK );
            m_tmSingal->Enabled = false;
        }
        m_bAction = false;
        TDMB_GET_SIGNAL_CNF_T* p_signal = m_TDMB_RF_Obj.Get_Signal();
        m_sSignal = *p_signal;
        ReDrawFields(TDMB_DRAW_MASK_SIGNAL);
    }
}

//---------------------------------------------------------------------------
void TfrmTDMB::CNF_TDMB_GetSignal(void)
{
    m_bAction = false;
    E_METAAPP_RESULT_T state = m_TDMB_RF_Obj.Get_ConfirmState();

    switch (state)
    {
        case METAAPP_SUCCESS:
        {
            TDMB_GET_SIGNAL_CNF_T* p_signal = m_TDMB_RF_Obj.Get_Signal();
            m_sSignal = *p_signal;
            ReDrawFields(TDMB_DRAW_MASK_SIGNAL);
        }
        break;

⌨️ 快捷键说明

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