[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/interface/driver/peripheral/DclS_kbd.h b/mcu/interface/driver/peripheral/DclS_kbd.h
new file mode 100644
index 0000000..6a0c5f3
--- /dev/null
+++ b/mcu/interface/driver/peripheral/DclS_kbd.h
@@ -0,0 +1,327 @@
+/*****************************************************************************
+*  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
+