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

📄 keybrd.c

📁 MTK手机平台的MMI部分的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
 *  mmi_frm_set_key_handle_in_high_frequency
 * DESCRIPTION
 *  This function is to process the keypad handler in high frequency mode
 * PARAMETERS
 *  is_enable       [IN]        
 *  a(?)            [IN]        Is_enable
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_frm_set_key_handle_in_high_frequency(MMI_BOOL is_enable)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    g_process_key_in_high_frequency = is_enable;
}


/*****************************************************************************
 * FUNCTION
 *  mmi_frm_key_handle
 * DESCRIPTION
 *  This function is to process the keypad handler.
 * PARAMETERS
 *  paraBuff        [?]         
 *  a(?)            [IN]        ParaBuff
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_frm_key_handle(void *paraBuff)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kbd_data k;
    U32 msg_count;
    mmi_eq_keypad_detect_ind_struct *p;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (paraBuff != NULL)
    {
        drv_get_key_func new_key_ptr;

        p = (mmi_eq_keypad_detect_ind_struct*) paraBuff;

        new_key_ptr = (drv_get_key_func) (p->func);

        if (new_key_ptr != keypad_ptr)
        {
            ClearKeyEvents();
        }

        keypad_ptr = new_key_ptr;
    }

    while (1)
    {
        if ((*(keypad_ptr)) (&k) == MMI_TRUE)
        {
            if (k.Keydata[0] != KEY_INVALID)
            {
                static U8 is_allow_key_action = MMI_TRUE;

            #if defined(__MMI_TOUCH_SCREEN__) || defined(__MMI_HANDWRITING_PAD__)
                kal_bool is_pen_enabled, is_pen_down;

                mmi_pen_get_state(&is_pen_enabled, &is_pen_down);
            #endif /* defined(__MMI_TOUCH_SCREEN__) || defined(__MMI_HANDWRITING_PAD__) */ 

            #if defined(__MMI_SLEEP_OUT_BACKLIGHT_ON__)
                if ((IsBacklightOn() == MMI_FALSE) && (k.Keyevent == WM_KEYPRESS))
                {
                    //KP Jerry modify for LCD Backlight don't open when press any key during keypad been locked on 2007-4-4 start
                    #ifdef __MMI_LCD_OFF_WHEN_ANYKEY_PRESSED_AND_KEYPAD_LOCKED__
		      if(g_keylock_context.gKeyPadLockFlag)
                    {
                        if( (k.Keydata[0] == DEVICE_KEY_SEND) || (k.Keydata[0] == DEVICE_KEY_END) || (k.Keydata[0] == DEVICE_KEY_SK_RIGHT) ) 
			       TurnOnBacklight(1); /* timer backlight control */				
                    }
		      else
		      {
		          TurnOnBacklight(1); /* timer backlight control */
		      }
		      #else
		      TurnOnBacklight(1); /* timer backlight control */  	  
		      #endif 	  
		      //KP Jerry modify for LCD Backlight don't open when press any key during keypad been locked on 2007-4-4 end	  
                    is_allow_key_action = MMI_FALSE;
                }
                else
            #endif /* defined(__MMI_SLEEP_OUT_BACKLIGHT_ON__) */ 
            #if defined(__MMI_TOUCH_SCREEN__) || defined(__MMI_HANDWRITING_PAD__)
                if (is_pen_down && (k.Keyevent == WM_KEYPRESS))
                {
                    is_allow_key_action = MMI_FALSE;
                }
                else
            #endif /* defined(__MMI_TOUCH_SCREEN__) || defined(__MMI_HANDWRITING_PAD__) */ 
                if ((k.Keyevent == WM_KEYRELEASE) && (is_allow_key_action == MMI_FALSE))
                {
                    is_allow_key_action = MMI_TRUE;
                }
                else if (is_allow_key_action == MMI_TRUE)
                {
                    if ((k.Keyevent == WM_KEYPRESS) && (mmi_kbd_get_key_is_pressing_count() == 0))
                    {
                    #if defined(__MMI_TOUCH_SCREEN__) || defined(__MMI_HANDWRITING_PAD__)
                        mmi_pen_disable();
                    #endif 
                    }
                    mmi_frm_convert_process_key_event(k.Keyevent, k.Keydata[0]);

                    if ((k.Keyevent == WM_KEYRELEASE) && (mmi_kbd_get_key_is_pressing_count() == 0))
                    {
                    #if defined(__MMI_TOUCH_SCREEN__) || defined(__MMI_HANDWRITING_PAD__)
                        mmi_pen_enable();
                    #endif 
                    }
                }
            }

            msg_get_ext_queue_info(mmi_ext_qid, &msg_count);
            if (msg_count > 0 || OslNumOfCircularQMsgs() > 0)
            {
                g_keypad_flag = MMI_TRUE;
                break;
            }
        }
        else
        {
            g_keypad_flag = MMI_FALSE;
            break;
        }
    }   /* while(1) */
}


#endif /* MMI_ON_WIN32 */


