📄 fmradiosrc.c
字号:
* PARAMETERS
* turn_on [IN]
* RETURNS
* void
*****************************************************************************/
void mmi_fmrdo_power_on_main_screen(BOOL turn_on)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (g_fmrdo.in_main_screen)
{
mmi_fmrdo_power_on(turn_on);
}
}
/*****************************************************************************
* FUNCTION
* mmi_fmrdo_is_power_on
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* BOOL
*****************************************************************************/
BOOL mmi_fmrdo_is_power_on(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
return (g_fmrdo.is_ready && g_fmrdo.is_power_on);
}
/*****************************************************************************
* FUNCTION
* mmi_fmrdo_get_channel_name_or_freq
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* UI_string_type
*****************************************************************************/
UI_string_type mmi_fmrdo_get_channel_name_or_freq(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
UI_string_type str = channel_name_str;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (g_fmrdo.state == FMRDO_STATE_SEARCH_ALL || g_fmrdo.state == FMRDO_STATE_SEARCH_ONE)
{
pfnUnicodeStrcpy((S8*) str, (const S8*)GetString(STR_ID_FMRDO_SEARCHING));
}
else
{
if (g_fmrdo.channel_index >= 0)
{
if (pfnUnicodeStrlen((S8*) g_fmrdo.channel_list.name[g_fmrdo.channel_index]) > 0)
{
kal_wsprintf(
str,
"%d. %w",
g_fmrdo.channel_index + 1,
g_fmrdo.channel_list.name[g_fmrdo.channel_index]);
}
else
{
kal_wsprintf(
str,
"%d. FM %d.%d",
g_fmrdo.channel_index + 1,
g_fmrdo.frequency / 10,
g_fmrdo.frequency % 10);
}
}
else
{
kal_wsprintf(str, "FM %d.%d", g_fmrdo.frequency / 10, g_fmrdo.frequency % 10);
}
}
return str;
}
/*****************************************************************************
* FUNCTION
* mmi_fmrdo_preset_list_done
* DESCRIPTION
*
* PARAMETERS
* signal_band [?]
* RETURNS
* void
*****************************************************************************/
void mmi_fmrdo_preset_list_done(U8 *signal_band)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
U16 i, j;
S16 error;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
g_fmrdo.state = FMRDO_STATE_READY;
/* clear channel list */
memset(g_fmrdo.channel_list.freq, 0, FM_RADIO_CHANNEL_NUM * sizeof(U16));
for (i = 0; i < FM_RADIO_CHANNEL_NUM; i++)
{
pfnUnicodeStrcpy((S8*) g_fmrdo.channel_list.name[i], (S8*) L"");
}
/* set channel list */
for (i = j = 0; i < FM_BANDWIDTH; i++)
{
if (FM_SIG_MARK(signal_band[i]))
{
mmi_fmrdo_set_channel(
j++,
(U16) (i + MIN_FM_FREQUENCY),
(UI_string_type) GetString(STR_ID_FMRDO_NEW_CHANNEL));
if (j > FM_RADIO_CHANNEL_NUM)
{
break; /* this line should never be reached if the searching algorithm is correct!! */
}
}
}
/* write channel list from nvram */
WriteRecord(NVRAM_EF_FM_RADIO_LID, 1, (void*)&g_fmrdo.channel_list, NVRAM_EF_FM_RADIO_SIZE, &error);
/* rematch channel index */
g_fmrdo.channel_index = mmi_fmrdo_match_channel_list(g_fmrdo.frequency);
DisplayPopup((PU8) GetString(STR_GLOBAL_DONE), IMG_GLOBAL_ACTIVATED, 1, 1000, (U8) SUCCESS_TONE);
DeleteScreenIfPresent(SCR_ID_FMRDO_SEARCHING);
}
/*****************************************************************************
* FUNCTION
* mmi_fmrdo_start_twinkle_frequency
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void mmi_fmrdo_start_twinkle_frequency(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
g_fmrdo.twinkle_frequency_count = 0;
StartTimer(FMRDO_TWINKLE_FREQUENCY_TIMER, TWINKLE_FREQUENCY_ON_TIME, mmi_fmrdo_twinkle_frequency_timer);
}
/*****************************************************************************
* FUNCTION
* mmi_fmrdo_stop_twinkle_frequency
* DESCRIPTION
*
* PARAMETERS
* is_shown [IN]
* RETURNS
* void
*****************************************************************************/
void mmi_fmrdo_stop_twinkle_frequency(BOOL is_shown)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
StopTimer(FMRDO_TWINKLE_FREQUENCY_TIMER);
if (is_shown && g_fmrdo.twinkle_frequency_count % 2 == 0)
{
mmi_fmrdo_redraw_main_frequency(g_fmrdo.frequency, TRUE);
}
}
/*****************************************************************************
* FUNCTION
* mmi_fmrdo_long_press_number_key
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void mmi_fmrdo_long_press_number_key(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
U16 key_code, key_type;
U16 channel_index;
S16 error;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (g_fmrdo.state != FMRDO_STATE_SEARCH_ONE)
{
/* get key number */
GetkeyInfo((U16*) & key_code, (U16*) & key_type);
channel_index = key_code - KEY_1;
/* set channel */
mmi_fmrdo_set_channel(channel_index, g_fmrdo.frequency, (UI_string_type) GetString(STR_ID_FMRDO_NEW_CHANNEL));
/* write channel list from nvram */
WriteRecord(NVRAM_EF_FM_RADIO_LID, 1, (void*)&g_fmrdo.channel_list, NVRAM_EF_FM_RADIO_SIZE, &error);
g_fmrdo.channel_index = channel_index;
/* update channel name */
mmi_fmrdo_redraw_main_channel_name(0);
/* start twinkle frequency */
mmi_fmrdo_start_twinkle_frequency();
}
g_fmrdo.is_long_press_number_key = TRUE;
}
/*****************************************************************************
* FUNCTION
* mmi_fmrdo_release_number_key
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void mmi_fmrdo_release_number_key(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
U16 key_code, key_type;
U16 freq;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (g_fmrdo.state == FMRDO_STATE_SEARCH_ONE)
{
mmi_fmrdo_search_frequency_stop();
}
if (!g_fmrdo.is_long_press_number_key)
{
/* stop previous twinkle frequency if necessary */
mmi_fmrdo_stop_twinkle_frequency(FALSE);
GetkeyInfo((U16*) & key_code, (U16*) & key_type);
freq = g_fmrdo.channel_list.freq[key_code - KEY_1];
if (freq != 0)
{
mmi_fmrdo_goto_channel((U16) (key_code - KEY_1));
}
}
g_fmrdo.is_long_press_number_key = FALSE;
}
/*****************************************************************************
* FUNCTION
* mmi_fmrdo_twinkle_frequency_timer
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void mmi_fmrdo_twinkle_frequency_timer(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (g_fmrdo.twinkle_frequency_count % 2 == 0) /* twinkle off */
{
mmi_fmrdo_redraw_main_frequency(g_fmrdo.frequency, FALSE);
if (g_fmrdo.twinkle_frequency_count < TWINKLE_FREQUENCY_COUNT)
{
g_fmrdo.twinkle_frequency_count++;
StartTimer(FMRDO_TWINKLE_FREQUENCY_TIMER, TWINKLE_FREQUENCY_OFF_TIME, mmi_fmrdo_twinkle_frequency_timer);
}
}
else /* twinkle on */
{
mmi_fmrdo_redraw_main_frequency(g_fmrdo.frequency, TRUE);
if (g_fmrdo.twinkle_frequency_count < TWINKLE_FREQUENCY_COUNT)
{
g_fmrdo.twinkle_frequency_count++;
StartTimer(FMRDO_TWINKLE_FREQUENCY_TIMER, TWINKLE_FREQUENCY_ON_TIME, mmi_fmrdo_twinkle_frequency_timer);
}
}
}
/*****************************************************************************
* FUNCTION
* mmi_fmrdo_step_down_timer
* DESCRIPTION
*
* PARAMETERS
* void
* RETURNS
* void
*****************************************************************************/
void mmi_fmrdo_step_down_timer(void)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
if (g_fmrdo.step_freq > MIN_FM_FREQUENCY)
{
g_fmrdo.step_freq--;
}
else
{
g_fmrdo.step_freq = MAX_FM_FREQUENCY;
}
/* update display */
if (g_fmrdo.in_main_screen)
{
mmi_fmrdo_redraw_main_frequency(g_fmrdo.step_freq, TRUE);
mmi_fmrdo_redraw_main_channel_tuner(g_fmrdo.step_freq);
}
if (g_fmrdo.normal_repeat_step_count == 0 && g_fmrdo.is_power_on)
{
mdi_fmr_mute(1); /* mute in the begining of step down */
}
if (g_fmrdo.normal_repeat_step_count < NORMAL_REAPEAT_STEP_COUNT)
{
g_fmrdo.normal_repeat_step_count++;
StartTimer(FMRDO_REPEAT_STEP_TIMER, NORMAL_REAPEAT_STEP_PERIOD, mmi_fmrdo_step_down_timer);
}
else
{
StartTimer(FMRDO_REPEAT_STEP_TIMER, FAST_REAPEAT_STEP_PERIOD, mmi_fmrdo_step_down_timer);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -