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

📄 form_fm.cpp

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

#include <vcl.h>
#include <stdio.h>
#pragma hdrstop

// FM
#ifndef  _FM_COMMON_H_
#include "fm_common.h"
#endif

#ifndef _FORM_FM_H_
#include "form_FM.h"
#endif

// misc
#ifndef  _MISC_FM_H_
#include "misc_fm.h"
#endif

#ifndef  _FT_UTILS_H_
#include "ft_utils.h"
#endif

//---------------------------------------------------------------------------
typedef enum
{
    FM_MODE_IDX_MONO = 0,
    FM_MODE_IDX_STEREO
}E_FM_MODE_IDX;

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfrmFM *frmFM;

//===========================================================================
static void CNF_FM_PowerOn(void)
{
    frmFM->CNF_FM_PowerOn();
}

//---------------------------------------------------------------------------
static void CNF_FM_PowerReset(void)
{
    frmFM->CNF_FM_PowerReset();
}

//---------------------------------------------------------------------------
static void CNF_FM_PowerOff(void)
{
    frmFM->CNF_FM_PowerOff();
}

//---------------------------------------------------------------------------
static void CNF_FM_SetFreq(void)
{
    frmFM->CNF_FM_SetFreq();
}

//---------------------------------------------------------------------------
static void CNF_FM_SearchNextStation(void)
{
    frmFM->CNF_FM_SearchNextStation();
}

//---------------------------------------------------------------------------
static void CNF_FM_SearchPreStation(void)
{
    frmFM->CNF_FM_SearchPreStation();
}

//---------------------------------------------------------------------------
static void CNF_FM_SetAudio(void)
{
    frmFM->CNF_FM_SetAudio();
}

//---------------------------------------------------------------------------
static void CNF_FM_ReadData(void)
{
    frmFM->CNF_FM_ReadData();
}

//---------------------------------------------------------------------------
static void CNF_FM_WriteData(void)
{
    frmFM->CNF_FM_WriteData();
}

//---------------------------------------------------------------------------
static void CNF_FM_GetStatus(void)
{
    frmFM->CNF_FM_GetStatus();
}
//===========================================================================
__fastcall TfrmFM::TfrmFM(TComponent* Owner)
        : TForm(Owner)
{
    Init();
}

//---------------------------------------------------------------------------
void TfrmFM::Init(void)
{
     m_bInit = true;
}

//===========================================================================
void __fastcall TfrmFM::FormActivate(TObject *Sender)
{
    if (m_bInit)
    {
        m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_PowerOn;
        m_cFM_RADIO_Obj.REQ_FM_Power_On_Start();
    }
}

//===========================================================================
void TfrmFM::CurrentPageReset(void)
{
    m_btnReset->Enabled = true;
    m_btnSetFreq->Enabled = true;
    m_btnSearchNextStation->Enabled = true;
    m_btnSearchPreStation->Enabled = true;
    m_btnSetAudio->Enabled = true;
    m_btnRead->Enabled = true;
    m_btnWrite->Enabled = true;
    m_btnGet->Enabled = true;
}

//---------------------------------------------------------------------------
void TfrmFM::CurrentPageLock(void)
{
    m_btnReset->Enabled = false;
    m_btnSetFreq->Enabled = false;
    m_btnSearchNextStation->Enabled = false;
    m_btnSearchPreStation->Enabled = false;
    m_btnSetAudio->Enabled = false;
    m_btnRead->Enabled = false;
    m_btnWrite->Enabled = false;
    m_btnGet->Enabled = false;
}

//---------------------------------------------------------------------------
void TfrmFM::ReDrawFields(E_DRAW_FM_T draw)
{
    if (draw & DRAW_FM_STATION)
    {
        char str[256];
        sprintf(str, "%.1f", m_sValidFreq.m_i2ValidFreq / FM_FREQ_SCALE);
        m_edtStation->Text = (AnsiString) str;
    }

    if (draw & DRAW_FM_REGISTER)
    {
        m_edtWord1->Text = IntToStr((m_usData & 0xFF00) >> 8);
        m_edtWord0->Text = IntToStr(m_usData & 0x00FF);
    }

    if (draw & DRAW_FM_STATUS)
    {
        m_stRssi->Caption = IntToStr(m_sStatus.s_rssi.m_ucSignalLevel);
        m_stIfCounter->Caption = IntToStr(m_sStatus.s_if_cnt.m_u2IfCnt);
        m_stHLSide->Caption = IntToStr(m_sStatus.s_hl_side.m_ucHighOrLow);
        m_stStereoMono->Caption = IntToStr(m_sStatus.s_stero_mono.m_ucStereoOrMono);
    }
}

