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

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.  *   tdmb_rf.cpp
  40.  *
  41.  * Project:
  42.  * --------
  43.  *   Maui META APP
  44.  *
  45.  * Description:
  46.  * ------------
  47.  *   TDMB RF 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  _TDMB_RF_H_
  68. #include "tdmb_rf.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 CTDMBRF* g_tdmb_rf_ptr;
  81. static bool g_bIsRunning = false;
  82. //===========================================================================
  83. static void REQ_Power_On(void)
  84. {
  85.     g_tdmb_rf_ptr->REQ_Power_On();
  86. }
  87. //---------------------------------------------------------------------------
  88. static void REQ_Set_Freq(void)
  89. {
  90.     g_tdmb_rf_ptr->REQ_Set_Freq();
  91. }
  92. //---------------------------------------------------------------------------
  93. static void REQ_Get_Signal(void)
  94. {
  95.     g_tdmb_rf_ptr->REQ_Get_Signal();
  96. }
  97. //---------------------------------------------------------------------------
  98. static void REQ_AutoScan(void)
  99. {
  100.     g_tdmb_rf_ptr->REQ_AutoScan();
  101. }
  102. //---------------------------------------------------------------------------
  103. static void REQ_Select_Service_Only(void)
  104. {
  105.     g_tdmb_rf_ptr->REQ_Select_Service_Only();
  106. }
  107. //---------------------------------------------------------------------------
  108. static void REQ_RecordStream(void)
  109. {
  110.     g_tdmb_rf_ptr->REQ_RecordStream();
  111. }
  112. //---------------------------------------------------------------------------
  113. static void __stdcall CNF_RecordStream(const TDMB_SEL_SERV_ERROR_RESULT status)
  114. {
  115.     g_tdmb_rf_ptr->CNF_RecordStream(status);
  116. }
  117. //---------------------------------------------------------------------------
  118. static void REQ_Stop_Service(void)
  119. {
  120.     g_tdmb_rf_ptr->REQ_Stop_Service();
  121. }
  122. //---------------------------------------------------------------------------
  123. static int __stdcall CNF_Stop_Service(unsigned char percent, int sent_bytes, int total_bytes, const short token, void *usr_arg)
  124. {
  125.     g_tdmb_rf_ptr->CNF_Stop_Service(percent, sent_bytes, total_bytes, token, usr_arg);
  126.     return 0;
  127. }
  128. //===========================================================================
  129. CTDMBRF::CTDMBRF(void)
  130. {
  131.     g_bIsRunning = false;
  132.     ConfirmCallback = NULL;
  133. }
  134. //---------------------------------------------------------------------------
  135. CTDMBRF::~CTDMBRF()
  136. {
  137.     g_bIsRunning = false;
  138.     ConfirmCallback = NULL;
  139. }
  140. //---------------------------------------------------------------------------
  141. void CTDMBRF::Confirm(E_METAAPP_RESULT_T confirm_state)
  142. {
  143.     if (!g_bIsRunning)
  144.     {
  145.         return;
  146.     }
  147.     if (confirm_state != METAAPP_SECTION_OK)
  148.     {
  149.         g_bIsRunning = false;
  150.     }
  151.     if (confirm_state != METAAPP_SUCCESS)
  152.     {
  153.         META_CancelAllBlockingCall_r(m_META_HANDLE_Obj.Get_MainHandle());
  154.     }
  155.     if (NULL == ConfirmCallback)
  156.     {
  157.         return;
  158.     }
  159.     m_eConfirmState = confirm_state;
  160.     ActiveMan->SetActiveFunction(ConfirmCallback);
  161. }
  162. //===========================================================================
  163. void CTDMBRF::REQ_Power_On_Start(void)
  164. {
  165.     g_tdmb_rf_ptr = this;
  166.     g_bIsRunning = true;
  167.     ActiveMan->SetActiveFunction(::REQ_Power_On);
  168. }
  169. //---------------------------------------------------------------------------
  170. void CTDMBRF::REQ_Power_On(void)
  171. {
  172.     if (!g_bIsRunning)
  173.     {
  174.         return;
  175.     }
  176.     META_RESULT MetaResult = META_TDMB_TurnOn_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000);
  177.     if (MetaResult != META_SUCCESS)
  178.     {
  179.         if (META_TIMEOUT == MetaResult)
  180.         {
  181.             Confirm(METAAPP_TIMEOUT);
  182.         }
  183.         else
  184.         {
  185.             Confirm(METAAPP_FAIL);
  186.         }
  187.         return;
  188.     }
  189.     Confirm(METAAPP_SUCCESS);
  190. }
  191. //===========================================================================
  192. void CTDMBRF::REQ_Set_Freq_Start(E_TDMB_BAND_T band, unsigned int freq_kHz)
  193. {
  194.     g_tdmb_rf_ptr = this;
  195.     g_bIsRunning = true;
  196.     m_eBand = band;
  197.     m_uiFreqKHz = freq_kHz;
  198.     ActiveMan->SetActiveFunction(::REQ_Set_Freq);
  199. }
  200. //---------------------------------------------------------------------------
  201. void CTDMBRF::REQ_Set_Freq(void)
  202. {
  203.     if (!g_bIsRunning)
  204.     {
  205.         return;
  206.     }
  207.     // set band
  208.     TDMB_SET_BAND_REQ_T band_req;
  209.     switch (m_eBand)
  210.     {
  211.         case TDMB_KOREA_BAND_IDX:
  212.         {
  213.             band_req.m_rBand = META_TDMB_KOREA_BAND;
  214.         }
  215.         break;
  216.         case TDMB_VHF_BAND3_IDX:
  217.         {
  218.             band_req.m_rBand = META_TDMB_BAND_III;
  219.         }
  220.         break;
  221.         case TDMB_LBAND_IDX:
  222.         {
  223.             band_req.m_rBand = META_TDMB_L_BAND;
  224.         }
  225.         break;
  226.         case TDMB_CHINA_BAND_IDX:
  227.         {
  228.             band_req.m_rBand = META_TDMB_CHINESE_BAND;
  229.         }
  230.         break;
  231.     }
  232.     
  233.     META_RESULT MetaResult = META_TDMB_SetBand_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &band_req);
  234.     if (MetaResult != META_SUCCESS)
  235.     {
  236.         if (META_TIMEOUT == MetaResult)
  237.         {
  238.             Confirm(METAAPP_TIMEOUT);
  239.         }
  240.         else
  241.         {
  242.             Confirm(METAAPP_FAIL);
  243.         }
  244.         return;
  245.     }
  246.     // set frequency
  247.     TDMB_SET_FREQ_REQ_T freq_req;
  248.     freq_req.m_u4Freq = m_uiFreqKHz;
  249.     MetaResult = META_TDMB_SetFreq_r(m_META_HANDLE_Obj.Get_MainHandle(),15000, &freq_req, &m_sFreqEnsemble);
  250.     if (MetaResult != META_SUCCESS)
  251.     {
  252.         if (META_TIMEOUT == MetaResult)
  253.         {
  254.             Confirm(METAAPP_TIMEOUT);
  255.         }
  256.         else
  257.         {
  258.             Confirm(METAAPP_FAIL);
  259.         }
  260.         return;
  261.     }
  262.     if (m_sFreqEnsemble.m_cResult)
  263.     {
  264.         Confirm(METAAPP_FAIL);
  265.     }
  266.     Confirm(METAAPP_SUCCESS);
  267. }
  268. //===========================================================================
  269. void CTDMBRF::REQ_AutoScan_Start(E_TDMB_BAND_T band)
  270. {
  271.     g_tdmb_rf_ptr = this;
  272.     g_bIsRunning = true;
  273.     m_eBand = band;
  274.     ActiveMan->SetActiveFunction(::REQ_AutoScan);
  275. }
  276. //---------------------------------------------------------------------------
  277. void CTDMBRF::REQ_AutoScan(void)
  278. {
  279.     if (!g_bIsRunning)
  280.     {
  281.         return;
  282.     }
  283.     META_RESULT MetaResult;
  284.     // set band
  285.     TDMB_SET_BAND_REQ_T band_req;
  286.     switch (m_eBand)
  287.     {
  288.         case TDMB_KOREA_BAND_IDX:
  289.         {
  290.             band_req.m_rBand = META_TDMB_KOREA_BAND;
  291.         }
  292.         break;
  293.         case TDMB_VHF_BAND3_IDX:
  294.         {
  295.             band_req.m_rBand = META_TDMB_BAND_III;
  296.         }
  297.         break;
  298.         case TDMB_LBAND_IDX:
  299.         {
  300.             band_req.m_rBand = META_TDMB_L_BAND;
  301.         }
  302.         break;
  303.         case TDMB_CHINA_BAND_IDX:
  304.         {
  305.             band_req.m_rBand = META_TDMB_CHINESE_BAND;
  306.         }
  307.         break;
  308.     }
  309.     MetaResult = META_TDMB_SetBand_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &band_req);
  310.     if (MetaResult != META_SUCCESS)
  311.     {
  312.         if (META_TIMEOUT == MetaResult)
  313.         {
  314.             Confirm(METAAPP_TIMEOUT);
  315.         }
  316.         else
  317.         {
  318.             Confirm(METAAPP_FAIL);
  319.         }
  320.         return;
  321.     }
  322.                           
  323.     MetaResult = META_TDMB_AutoScan_GetEnsemble_r(m_META_HANDLE_Obj.Get_MainHandle(), 60000, &m_sScanEnsemble);
  324.     if (MetaResult != META_SUCCESS)
  325.     {
  326.         if (META_TIMEOUT == MetaResult)
  327.         {
  328.             Confirm(METAAPP_TIMEOUT);
  329.         }
  330.         else
  331.         {
  332.             Confirm(METAAPP_FAIL);
  333.         }
  334.         return;
  335.     }
  336.     Confirm(METAAPP_SUCCESS);
  337. }
  338. //===========================================================================
  339. bool CTDMBRF::REQ_Get_Signal_Start(void)
  340. {
  341.     g_tdmb_rf_ptr = this;
  342.     g_bIsRunning = true;
  343.     //ActiveMan->SetActiveFunction(::REQ_Get_Signal);
  344.     META_RESULT MetaResult = META_TDMB_GetSignal_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sSignal);
  345.     if (MetaResult != META_SUCCESS)
  346.     {
  347.         return false;
  348.     }
  349.     return true;
  350. }
  351. //---------------------------------------------------------------------------
  352. void CTDMBRF::REQ_Get_Signal(void)
  353. {
  354. #if 0
  355.     if (!g_bIsRunning)
  356.     {
  357.         return;
  358.     }
  359.     if (MetaResult != META_SUCCESS)
  360.     {
  361.         if (META_TIMEOUT == MetaResult)
  362.         {
  363.             Confirm(METAAPP_TIMEOUT);
  364.         }
  365.         else
  366.         {
  367.             Confirm(METAAPP_FAIL);
  368.         }
  369.         return;
  370.     }
  371.     Confirm(METAAPP_SUCCESS);
  372. #endif
  373. }
  374. //===========================================================================
  375. void CTDMBRF::REQ_Select_Service_Only_Start(S_TDMB_SEL_SERV_ONLY_T req)
  376. {
  377.     g_tdmb_rf_ptr = this;
  378.     g_bIsRunning = true;
  379.     m_sServiceOnly = req;
  380.     ActiveMan->SetActiveFunction(::REQ_Select_Service_Only);
  381. }
  382. //---------------------------------------------------------------------------
  383. void CTDMBRF::REQ_Select_Service_Only(void)
  384. {
  385.     if (!g_bIsRunning)
  386.     {
  387.         return;
  388.     }
  389.     TDMB_SET_FREQ_REQ_T freq_req;
  390.     freq_req.m_u4Freq = m_sServiceOnly.ui_freq_khz;
  391.     META_RESULT MetaResult = META_TDMB_SetFreq_r(m_META_HANDLE_Obj.Get_MainHandle(), 15000, &freq_req, &m_sFreqEnsemble);
  392.     if (MetaResult != META_SUCCESS)
  393.     {
  394.         if (META_TIMEOUT == MetaResult)
  395.         {
  396.             Confirm(METAAPP_TIMEOUT);
  397.         }
  398.         else
  399.         {
  400.             Confirm(METAAPP_FAIL);
  401.         }
  402.         return;
  403.     }
  404.     MetaResult = META_TDMB_SelServiceOnly_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sServiceOnly.req);
  405.     if (MetaResult != META_SUCCESS)
  406.     {
  407.         if (META_TIMEOUT == MetaResult)
  408.         {
  409.             Confirm(METAAPP_TIMEOUT);
  410.         }
  411.         else
  412.         {
  413.             Confirm(METAAPP_FAIL);
  414.         }
  415.         return;
  416.     }
  417.     Confirm(METAAPP_SUCCESS);
  418. }
  419. //===========================================================================
  420. void CTDMBRF::REQ_RecordStream_Start(S_TDMB_SEL_SERV_T req)
  421. {
  422.     g_tdmb_rf_ptr = this;
  423.     g_bIsRunning = true;
  424.     m_sService = req;
  425.     m_sSelServiceResult.b_valid = false;
  426.     ActiveMan->SetActiveFunction(::REQ_RecordStream);
  427. }
  428. //---------------------------------------------------------------------------
  429. void CTDMBRF::REQ_RecordStream(void)
  430. {
  431.     if (!g_bIsRunning)
  432.     {
  433.         return;
  434.     }
  435.     TDMB_SET_FREQ_REQ_T freq_req;
  436.     freq_req.m_u4Freq = m_sService.ui_freq_khz;
  437.     META_RESULT MetaResult = META_TDMB_SetFreq_r(m_META_HANDLE_Obj.Get_MainHandle(), 15000, &freq_req, &m_sFreqEnsemble);
  438.     if (MetaResult != META_SUCCESS)
  439.     {
  440.         if (META_TIMEOUT == MetaResult)
  441.         {
  442.             Confirm(METAAPP_TIMEOUT);
  443.         }
  444.         else
  445.         {
  446.             Confirm(METAAPP_FAIL);
  447.         }
  448.         return;
  449.     }
  450.     MetaResult = META_TDMB_SelService_r(m_META_HANDLE_Obj.Get_MainHandle(), 5000, &m_sService.req, ::CNF_RecordStream);
  451.     if (MetaResult != META_SUCCESS)
  452.     {
  453.         if (META_TIMEOUT == MetaResult)
  454.         {
  455.             Confirm(METAAPP_TIMEOUT);
  456.         }
  457.         else
  458.         {
  459.             Confirm(METAAPP_FAIL);
  460.         }
  461.         return;
  462.     }
  463.     Confirm(METAAPP_SUCCESS);
  464. }
  465. //---------------------------------------------------------------------------
  466. void __stdcall CTDMBRF::CNF_RecordStream(const TDMB_SEL_SERV_ERROR_RESULT status)
  467. {
  468.     m_sSelServiceResult.b_valid = true;
  469.     m_sSelServiceResult.e_result = status;
  470. }
  471. //===========================================================================
  472. void CTDMBRF::REQ_Stop_Service_Start(void)
  473. {
  474.     g_tdmb_rf_ptr = this;
  475.     g_bIsRunning = true;
  476.     ActiveMan->SetActiveFunction(::REQ_Stop_Service);
  477. }
  478. //---------------------------------------------------------------------------
  479. void CTDMBRF::REQ_Stop_Service(void)
  480. {
  481.     if (!g_bIsRunning)
  482.     {
  483.         return;
  484.     }
  485.     META_RESULT MetaResult = META_TDMB_SetIdle_r(m_META_HANDLE_Obj.Get_MainHandle(), 10000, ::CNF_Stop_Service, NULL);
  486.     if (MetaResult != META_SUCCESS)
  487.     {
  488.         if (META_TIMEOUT == MetaResult)
  489.         {
  490.             Confirm(METAAPP_TIMEOUT);
  491.         }
  492.         else
  493.         {
  494.             Confirm(METAAPP_FAIL);
  495.         }
  496.         return;
  497.     }
  498.     Confirm(METAAPP_SUCCESS);
  499. }
  500. //---------------------------------------------------------------------------
  501. int __stdcall CTDMBRF::CNF_Stop_Service(unsigned char percent, int sent_bytes, int total_bytes, const short token, void *usr_arg)
  502. {
  503.     m_sFatProgress.percent      = percent;
  504.     m_sFatProgress.sent_bytes   = sent_bytes;
  505.     m_sFatProgress. total_bytes =  total_bytes;
  506.     return 0;
  507. }
  508. //===========================================================================
  509. /////////////////////////////         Query         /////////////////////////
  510. //===========================================================================
  511. bool CTDMBRF::Query_TDMBSupport_Start(void)
  512. {
  513.     META_RESULT MetaResult = META_QueryIfFunctionSupportedByTarget_r(m_META_HANDLE_Obj.Get_MainHandle(), 500, "META_TDMB_TurnOn_r");
  514.     if (MetaResult != META_SUCCESS)
  515.     {
  516.         m_bTDMBSupport = false;
  517.     }
  518.     else
  519.     {
  520.         m_bTDMBSupport = true;
  521.     }
  522.     return m_bTDMBSupport;
  523. }
  524. //===========================================================================
  525. /////////////////////////////   Global information  /////////////////////////
  526. //===========================================================================
  527. E_METAAPP_RESULT_T CTDMBRF::Get_ConfirmState(void)
  528. {
  529.     return m_eConfirmState;
  530. }
  531. //---------------------------------------------------------------------------
  532. bool CTDMBRF::Get_TDMBSupport(void)
  533. {
  534.     return m_bTDMBSupport;
  535. }
  536. //---------------------------------------------------------------------------
  537. TDMB_SET_FREQ_CNF_T* CTDMBRF::Get_FreqEnsembleResult(void)
  538. {
  539.     return &m_sFreqEnsemble;
  540. }
  541. //---------------------------------------------------------------------------
  542. TDMB_GET_ENSM_INFO_BY_AUTO_SCAN_CNF_T* CTDMBRF::Get_ScanEnsembleResult(void)
  543. {
  544.     return &m_sScanEnsemble;
  545. }
  546. //---------------------------------------------------------------------------
  547. TDMB_GET_SIGNAL_CNF_T* CTDMBRF::Get_Signal(void)
  548. {
  549.     return &m_sSignal;
  550. }
  551. //---------------------------------------------------------------------------
  552. S_TDMB_SEL_SERV_ERROR_RESULT* CTDMBRF::Get_SelServiceResult(void)
  553. {
  554.     return &m_sSelServiceResult;
  555. }
  556. //---------------------------------------------------------------------------
  557. S_FAT_PROGRESS* CTDMBRF::Get_FatProgress(void)
  558. {
  559.     return &m_sFatProgress;
  560. }