blob: 6a0c5f3c4fc76019153207c104f97b1b89c9e012 [file] [log] [blame]
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2001
*
*****************************************************************************/
/*****************************************************************************
*
* Filename:
* ---------
* dcl_kbd.h
*
* Project:
* --------
* Maui
*
* Description:
* ------------
* Header file of DCL (Driver Common Layer) for KBD.
*
* Author:
* -------
* -------
*
*============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*============================================================================
****************************************************************************/
#ifdef DCL_DEFINITION_STRUCT
#ifndef __DCLS_KBD_H_STRUCT__
#define __DCLS_KBD_H_STRUCT__
#ifdef __BUILD_DOM__
/*keypad driver control commands which is related with software layer*/
typedef enum
{
KBD_CMD_SET_LONG_PRESS_TIME, /*Set the long press key time*/
KBD_CMD_SET_REPEAT_PRESS_TIME, /*Set the repeat press key time*/
KBD_CMD_SET_DETECTION_MODE, /*Set the key detection mode*/
KBD_CMD_GET_KEY_DATA, /*get the press key data*/
KBD_CMD_PEEK_KEY_DATA,/*peek the press key data*/
KBD_CMD_GET_DETECTION_MODE,/*get the current key detection mode*/
KBD_CMD_CTRL_KEY_SUPPORT,/*query the key is support or not */
KBD_CMD_CTRL_KEY_MULTIPLE,/*query the key is multiple key or not*/
KBD_CMD_GET_KEY_EVENT_CNT,/*get the key event in the buffer*/
KBD_CMD_PUT_KEY_DATA,/*put the key press data to the upper layer*/
}KBD_CMDS;
#else
#define KBD_CMDS \
KBD_CMD_SET_LONG_PRESS_TIME, \
KBD_CMD_SET_REPEAT_PRESS_TIME, \
KBD_CMD_SET_DETECTION_MODE, \
KBD_CMD_GET_KEY_DATA, \
KBD_CMD_PEEK_KEY_DATA,\
KBD_CMD_GET_DETECTION_MODE,\
KBD_CMD_CTRL_KEY_SUPPORT,\
KBD_CMD_CTRL_KEY_MULTIPLE,\
KBD_CMD_GET_KEY_EVENT_CNT,\
KBD_CMD_PUT_KEY_DATA,\
KBD_CMD_FIND_TWO_STEP,
#endif
/*keypad events to the upper layer*/
typedef enum {
DCL_kbd_onekey_press=0,/*one key press event*/
DCL_kbd_onekey_release,/*one key release event*/
#ifdef TWO_KEY_ENABLE
DCL_kbd_twokey_press, /*two key press event, which has been phase out now */
DCL_kbd_twokey_release,/*two key release event, which has been phase out now*/
#endif /*TWO_KEY_ENABLE*/
DCL_kbd_onekey_longpress,/*one long press key event*/
DCL_kbd_onekey_repeated,/*one repeated press key event*/
DCL_kbd_onekey_fullpress,/*two step key function: one key full press event*/
DCL_kbd_twokey_detection_enable,/*enable two key detection mode*/
DCL_kbd_threekey_detection_enable,/*enable three key detection mode*/
DCL_kbd_multikey_detection_disable/*multiple key detection mode is disable, default is one key detection mode*/
} DCL_KBD_EVENT;
/*key detection mode*/
typedef enum {
DCL_kbd_1_key_det_mode = 0, /*one key detection mode*/
DCL_kbd_2_keys_det_mode,/*two key detection mode */
DCL_kbd_3_keys_det_mode /*three key detection mode*/
}DCL_kbd_key_det_mode;
/*the control command data for command:KBD_CMD_SET_DETECTION_MODE and KBD_CMD_GET_DETECTION_MODE */
typedef struct
{
DCL_BOOL bFlag;/*the return flag to indicate whether switch mode successfully*/
DCL_UINT8 Det_Mode;/*the detection mode value*/
} SKBD_CTRL_MODE_T;
/*the control command data for command:KBD_CMD_GET_KEY_EVENT_CNT*/
typedef struct
{
DCL_UINT8 keycnt;/*the key event count in the buffer*/
}SKBD_CTRL_KEY_CNT_T;
/*the control command data for command:KBD_CMD_GET_KEY_DATA*/
typedef struct
{
DCL_KBD_EVENT Keyevent;/*the key event*/
#ifdef TWO_KEY_ENABLE
DCL_UINT8 Keydata[2];/*the key data*/
#else /*!TWO_KEY_ENABLE*/
DCL_UINT8 Keydata[1];/*the key data*/
#endif /*TWO_KEY_ENABLE*/
#if defined(__TC01__)
DCL_UINT32 keytimestamp;/*the key time stamp*/
#endif
} SKBD_CTRL_KEYDATA_T;
/*the control command data for command:KBD_CMD_PEEK_KEY_DATA*/
typedef struct
{
SKBD_CTRL_KEYDATA_T* keydata;/*the key data */
DCL_BOOL specify_read; /*specify whether to read the data in the position of read_pointerl; KAL_TURE:specify to peek the data
in the position:read_pointer;KAL_FALSE: return the current read pointer data to the upper layer*/
DCL_UINT32 read_pointer;/*the read position in the buffer, the max value is buff_size;*/
DCL_UINT32* current_read_pointer;/*return the data in the structure position*/
}SKBD_CTRL_PEEKDATA_T;
/*the control command data for command:KBD_CMD_CTRL_KEY_MULTIPLE*/
typedef struct
{
DCL_BOOL fgIMK;/*the return value to indicate whether the ukey is a multiple key*/
DCL_UINT8 uKey; /*the input parameter to indicate the key index*/
} SKBD_CTRL_MULTIKEY_T;
/*the control command data for command:KBD_CMD_CTRL_KEY_SUPPORT*/
typedef struct
{
DCL_UINT8 uKey;/*the input parameter to indicate the key index*/
DCL_BOOL fgIKBS;/*the return flag to indicate whether the ukey *is supported*/
} SKBD_CTRL_KEYSUPPORT_T;
/*the control command data for command:KBD_CMD_SET_LONG_PRESS_TIME and KBD_CMD_SET_REPEAT_PRESS_TIME*/
typedef struct
{
DCL_UINT32 u4Tick;/*the time unit is ms.*/
} SKBD_CTRL_TIME_T;
/*the control command data for command:KBD_CMD_PUT_KEY_DATA */
typedef struct
{
DCL_UINT8 keydata;/*the key index number*/
}SKBD_CTRL_PUTKEY_T;
typedef struct
{
DCL_UINT32 *number;
DCL_UINT8 *two_step;
}SKBD_CTRL_FIND_TWO_STEP_T;
#ifdef __BUILD_DOM__
/*define the data structure type for every command*/*/
typedef union
{
SKBD_CTRL_TIME_T rKBDCtrTime; /*the long press and repeat press time */
SKBD_CTRL_KEYSUPPORT_T rKBDCtrlKeySupport; /*the key support structure*/
SKBD_CTRL_MULTIKEY_T rKBDCtrlMultiple; /*the multiply key structure*/
SKBD_CTRL_PEEKDATA_T rKBDCtrPeekData; /*peek key data command control data structure*/
SKBD_CTRL_KEYDATA_T rKBDCtrGetData; /*get key data command control data structure*/
SKBD_CTRL_MODE_T rKBDCtrMode; /*detection command control data structure*/
SKBD_CTRL_KEY_CNT_T rKBDCtrkeyCnt;/*get key event count command control data structure*/
SKBD_CTRL_PUTKEY_T rKBDCtrPutKey;/*put key data command control data structure*/
SKBD_CTRL_FIND_TWO_STEP_T rKBDCtrlFindTwoStepKey;
}KBDS_CTRLS;
#else
#define KBDS_CTRLS \
SKBD_CTRL_TIME_T rKBDCtrTime; \
SKBD_CTRL_KEYSUPPORT_T rKBDCtrlKeySupport; \
SKBD_CTRL_MULTIKEY_T rKBDCtrlMultiple; \
SKBD_CTRL_PEEKDATA_T rKBDCtrPeekData; \
SKBD_CTRL_KEYDATA_T rKBDCtrGetData; \
SKBD_CTRL_MODE_T rKBDCtrMode;\
SKBD_CTRL_KEY_CNT_T rKBDCtrkeyCnt;\
SKBD_CTRL_PUTKEY_T rKBDCtrPutKey;\
SKBD_CTRL_FIND_TWO_STEP_T rKBDCtrlFindTwoStepKey;
#endif
#endif
#endif
#ifdef DCL_DEFINITION_PROTOTYPE
#ifndef __DCL_SKBD_H_PROTOTYPE__
#define __DCL_SKBD_H_PROTOTYPE__
/*************************************************************************
* FUNCTION
* DclSKBD_Initialize
*
* DESCRIPTION
* This function is to initialize keypad hardware module, It is called during the driver initialization.
*
* PARAMETERS
* None
*
* RETURNS
* STATUS_OK
*
*************************************************************************/
extern DCL_STATUS DclSKBD_Initialize(void);
/*************************************************************************
* FUNCTION
* DclSKBD_Open
*
* DESCRIPTION
* This function is to open the keypad hw module and return a handle.
*
* PARAMETERS
* dev: keypad device ID. it should be DCL_KBD.
* flags: User of keypad driver. It should be the user module id, if the user does not module id, it can be set 0.
*
* RETURNS
* DCL_HANDLE_INVALID: Incorrect device ID.
* Other value: A valid handle
*
* EXAMPLE
* <code>
* DCL_HANDLE kbd_handle;
* kbd_handle = DclSKBD_Open(DCL_KBD, MOD_DRVKBD);
* </code>
*
*************************************************************************/
extern DCL_HANDLE DclSKBD_Open(DCL_DEV dev, DCL_FLAGS flags);
/*************************************************************************
* FUNCTION
* DclSKBD_Close
*
* DESCRIPTION
* This function is to close the keypad driver.
*
* PARAMETERS
* handle: the user handler of the keypad, which is returned by the DclSKBD_Close function.
*
* RETURNS
* STATUS_OK: return successfully.
*
*************************************************************************/
extern DCL_STATUS DclSKBD_Close(DCL_HANDLE handle);
/*************************************************************************
* FUNCTION
* DclSKBD_Control
*
* DESCRIPTION
* This function is to control the keypad driver, the user can call the interface to get the keypad driver services through the different commands.
* the control services is responsible for the software related services, the keypad hardware related services can be accessed through the DCLH** interface.
* PARAMETERS
* handle: the user handler of the keypad, which is returned by the DclSKBD_Open function.
* cmd: the keypad driver control commands, the values can be get from the enum KBD_CMDS.
* data: the data which is corresponed to the commands, the data type can beone of the enum KBDS_CTRLS.
*
* RETURNS
* DCL_HANDLE_INVALID: Incorrect device ID.
*STATUS_BUFFER_EMPTY:indicate the buffer is empty, when the command KBD_CMD_GET_KEY_DATA or KBD_CMD_PEEK_KEY_DATA is used.
* STATUS_OK: return successfully.
*
* EXAMPLE
* <code>
* DCL_CTRL_DATA_T sta;
* DCL_HANDLE handle1;
* handle1 = DclSKBD_Open(DCL_KBD, MOD_MMI);
* DclSKBD_Control(handle1,KBD_CMD_GET_KEY_EVENT_CNT , (DCL_CTRL_DATA_T*)&sta);
*return sta.rKBDCtrkeyCnt.keycnt;
* </code>
*
*************************************************************************/
extern DCL_STATUS DclSKBD_Control(DCL_HANDLE handle, DCL_CTRL_CMD cmd, DCL_CTRL_DATA_T *data);
/*************************************************************************
* FUNCTION
* DclSKBD_RegisterCallback
*
* DESCRIPTION
* This function is to register the hardware event callback function.
*
* PARAMETERS
* handle: the user handler of the keypad, which is returned by the DclHKBD_Open function.
* event: Reserved.
* callback: the callback function pointer.
*
* RETURNS
* DCL_HANDLE_INVALID: Incorrect device ID.
* STATUS_INVALID_EVENT: the event parameter is not valid for the keypad.
* STATUS_OK: return successfully.
*
*************************************************************************/
extern DCL_STATUS DclSKBD_RegisterCallback(DCL_HANDLE handle, DCL_EVENT event,PFN_DCL_CALLBACK callback);
#endif
#endif