/*****************************************************************************
 * FUNCTION
 *  StopCurrentKeyPadTone
 * DESCRIPTION
 *  Stops Current keypad tone
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void StopCurrentKeyPadTone(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (currKeyPadTone != 0xFFFF)
    {
        AudioStopReq(currKeyPadTone);
        currKeyPadTone = 0xFFFF;
    }
}


/*****************************************************************************
 * FUNCTION
 *  ClearKeyEvents
 * DESCRIPTION
 *  Clears Keyboard buffer
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void ClearKeyEvents(void)
{
#ifndef MMI_ON_WIN32
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    extern drv_get_key_func keypad_ptr;
    kbd_data k;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    MMI_TRACE((MMI_TRACE_G1_FRM, MMI_FRM_INFO_CLEAR_KEY_EVENTS_HDLR));

    if (keypad_ptr != NULL)
    {
        while ((*(keypad_ptr)) (&k) == KAL_TRUE)
        {
            /* restore state of keys */
            if (k.Keydata[0] != KEY_INVALID)
            {
                mmi_kbd_reset_key_state(k.Keyevent, k.Keydata[0]);
            }
        }
    }
    processUpRepeatKey = 0;
    pressKey = 0;   /* 0- full up, 1- half down, 2- full down */
    StopCurrentKeyPadTone();

#if defined(__MMI_TOUCH_SCREEN__) || defined(__MMI_HANDWRITING_PAD__)
    /*
     * We disable pen on key down and enable pen on key up. 
     * * If key down and key up events are not paired, pen is not enabled again.
     */
    mmi_pen_enable();
#endif /* defined(__MMI_TOUCH_SCREEN__) || defined(__MMI_HANDWRITING_PAD__) */ 

#endif /* MMI_ON_WIN32 */ 
}

#if defined(__MMI_HUMAN_VOICE_KEYPAD_TONE__)


/*****************************************************************************
 * FUNCTION
 *  GetHumanVoiceToneID
 * DESCRIPTION
 *  
 * PARAMETERS
 *  MMIKeyCode      [IN]        
 * RETURNS
 *  
 *****************************************************************************/
S16 GetHumanVoiceToneID(S16 MMIKeyCode)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    S16 i;
    U8 keypad_tone_type = GetKeypadToneType();

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (keypad_tone_type >= KEYPAD_TONE_HUMAN_VOICE_1 && keypad_tone_type <= KEYPAD_TONE_HUMAN_VOICE_6)
    {
        if (!CanPlayHumanVoiceKeyTone())
        {
            return -1;
        }
        if (MMIKeyCode >= KEY_0 && MMIKeyCode <= KEY_9)
        {
            i = MMIKeyCode - KEY_0;
        }
        else if (MMIKeyCode == KEY_STAR)
        {
            i = 10;
        }
        else if (MMIKeyCode == KEY_POUND)
        {
            i = 11;
        }
        else
        {
            i = -1;
        }

        if (i >= 0)
        {
            return (S16) ((keypad_tone_type - KEYPAD_TONE_HUMAN_VOICE_1) * 13 + i + MIN_HUMAN_VOICE_ID);
        }
    }
    return -1;
}
#endif /* defined(__MMI_HUMAN_VOICE_KEYPAD_TONE__) */ 

#if defined(__MMI_CUST_KEYPAD_TONE__)


/*****************************************************************************
 * FUNCTION
 *  GetCustKeyPadToneID
 * DESCRIPTION
 *  
 * PARAMETERS
 *  MMIKeyCode      [IN]        
 * RETURNS
 *  
 *****************************************************************************/
S16 GetCustKeyPadToneID(S16 MMIKeyCode)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U8 keypad_tone_type = GetKeypadToneType();

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (keypad_tone_type >= KEYPAD_TONE_CUST_1 && keypad_tone_type <= KEYPAD_TONE_CUST_6)
    {
        if (!CanPlayCustKeyTone())
        {
            return -1;
        }
        return (S16) (keypad_tone_type - KEYPAD_TONE_CUST_1 + MIN_KEYPAD_TONE_ID);
    }
    return -1;
}
#endif /* defined(__MMI_CUST_KEYPAD_TONE__) */ 


/*****************************************************************************
 * FUNCTION
 *  GetKeypadTone
 * DESCRIPTION
 *  
 * PARAMETERS
 *  MMIKeyCode      [IN]        
 * RETURNS
 *  
 *****************************************************************************/
U16 GetKeypadTone(S16 MMIKeyCode)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U8 is_found = MMI_FALSE;
    S16 i;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
#if defined(__MMI_CUST_KEYPAD_TONE__)
    if ((i = GetCustKeyPadToneID(MMIKeyCode)) >= 0)
    {
        return (U16) i;
    }
#endif /* defined(__MMI_CUST_KEYPAD_TONE__) */ 

#if defined(__MMI_HUMAN_VOICE_KEYPAD_TONE__)
    /* MTK added by Tim for human voice keypad tone */
    if ((i = GetHumanVoiceToneID(MMIKeyCode)) >= 0)
    {
        return (U16) i;
    }
#endif /* defined(__MMI_HUMAN_VOICE_KEYPAD_TONE__) */ 

    for (i = 0; i < MAX_KEYPADMAP; i++)
    {
        if (MMIKeyCode == nKeyPadMap[i].nMMIKeyCode)
        {
            is_found = MMI_TRUE;
            break;
        }
    }

    MMI_ASSERT(is_found == MMI_TRUE);

    return (U16) nKeyPadMap[i].KeyPadTone;

⌨️ 快捷键说明

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