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

📄 mfw_kbd.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 4 页
字号:
/*
+--------------------------------------------------------------------+
| PROJECT: MMI-Framework (8417)         $Workfile:: mfw_kbd.c       $|
| $Author: zhenggl $ CONDAT GmbH           $Revision: 1.4 $|
| CREATED: 21.09.98                     $Modtime:: 23.03.00 8:24    $|
| STATE  : code                                                      |
+--------------------------------------------------------------------+

   MODULE  : MFW_KBD

   PURPOSE : keyboard handling functions

   EXPORT  :

   TO DO   : adjust PEI/driver interface

   $History:: mfw_kbd.c                                             $
 *
 * *****************  Version 18  *****************
 * User: Es           Date: 23.03.00   Time: 14:48
 * Updated in $/GSM/Condat/MS/SRC/MFW
 * no stddefs ???
 *
 * *****************  Version 17  *****************
 * User: Rm           Date: 23-02-00   Time: 3:15p
 * Updated in $/GSM/Condat/MS/SRC/MFW
 * stop Auto and Long timer finishing with kbdAlways
|
| *****************  Version 16  *****************
| User: Le           Date: 26.01.00   Time: 12:13
| Updated in $/GSM/Condat/MS/SRC/MFW
| Make definition different for Windows and Target
 *
 * *****************  Version 15  *****************
 * User: Be           Date: 25.01.00   Time: 18:20
 * Updated in $/GSM/Condat/MS/SRC/MFW
|
| *****************  Version 14  *****************
| User: Le           Date: 6.01.00    Time: 9:23
| Updated in $/GSM/Condat/MS/SRC/MFW
| Alignment of MFW versions
 *
 * *****************  Version 3  *****************
 * User: Be           Date: 29.11.99   Time: 14:31
 * Updated in $/GSM/Condat/SND-MMI/MFW
 * target integration
 *
 * *****************  Version 2  *****************
 * User: Es           Date: 22.11.99   Time: 10:29
 * Updated in $/GSM/Condat/SND-MMI/MFW
 *
 * *****************  Version 1  *****************
 * User: Es           Date: 18.11.99   Time: 16:35
 * Created in $/GSM/Condat/SND-MMI/MFW
 * Initial
 *
 * *****************  Version 13  *****************
 * User: Es           Date: 6.07.99    Time: 12:20
 * Updated in $/GSM/DEV/MS/SRC/MFW
 *
 * *****************  Version 11  *****************
 * User: Es           Date: 1.04.99    Time: 17:07
 * Updated in $/GSM/DEV/MS/SRC/MFW
 * removed lots of traces
 *
 * *****************  Version 10  *****************
 * User: Es           Date: 18.02.99   Time: 17:01
 * Updated in $/GSM/DEV/MS/SRC/MFW
 *
 * *****************  Version 9  *****************
 * User: Es           Date: 17.02.99   Time: 19:11
 * Updated in $/GSM/DEV/MS/SRC/MFW
 *
 * *****************  Version 8  *****************
 * User: Es           Date: 14.01.99   Time: 17:19
 * Updated in $/GSM/DEV/MS/SRC/MFW
 *
 * *****************  Version 7  *****************
 * User: Es           Date: 23.12.98   Time: 16:19
 * Updated in $/GSM/DEV/MS/SRC/MFW
 * data:            modifier
 * 08/12           zym add in kbdsignal
*/

#define ENTITY_MFW

#if defined (NEW_FRAME)

    #include "typedefs.h"
    #include "vsi.h"
    #include "pei.h"
    #include "custom.h"
    #include "gsm.h"

#else

    #include "stddefs.h"
    #include "custom.h"
    #include "gsm.h"
    #include "vsi.h"

#endif

#include <stdio.h>
#include <string.h>
#include "mfw_mfw.h"
#include "mfw_sys.h"
#include "mfw_tim.h"
#include "drv_key.h"
#include "mfw_win.h"
#include "mfw_kbd.h"
#include "kpd_api.h"
#include "mfw_ffs.h"
#include "mfw_utils.h"
#include "pwr.h"
#include "r2d.h"

#include "light.h"
//#define TDTRACE 1
#include "../bmi/mmiutilapi.h"
// 2004.4.9 WYJ
#include "../bmi/mmisounds_defs.h"
extern void StartPlayByReason(AUDIO_REASON reasonid, BOOLEANS index);

static int kbdCommand (U32 cmd, void *h);
static int toLong (U32 t, void *h);
static int toAuto (U32 t, void *h);
extern MfwHnd gtVibator;

