📄 fmradiomsghdlr.c
字号:
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 + -