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

MTK

开发平台:

C++ Builder

  1. /*****************************************************************************
  2. *  Copyright Statement:
  3. *  --------------------
  4. *  This software is protected by Copyright and the information contained
  5. *  herein is confidential. The software may not be copied and the information
  6. *  contained herein may not be used or disclosed except with the written
  7. *  permission of MediaTek Inc. (C) 2005
  8. *
  9. *  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
  10. *  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
  11. *  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
  12. *  AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
  13. *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
  14. *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
  15. *  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
  16. *  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
  17. *  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
  18. *  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
  19. *  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
  20. *  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
  21. *
  22. *  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
  23. *  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
  24. *  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
  25. *  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
  26. *  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
  27. *
  28. *  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
  29. *  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
  30. *  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
  31. *  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
  32. *  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
  33. *
  34. *****************************************************************************/
  35. /*****************************************************************************
  36.  *
  37.  * Filename:
  38.  * ---------
  39.  *   fm_radio.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   FM radio source
  48.  *
  49.  * Author:
  50.  * -------
  51.  *  Andy Ueng (mtk00490)
  52.  *
  53.  *============================================================================
  54.  *             HISTORY
  55.  * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  56.  *------------------------------------------------------------------------------
  57.  * $Revision$
  58.  * $Modtime$
  59.  * $Log$
  60.  *
  61.  *------------------------------------------------------------------------------
  62.  * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
  63.  *============================================================================
  64.  ****************************************************************************/
  65. #include <IniFiles.hpp>
  66. #pragma hdrstop
  67. #ifndef  _FM_RADIO_H_
  68. #include "fm_radio.h"
  69. #endif
  70. #ifndef  _MAN_ACTIVE_H_
  71. #include "man_active.h"
  72. #endif
  73. #ifndef  _MAN_FDM_H_
  74. #include "man_fdm.h"
  75. #endif
  76. #ifndef  _MAN_HANDLE_H_
  77. #include "man_handle.h"
  78. #endif
  79. //===========================================================================
  80. static CFMRADIO* g_fm_radio_ptr;
  81. static bool g_bIsRunning = false;
  82. //===========================================================================
  83. //------------------------------------------------------------------------------
  84. //static void REQ_TimeOut(void)
  85. //{
  86. //    g_fm_radio_ptr->REQ_TimeOut();
  87. //}
  88. //------------------------------------------------------------------------------
  89. //static void REQ_Finish(void)
  90. //{
  91. //    g_fm_radio_ptr->REQ_Finish();
  92. //}
  93. //---------------------------------------------------------------------------
  94. static void REQ_FM_Power_On(void)
  95. {
  96.     g_fm_radio_ptr->REQ_FM_Power_On();
  97. }
  98. //---------------------------------------------------------------------------
  99. static void REQ_FM_Power_Off(void)
  100. {
  101.     g_fm_radio_ptr->REQ_FM_Power_Off();
  102. }
  103. //---------------------------------------------------------------------------
  104. static void REQ_Set_Freq(void)
  105. {
  106.     g_fm_radio_ptr->REQ_Set_Freq();
  107. }
  108. //---------------------------------------------------------------------------
  109. static void REQ_Get_FM_Status(void)
  110. {
  111.     g_fm_radio_ptr->REQ_Get_FM_Status();
  112. }
  113. //---------------------------------------------------------------------------
  114. static void REQ_SearchFreq(void)
  115. {
  116.     g_fm_radio_ptr->REQ_SearchFreq();
  117. }
  118. //---------------------------------------------------------------------------
  119. static void REQ_SetAudio(void)
  120. {
  121.     g_fm_radio_ptr->REQ_SetAudio();
  122. }
  123. //----------------------------------------------------------------------------
  124. static void __stdcall CNF_AudioSetVolume(const AUDIO_RESULT status, const short token, void *usrData)
  125. {
  126.     g_fm_radio_ptr->CNF_AudioSetVolume(status, token, usrData);
  127. }
  128. //---------------------------------------------------------------------------
  129. static void REQ_ReadData(void)
  130. {
  131.     g_fm_radio_ptr->REQ_ReadData();
  132. }
  133. //---------------------------------------------------------------------------
  134. static void REQ_WriteData(void)
  135. {
  136.     g_fm_radio_ptr->REQ_WriteData();
  137. }
  138. //===========================================================================
  139. CFMRADIO::CFMRADIO(void)
  140. {
  141.     g_bIsRunning = false;
  142.     ConfirmCallback = NULL;
  143. }
  144. //---------------------------------------------------------------------------
  145. CFMRADIO::~CFMRADIO()
  146. {
  147.     g_bIsRunning = false;
  148.     ConfirmCallback = NULL;
  149. }
  150. //---------------------------------------------------------------------------
  151. //void CFMRADIO::REQ_Finish(void)
  152. //{
  153. //    if (!g_bIsRunning)
  154. //    {
  155. //        return;
  156. //    }
  157. //
  158. //    Confirm(METAAPP_SUCCESS);
  159. //}
  160. //---------------------------------------------------------------------------
  161. //void CFMRADIO::REQ_TimeOut(void)
  162. //{
  163. //    if (!g_bIsRunning)
  164. //    {
  165. //        return;
  166. //    }
  167. //
  168. //    META_CancelAllBlockingCall_r(m_META_HANDLE_Obj.Get_MainHandle());
  169. //    Confirm(METAAPP_TIMEOUT);
  170. //}
  171. //---------------------------------------------------------------------------
  172. void CFMRADIO::Confirm(E_METAAPP_RESULT_T confirm_state)
  173. {
  174.     if (!g_bIsRunning)
  175.     {
  176.         return;
  177.     }
  178.     if (confirm_state != METAAPP_SECTION_OK)
  179.     {
  180.         g_bIsRunning = false;
  181.     }
  182.     if (confirm_state != METAAPP_SUCCESS)
  183.     {
  184.         META_Cancel_r(m_META_HANDLE_Obj.Get_MainHandle(), m_sSETVOLUME);
  185.         META_CancelAllBlockingCall_r(m_META_HANDLE_Obj.Get_MainHandle());
  186.     }
  187.     if (NULL == ConfirmCallback)
  188.     {
  189.         return;
  190.     }
  191.     m_eConfirmState = confirm_state;
  192.     ActiveMan->SetActiveFunction(ConfirmCallback);
  193. }
  194. //===========================================================================
  195. void CFMRADIO::REQ_FM_Power_On_Start(void)
  196. {
  197.     g_fm_radio_ptr = this;
  198.     g_bIsRunning = true;
  199.     ActiveMan->SetActiveFunction(::REQ_FM_Power_On);
  200. }
  201. //---------------------------------------------------------------------------
  202. void CFMRADIO::REQ_FM_Power_On(void)
  203. {
  204.     if (!g_bIsRunning)
  205.     {
  206.         return;
  207.     }
  208.     META_RESULT MetaResult = META_FM_PowerOn_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000);
  209.     if (MetaResult != META_SUCCESS)
  210.     {
  211.         if (META_TIMEOUT == MetaResult)
  212.         {
  213.             Confirm(METAAPP_TIMEOUT);
  214.         }
  215.         else
  216.         {
  217.             Confirm(METAAPP_FAIL);
  218.         }
  219.         return;
  220.     }
  221.     Confirm(METAAPP_SUCCESS);
  222. }
  223. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  224. void CFMRADIO::REQ_FM_Power_Off_Start(void)
  225. {
  226.     g_fm_radio_ptr = this;
  227.     g_bIsRunning = true;
  228.     ActiveMan->SetActiveFunction(::REQ_FM_Power_Off);
  229. }
  230. //---------------------------------------------------------------------------
  231. void CFMRADIO::REQ_FM_Power_Off(void)
  232. {
  233.     if (!g_bIsRunning)
  234.     {
  235.         return;
  236.     }
  237.     META_RESULT MetaResult = META_FM_PowerOff_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000);
  238.     if (MetaResult != META_SUCCESS)
  239.     {
  240.         if (META_TIMEOUT == MetaResult)
  241.         {
  242.             Confirm(METAAPP_TIMEOUT);
  243.         }
  244.         else
  245.         {
  246.             Confirm(METAAPP_FAIL);
  247.         }
  248.         return;
  249.     }
  250.     Confirm(METAAPP_SUCCESS);
  251. }
  252. //===========================================================================
  253. void CFMRADIO::REQ_Set_Freq_Start(FM_FREQ_REQ_T freq)
  254. {
  255.     g_fm_radio_ptr = this;
  256.     g_bIsRunning = true;
  257.     m_sFMFreq = freq;
  258.     ActiveMan->SetActiveFunction(::REQ_Set_Freq);
  259. }
  260. //---------------------------------------------------------------------------
  261. void CFMRADIO::REQ_Set_Freq(void)
  262. {
  263.     if (!g_bIsRunning)
  264.     {
  265.         return;
  266.     }
  267.     META_RESULT MetaResult = META_FM_SetFreq_r(m_META_HANDLE_Obj.Get_MainHandle(),5000, &m_sFMFreq);
  268.     if (MetaResult != META_SUCCESS)
  269.     {
  270.         if (META_TIMEOUT == MetaResult)
  271.         {
  272.             Confirm(METAAPP_TIMEOUT);
  273.         }
  274.         else
  275.         {
  276.             Confirm(METAAPP_FAIL);
  277.         }
  278.         return;
  279.     }
  280.     Confirm(METAAPP_SUCCESS);
  281. }
  282. //===========================================================================
  283. void CFMRADIO::REQ_SearchFreq_Start(S_FM_SEARCH_STATION_T search_station)
  284. {
  285.     g_fm_radio_ptr = this;
  286.     g_bIsRunning = true;
  287.     m_sSearchStation = search_station;
  288.     ActiveMan->SetActiveFunction(::REQ_SearchFreq);
  289. }
  290. //---------------------------------------------------------------------------
  291. void CFMRADIO::REQ_SearchFreq(void)
  292. {
  293.     if (!g_bIsRunning)
  294.     {
  295.         return;
  296.     }
  297.     META_RESULT MetaResult;
  298.     // set RSSI threshold
  299.     MetaResult = META_FM_SetRssiThreold_r(m_META_HANDLE_Obj.Get_MainHandle(),5000, &m_sSearchStation.s_rssi_thrsh);
  300.     if (MetaResult != META_SUCCESS)
  301.     {
  302.         if (META_TIMEOUT == MetaResult)
  303.         {
  304.             Confirm(METAAPP_TIMEOUT);
  305.         }
  306.         else
  307.         {
  308.             Confirm(METAAPP_FAIL);
  309.         }
  310.         return;
  311.     }
  312.     // set IF counter delta
  313.     MetaResult = META_FM_SetIfCntDelta_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sSearchStation.s_if_cnt_delta);
  314.     if (MetaResult != META_SUCCESS)
  315.     {
  316.         if (META_TIMEOUT == MetaResult)
  317.         {
  318.             Confirm(METAAPP_TIMEOUT);
  319.         }
  320.         else
  321.         {
  322.             Confirm(METAAPP_FAIL);
  323.         }
  324.         return;
  325.     }
  326.     // search station
  327.     if (m_sSearchStation.s_freq_range.m_i2StartFreq < m_sSearchStation.s_freq_range.m_i2StopFreq)
  328.     {
  329.         MetaResult = META_FM_SearchNextFreq_r(m_META_HANDLE_Obj.Get_MainHandle(),5000, &m_sSearchStation.s_freq_range, &m_sValidFreq);
  330.     }
  331.     else
  332.     {
  333.         MetaResult = META_FM_SearchPrevFreq_r(m_META_HANDLE_Obj.Get_MainHandle(),5000, &m_sSearchStation.s_freq_range, &m_sValidFreq);
  334.     }
  335.     if (MetaResult != META_SUCCESS) 
  336.     {
  337.         if (META_TIMEOUT == MetaResult)
  338.         {
  339.             Confirm(METAAPP_TIMEOUT);
  340.         }
  341.         else
  342.         {
  343.             Confirm(METAAPP_FAIL);
  344.         }
  345.         return;
  346.     }
  347.     if ((!m_sValidFreq.m_ucExit) || (m_sValidFreq.m_i2ValidFreq <= 0))
  348.     {
  349.         Confirm(METAAPP_FAIL);
  350.         return;
  351.     }
  352.     FM_FREQ_REQ_T freq_req;
  353.     freq_req.m_i2CurFreq = m_sValidFreq.m_i2ValidFreq;
  354.     MetaResult = META_FM_SetFreq_r(m_META_HANDLE_Obj.Get_MainHandle(),5000, &freq_req);
  355.     if (MetaResult != META_SUCCESS)
  356.     {
  357.         if (META_TIMEOUT == MetaResult)
  358.         {
  359.             Confirm(METAAPP_TIMEOUT);
  360.         }
  361.         else
  362.         {
  363.             Confirm(METAAPP_FAIL);
  364.         }
  365.         return;
  366.     }
  367.     Confirm(METAAPP_SUCCESS);
  368. }
  369. //===========================================================================
  370. void CFMRADIO::REQ_Get_FM_Status_Start(void)
  371. {
  372.     g_fm_radio_ptr = this;
  373.     g_bIsRunning = true;
  374.     ActiveMan->SetActiveFunction(::REQ_Get_FM_Status);
  375. }
  376. //---------------------------------------------------------------------------
  377. void CFMRADIO::REQ_Get_FM_Status(void)
  378. {
  379.     if (!g_bIsRunning)
  380.     {
  381.         return;
  382.     }
  383.     // RSSI
  384.     META_RESULT MetaResult = META_FM_GetRSSI_r(m_META_HANDLE_Obj.Get_MainHandle(),5000, &m_sFMFreq, &(m_sStatus.s_rssi));
  385.     if (MetaResult != META_SUCCESS)
  386.     {
  387.         if (META_TIMEOUT == MetaResult)
  388.         {
  389.             Confirm(METAAPP_TIMEOUT);
  390.         }
  391.         else
  392.         {
  393.             Confirm(METAAPP_FAIL);
  394.         }
  395.         return;
  396.     }
  397.     // IF counter
  398.     MetaResult = META_FM_GetIfCnt_r(m_META_HANDLE_Obj.Get_MainHandle(),5000, &m_sFMFreq, &(m_sStatus.s_if_cnt));
  399.     if (MetaResult != META_SUCCESS)
  400.     {
  401.         if (META_TIMEOUT == MetaResult)
  402.         {
  403.             Confirm(METAAPP_TIMEOUT);
  404.         }
  405.         else
  406.         {
  407.             Confirm(METAAPP_FAIL);
  408.         }
  409.         return;
  410.     }
  411.     // H/L state
  412.     MetaResult = META_FM_GetHighOrLowSide_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sFMFreq, &(m_sStatus.s_hl_side));
  413.     if (MetaResult != META_SUCCESS)
  414.     {
  415.         if (META_TIMEOUT == MetaResult)
  416.         {
  417.             Confirm(METAAPP_TIMEOUT);
  418.         }
  419.         else
  420.         {
  421.             Confirm(METAAPP_FAIL);
  422.         }
  423.         return;
  424.     }
  425.     // stereo/mono
  426.     MetaResult = META_FM_GetStereoOrMono_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &(m_sStatus.s_stero_mono));
  427.     if (MetaResult != META_SUCCESS)
  428.     {
  429.         if (META_TIMEOUT == MetaResult)
  430.         {
  431.             Confirm(METAAPP_TIMEOUT);
  432.         }
  433.         else
  434.         {
  435.             Confirm(METAAPP_FAIL);
  436.         }
  437.         return;
  438.     }
  439.     Confirm(METAAPP_SUCCESS);
  440. }
  441. //===========================================================================
  442. void CFMRADIO::REQ_SetAudio_Start(S_FM_AUDIO_T audio)
  443. {
  444.     g_fm_radio_ptr = this;
  445.     g_bIsRunning = true;
  446.     m_sAudio = audio;
  447.     ActiveMan->SetActiveFunction(::REQ_SetAudio);
  448. }
  449. //---------------------------------------------------------------------------
  450. void CFMRADIO::REQ_SetAudio(void)
  451. {
  452.     if (!g_bIsRunning)
  453.     {
  454.         return;
  455.     }
  456.     // set volume
  457.    // META_RESULT MetaResult = META_Audio_Set_Volume_r(m_META_HANDLE_Obj.Get_MainHandle(), &m_sAudio.s_vol, ::CNF_AudioSetVolume, &m_sSETVOLUME, NULL);
  458.    // if (MetaResult != META_SUCCESS)
  459.    // {
  460.    //     if (META_TIMEOUT == MetaResult)
  461.    //     {
  462.    //         Confirm(METAAPP_TIMEOUT);
  463.    //     }
  464.    //     else
  465.    //     {
  466.    //         Confirm(METAAPP_FAIL);
  467.    //     }
  468.    //     return;
  469.    // }
  470.    // DWORD wait_result;
  471.    // m_hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
  472.    // ResetEvent(m_hEvent);
  473.    // wait_result = WaitForSingleObject(m_hEvent, 5000);
  474.    // if (WAIT_TIMEOUT == wait_result)
  475.    // {
  476.    //     Confirm(METAAPP_TIMEOUT);
  477.    //     return;
  478.    // }
  479.     // set mono or stereo blend
  480.     m_sAudio.s_mono_stereo_blend.m_u4ItemValue = FM_ENABLE;
  481.     META_RESULT MetaResult = META_FM_SetMonoOrStereo_Blend_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sAudio.s_mono_stereo_blend);
  482.     if (MetaResult != META_SUCCESS)
  483.     {
  484.         if (META_TIMEOUT == MetaResult)
  485.         {
  486.             Confirm(METAAPP_TIMEOUT);
  487.         }
  488.         else
  489.         {
  490.             Confirm(METAAPP_FAIL);
  491.         }
  492.         return;
  493.     }
  494.     // set soft mute
  495.     MetaResult = META_FM_SetSoftMute_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sAudio.s_soft_mute_onoff);
  496.     if (MetaResult != META_SUCCESS)
  497.     {
  498.         if (META_TIMEOUT == MetaResult)
  499.         {
  500.             Confirm(METAAPP_TIMEOUT);
  501.         }
  502.         else
  503.         {
  504.             Confirm(METAAPP_FAIL);
  505.         }
  506.         return;
  507.     }
  508.     // set soft mute stage
  509.     //MetaResult = META_FM_SelectSoftMuteStage_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sAudio.s_soft_mute_level);
  510.     //if (MetaResult != META_SUCCESS)
  511.     //{
  512.     //    if (META_TIMEOUT == MetaResult)
  513.     //    {
  514.     //        Confirm(METAAPP_TIMEOUT);
  515.     //    }
  516.     //    else
  517.     //    {
  518.     //        Confirm(METAAPP_FAIL);
  519.     //    }
  520.     //    return;
  521.     //}
  522.     // set blend stage
  523.     MetaResult = META_FM_SelectSBlendStage_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sAudio.s_stereo_blend_level);
  524.     if (MetaResult != META_SUCCESS)
  525.     {
  526.         if (META_TIMEOUT == MetaResult)
  527.         {
  528.             Confirm(METAAPP_TIMEOUT);
  529.         }
  530.         else
  531.         {
  532.             Confirm(METAAPP_FAIL);
  533.         }
  534.         return;
  535.     }
  536.     Confirm(METAAPP_SUCCESS);
  537. }
  538. //--------------------------------------------------------------------------
  539. void __stdcall CFMRADIO::CNF_AudioSetVolume(const AUDIO_RESULT status, const short token, void *usrData)
  540. {
  541.     if (status != AUD_RES_OK)
  542.     {
  543.         Confirm(METAAPP_FAIL);
  544.         return;
  545.     }
  546.     SetEvent(m_hEvent);
  547. }
  548. //===========================================================================
  549. void CFMRADIO::REQ_ReadData_Start(unsigned char addr)
  550. {
  551.     g_fm_radio_ptr = this;
  552.     g_bIsRunning = true;
  553.     m_ucAddr = addr;
  554.     ActiveMan->SetActiveFunction(::REQ_ReadData);
  555. }
  556. //---------------------------------------------------------------------------
  557. void CFMRADIO::REQ_ReadData(void)
  558. {
  559.     if (!g_bIsRunning)
  560.     {
  561.         return;
  562.     }
  563.     FM_READ_BYTE_ADDR_REQ_T req;
  564.     FM_READ_BYTE_CNF_T cnf;
  565.     req.m_ucAddr = m_ucAddr;
  566.     META_RESULT MetaResult = META_FM_ReadByte_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &req, &cnf);
  567.     if (MetaResult != META_SUCCESS)
  568.     {
  569.         if (META_TIMEOUT == MetaResult)
  570.         {
  571.             Confirm(METAAPP_TIMEOUT);
  572.         }
  573.         else
  574.         {
  575.             Confirm(METAAPP_FAIL);
  576.         }
  577.         return;
  578.     }
  579.     m_usData = cnf.m_u2ReadByte;
  580.     Confirm(METAAPP_SUCCESS);
  581. }
  582. //===========================================================================
  583. void CFMRADIO::REQ_WriteData_Start(unsigned char addr, unsigned short data)
  584. {
  585.     g_fm_radio_ptr = this;
  586.     g_bIsRunning = true;
  587.     m_ucAddr = addr;
  588.     m_usData = data;
  589.     ActiveMan->SetActiveFunction(::REQ_WriteData);
  590. }
  591. //---------------------------------------------------------------------------
  592. void CFMRADIO::REQ_WriteData(void)
  593. {
  594.     if (!g_bIsRunning)
  595.     {
  596.         return;
  597.     }
  598.     FM_WRITE_BYTE_REQ_T req;
  599.     req.m_ucAddr = m_ucAddr;
  600.     req.m_u2WriteByte = m_usData;
  601.     META_RESULT MetaResult = META_FM_WriteByte_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &req);
  602.     if (MetaResult != META_SUCCESS)
  603.     {
  604.         if (META_TIMEOUT == MetaResult)
  605.         {
  606.             Confirm(METAAPP_TIMEOUT);
  607.         }
  608.         else
  609.         {
  610.             Confirm(METAAPP_FAIL);
  611.         }
  612.         return;
  613.     }
  614.     Confirm(METAAPP_SUCCESS);
  615. }
  616. //===========================================================================
  617. /////////////////////////////         Query         /////////////////////////
  618. //===========================================================================
  619. bool CFMRADIO::Query_FMSupport_Start(void)
  620. {
  621.     META_RESULT MetaResult = META_QueryIfFunctionSupportedByTarget_r(m_META_HANDLE_Obj.Get_MainHandle(), 500, "META_FM_GetChipId_r");
  622.     if (MetaResult != META_SUCCESS)
  623.     {
  624.         m_bFMSupport = false;
  625.     }
  626.     m_bFMSupport = true;
  627.     return m_bFMSupport;
  628. }
  629. //---------------------------------------------------------------------------
  630. bool CFMRADIO::REQ_Query_FMChipID_Start(FM_CHIP_ID_CNF_T& fm_chip_id)
  631. {
  632.     META_RESULT MetaResult = META_FM_GetChipId_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sFMChipId);
  633.     if (MetaResult != META_SUCCESS)
  634.     {
  635.         return false;
  636.     }
  637.     fm_chip_id = m_sFMChipId;
  638.     return true;
  639. }
  640. //===========================================================================
  641. /////////////////////////////   Global information  /////////////////////////
  642. //===========================================================================
  643. E_METAAPP_RESULT_T CFMRADIO::Get_ConfirmState(void)
  644. {
  645.     return m_eConfirmState;
  646. }
  647. //---------------------------------------------------------------------------
  648. bool CFMRADIO::Get_FMSupport(void)
  649. {
  650.     return m_bFMSupport;
  651. }
  652. //---------------------------------------------------------------------------
  653. FM_CHIP_ID_CNF_T* CFMRADIO::Get_FMChipID(void)
  654. {
  655.     return &m_sFMChipId;
  656. }
  657. //---------------------------------------------------------------------------
  658. S_FM_STATUS_T* CFMRADIO::Get_FMStatus(void)
  659. {
  660.     return &m_sStatus;
  661. }
  662. //---------------------------------------------------------------------------
  663. FM_VAILD_FREQ_CNF_T* CFMRADIO::Get_ValidFreq(void)
  664. {
  665.     return &m_sValidFreq;
  666. }
  667. //---------------------------------------------------------------------------
  668. unsigned short CFMRADIO::Get_Data(void)
  669. {
  670.     return m_usData;
  671. }