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

📄 fmradiomsghdlr.c

📁 8032调频收音机部分。因为可移植所以单独拿出来了
💻 C
📖 第 1 页 / 共 3 页
字号:
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
    #endif /* 0 */ 

    /* Find out the Top-N strongest signal channel */
    #if defined(__MMI_FM_RADIO_PRESET_TOP_N__)
        for (i = 0; i < FM_RADIO_CHANNEL_NUM; i++)
        {
            max_signal_level = 0;
            index = -1;
            
            for(j = 0; j < FM_BANDWIDTH; j++)
            {
                if (!FM_SIG_MARK(search_p->signal_band[j]))
                {
                    level = FM_SIG_LVL(search_p->signal_band[j]);
                    if (level > max_signal_level)
                    {
                        index = j;
                        max_signal_level = level;
                    }
                }
            }

            if(index > 0)
            {
                FM_MARK_SIG(search_p->signal_band[index]);
            }
            else
            {
                goto finished;
            }
        }
    
    #else /* defined(__MMI_FM_RADIO_PRESET_TOP_N__) */
    /* search until no available frequency or FM_SUB_BAND_NUM frequencies are found */
        avaliable_sub_band_count = FM_SUB_BAND_NUM;
        do
        {
            S16 index;

            for (offset = i = 0; i < FM_SUB_BAND_NUM; i++)
            {
                if (!FM_SUB_MARK(search_p->sub_band_mask[i / 8], (i % 8)))
                {
                    index = mmi_fmrdo_find_best_frequency_in_sub_band(&search_p->signal_band[offset]);
                    if (index >= 0)
                    {
                        j = offset + index;
                        FM_MARK_SIG(search_p->signal_band[j]);
                        search_p->select_count++;
                        if (search_p->select_count == FM_SUB_BAND_NUM)
                        {
                            goto finished;
                        }
                    }
                    else
                    {
                        FM_MARK_SUB(search_p->sub_band_mask[i / 8], (i % 8));
                        avaliable_sub_band_count--;
                    }
                }
                offset += FM_SUB_BANDWIDTH;
            }
        } while (avaliable_sub_band_count > 0);
    #endif /* defined(__MMI_FM_RADIO_PRESET_TOP_N__) */
    
      finished:
        if (search_all_channels_callback_func != NULL)
        {
        /* Stops at the first auto search channel after search */
        #if defined(__MMI_FM_RADIO_FIRST_CHANNEL__)
            MMI_BOOL is_channel_found = MMI_FALSE;

            for (i = 0; i < FM_BANDWIDTH; i++)
            {
                if (FM_SIG_MARK(search_p->signal_band[i]))
                {
                    /* Set first channel to play after search */
                    mdi_fmr_set_freq((U16) (i + MIN_FM_FREQUENCY));
                    g_fmrdo.frequency = i + MIN_FM_FREQUENCY;
                    is_channel_found = MMI_TRUE;
                    break;
                }
            }

            if (!is_channel_found)
        #endif /* defined(__MMI_FM_RADIO_FIRST_CHANNEL__) */ 
            {
                mdi_fmr_set_freq(g_fmrdo.frequency);
            }

            /* Resume SCO volume if SCO connected*/
        #if defined(__MMI_BT_FM_VIA_SCO__)
            mdi_audio_bt_hfp_turn_on();
        #endif
            mdi_audio_set_volume(AUD_VOLUME_FMR, g_fmrdo.volume);

            search_all_channels_callback_func(search_p->signal_band);
            search_all_channels_callback_func = NULL;
        #ifdef __MMI_SUBLCD__
            if (g_idle_context.IsSubLcdOnIdleScreen == SUBLCD_ON_IDLE_NORMAL)
            {
                ShowIdleAppSubLcd();
            }
        #endif /* __MMI_SUBLCD__ */ 
        }
    }
}


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_search_all_channels_stop
 * DESCRIPTION
 *  
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_search_all_channels_stop(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (g_fmrdo.is_ready && g_fmrdo.state == FMRDO_STATE_SEARCH_ALL)
    {
        mdi_fmr_set_freq(g_fmrdo.frequency);
        /* Resume SCO volume if SCO connected*/
    #if defined(__MMI_BT_FM_VIA_SCO__)
        mdi_audio_bt_hfp_turn_on();
    #endif
        mdi_audio_set_volume(AUD_VOLUME_FMR, g_fmrdo.volume);
        search_all_channels_callback_func = NULL;
        mdi_fmr_cancel_getting_signal_level();
        g_fmrdo.state = FMRDO_STATE_READY;
        DeleteScreenIfPresent(SCR_ID_FMRDO_SEARCHING);

    #ifdef __MMI_SUBLCD__
        if (g_idle_context.IsSubLcdOnIdleScreen == SUBLCD_ON_IDLE_NORMAL)
        {
            ShowIdleAppSubLcd();
        }
    #endif /* __MMI_SUBLCD__ */ 
    }
}