static MfwCb doAlways;                  /* all cases handler        */
static MfwHdr timLongH;                 /* the long press timer     */
static MfwTim timLong;
static MfwHdr timAutoH;                 /* the auto repeat timer    */
static MfwTim timAuto;
static U32 valAuto;                     /* auto start intervall     */
static U32 valRepeat;                   /* auto repeat intervall    */
static U32 curMap;                      /* current key map          */
static U8 curKey;                       /* current key code         */
static int nElements=0;
static int still_processing_flag;
driver_Parameter drvpara;
// PATCH LE 06.06.00
// current MFW element needed for multiple instances
EXTERN MfwHdr * current_mfw_elem;
extern int g_keypadnum;
extern BOOL call_win_flag;

extern UINT32 driverFlag;  //xsf add for KCD_LEFT 2003.01.14

extern INT8 r2d_g_event_was_sent;
extern UBYTE animation_complete ;  //xsf add 2003.02.20
int   g_kpdnum =0 ;   ///zym added 10/18
int   g_kpdtim = 0;  ///zym added 10/18

extern int NotCharingMode;	/* 2004/07/05 sunsj modify */
/* 2004/07/09 sunsj add for forbidden hall off */
extern int HallOffForbid;

#define PRENUMPERSEC 4   //zym added 10/18
// END PATCH LE 06.06.00
/*
** KeyPress Buffer Macros and Limits
*/

#define MAX_KPRESS_BFR 100

typedef struct keyPressDetailsTag
{
    char make;
    char key;
} keyPressDetails;

static keyPressDetails keyPressBfr[MAX_KPRESS_BFR];
static SHORT mfw_kbd_kpress_buf_id;

extern void sendKeyInd( T_KPD_VIRTUAL_KEY_ID virtual_key_id,
                        T_KPD_KEY_STATE key_state,
                        T_KPD_PRESS_STATE press_state);

/*2003/12/20,talcon add*/
extern void idleHandleByLcdState(U8 uState);

/* 2004/07/09 sunsj add */
extern int FocuseIdlewin();

//#define OUTERIDLE_FOR_FTA 
#ifdef OUTERIDLE_FOR_FTA
#define setOuterState(a,b,char *par)
#define setChargeState(a,b)
#else
extern void setOuterState(U32 flags,UBYTE mask,char *par);
extern void setChargeState(U8 flags,void *para);
#endif
//Bob added for ledblink;
//ledblink hander
extern MfwHnd ledblink;
extern UBYTE ledblinkflag;
/*


+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : MFW_KBD            |
| STATE   : code                        ROUTINE : kbdInit            |
+--------------------------------------------------------------------+

  PURPOSE : initialize keyboard handler

*/

