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

📄 fmradiosrc.c

📁 mtk平台的调频收音机的mmi部分! 可以了解mtk调频收音机的用户界面!
💻 C
📖 第 1 页 / 共 5 页
字号:
 *  void
 *****************************************************************************/
void mmi_fmrdo_run_app(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
#ifdef __MMI_AUDIO_PLAYER__
    mmi_audply_stop_playing();
#endif 

    if (!g_fmrdo.is_ready)
    {
        S16 error;

        /* read channel list from nvram */
        ReadRecord(NVRAM_EF_FM_RADIO_LID, 1, (void*)&g_fmrdo.channel_list, NVRAM_EF_FM_RADIO_SIZE, &error);

        if(g_fmrdo.channel_list.name[0][0] == 0xFFFF)
        {
            memset(&g_fmrdo.channel_list, 0, sizeof(mmi_fmrdo_channel_list_struct));
        }

#ifdef MMI_ON_HARDWARE_P
        /* read settings from nvram */
        ReadValue(NVRAM_FMRDO_BACKGROUND_PLAY, &g_fmrdo.is_background_play, DS_BYTE, &error);
#ifdef __MMI_FM_SLIM_SKIN__
        g_fmrdo.skin_index = 0; /* only 1 skin in silm skin version */
#else
        ReadValue(NVRAM_FMRDO_SKIN, &g_fmrdo.skin_index, DS_BYTE, &error);
#endif /* #ifdef __MMI_FM_SLIM_SKIN__ */
        ReadValue(NVRAM_FMRDO_VOLUME, &g_fmrdo.volume, DS_BYTE, &error);
    #if defined(__MMI_FM_RADIO_LOUD_SPEAK__)
        ReadValue(NVRAM_FMRDO_SPEAKER_STATUS, &g_fmrdo.loud_speaker_on, DS_BYTE, &error);
        if(g_fmrdo.loud_speaker_on != 0 && g_fmrdo.loud_speaker_on != 1)
        {
            g_fmrdo.loud_speaker_on = 1;
            WriteValue(NVRAM_FMRDO_SPEAKER_STATUS, &g_fmrdo.loud_speaker_on, DS_BYTE, &error);
        }
    #endif
    #if defined(__MMI_FM_RADIO_RECORD__)
        ReadValue(NVRAM_FMRDO_RECORD_FORMAT, &g_fmrdo.rec.format, DS_BYTE, &error);
        ReadValue(NVRAM_FMRDO_RECORD_STORAGE, &g_fmrdo.rec.drive, DS_BYTE, &error);
        if (g_fmrdo.rec.format >= FM_REC_FORMAT_NUM)
        {
            g_fmrdo.rec.format = 0;
        }
        
        /* Restore to default drive if hardware not exists */
    #if defined(__MMI_FMGR_APP_STORAGE__)
        if ( FS_GetDevStatus(g_fmrdo.rec.drive, FS_MOUNT_STATE_ENUM) != FS_NO_ERROR)
    #endif
        {
             g_fmrdo.rec.drive = (U8)MMI_PUBLIC_DRV;
        }
        
    #endif /* defined(__MMI_FM_RADIO_RECORD__) */ 

        ReadValue(NVRAM_FMRDO_LAST_CHANNEL, &g_fmrdo.frequency, DS_SHORT, &error);
        /* default frequency value */
        if(g_fmrdo.frequency > MAX_FM_FREQUENCY || g_fmrdo.frequency < MIN_FM_FREQUENCY)
        {
            g_fmrdo.frequency = DEFAULT_FREQUENCY;
        }

#else /* MMI_ON_HARDWARE_P */ 

        g_fmrdo.is_background_play = 1;
        g_fmrdo.skin_index = 0;
        g_fmrdo.volume = 4;
    #if defined(__MMI_FM_RADIO_LOUD_SPEAK__)
        g_fmrdo.loud_speaker_on = 1;
    #endif
    #if defined(__MMI_FM_RADIO_RECORD__)
        g_fmrdo.rec.format = 0;
        g_fmrdo.rec.drive = MMI_PUBLIC_DRV;
    #endif /* defined(__MMI_FM_RADIO_RECORD__) */ 

        /* default frequency value */
        g_fmrdo.frequency = DEFAULT_FREQUENCY;
    
#endif /* MMI_ON_HARDWARE_P */ 

        /* reset channel index */
        g_fmrdo.channel_index = -1;

        /* search & power states */
        g_fmrdo.is_search_on = FALSE;
        g_fmrdo.is_power_on = FALSE;

        mdi_audio_set_background_handler(MDI_BACKGROUND_APP_FMR, (mdi_bg_callback) mmi_fmrdo_continued);

        g_fmrdo.is_ready = TRUE;
    }

    /* power on */
#ifdef __MMI_FM_RADIO_BIND_EARPHONE__
    if (isEarphonePlugged)
#endif 
        mmi_fmrdo_power_on(TRUE);

    mmi_fmrdo_entry_main();

#ifdef __MMI_FM_RADIO_BIND_EARPHONE__
    if (!isEarphonePlugged)
    {
        DisplayPopup(
            (PU8) GetString(STR_ID_FMRDO_PLEASE_PLUG_IN_EARPHONE),
            IMG_GLOBAL_WARNING,
            1,
            2000,
            (U8) WARNING_TONE);
    }
#endif /* __MMI_FM_RADIO_BIND_EARPHONE__ */ 
}


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

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    ChangeLeftSoftkey(STR_GLOBAL_OK, 0);
    ChangeRightSoftkey(STR_GLOBAL_BACK, 0);

    SetLeftSoftkeyFunction(mmi_fmrdo_run_app, KEY_EVENT_UP);
    SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);

    SetKeyHandler(mmi_fmrdo_run_app, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
    SetKeyHandler(GoBackHistory, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
}


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_match_channel_list
 * DESCRIPTION
 *  
 * PARAMETERS
 *  frequency       [IN]        
 * RETURNS
 *  S16
 *****************************************************************************/
S16 mmi_fmrdo_match_channel_list(U16 frequency)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    S16 i;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    /* try matching current frequency first */
    if (g_fmrdo.channel_index >= 0 && g_fmrdo.channel_list.freq[g_fmrdo.channel_index] == frequency)
    {
        return g_fmrdo.channel_index;
    }

    for (i = 0; i < FM_RADIO_CHANNEL_NUM; i++)
        if (g_fmrdo.channel_list.freq[i] == frequency)
        {
            return i;
        }

    return -1;
}


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

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

    g_fmrdo.selected_button = FMRDO_BUTTON_STEP_DOWN;
    g_fmrdo.is_button_down = TRUE;
    g_fmrdo.normal_repeat_step_count = 0;

    mmi_fmrdo_redraw_main_push_button(g_fmrdo.selected_button, g_fmrdo.is_button_down);

    mmi_fmrdo_search_frequency_stop();

    g_fmrdo.step_freq = g_fmrdo.frequency;
    StartTimer(FMRDO_REPEAT_STEP_TIMER, NORMAL_REAPEAT_STEP_PERIOD, mmi_fmrdo_step_down_timer);

    /* stop previous twinkle frequency if necessary */
    mmi_fmrdo_stop_twinkle_frequency(TRUE);
}


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_release_step_down_button
 * DESCRIPTION
 *  
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_release_step_down_button(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U16 freq;
    BOOL is_freq_changed = (g_fmrdo.normal_repeat_step_count != 0);

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (g_fmrdo.is_button_down && g_fmrdo.selected_button == FMRDO_BUTTON_STEP_DOWN)
    {
        StopTimer(FMRDO_REPEAT_STEP_TIMER);

        g_fmrdo.is_button_down = FALSE;

        mmi_fmrdo_redraw_main_push_button(g_fmrdo.selected_button, g_fmrdo.is_button_down);

        if (is_freq_changed)
        {
            freq = g_fmrdo.step_freq;   /* frequency is changed so we don't need to decrease it again */
        }
        else
        {
            /* frequency is not changed during button press down so we need to decrease it */
            if (g_fmrdo.frequency > MIN_FM_FREQUENCY)
            {
                freq = g_fmrdo.frequency - 1;
            }
            else
            {
                freq = MAX_FM_FREQUENCY;
            }
        }

        if (g_fmrdo.is_power_on && g_fmrdo.is_search_on)
        {
            mmi_fmrdo_redraw_main_channel_name((UI_string_type) GetString(STR_ID_FMRDO_SEARCHING));     /* show searching text */
            mmi_fmrdo_search_frequency_start(freq, FALSE);  /* do search in non-blocking mode */
        }
        else
        {
            mmi_fmrdo_set_frequency(freq);
        }

        g_fmrdo.normal_repeat_step_count = 0;
        g_fmrdo.selected_button = FMRDO_BUTTON_NONE;
    }
}


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

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

    g_fmrdo.selected_button = FMRDO_BUTTON_STEP_UP;
    g_fmrdo.is_button_down = TRUE;
    g_fmrdo.normal_repeat_step_count = 0;

    mmi_fmrdo_redraw_main_push_button(g_fmrdo.selected_button, g_fmrdo.is_button_down);

    mmi_fmrdo_search_frequency_stop();

    g_fmrdo.step_freq = g_fmrdo.frequency;
    StartTimer(FMRDO_REPEAT_STEP_TIMER, NORMAL_REAPEAT_STEP_PERIOD, mmi_fmrdo_step_up_timer);

    /* stop previous twinkle frequency if necessary */
    mmi_fmrdo_stop_twinkle_frequency(TRUE);
}