#if defined(__MMI_FM_RADIO_RECORD__)


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_start_record
 * DESCRIPTION
 *  Start to record FM radio
 * PARAMETERS
 *  filename        [IN]        
 *  format          [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_start_record(UI_string_type filename, U8 format)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U8 file_format;
    mdi_result result;

#ifdef MMI_ON_HARDWARE_P
#ifdef __DRM_SUPPORT__
    {
        FS_HANDLE handle;
        BOOL is_permitted = FALSE;

        /*----------------------------------------------------------------*/
        /* Code Body                                                      */
        /*----------------------------------------------------------------*/
        if ((handle = DRM_open_file((PU16) filename, FS_READ_ONLY, DRM_PERMISSION_NONE)) >= FS_NO_ERROR)
        {
            if (DRM_get_rights(handle) == NULL)
            {
                is_permitted = TRUE;
            }
            DRM_close_file(handle);
        }
        else if (handle < -1)   /* file open error. but not DRM related problem */
        {
            is_permitted = TRUE;
        }

        if (!is_permitted)
        {
            mmi_fmrdo_record_error_hdlr(DRM_NOT_PERMIT_TO_APPEND);
            return;
        }
    }
#endif /* __DRM_SUPPORT__ */ 
    switch (format)
    {

        case FM_FORMAT_AMR:
            file_format = MEDIA_AMR;
            break;
        case FM_FORMAT_WAV:
            file_format = MEDIA_WAV_DVI_ADPCM;
            break;
#if defined( AMRWB_ENCODE ) && defined( AMRWB_DECODE )
        case FM_FORMAT_AWB:
            file_format = MEDIA_AMR_WB;
            break;
#endif
        default:
            file_format = MEDIA_AMR;
            break;
    }
#else /* MMI_ON_HARDWARE_P */ 
    file_format = 0;
#endif /* MMI_ON_HARDWARE_P */ 

    result = mdi_fmr_start_record(filename, file_format, NULL, mmi_fmrdo_preempted);
    if (result == MDI_AUDIO_SUCCESS)
    {
        g_fmrdo.state = FMRDO_STATE_RECORD;
        mmi_fmrdo_entry_main_record_screen();

        mmi_fmrdo_util_init_duration();
        mmi_fmrdo_util_start_duration();
    }
    else
    {
        mmi_fmrdo_record_error_hdlr(result);
    }

}


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_stop_record
 * DESCRIPTION
 *  Stop record FM radio
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_stop_record(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    S32 result;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* State will update in mmi_fmrdo_preempted() when call back */
    if ((result = mdi_audio_stop_fmr_record_only()) != MDI_AUDIO_SUCCESS)
    {
        /* No reason not stop, error Handling Here. */
        g_fmrdo.state = FMRDO_STATE_READY;

        mmi_fmrdo_entry_restore_main_screen();
        mmi_fmrdo_record_error_hdlr(result);
    }
}


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_stop_record_on_exit
 * DESCRIPTION
 *  Always stop FM radio record when exit the main screen
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_stop_record_on_exit(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    S32 result;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (g_fmrdo.state == FMRDO_STATE_RECORD || g_fmrdo.state == FMRDO_STATE_RECORD_PAUSE)
    {
        if ((result = mdi_audio_stop_fmr_record_only()) != MDI_AUDIO_SUCCESS)
        {
            /* No reason not stop, error Handling Here. */
            g_fmrdo.state = FMRDO_STATE_READY;
            mmi_fmrdo_record_error_hdlr(result);
        }
    }
}


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_pause_record
 * DESCRIPTION
 *  Pause record FM radio
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_pause_record(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    mdi_result result;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (g_fmrdo.state == FMRDO_STATE_RECORD)
    {
        result = mdi_fmr_pause_record(mmi_fmrdo_preempted);

        mmi_fmrdo_util_stop_duration();
        if (result == MDI_AUDIO_SUCCESS)
        {
            g_fmrdo.state = FMRDO_STATE_RECORD_PAUSE;
            mmi_fmrdo_entry_main_pause_screen();
        }
        else
        {
            g_fmrdo.state = FMRDO_STATE_READY;

            mmi_fmrdo_entry_restore_main_screen();
            mmi_fmrdo_record_error_hdlr(result);
        }

        /* clear key events to prevent external queue overflow */
        ClearKeyEvents();
    }

}


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_resume_record
 * DESCRIPTION
 *  Resume record FM radio from pause state.
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_resume_record(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    mdi_result result;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (g_fmrdo.state == FMRDO_STATE_RECORD_PAUSE)
    {

        result = mdi_frm_resume_record(mmi_fmrdo_preempted);
        if (result == MDI_AUDIO_SUCCESS)
        {
            g_fmrdo.state = FMRDO_STATE_RECORD;

            mmi_fmrdo_util_start_duration();
            mmi_fmrdo_entry_main_record_screen();
        }
        else
        {
            g_fmrdo.state = FMRDO_STATE_READY;

            mmi_fmrdo_entry_restore_main_screen();
            mmi_fmrdo_record_error_hdlr(result);
        }

        /* clear key events to prevent external queue overflow */
        ClearKeyEvents();
    }
}
#endif /* defined(__MMI_FM_RADIO_RECORD__) */ 

#endif /* __MMI_FM_RADIO__ */ 

⌨️ 快捷键说明

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