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