/*****************************************************************************
 * FUNCTION
 *  mmi_fmrdo_release_step_up_button
 * DESCRIPTION
 *  
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_fmrdo_release_step_up_button(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U16 freq;
    BOOL is_freq_changed = (g_fmrdo.normal_repeat_step_count != 0);

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (g_fmrdo.is_button_down && g_fmrdo.selected_button == FMRDO_BUTTON_STEP_UP)
    {
        StopTimer(FMRDO_REPEAT_STEP_TIMER);

        g_fmrdo.is_button_down = FALSE;

        mmi_fmrdo_redraw_main_push_button(g_fmrdo.selected_button, g_fmrdo.is_button_down);

        if (is_freq_changed)
        {
            freq = g_fmrdo.step_freq;   /* frequency is changed so we don't need to increase it again */
        }
        else
        {
            /* frequency is not changed during button press down so we need to increase it */
            if (g_fmrdo.frequency < MAX_FM_FREQUENCY)
            {
                freq = g_fmrdo.frequency + 1;
            }
            else
            {
                freq = MIN_FM_FREQUENCY;
            }
        }

        if (g_fmrdo.is_power_on && g_fmrdo.is_search_on)
        {
            mmi_fmrdo_redraw_main_channel_name((UI_string_type) GetString(STR_ID_FMRDO_SEARCHING));     /* show searching text */
            mmi_fmrdo_search_frequency_start(freq, TRUE);   /* do search in non-blocking mode */
        }
        else
        {
            mmi_fmrdo_set_frequency(freq);
        }

        g_fmrdo.normal_repeat_step_count = 0;
        g_fmrdo.selected_button = FMRDO_BUTTON_NONE;

⌨️ 快捷键说明

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