diff --git a/mcu/interface/protocol/agps/eepapi.h b/mcu/interface/protocol/agps/eepapi.h
new file mode 100644
index 0000000..7485692
--- /dev/null
+++ b/mcu/interface/protocol/agps/eepapi.h
@@ -0,0 +1,143 @@
+/*****************************************************************************
+*  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) 2016
+*
+*  BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+*  THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS (""MEDIATEK SOFTWARE"")
+*  RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+*  AN ""AS-IS"" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+*  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+*  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+*  NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+*  SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+*  SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+*  THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+*  NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+*  SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+*  BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+*  LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+*  AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+*  OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+*  MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+*  THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+*  WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+*  LAWS PRINCIPLES.  ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+*  RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+*  THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+/*************************************************************
+*
+* This Software is the property of VIA Telecom, Inc. and may only be used pursuant to a license from VIA Telecom, Inc.  
+* 
+* Any unauthorized use inconsistent with the terms of such license is strictly prohibited.
+* 
+* Copyright (c) 2010 VIA Telecom, Inc.  All rights reserved.
+*
+*************************************************************/
+#ifndef EEPAPI_H
+#define EEPAPI_H
+/*****************************************************************************
+ 
+  FILE NAME:  eepapi.h
+
+  DESCRIPTION : EEP task interface
+ 
+      This include file provides system wide global type declarations and 
+      constants
+  HISTORY     :
+      See Log at end of file
+
+*****************************************************************************/
+
+#include "sysdefs.h" 
+
+/*------------------------------------------------------------------------
+* EXE Interfaces - Definition of Signals, GPIO and Mailboxes
+*------------------------------------------------------------------------*/
+
+#define EEP_RUN_SIGNAL   		EXE_SIGNAL_1 	/*  */
+
+
+/*----------------------------------------------------------------------------
+ Defines Constants used in this file
+----------------------------------------------------------------------------*/
+#define EEP_SLEEP_WAKEUP_FLAG 		MON_DEEP_SLEEP_EEP_1_FLAG	/* for EEP activity */
+
+/*----------------------------------------------------------------------------
+* EEP States : Kind of Virtual State 
+*----------------------------------------------------------------------------*/
+typedef enum
+{
+	GPS_PGPS_OFF,
+	GPS_PGPS_ON
+} GpsPgpsStateT;
+		
+/*----------------------------------------------------------------------------
+* Message IDs for signals and commands sent to LEC
+*----------------------------------------------------------------------------*/
+
+typedef enum 
+{
+	/* from PSW */
+	EEP_GPS_PGPS_SAVED_SEED_MSG,	/* Saved Seed file */
+	EEP_GPS_PGPS_SAVED_CLOCK_MSG,	/* Saved Clock file */
+
+	/* from ETS */
+	EEP_TST_FSM_READ_MSG,				
+	EEP_TST_FSM_WRITE_MSG,				
+
+	EEP_TST_RXN_VERSION_MSG,			
+	EEP_TST_SEED_CREATE_FROM_TSEED_MSG,	
+	EEP_TST_SEED_CHECK_SEED_FILE_MSG,	
+	EEP_TST_SEED_DELETE_SEED_FILE_MSG,	
+
+	EEP_TST_EEPH_START_PROPAGATOR_MSG,	
+	EEP_TST_EEPH_STOP_PROPAGATOR_MSG,	
+	EEP_TST_EEPH_CHECK_EEPH_FILES_MSG,	
+	EEP_TST_EEPH_DELETE_EEPH_FILES_MSG,	
+
+	EEP_NUM_MSGS_ID
+} EepMsgIdT;
+
+/* For the Rerference, Define EEP send Msg IDs to other Tasks */
+/* It should be defined in each Task's api.h file */
+typedef enum 
+{ 											
+	EEP_SEND_NUM_MSGS_ID
+} EepSendMsgIdT;
+
+typedef enum
+{
+	NONE = 	0x00,  	/* After Powered On */
+	PATCH = 0x01,  	/* For Patch Uploading  */
+	EEP = 	0x02, 	/* For Propagator */
+	LEC	= 	0x03  	/* For STE's Call */
+
+} CalledByWhoT;
+
+/*----------------------------------------------------------------------------
+* Defined functions in EEP 
+*----------------------------------------------------------------------------*/
+/* *pSeed: input - A pointer to where the EEP can get a Seed data from.
+    sSeed: input - Size of seed data. */
+
+extern void EepWriteSeedFile(char *pSeed, kal_uint16 sSeed);
+
+/* *pClock: input - A pointer to where the EEP can get a Clock data from.
+    sClock: input - Size of Clock data. */
+extern void EepWriteClockFile(char *pClock, kal_uint16 sClock);
+
+
+#endif 
+/*****************************************************************************
+* $Log: eepapi.h $
+* Revision 1.0  2009/09/08 schun
+*****************************************************************************/
+