MfwRes kbdInit (void)
{
    timLong.time = 0;                   /* setup long press timer   */
    timLong.left = 0;
    timLong.handler = toLong;
    timLong.next = 0;
    timLongH.data = &timLong;
    timLongH.type = MfwTypTim;

    timAuto.time = 0;                   /* setup auto repeat timer  */
    timAuto.left = 0;
    timAuto.handler = toAuto;
    timAuto.next = 0;
    timAutoH.data = &timAuto;
    timAutoH.type = MfwTypTim;
    valAuto = valRepeat = 0;

    keyInit(kbdSignal);                 /* init keyboard driver     */
    mfwCommand[MfwTypKbd] = (MfwCb) kbdCommand;
    doAlways = 0;

    mfw_kbd_kpress_buf_id = mfw_cbuf_create(MAX_KPRESS_BFR,
                                            sizeof(keyPressDetails),
                                            FALSE,
                                            0xFF,
                                            TRUE,
                                            keyPressBfr);

    if(mfw_kbd_kpress_buf_id < 0)
        TRACE_EVENT_P1("ERROR : mfw_cbuf_create failed with error value %d", mfw_kbd_kpress_buf_id);
    return MfwResOk;
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : MFW_KBD            |
| STATE   : code                        ROUTINE : kbdExit            |
+--------------------------------------------------------------------+

  PURPOSE : finalize keyboard handler

*/

MfwRes kbdExit (void)
{
    mfwCommand[MfwTypKbd] = 0;
    keyExit();

    return MfwResOk;
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : MFW_KBD            |
| STATE   : code                        ROUTINE : kbdAlways          |
+--------------------------------------------------------------------+

  PURPOSE : create keyboard control for all events

*/

MfwCb kbdAlways (MfwCb f)
{
    MfwCb always = doAlways;

    doAlways = f;
    if(!f)
    {
        timStop(&timLongH);
        timStop(&timAutoH);
    }

    return always;
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : MFW_KBD            |
| STATE   : code                        ROUTINE : kbdTime            |
+--------------------------------------------------------------------+

  PURPOSE : define keyboard timeouts

*/

void kbdTime (long tLong, long tAuto, long tRepeat)
{
    timLong.time = tLong;               /* setup long press timer   */
    timAuto.time = tAuto;               /* setup auto repeat timer  */
    valAuto = tAuto;                    /* save auto start timeout  */
    valRepeat = tRepeat;                /* save repeat intervall    */
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : MFW_KBD            |
| STATE   : code                        ROUTINE : kbdCreate          |
+--------------------------------------------------------------------+

  PURPOSE : create keyboard control

*/

MfwHnd kbdCreate (MfwHnd w, MfwEvt e, MfwCb f)
{
    MfwHdr *hdr = (MfwHdr *) mfwAlloc(sizeof(MfwHdr));
    MfwKbd *kbd = (MfwKbd *) mfwAlloc(sizeof(MfwKbd));

    if(!hdr || !kbd)
        return 0;

    kbd->map = e;
    kbd->key = 0;
    kbd->handler = f;

    hdr->data = kbd;
    hdr->type = MfwTypKbd;

    return mfwInsert(w,hdr);
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : MFW_KBD            |
| STATE   : code                        ROUTINE : kbdDelete          |
+--------------------------------------------------------------------+

  PURPOSE : delete keyboard control

*/

MfwRes kbdDelete (MfwHnd h)
{
    MfwRes res;

    if(!h)
        return MfwResIllHnd;

    res = (mfwRemove(h)) ? MfwResOk : MfwResIllHnd;

    mfwFree(((MfwHdr *) h)->data,sizeof(MfwKbd));
    mfwFree(h,sizeof(MfwHdr));

    return res;
}


/*
+--------------------------------------------------------------------+
| PROJECT : MMI-Framework (8417)        MODULE  : MFW_KBD            |
| STATE   : code                        ROUTINE : sigExec            |
+--------------------------------------------------------------------+

  PURPOSE : execute keyboard signal
            if the registered set of keys match the currently
            pressed key, the event handler is called, if the
            registered flags match the current flags according
            to the following table:
            M: Make/Break (key release events wanted)
            L: Long press event (timeout set via kbdTime())
            A: Auto repeat event (timing defined via kbdTime())

                                            M 0 0 0 0 1 1 1 1
            current event flags ---------   L 0 0 0 0 0 0 1 1
                                            A 0 0 0 0 0 1 0 1
                                      M L A .................
                                      0 0 0 . 0 0 0 0 1 0 0 0
                                      0 0 1 . 0 0 0 0 1 1 0 1
            registered                0 1 0 . 0 0 0 0 0 0 1 1
            event       -----------   0 1 1 . 0 0 0 0 0 1 1 1
            flags                     1 0 0 . 1 1 1 1 1 0 0 0
                                      1 0 1 . 1 1 1 1 1 1 0 1
                                      1 1 0 . 1 1 1 1 0 0 1 1
                                      1 1 1 . 1 1 1 1 0 1 1 1

*/

static int sigExec (MfwHdr *curElem, U32 map, U8 key)
{
    MfwKbd *kc;
    TRACE_FUNCTION("sigExec()");
    while(curElem)
    {
        if(curElem->type == MfwTypKbd)
        {
            kc = curElem->data;
            if(kc->map & map & ~KEY_FLAGS)
            {                           /* keys match               */
                kc->code = key;         /* set current key code     */
                if(map & KEY_MAKE)
                {
                    kc->key |= map;     /* set key in control block */
                }
                else
                {
                    kc->key &= ~map;      /* del key in control block */
                    kc->key &= ~KEY_MAKE; /* del make/break flag      */
                }
                if((KEY_MAKE & ~map & kc->map) ||
                   (KEY_MAKE & map &&
                    ((KEY_LONG & map & kc->map)        ||
                     (!(KEY_LONG & kc->map)
                      && (KEY_AUTO & kc->map & map)) ||
                     (!(KEY_LONG & map)
                      && !(KEY_AUTO & map)
                      && !(KEY_LONG & kc->map))      ||
                     (!(KEY_LONG & map)
                      && (KEY_AUTO & map)
                      && (KEY_AUTO & kc->map)))))
                {
                    if(kc->handler)    /* handler valid            */
                    {
                        // PATCH LE 06.06.00
                        // store current mfw elem
                        current_mfw_elem = curElem;

                        // END PATCH LE 06.06.00
                        if((*(kc->handler))(map,kc)){

                            return 1;   /* event consumed           */
                        	}
                    }
                }
            }
        }
        curElem = curElem->next;
    }

    return 0;   //zy revise
}

⌨️ 快捷键说明

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