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

📄 fmradiomsghdlr.c

📁 8032调频收音机部分。因为可移植所以单独拿出来了
💻 C
📖 第 1 页 / 共 3 页
字号:
        if(g_fmrdo.loud_speaker_on)
        {
            mdi_fmr_power_on_with_path(MDI_DEVICE_SPEAKER_BOTH, (mdi_callback) mmi_fmrdo_preempted);            
        }
        else
    #endif /* defined(__MMI_FM_RADIO_LOUD_SPEAK__) */
        {
            mdi_fmr_power_on_with_path(MDI_DEVICE_SPEAKER2, (mdi_callback) mmi_fmrdo_preempted);
        }
        g_fmrdo.is_power_on = TRUE;
        g_fmrdo.state = FMRDO_STATE_READY;
    }
}


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_power_on
 * DESCRIPTION
 *  
 * PARAMETERS
 *  turn_on     [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_power_on(BOOL turn_on)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (!g_fmrdo.is_ready)
    {
        return;
    }

    if ((g_fmrdo.state == FMRDO_STATE_NOT_READY && !turn_on) || (g_fmrdo.state != FMRDO_STATE_NOT_READY && turn_on))
    {
        g_fmrdo.is_preempted = FALSE;
        return;
    }

    if (turn_on)
    {
        if (!mdi_check_device_ownership())
        {
            g_fmrdo.is_power_on = FALSE;
        }
        else
        {
            mdi_audio_set_volume(AUD_VOLUME_FMR, g_fmrdo.volume);
        #if defined(__MMI_FM_RADIO_LOUD_SPEAK__)
            if(g_fmrdo.loud_speaker_on)
            {
                mdi_fmr_power_on_with_path(MDI_DEVICE_SPEAKER_BOTH, (mdi_callback) mmi_fmrdo_preempted);            
            }
            else
        #endif /* defined(__MMI_FM_RADIO_LOUD_SPEAK__) */
            {
                mdi_fmr_power_on_with_path(MDI_DEVICE_SPEAKER2, (mdi_callback) mmi_fmrdo_preempted);
            }
            mdi_fmr_set_freq(g_fmrdo.frequency);
            g_fmrdo.state = FMRDO_STATE_READY;
            g_fmrdo.is_power_on = TRUE;
        }
        if (g_fmrdo.in_main_screen)
        {
            mmi_fmrdo_redraw_main_frequency(g_fmrdo.frequency, TRUE);
        #ifdef __MMI_FM_RADIO_ANIMATION__
            mmi_fmrdo_animation_start();
        #endif 
        }
    }
    else
    {
        mdi_audio_stop_fmr();
    #ifdef __MMI_FM_RADIO_ANIMATION__
        mmi_fmrdo_animation_stop();
    #endif 

    }

    g_fmrdo.is_preempted = FALSE;

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


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_search_frequency_start
 * DESCRIPTION
 *  
 * PARAMETERS
 *  start_freq      [IN]        
 *  is_step_up      [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_search_frequency_start(U16 start_freq, BOOL is_step_up)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* Do not let voice go out while searching */
#if defined(__MMI_BT_FM_VIA_SCO__)
    mdi_audio_bt_hfp_turn_off();
#endif
    /* mute it before searching */
    mdi_audio_set_mute(AUD_VOLUME_FMR, TRUE);

    mdi_fmr_evaluate_threshold();

    fmrdo_search_one.freq = start_freq;
    if (is_step_up)
    {
        if (start_freq > MIN_FM_FREQUENCY)
        {
            fmrdo_search_one.stop_freq = start_freq - 1;
        }
        else
        {
            start_freq = MAX_FM_FREQUENCY;
        }
    }
    else
    {
        if (start_freq < MAX_FM_FREQUENCY)
        {
            fmrdo_search_one.stop_freq = start_freq + 1;
        }
        else
        {
            start_freq = MIN_FM_FREQUENCY;
        }
    }
    fmrdo_search_one.is_step_up = is_step_up;
    g_fmrdo.state = FMRDO_STATE_SEARCH_ONE;

    /* start valid stop test */
    mdi_fmr_check_is_valid_stop(start_freq, is_step_up, mmi_fmrdo_search_frequency);

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


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_search_frequency
 * DESCRIPTION
 *  
 * PARAMETERS
 *  is_valid        [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_search_frequency(BOOL is_valid)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (g_fmrdo_search_cancel_count > 0)
    {
        g_fmrdo_search_cancel_count--;
        return;
    }

    if (g_fmrdo.state != FMRDO_STATE_SEARCH_ONE)
    {
        return;
    }

    if (!is_valid && fmrdo_search_one.freq != fmrdo_search_one.stop_freq)
    {
        /* update frequency */
        if (fmrdo_search_one.is_step_up)
        {
            if (fmrdo_search_one.freq < MAX_FM_FREQUENCY)
            {
                fmrdo_search_one.freq++;
            }
            else
            {
                fmrdo_search_one.freq = MIN_FM_FREQUENCY;
            }
        }
        else
        {
            if (fmrdo_search_one.freq > MIN_FM_FREQUENCY)
            {
                fmrdo_search_one.freq--;
            }
            else
            {
                fmrdo_search_one.freq = MAX_FM_FREQUENCY;
            }
        }

        /* update display */
        if (g_fmrdo.in_main_screen)
        {
            mmi_fmrdo_redraw_main_frequency(fmrdo_search_one.freq, TRUE);
            mmi_fmrdo_redraw_main_channel_tuner(fmrdo_search_one.freq);
        }

        /* test valid stop again */
        mdi_fmr_check_is_valid_stop(fmrdo_search_one.freq, fmrdo_search_one.is_step_up, mmi_fmrdo_search_frequency);
    }
    else
    {
        /* don't move this statement below mmi_fmrdo_set_frequency for properly updating subLCD */
        g_fmrdo.state = FMRDO_STATE_READY;
        mmi_fmrdo_set_frequency(fmrdo_search_one.freq);
        /* Resume bluetooth 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);
    }
}


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

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (g_fmrdo.is_ready && g_fmrdo.state == FMRDO_STATE_SEARCH_ONE)
    {
        g_fmrdo_search_cancel_count++;
        //mdi_fmr_cancel_checking_is_valid_stop();
        /* don't move this statement below mmi_fmrdo_set_frequency for properly updating subLCD */
        g_fmrdo.state = FMRDO_STATE_READY;
        mmi_fmrdo_set_frequency(fmrdo_search_one.freq);
        /* Resume bluetooth 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);
    }
}


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_find_best_frequency_in_sub_band
 * DESCRIPTION
 *  
 * PARAMETERS
 *  sub_band        [?]     
 * RETURNS
 *  
 *****************************************************************************/
S16 mmi_fmrdo_find_best_frequency_in_sub_band(U8 *sub_band)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U8 signal_level;
    U8 max_signal_level = 1;
    S16 i;
    S16 index = -1;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    for (i = 0; i < FM_SUB_BANDWIDTH; i++)
    {
        if (!FM_SIG_MARK(sub_band[i]))
        {
            signal_level = FM_SIG_LVL(sub_band[i]);
            if (signal_level >= max_signal_level)
            {
                index = i;
                max_signal_level = signal_level;
            }
        }
    }

    return index;
}


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_search_all_channels_start
 * DESCRIPTION
 *  
 * PARAMETERS
 *  callback_func       [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_search_all_channels_start(void (*callback_func) (U8 *signal_band))
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* Do not let voice go out while searching */
#if defined(__MMI_BT_FM_VIA_SCO__)
    mdi_audio_bt_hfp_turn_off();
#endif

    /* mute it before searching */
    mdi_audio_set_mute(AUD_VOLUME_FMR, TRUE);

    mdi_fmr_evaluate_threshold();

    search_all_channels_callback_func = callback_func;
    g_fmrdo.state = FMRDO_STATE_SEARCH_ALL;

    /* init search_p */
    memset(&fmrdo_search_all, 0, sizeof(mmi_fmrdo_search_all_struct));

    /* populate signal band */
    mdi_fmr_get_signal_level(MIN_FM_FREQUENCY, 1, mmi_fmrdo_search_all_channels);

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


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_search_all_channels
 * DESCRIPTION
 *  
 * PARAMETERS
 *  signal_level        [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_search_all_channels(U8 signal_level)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U16 i, j;
#if defined(__MMI_FM_RADIO_PRESET_TOP_N__)
    U8 level, max_signal_level;
    S16 index;
#else
    U16 offset, avaliable_sub_band_count;
#endif
    mmi_fmrdo_search_all_struct *search_p = &fmrdo_search_all;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (g_fmrdo.state != FMRDO_STATE_SEARCH_ALL)
    {
        return;
    }

    search_p->signal_band[search_p->get_signal_count++] = signal_level;
    if (search_p->get_signal_count < FM_BANDWIDTH)
    {
        mdi_fmr_get_signal_level((U16) (MIN_FM_FREQUENCY + search_p->get_signal_count), 1, mmi_fmrdo_search_all_channels);      /* populate signal band */
    }
    else
    {
    #if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/
/* under construction !*/

⌨️ 快捷键说明

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