//===========================================================================
void TfrmFM::CNF_FM_PowerOn(void)
{
    E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();

    switch (state)
    {
        case METAAPP_SUCCESS:
        {
            m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on successfully";
        }
        break;

        case METAAPP_FAIL:
        {
            m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on fail";
            Application->MessageBox("Execution Failure : FM radio module power on", "FAILURE", MB_OK );
        }
        break;

        case METAAPP_TIMEOUT:
        {
            m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on timeout";
            Application->MessageBox("Execution Timeout : FM radio module power on", "TIMEOUT", MB_OK );
        }
        break;

        case METAAPP_STOP:
        {
            m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on stop";
        }
        break;

        default:
        {
        }
        break;
    }
}

//===========================================================================
void TfrmFM::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 TfrmFM::edtFreqCheck(TObject *Sender)
{
    AnsiString  text;
    short freq;
    TEdit *edit = (TEdit*)Sender;
    char  hint[] = " frequecy shall be 87.5~108 MHz ";

    text = edit->Text;
    if (!IsValidFMFreq(text, freq))
    {
        ShowHintLabel(edit, hint);
        edit->SetFocus();
        return;
    }

}

//---------------------------------------------------------------------------
void __fastcall TfrmFM::m_btnSetFreqClick(TObject *Sender)
{
    FM_FREQ_REQ_T req;
    AnsiString_To_FM_Freq(m_edtFreq->Text, req.m_i2CurFreq);
    
    m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_SetFreq;
    m_cFM_RADIO_Obj.REQ_Set_Freq_Start(req);
    m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Set frequency progressing";
    CurrentPageLock();
}

//---------------------------------------------------------------------------
void TfrmFM::CNF_FM_SetFreq(void)
{
    E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();

    switch (state)
    {
        case METAAPP_SUCCESS:
        {
            m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Set frequency successfully";
        }
        break;

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

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

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

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

//---------------------------------------------------------------------------
void __fastcall TfrmFM::edtRssiThresholdCheck(TObject *Sender)
{
    AnsiString  text;
    unsigned int uidata;
    TEdit *edit = (TEdit*)Sender;
    char  hint[] = " value shall be 1~6";

    text = edit->Text;
    if (!IsValidFMRssiThreshold(text, uidata))
    {
        ShowHintLabel(edit, hint);
        edit->SetFocus();
        return;
    }
}

//---------------------------------------------------------------------------
void __fastcall TfrmFM::edtIFCounterDeltaCheck(TObject *Sender)
{
    AnsiString  text;
    unsigned int uidata;
    TEdit *edit = (TEdit*)Sender;
    char  hint[] = " value shall be 10~30 and multiple of 5";

    text = edit->Text;
    if (!IsValidFMIfCounterDelta(text, uidata))
    {
        ShowHintLabel(edit, hint);
        edit->SetFocus();
        return;
    }
}

//==========================================================================
void __fastcall TfrmFM::m_btnSearchNextStationClick(TObject *Sender)
{
    S_FM_SEARCH_STATION_T search_station;
    short freq;
    search_station.s_if_cnt_delta.m_u4IfCntDelta = m_cbIfCounterDelta->Text.ToInt();
    search_station.s_rssi_thrsh.m_u4RssiThreshold = m_cbRssiThreshold->ItemIndex + 1;
    AnsiString_To_FM_Freq(m_edtStation->Text, freq);
    search_station.s_freq_range.m_i2StartFreq = freq + 1;
    search_station.s_freq_range.m_i2StopFreq  = FM_MAX_FREQ * FM_FREQ_SCALE;

    m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_SearchNextStation;
    m_cFM_RADIO_Obj.REQ_SearchFreq_Start(search_station);
    m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search next station progressing";
    CurrentPageLock();
}

//---------------------------------------------------------------------------
void TfrmFM::CNF_FM_SearchNextStation(void)
{
    E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();

    switch (state)
    {
        case METAAPP_SUCCESS:
        {
            FM_VAILD_FREQ_CNF_T* p_valid_freq;
            p_valid_freq = m_cFM_RADIO_Obj.Get_ValidFreq();
            m_sValidFreq = *p_valid_freq;
            ReDrawFields(DRAW_FM_STATION);
            m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search next station successfully";
        }
        break;

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

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

        case METAAPP_STOP:
        {
            m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search next station stop";
        }
        break;

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

⌨️ 快捷键说明

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