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

📄 fmradiosrc.c

📁 mtk平台的调频收音机的mmi部分! 可以了解mtk调频收音机的用户界面!
💻 C
📖 第 1 页 / 共 5 页
字号:
 * 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 + -