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

MTK

开发平台:

C++ Builder

  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include <stdio.h>
  4. #pragma hdrstop
  5. // FM
  6. #ifndef  _FM_COMMON_H_
  7. #include "fm_common.h"
  8. #endif
  9. #ifndef _FORM_FM_H_
  10. #include "form_FM.h"
  11. #endif
  12. // misc
  13. #ifndef  _MISC_FM_H_
  14. #include "misc_fm.h"
  15. #endif
  16. #ifndef  _FT_UTILS_H_
  17. #include "ft_utils.h"
  18. #endif
  19. //---------------------------------------------------------------------------
  20. typedef enum
  21. {
  22.     FM_MODE_IDX_MONO = 0,
  23.     FM_MODE_IDX_STEREO
  24. }E_FM_MODE_IDX;
  25. //---------------------------------------------------------------------------
  26. #pragma package(smart_init)
  27. #pragma resource "*.dfm"
  28. TfrmFM *frmFM;
  29. //===========================================================================
  30. static void CNF_FM_PowerOn(void)
  31. {
  32.     frmFM->CNF_FM_PowerOn();
  33. }
  34. //---------------------------------------------------------------------------
  35. static void CNF_FM_PowerReset(void)
  36. {
  37.     frmFM->CNF_FM_PowerReset();
  38. }
  39. //---------------------------------------------------------------------------
  40. static void CNF_FM_PowerOff(void)
  41. {
  42.     frmFM->CNF_FM_PowerOff();
  43. }
  44. //---------------------------------------------------------------------------
  45. static void CNF_FM_SetFreq(void)
  46. {
  47.     frmFM->CNF_FM_SetFreq();
  48. }
  49. //---------------------------------------------------------------------------
  50. static void CNF_FM_SearchNextStation(void)
  51. {
  52.     frmFM->CNF_FM_SearchNextStation();
  53. }
  54. //---------------------------------------------------------------------------
  55. static void CNF_FM_SearchPreStation(void)
  56. {
  57.     frmFM->CNF_FM_SearchPreStation();
  58. }
  59. //---------------------------------------------------------------------------
  60. static void CNF_FM_SetAudio(void)
  61. {
  62.     frmFM->CNF_FM_SetAudio();
  63. }
  64. //---------------------------------------------------------------------------
  65. static void CNF_FM_ReadData(void)
  66. {
  67.     frmFM->CNF_FM_ReadData();
  68. }
  69. //---------------------------------------------------------------------------
  70. static void CNF_FM_WriteData(void)
  71. {
  72.     frmFM->CNF_FM_WriteData();
  73. }
  74. //---------------------------------------------------------------------------
  75. static void CNF_FM_GetStatus(void)
  76. {
  77.     frmFM->CNF_FM_GetStatus();
  78. }
  79. //===========================================================================
  80. __fastcall TfrmFM::TfrmFM(TComponent* Owner)
  81.         : TForm(Owner)
  82. {
  83.     Init();
  84. }
  85. //---------------------------------------------------------------------------
  86. void TfrmFM::Init(void)
  87. {
  88.      m_bInit = true;
  89. }
  90. //===========================================================================
  91. void __fastcall TfrmFM::FormActivate(TObject *Sender)
  92. {
  93.     if (m_bInit)
  94.     {
  95.         m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_PowerOn;
  96.         m_cFM_RADIO_Obj.REQ_FM_Power_On_Start();
  97.     }
  98. }
  99. //===========================================================================
  100. void TfrmFM::CurrentPageReset(void)
  101. {
  102.     m_btnReset->Enabled = true;
  103.     m_btnSetFreq->Enabled = true;
  104.     m_btnSearchNextStation->Enabled = true;
  105.     m_btnSearchPreStation->Enabled = true;
  106.     m_btnSetAudio->Enabled = true;
  107.     m_btnRead->Enabled = true;
  108.     m_btnWrite->Enabled = true;
  109.     m_btnGet->Enabled = true;
  110. }
  111. //---------------------------------------------------------------------------
  112. void TfrmFM::CurrentPageLock(void)
  113. {
  114.     m_btnReset->Enabled = false;
  115.     m_btnSetFreq->Enabled = false;
  116.     m_btnSearchNextStation->Enabled = false;
  117.     m_btnSearchPreStation->Enabled = false;
  118.     m_btnSetAudio->Enabled = false;
  119.     m_btnRead->Enabled = false;
  120.     m_btnWrite->Enabled = false;
  121.     m_btnGet->Enabled = false;
  122. }
  123. //---------------------------------------------------------------------------
  124. void TfrmFM::ReDrawFields(E_DRAW_FM_T draw)
  125. {
  126.     if (draw & DRAW_FM_STATION)
  127.     {
  128.         char str[256];
  129.         sprintf(str, "%.1f", m_sValidFreq.m_i2ValidFreq / FM_FREQ_SCALE);
  130.         m_edtStation->Text = (AnsiString) str;
  131.     }
  132.     if (draw & DRAW_FM_REGISTER)
  133.     {
  134.         m_edtWord1->Text = IntToStr((m_usData & 0xFF00) >> 8);
  135.         m_edtWord0->Text = IntToStr(m_usData & 0x00FF);
  136.     }
  137.     if (draw & DRAW_FM_STATUS)
  138.     {
  139.         m_stRssi->Caption = IntToStr(m_sStatus.s_rssi.m_ucSignalLevel);
  140.         m_stIfCounter->Caption = IntToStr(m_sStatus.s_if_cnt.m_u2IfCnt);
  141.         m_stHLSide->Caption = IntToStr(m_sStatus.s_hl_side.m_ucHighOrLow);
  142.         m_stStereoMono->Caption = IntToStr(m_sStatus.s_stero_mono.m_ucStereoOrMono);
  143.     }
  144. }
  145. //===========================================================================
  146. void TfrmFM::CNF_FM_PowerOn(void)
  147. {
  148.     E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();
  149.     switch (state)
  150.     {
  151.         case METAAPP_SUCCESS:
  152.         {
  153.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on successfully";
  154.         }
  155.         break;
  156.         case METAAPP_FAIL:
  157.         {
  158.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on fail";
  159.             Application->MessageBox("Execution Failure : FM radio module power on", "FAILURE", MB_OK );
  160.         }
  161.         break;
  162.         case METAAPP_TIMEOUT:
  163.         {
  164.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on timeout";
  165.             Application->MessageBox("Execution Timeout : FM radio module power on", "TIMEOUT", MB_OK );
  166.         }
  167.         break;
  168.         case METAAPP_STOP:
  169.         {
  170.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on stop";
  171.         }
  172.         break;
  173.         default:
  174.         {
  175.         }
  176.         break;
  177.     }
  178. }
  179. //===========================================================================
  180. void TfrmFM::ShowHintLabel(TControl *sender, char* hint)
  181. {
  182.    TPoint pt0 = this->ClientOrigin;
  183.    TPoint pt1 = sender->ClientOrigin;
  184.    lblHint->Left = (pt1.x-pt0.x);
  185.    lblHint->Top  = (pt1.y-pt0.y)+sender->Height+3;
  186.    lblHint->Caption = hint;
  187.    lblHint->Visible = true;
  188.    HintTimer->Enabled = true;
  189. }
  190. //--------------------------------------------------------------------------
  191. void __fastcall TfrmFM::edtFreqCheck(TObject *Sender)
  192. {
  193.     AnsiString  text;
  194.     short freq;
  195.     TEdit *edit = (TEdit*)Sender;
  196.     char  hint[] = " frequecy shall be 87.5~108 MHz ";
  197.     text = edit->Text;
  198.     if (!IsValidFMFreq(text, freq))
  199.     {
  200.         ShowHintLabel(edit, hint);
  201.         edit->SetFocus();
  202.         return;
  203.     }
  204. }
  205. //---------------------------------------------------------------------------
  206. void __fastcall TfrmFM::m_btnSetFreqClick(TObject *Sender)
  207. {
  208.     FM_FREQ_REQ_T req;
  209.     AnsiString_To_FM_Freq(m_edtFreq->Text, req.m_i2CurFreq);
  210.     
  211.     m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_SetFreq;
  212.     m_cFM_RADIO_Obj.REQ_Set_Freq_Start(req);
  213.     m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Set frequency progressing";
  214.     CurrentPageLock();
  215. }
  216. //---------------------------------------------------------------------------
  217. void TfrmFM::CNF_FM_SetFreq(void)
  218. {
  219.     E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();
  220.     switch (state)
  221.     {
  222.         case METAAPP_SUCCESS:
  223.         {
  224.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Set frequency successfully";
  225.         }
  226.         break;
  227.         case METAAPP_FAIL:
  228.         {
  229.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Set frequency fail";
  230.             Application->MessageBox("Execution Failure : Set frequency", "FAILURE", MB_OK );
  231.         }
  232.         break;
  233.         case METAAPP_TIMEOUT:
  234.         {
  235.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Set frequency timeout";
  236.             Application->MessageBox("Execution Timeout : Set frequency", "TIMEOUT", MB_OK );
  237.         }
  238.         break;
  239.         case METAAPP_STOP:
  240.         {
  241.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Set frequency stop";
  242.         }
  243.         break;
  244.         default:
  245.         {
  246.         }
  247.         break;
  248.     }
  249.     CurrentPageReset();
  250. }
  251. //---------------------------------------------------------------------------
  252. void __fastcall TfrmFM::edtRssiThresholdCheck(TObject *Sender)
  253. {
  254.     AnsiString  text;
  255.     unsigned int uidata;
  256.     TEdit *edit = (TEdit*)Sender;
  257.     char  hint[] = " value shall be 1~6";
  258.     text = edit->Text;
  259.     if (!IsValidFMRssiThreshold(text, uidata))
  260.     {
  261.         ShowHintLabel(edit, hint);
  262.         edit->SetFocus();
  263.         return;
  264.     }
  265. }
  266. //---------------------------------------------------------------------------
  267. void __fastcall TfrmFM::edtIFCounterDeltaCheck(TObject *Sender)
  268. {
  269.     AnsiString  text;
  270.     unsigned int uidata;
  271.     TEdit *edit = (TEdit*)Sender;
  272.     char  hint[] = " value shall be 10~30 and multiple of 5";
  273.     text = edit->Text;
  274.     if (!IsValidFMIfCounterDelta(text, uidata))
  275.     {
  276.         ShowHintLabel(edit, hint);
  277.         edit->SetFocus();
  278.         return;
  279.     }
  280. }
  281. //==========================================================================
  282. void __fastcall TfrmFM::m_btnSearchNextStationClick(TObject *Sender)
  283. {
  284.     S_FM_SEARCH_STATION_T search_station;
  285.     short freq;
  286.     search_station.s_if_cnt_delta.m_u4IfCntDelta = m_cbIfCounterDelta->Text.ToInt();
  287.     search_station.s_rssi_thrsh.m_u4RssiThreshold = m_cbRssiThreshold->ItemIndex + 1;
  288.     AnsiString_To_FM_Freq(m_edtStation->Text, freq);
  289.     search_station.s_freq_range.m_i2StartFreq = freq + 1;
  290.     search_station.s_freq_range.m_i2StopFreq  = FM_MAX_FREQ * FM_FREQ_SCALE;
  291.     m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_SearchNextStation;
  292.     m_cFM_RADIO_Obj.REQ_SearchFreq_Start(search_station);
  293.     m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search next station progressing";
  294.     CurrentPageLock();
  295. }
  296. //---------------------------------------------------------------------------
  297. void TfrmFM::CNF_FM_SearchNextStation(void)
  298. {
  299.     E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();
  300.     switch (state)
  301.     {
  302.         case METAAPP_SUCCESS:
  303.         {
  304.             FM_VAILD_FREQ_CNF_T* p_valid_freq;
  305.             p_valid_freq = m_cFM_RADIO_Obj.Get_ValidFreq();
  306.             m_sValidFreq = *p_valid_freq;
  307.             ReDrawFields(DRAW_FM_STATION);
  308.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search next station successfully";
  309.         }
  310.         break;
  311.         case METAAPP_FAIL:
  312.         {
  313.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search next station fail";
  314.             Application->MessageBox("Execution Failure : Search next station", "FAILURE", MB_OK );
  315.         }
  316.         break;
  317.         case METAAPP_TIMEOUT:
  318.         {
  319.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search next station timeout";
  320.             Application->MessageBox("Execution Timeout : Search next station", "TIMEOUT", MB_OK );
  321.         }
  322.         break;
  323.         case METAAPP_STOP:
  324.         {
  325.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search next station stop";
  326.         }
  327.         break;
  328.         default:
  329.         {
  330.         }
  331.         break;
  332.     }
  333.     CurrentPageReset();
  334. }
  335. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  336. void __fastcall TfrmFM::m_btnSearchPreStationClick(TObject *Sender)
  337. {
  338.     S_FM_SEARCH_STATION_T search_station;
  339.     short freq;
  340.     search_station.s_if_cnt_delta.m_u4IfCntDelta = m_cbIfCounterDelta->Text.ToInt();
  341.     search_station.s_rssi_thrsh.m_u4RssiThreshold = m_cbRssiThreshold->ItemIndex + 1;
  342.     AnsiString_To_FM_Freq(m_edtStation->Text, freq);
  343.     search_station.s_freq_range.m_i2StartFreq = freq - 1;
  344.     search_station.s_freq_range.m_i2StopFreq  = FM_MIN_FREQ * FM_FREQ_SCALE;
  345.     m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_SearchNextStation;
  346.     m_cFM_RADIO_Obj.REQ_SearchFreq_Start(search_station);
  347.     m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search previous station progressing";
  348.     CurrentPageLock();
  349. }
  350. //---------------------------------------------------------------------------
  351. void TfrmFM::CNF_FM_SearchPreStation(void)
  352. {
  353.     E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();
  354.     switch (state)
  355.     {
  356.         case METAAPP_SUCCESS:
  357.         {
  358.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search previous station successfully";
  359.         }
  360.         break;
  361.         case METAAPP_FAIL:
  362.         {
  363.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search previous station fail";
  364.             Application->MessageBox("Execution Failure : Search previous station", "FAILURE", MB_OK );
  365.         }
  366.         break;
  367.         case METAAPP_TIMEOUT:
  368.         {
  369.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search previous station timeout";
  370.             Application->MessageBox("Execution Timeout : Search previous station", "TIMEOUT", MB_OK );
  371.         }
  372.         break;
  373.         case METAAPP_STOP:
  374.         {
  375.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Search previous station stop";
  376.         }
  377.         break;
  378.         default:
  379.         {
  380.         }
  381.         break;
  382.     }
  383.     CurrentPageReset();
  384. }
  385. //===========================================================================
  386. void __fastcall TfrmFM::m_btnSetAudioClick(TObject *Sender)
  387. {
  388.     S_FM_AUDIO_T audio;
  389.     audio.s_mono_stereo_blend.m_u2MonoOrStereo = m_cbMode->ItemIndex;  // 0: mono, 1: stereo
  390.     audio.s_mono_stereo_blend.m_u2SblendOnOrOff = m_cbStereoBlend->Checked && m_cbStereoBlend->Enabled;
  391.     audio.s_soft_mute_onoff.m_bOnOff = m_cbSoftMute->Checked;
  392.     //audio.s_soft_mute_level.m_ucStage = m_cbSoftMuteLevel->ItemIndex + 1;
  393.     audio.s_stereo_blend_level.m_ucStage = m_cbStereoBlendLevel->ItemIndex + 1;
  394.     m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_SetAudio;
  395.     m_cFM_RADIO_Obj.REQ_SetAudio_Start(audio);
  396.     m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Set audio parameter progressing";
  397.     CurrentPageLock();
  398. }
  399. //---------------------------------------------------------------------------
  400. void TfrmFM::CNF_FM_SetAudio(void)
  401. {
  402.     E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();
  403.     switch (state)
  404.     {
  405.         case METAAPP_SUCCESS:
  406.         {
  407.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Set audio parameter successfully";
  408.         }
  409.         break;
  410.         case METAAPP_FAIL:
  411.         {
  412.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Set audio parameter fail";
  413.             Application->MessageBox("Execution Failure : Set audio parameter", "FAILURE", MB_OK );
  414.         }
  415.         break;
  416.         case METAAPP_TIMEOUT:
  417.         {
  418.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Set audio parameter timeout";
  419.             Application->MessageBox("Execution Timeout : Set audio parameter", "TIMEOUT", MB_OK );
  420.         }
  421.         break;
  422.         case METAAPP_STOP:
  423.         {
  424.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Set audio parameter stop";
  425.         }
  426.         break;
  427.         default:
  428.         {
  429.         }
  430.         break;
  431.     }
  432.     CurrentPageReset();
  433. }
  434. //===========================================================================
  435. void __fastcall TfrmFM::m_btnReadClick(TObject *Sender)
  436. {
  437.     m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_ReadData;
  438.     m_cFM_RADIO_Obj.REQ_ReadData_Start(m_edtAddr->Text.ToInt());
  439.     m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Read data progressing";
  440.     CurrentPageLock();
  441. }
  442. //---------------------------------------------------------------------------
  443. void TfrmFM::CNF_FM_ReadData(void)
  444. {
  445.     E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();
  446.     switch (state)
  447.     {
  448.         case METAAPP_SUCCESS:
  449.         {
  450.             m_usData = m_cFM_RADIO_Obj.Get_Data();
  451.             ReDrawFields(DRAW_FM_REGISTER);
  452.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Read data successfully";
  453.         }
  454.         break;
  455.         case METAAPP_FAIL:
  456.         {
  457.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Read data fail";
  458.             Application->MessageBox("Execution Failure : Read data", "FAILURE", MB_OK );
  459.         }
  460.         break;
  461.         case METAAPP_TIMEOUT:
  462.         {
  463.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Read data timeout";
  464.             Application->MessageBox("Execution Timeout : Read data", "TIMEOUT", MB_OK );
  465.         }
  466.         break;
  467.         case METAAPP_STOP:
  468.         {
  469.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Read data stop";
  470.         }
  471.         break;
  472.         default:
  473.         {
  474.         }
  475.         break;
  476.     }
  477.     CurrentPageReset();
  478. }
  479. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  480. void __fastcall TfrmFM::m_btnWriteClick(TObject *Sender)
  481. {
  482.     unsigned short data;
  483.     unsigned short word1;
  484.     unsigned short word0;
  485.     word1 = m_edtWord1->Text.ToInt() & 0x00FF;
  486.     word0 = m_edtWord0->Text.ToInt() & 0x00FF;
  487.     data  = (word1 << 8) | word0;
  488.     m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_WriteData;
  489.     m_cFM_RADIO_Obj.REQ_WriteData_Start(m_edtAddr->Text.ToInt(), data);
  490.     m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Write data progressing";
  491.     CurrentPageLock();
  492. }
  493. //---------------------------------------------------------------------------
  494. void TfrmFM::CNF_FM_WriteData(void)
  495. {
  496.     E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();
  497.     switch (state)
  498.     {
  499.         case METAAPP_SUCCESS:
  500.         {
  501.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Write data successfully";
  502.         }
  503.         break;
  504.         case METAAPP_FAIL:
  505.         {
  506.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Write data fail";
  507.             Application->MessageBox("Execution Failure : Write data", "FAILURE", MB_OK );
  508.         }
  509.         break;
  510.         case METAAPP_TIMEOUT:
  511.         {
  512.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Write data timeout";
  513.             Application->MessageBox("Execution Timeout : Write data", "TIMEOUT", MB_OK );
  514.         }
  515.         break;
  516.         case METAAPP_STOP:
  517.         {
  518.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Write data stop";
  519.         }
  520.         break;
  521.         default:
  522.         {
  523.         }
  524.         break;
  525.     }
  526.     CurrentPageReset();
  527. }
  528. //---------------------------------------------------------------------------
  529. void __fastcall TfrmFM::HintTimerTimer(TObject *Sender)
  530. {
  531.     HintTimer->Enabled = false;
  532.     lblHint->Visible = false;
  533. }
  534. //---------------------------------------------------------------------------
  535. void __fastcall TfrmFM::m_btnGetClick(TObject *Sender)
  536. {
  537.     m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_GetStatus;
  538.     m_cFM_RADIO_Obj.REQ_Get_FM_Status_Start();
  539.     m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Get FM status progressing";
  540.     CurrentPageLock();
  541. }
  542. //---------------------------------------------------------------------------
  543. void TfrmFM::CNF_FM_GetStatus(void)
  544. {
  545.     E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();
  546.     switch (state)
  547.     {
  548.         case METAAPP_SUCCESS:
  549.         {
  550.             S_FM_STATUS_T* p_fm_status = m_cFM_RADIO_Obj.Get_FMStatus();
  551.             m_sStatus = *p_fm_status;
  552.             ReDrawFields(DRAW_FM_STATUS);
  553.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Get FM status successfully";
  554.         }
  555.         break;
  556.         case METAAPP_FAIL:
  557.         {
  558.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Get FM status fail";
  559.             Application->MessageBox("Execution Failure : Get FM status", "FAILURE", MB_OK );
  560.         }
  561.         break;
  562.         case METAAPP_TIMEOUT:
  563.         {
  564.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Get FM status timeout";
  565.             Application->MessageBox("Execution Timeout : Get FM status", "TIMEOUT", MB_OK );
  566.         }
  567.         break;
  568.         case METAAPP_STOP:
  569.         {
  570.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Get FM status stop";
  571.         }
  572.         break;
  573.         default:
  574.         {
  575.         }
  576.         break;
  577.     }
  578.     CurrentPageReset();
  579. }
  580. void __fastcall TfrmFM::m_btnResetClick(TObject *Sender)
  581. {
  582.     m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_PowerOff;
  583.     m_cFM_RADIO_Obj.REQ_FM_Power_Off_Start();
  584.     m_sbFM->Panels->Items[0]->Text = (AnsiString)"  Reset progressing";
  585.     CurrentPageLock();
  586. }
  587. //---------------------------------------------------------------------------
  588. void TfrmFM::CNF_FM_PowerOff(void)
  589. {
  590.     E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();
  591.     switch (state)
  592.     {
  593.         case METAAPP_SUCCESS:
  594.         {
  595.             m_cFM_RADIO_Obj.ConfirmCallback = ::CNF_FM_PowerReset;
  596.             m_cFM_RADIO_Obj.REQ_FM_Power_On_Start();
  597.         }
  598.         break;
  599.         case METAAPP_FAIL:
  600.         {
  601.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM module radio power on fail";
  602.             Application->MessageBox("Execution Failure : FM radio module power on", "FAILURE", MB_OK );
  603.         }
  604.         break;
  605.         case METAAPP_TIMEOUT:
  606.         {
  607.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on timeout";
  608.             Application->MessageBox("Execution Timeout : FM radio module power on", "TIMEOUT", MB_OK );
  609.         }
  610.         break;
  611.         case METAAPP_STOP:
  612.         {
  613.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on stop";
  614.         }
  615.         break;
  616.         default:
  617.         {
  618.         }
  619.         break;
  620.     }
  621. }
  622. //-------------------------------------------------------------------------
  623. void TfrmFM::CNF_FM_PowerReset(void)
  624. {
  625.     E_METAAPP_RESULT_T state = m_cFM_RADIO_Obj.Get_ConfirmState();
  626.     switch (state)
  627.     {
  628.         case METAAPP_SUCCESS:
  629.         {
  630.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power reset successfully";
  631.         }
  632.         break;
  633.         case METAAPP_FAIL:
  634.         {
  635.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on fail";
  636.             Application->MessageBox("Execution Failure : FM radio module power on", "FAILURE", MB_OK );
  637.         }
  638.         break;
  639.         case METAAPP_TIMEOUT:
  640.         {
  641.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on timeout";
  642.             Application->MessageBox("Execution Timeout : FM radio module power on", "TIMEOUT", MB_OK );
  643.         }
  644.         break;
  645.         case METAAPP_STOP:
  646.         {
  647.             m_sbFM->Panels->Items[0]->Text = (AnsiString)"  FM radio module power on stop";
  648.         }
  649.         break;
  650.         default:
  651.         {
  652.         }
  653.         break;
  654.     }
  655.     CurrentPageReset();
  656. }
  657. //---------------------------------------------------------------------------
  658. void __fastcall TfrmFM::m_cbModeChange(TObject *Sender)
  659. {
  660.     m_cbStereoBlend->Enabled = (FM_MODE_IDX_STEREO == (E_FM_MODE_IDX) m_cbMode->ItemIndex) ? true : false;
  661. }
  662. //---------------------------------------------------------------------------