Baseline update from LYNQ_SDK_ASR_T108_V05.03.01.00(kernel build error.)
Change-Id: I56fc72cd096e82c589920026553170e5cb9692eb
diff --git a/mbtk/include/gsw/gsw_at.h b/mbtk/include/gsw/gsw_at.h
new file mode 100755
index 0000000..5d9c486
--- /dev/null
+++ b/mbtk/include/gsw/gsw_at.h
@@ -0,0 +1,60 @@
+/**
+ * @brief AT registered callback function
+ * @param [in] const char *input:atcmd command
+ * @param [out] char *output:A cache of output command execution results
+ * @param [in] out_max_size:Output cache size
+ * @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+ */
+typedef void(*AT_CALLBACK)(char input[],char output[],int out_max_size);
+
+typedef enum
+{
+ soc_max = 0,
+ cpu0,
+ cpu1,
+ cpu2,
+ cpu3,
+ gpu0,
+ gpu1,
+ dramc,
+ mmsys,
+ md_5g,
+ md_4g,
+ md_3g,
+ soc_dram_ntc,
+ pa_5g,
+ pa_4g,
+ rf_ntc,
+ pmic,
+ pmic_vcore,
+ pmic_vpro,
+ pmic_vgpu=19,
+}ZONE_NUM;
+
+
+
+
+
+/**
+* @brief Registration interface of AT
+* @param [in] const char *atcmd
+* @param [in] AT_CALLBACK func
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_reg_atcmd(const char *atcmd,AT_CALLBACK func);
+
+/**
+ * @brief Initializes the at module in the sdk
+ * @param [in/out] None
+ * @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+ */
+int32_t gsw_sdk_at_init(void);
+
+/**
+* @brief get temperature of specify zone
+* @param [in] ZONE_NUM num
+* @param [out] int *temp
+* @retval RET_SUCCESS\RET_NORMAL_FAIL
+*/
+int32_t gsw_get_modem_temperture(ZONE_NUM num,int32_t *temp);
+
diff --git a/mbtk/include/gsw/gsw_gnss.h b/mbtk/include/gsw/gsw_gnss.h
new file mode 100755
index 0000000..90508f6
--- /dev/null
+++ b/mbtk/include/gsw/gsw_gnss.h
@@ -0,0 +1,184 @@
+#define MBTK_GNSS_IND_LOCATION (1) // 1
+#define MBTK_GNSS_IND_NMEA (1 << 1) // 2
+#define QSER_GNSS_TIMEOUT 5
+
+typedef enum{
+ GSW_SWITCH_DISABLE = 0, /**< configuration switch disable :0 */
+ GSW_SWITCH_ENABLE /**< configuration switch enable :1 */
+}GSW_GNSS_CONF_SWITCH;
+
+typedef enum{
+GSW_XTRA_STATE_MIN = 0,
+GSW_XTRA_STATE_DISBALE = GSW_XTRA_STATE_MIN,
+GSW_XTRA_STATE_ENABLE,
+GSW_XTRA_STATE_MAX
+}gsw_xtra_state_e;
+
+typedef enum{
+ GSW_FREQ_1HZ = 1, /**< 1hZ */
+ GSW_FREQ_2HZ = 2, /**< 2hZ */
+ GSW_FREQ_5HZ = 5, /**< 5hZ */
+ GSW_FREQ_10HZ = 10, /**< 10hZ */
+}GSW_FREQ_TYPE_T;
+
+
+
+typedef enum{
+ GSW_MODE_GPS = 1, /**< GPS only */
+ GSW_MODE_BEIDOU, /**< BEIDOU only*/
+ GSW_MODE_GPS_BEIDOU, /**< GPS+BEIDOU */
+ GSW_MODE_GLONASS, /**< GLONASS only */ /* The high-tech platform does not support this type */
+ GSW_MODE_GPS_GLONASS, /**< GPS+GLONASS */
+ GSW_MODE_GLONASS_BEIDOU, /**< GLONASS+BEIDOU */ /* The high-tech platform does not support this type */
+ GSW_MODE_GPS_GLONASS_BEIDOU, /**< GPS+GLONASS+BEIDOU */ /* The high-tech platform does not support this type */
+ GSW_MODE_GALILEO, /**< GALILEO only */
+ GSW_MODE_GPS_GALILEO, /**< GPS+GALILEO */
+ GSW_MODE_BEIDOU_GALILEO, /**< BEIDOU+GALILEO */
+ GSW_MODE_GPS_BEIDOU_GALILEO, /**< GPS+BEIDOU+GALILEO */
+ GSW_MODE_GLONASS_GALILEO, /**< GLONASS+GALILEO */
+ GSW_MODE_GPS_GLONASS_GALILEO, /**< GPS+GLONASS+GALILEO */
+ GSW_MODE_BEIDOU_GLONASS_GALILEO, /**< BEIDOU+GLONASS+GALILEO */ /* The high-tech platform does not support this type */
+}GSW_GNSS_MODE_CONFIGURATION;
+
+
+
+typedef struct
+{
+ /**< set to sizeof(GpsLocation) */
+ size_t size;
+ /**< Contains GpsLocationFlags bits. */
+ unsigned short int flags;
+ /**< Represents latitude in degrees. */
+ double latitude;
+ /**< Represents longitude in degrees. */
+ double longitude;
+ /**< Represents altitude in meters above the WGS 84 reference ellipsoid. */
+ double altitude;
+ /**< Represents speed in meters per second. */
+ float speed;
+ /**< Represents heading in degrees. */
+ float bearing;
+ /**< Represents expected accuracy in meters. */
+ float accuracy;
+ /**< Timestamp for the location fix. */
+ long long int timestamp;
+}GSW_GNSS_LOCATION_T;
+
+typedef struct {
+ GSW_GNSS_LOCATION_T legacyLocation;
+ float horizontalAccuracyMeters;
+ /**< Represents expected vertical position accuracy in meters
+ * (68% confidence).*/
+ float verticalAccuracyMeters;
+ /**< Represents expected speed accuracy in meter per seconds
+ * (68% confidence).*/
+ float speedAccuracyMetersPerSecond;
+ /**< Represents expected bearing accuracy in degrees
+ * (68% confidence).*/
+ float bearingAccuracyDegrees;
+}GSW_GNSS_LOCATION_EXT_T;
+
+typedef void (*gsw_gnss_location_callback_ext)(GSW_GNSS_LOCATION_EXT_T* location);
+typedef void (*gsw_gnss_nmea_callback )(const char* nmea, int length);
+
+typedef struct{
+gsw_gnss_location_callback_ext gsw_location_cb;
+gsw_gnss_nmea_callback gsw_nmea_cb;
+}gsw_gnss_cb;
+
+typedef struct{
+GSW_GNSS_MODE_CONFIGURATION start_mode;
+GSW_FREQ_TYPE_T freq;
+gsw_gnss_cb callback;
+}gsw_gnss_init_configure_t;
+
+
+
+/**
+ * @brief SDK interface to set gnss sampling frequency, support 1Hz、2Hz、5Hz、10Hz
+ * @param [in] freq
+ * @retval 0: success
+ * @retval other: fail
+ */
+int32_t gsw_gnss_set_freq(int32_t freq);
+
+/**
+ * @brief SDK interface to initialization gnss
+ * @param
+ * @retval 0: success
+ * @retval other: fail
+ */
+int32_t gsw_gnss_init(void);
+
+/**
+ * @brief SDK interface to start gnss
+ * @param
+ * @retval 0: success
+ * @retval other: fail
+ */
+int32_t gsw_gnss_start(void);
+
+/**
+ * @brief SDK interface to stop gnss
+ * @param
+ * @retval 0: success
+ * @retval other: fail
+ */
+int32_t gsw_gnss_stop(void);
+
+/**
+ * @brief SDK interface to de initialization gnss
+ * @param
+ * @retval 0: success
+ * @retval other: fail
+ */
+int32_t gsw_gnss_deinit(void);
+
+/**
+ * @brief SDK interface to set gnss start mode,specific mode refreence GSW_HAL_GNSS_MODE_CONFIGURATION
+ * @param [in] start_mode
+ * @retval 0: success
+ * @retval other: fail
+ */
+int32_t gsw_gnss_set_start_mode(GSW_GNSS_MODE_CONFIGURATION start_mode);
+
+/**
+ * @brief SDK interface to set EPO switch if open or close
+ * @param [in] switch_op
+ * @retval 0: success
+ * @retval other: fail
+ */
+int32_t gsw_gnss_epo_switch(GSW_GNSS_CONF_SWITCH switch_op); /* The high-tech platform does not support this type */
+
+/**
+ * @brief SDK interface to registered callback function
+ * @param [in] callback
+ * @retval 0: success
+ * @retval other: fail
+ */
+int32_t gsw_gnss_reg_cb_group(gsw_gnss_cb callback);
+
+/**
+ * @brief SDK interface to enable XTRA switch
+ * @param [in] state
+ * @retval 0: success
+ * @retval other: fail
+ */
+int32_t gsw_gnss_xtra_is_enable(gsw_xtra_state_e state);
+
+/**
+ * @brief SDK interface to delete aiding data,delete aiding data for cold start
+ * @param [in] switch_op
+ * @retval 0: success
+ * @retval other: fail
+ */
+int32_t gsw_gnss_delete_aiding_data(unsigned int flags);
+
+/**
+ * @brief init and configure gps
+ * @param [in] init_configure
+ * @retval 0: success
+ * @retval other: fail
+ */
+int32_t gsw_gnss_init_configure_gps(gsw_gnss_init_configure_t init_configure);
+
diff --git a/mbtk/include/gsw/gsw_gpio.h b/mbtk/include/gsw/gsw_gpio.h
new file mode 100755
index 0000000..e3737aa
--- /dev/null
+++ b/mbtk/include/gsw/gsw_gpio.h
@@ -0,0 +1,66 @@
+typedef enum{
+ GSW_HAL_PINDIR_IN,
+ GSW_HAL_PINDIR_OUT,
+}gsw_hal_pinDirection;
+
+typedef enum{
+ GSW_HAL_LEVEL_LOW,
+ GSW_HAL_LEVEL_HIGH,
+}gsw_hal_pinLevel;
+
+typedef enum{
+ GSW_HAL_PULL_NULL,
+ GSW_HAL_PULL_DOWN,
+ GSW_HAL_PULL_UP,
+}gsw_hal_pinPullSel;
+
+typedef enum{
+ GSW_HAL_USB_DISCONNECTED,
+ GSW_HAL_USB_CONNECTED,
+}gsw_hal_usbStatus;
+
+
+/**
+* @brief Gpio init
+* @param [in]uint32_t gpioNum
+* @param [in]gsw_hal_pinDirection dir
+* @param [in]gsw_hal_pinLevel level
+* @param [in]gsw_hal_pinPullSel pullsel
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_gpio_Init(uint32_t gpioNum, gsw_hal_pinDirection dir, gsw_hal_pinLevel level);
+
+
+/**
+* @brief Gpio set direction
+* @param [in]uint32_t gpioNum
+* @param [in]gsw_hal_pinDirection dir
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_gpio_SetDirection(uint32_t gpioNum, gsw_hal_pinDirection dir);
+/**
+* @brief Gpio set level
+* @param [in]uint32_t gpioNum
+* @param [in]gsw_hal_pinLevel level
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_gpio_SetLevel(uint32_t gpioNum, gsw_hal_pinLevel level);
+
+/**
+* @brief Gpio get level
+* @param [in]uint32_t gpioNum
+* @retval gsw_hal_pinLevel
+*/
+gsw_hal_pinLevel gsw_gpio_GetLevel(uint32_t gpioNum);
+
+/**
+* @brief check whether the usb is connected
+* @retval gsw_hal_usbStatus
+*/
+gsw_hal_usbStatus gsw_hwpin_is_usb_connected(void);
+
+/**
+* @brief Wakeup_out set level
+* @retval int32_t
+*/
+int32_t gsw_setWakeupLevel(gsw_hal_pinLevel level);
\ No newline at end of file
diff --git a/mbtk/include/gsw/gsw_ota.h b/mbtk/include/gsw/gsw_ota.h
new file mode 100755
index 0000000..c36c91d
--- /dev/null
+++ b/mbtk/include/gsw/gsw_ota.h
@@ -0,0 +1,163 @@
+#ifndef __GSW_OTA_UA_INTERFACE_H_
+#define __GSW_OTA_UA_INTERFACE_H_
+
+#include <stdio.h>
+#include <stdint.h>
+#include <stdbool.h>
+
+#define GSW_HAL_SUCCESS (0x0000)
+#define GSW_HAL_FAIL (-0x0001)
+
+
+typedef enum
+{
+ GSW_OTA_SUCCESS,
+ GSW_OTA_FAILURE,
+ GSW_OTA_TIMEOUT,
+ GSW_OTA_INPROCESS,
+ GSW_OTA_NO_TASK
+}E_GSW_OTA_RET;
+
+typedef enum _gsw_ota_ret
+{
+ GSW_OTA_SYSTEM_A,
+ GSW_OTA_SYSTEM_B,
+}E_GSW_OTA_SYSTEM;
+
+
+typedef enum
+{
+ GSW_UPDATE_SUCCEED = 0, //update succeed
+ GSW_UPDATE_INPROGRESS, //update in progress
+ GSW_UPDATE_BACKUP, //A/B partition sync in progress
+ GSW_UPDATE_FAILED, //update failed
+ GSW_UPDATE_WAITEDONE, //update in-active part finished,not switch update part.
+ GSW_UPDATE_NEEDSYNC, //switch update part, need sync A/B part
+ GSW_UPDATE_CANCEL //updata cancel success
+}gsw_update_state_t;
+
+typedef enum
+{
+ GSW_UPDATE_NOERROR=0, //升级成功
+ GSW_UPDATE_ARGUMENTERROR, //升级程序启动参数错误
+ GSW_UPDATE_SDCARDNOEXIST, //未挂载外置FLASH等存储设备
+ GSW_UPDATE_PACKAGENOEXIST, //升级包不存在
+ GSW_UPDATE_UNZIPFAILED, //解压升级包出错
+ GSW_UPDATE_PARTITIONFLUSHERROR,//写入分区出错
+ GSW_UPDATE_XMLPARSEERROR, //解析 fotaconfig.xml 文件出错
+ GSW_UPDATE_DIFFUBIUNATTACH, //差分升级 UBI 分区挂载异常
+ GSW_UPDATE_NOSPACELEFT, //空间不足
+ GSW_UPDATE_FILECHECKFAILED, //MD5 值校验失败
+ GSW_UPDATE_BSPATCHFAILED, //bspatch 合成新文件夹失败
+ GSW_UPDATE_NOFINDPARTITION, //待升级分区不存在
+ GSW_UPDATE_UBIVOLUMEERROR, //差分升级,待升级 UBI 卷不存在
+ GSW_UPDATE_NOFOTACONFIGFILE, //升级包中无 fotaconfig.xml 文件
+ GSW_UPDATE_GETOLDSOFTWAREFAILED,//读取原始版本固件失败
+ GSW_UPDATE_FILENOTEXIST, //文件不存在
+ GSW_UPDATE_UPGRADECANCELED, //升级或分区同步被取消
+ GSW_UPDATE_NONEEDCANCEL, //取消升级失败
+ GSW_UPDATE_NOGOING //升级或分区同步正在进行,不可重复操作
+}gsw_update_exit_code_t;
+
+
+typedef struct
+{
+ unsigned int percentage; //update progress0-100
+ gsw_update_state_t update_state;
+ gsw_update_exit_code_t exit_code;
+}gsw_update_info_s;
+
+typedef struct
+{
+ gsw_update_state_t update_state;
+ uint8_t is_damaged; //TURE: damaged FALSE:no damaged
+ uint8_t damaged_partname[16];
+}gsw_system_status_s;
+
+
+/**
+* @brief Start install modem software
+* @param [in] void* file_path
+* @param [out] NULL
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_update_modem_start_autobackup(char* file_path);
+
+/**
+* @brief check the modem update condition
+* @param [in] NULL
+* @param [out] NULL
+* @retval TRUE/FALSE
+*/
+bool gsw_update_modem_check_condition(void);
+
+/**
+* @brief get update modem result
+* @param [in] NULL
+* @param [out] NULL
+* @retval E_GSW_OTA_RET
+*/
+E_GSW_OTA_RET gsw_update_modem_result_query(void);
+
+/**
+* @brief Start install modem software
+* @param [in] void* file_path
+* @param [out] NULL
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_update_modem_start_nobackup(char* file_path);
+
+/**
+* @brief get current system
+* @param [in] NULL
+* @param [out] NULL
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+E_GSW_OTA_SYSTEM gsw_update_modem_get_system(void);
+
+/**
+* @brief cancel update
+* @param [in] NULL
+* @param [out] NULL
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_update_modem_cancel(void);
+
+/**
+* @brief get modem update info
+* @param [in] NULL
+* @param [out] gsw_update_info_s
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_update_modem_get_info(gsw_update_info_s *update_info);
+
+/**
+* @brief get modem system status
+* @param [in] NULL
+* @param [out] gsw_system_status_s
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_update_modem_get_status(gsw_system_status_s *system_status);
+
+/**
+* @brief A/B system sync
+* @param [in] NULL
+* @param [out] NULL
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_update_modem_sync(void);
+
+/**
+* @brief A/B system switch
+* @param [in] NULL
+* @param [out] NULL
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_update_modem_switch(void);
+
+#endif
+
+
+
+
+
diff --git a/mbtk/include/gsw/gsw_pm.h b/mbtk/include/gsw/gsw_pm.h
new file mode 100755
index 0000000..9ff11cc
--- /dev/null
+++ b/mbtk/include/gsw/gsw_pm.h
@@ -0,0 +1,54 @@
+/**
+* @brief Modem wakeup callback
+* @param [in]int32_t wakeup_in
+* @retval void
+*/
+
+/* 0 -- Falling, Means wakeupin falling to wakeup the module, or wakeupout falling to wakeup mcu. */
+/* 1 -- Rising, Means wakeupin rising to wakeup the module, or wakeupout rising to wakeup mcu. */
+typedef void (*GSW_PM_WAKEUPCALLBACK)(int32_t wakeup_in);
+
+
+/**
+* @brief Enable autosleep
+* @param void
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_autosleep_enable(void);
+
+/**
+* @brief Disable autosleep
+* @param void
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_autosleep_disenable(void);
+
+/**
+* @brief Init power manager module
+* @param [in]GSW_PM_WAKEUPCALLBACKHandler wakeup_callback
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_pm_sdk_init(GSW_PM_WAKEUPCALLBACK wakeup_callback);
+
+
+
+/**
+* @brief Release wake lock, enter sleep
+* @param [in]int32_t wakeup_in
+* @retval int
+*/
+int32_t gsw_pm_enter_sleep(const char *gsw_wakelock_name);
+
+/**
+* @brief Creat wakeup lock
+* @param [in]int32_t wakeup_in
+* @retval int
+*/
+int32_t gsw_pm_exit_sleep(const char *gsw_wakelock_name);
+
+/**
+* @brief Module log disk drop, used when restarting or hibernating
+* @param [in]void
+* @retval void
+*/
+void gsw_modem_log_sync(void);
\ No newline at end of file
diff --git a/mbtk/include/gsw/gsw_sim.h b/mbtk/include/gsw/gsw_sim.h
new file mode 100755
index 0000000..5e19211
--- /dev/null
+++ b/mbtk/include/gsw/gsw_sim.h
@@ -0,0 +1,111 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdbool.h>
+#include <stdio.h>
+//gsw include
+#define GSW_HAL_SUCCESS 0
+#define GSW_HAL_FAIL -1
+#define GSW_HAL_MEM_INVAILD -2
+#define GSW_SIM_ICCID_LENGTH 20+1
+#define GSW_SIM_IMSI_LENGTH 20+1
+#define GSW_SIM_MSISDN_LENGTH 20+1
+#define GSW_SIM_IMEI_LENGTH 20+1
+
+typedef enum sim_status
+{
+ SIM_STATUS_ABSENT = 0, /**< sim absent*/
+ SIM_STATUS_PRESENT = 1, /**< sim present mtk as ready*/
+ SIM_STATUS_ERROR = 2, /**< sim error*/
+ SIM_STATUS_READY = 3, /**< sim state ready mtk no this value*/
+ SIM_STATUS_PIN = 4, /**< pinlock status*/
+} sim_status_e_type;
+
+
+
+/**
+ * @brief sim sdk init
+ * @param [in] token usr id define by who use
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_sim_sdk_init(int32_t token);
+
+
+/**
+ * @brief sim sdk deinit
+ * @param
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_sim_sdk_deinit(void);
+
+/**
+ * @brief get sim state
+ * @param [out] sim_state sim status as sim_status_e_type
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_get_sim_status(int32_t *sim_state);
+
+/**
+ * @brief get iccid function
+ * @param [in] len iccid length,max is 20
+ * @param [out] iccid return iccid from this func
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_get_sim_iccid(int32_t len, int8_t *iccid);
+
+/**
+ * @brief get imsi function
+ * @param [in] len imsi length,max is 20
+ * @param [out] iccid return imsi from this func
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_get_sim_imsi(int32_t len, int8_t *imsi);
+
+/**
+ * @brief get sim msisdn function
+ * @param [in] len msisdn length,max is 20
+ * @param [out] msisdn msisdn length,max is 20
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_get_sim_msisdn(int32_t len, int8_t *msisdn);
+
+/**
+ * @brief get imei function
+ * @param [in] len imei length,max is 20
+ * @param [out] imei return imei from this func
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_get_imei(int32_t len, int8_t *imei);
+
+/**
+ * @brief set sim power down
+ * @param
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_set_sim_power_down(void);
+
+/**
+ * @brief set sim power up
+ * @param
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_set_sim_power_up(void);
+
+/**
+ * @brief reset modem stack only, notice: after use this method, all ril sdk
+ * need restart by app, means network, sim, sms, data need deinit then init!
+ * @param
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_reset_modem(void);
+
diff --git a/mbtk/include/gsw/gsw_sms.h b/mbtk/include/gsw/gsw_sms.h
new file mode 100755
index 0000000..916110c
--- /dev/null
+++ b/mbtk/include/gsw/gsw_sms.h
@@ -0,0 +1,112 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdbool.h>
+
+#define GSW_HAL_SMS_ADDRESS_LEN 16
+#define GSW_HAL_SMS_RECV_CONT_MAX 1024
+#define GSW_HAL_SMS_CONTENT_LEN 1024
+#define MIN_MSM_PARAM_NUM 4
+#define MIN_IMS_MSM_PARAM_NUM 6
+#define MIN_WRITMSM_PARAM_NUM 5
+#define MSG_MAX_LEN 1024
+#define TELEPHONNUM_LEN 64
+#define STORAGSMS_MAX_SIZE 128
+#define SMSC_MAX_LEN 22
+#define SMS_NUM_MAX 255
+#define MSM_NUMBER_MAX 1024+1
+#define RES_NUM_MIN 128
+
+// gsw include
+
+#define GSW_HAL_SUCCESS 0
+#define GSW_HAL_FAIL -1
+#define GSW_HAL_MEM_INVAILD -2
+
+typedef enum gsw_hal_sms_state
+{
+ GSW_SMS_FULL_FLG, /**< sms full flag*/
+ GSW_SMS_RECEIVED_FLG, /**<recv new sms flag*/
+} gsw_hal_sms_state_e;
+
+typedef enum gsw_hal_sms_format
+{
+ SMS_FORMAT_GSM_7BIT = 0, /**< 7bit econde*/
+ SMS_FORMAT_BINARY_DATA = 1, /**< 8bit binary encode*/
+ SMS_FORMAT_UCS2 = 2, /**< ucs2 encode*/
+} gsw_hal_sms_format_e;
+
+typedef struct gsw_hal_sms_date
+{
+ uint8_t year[5]; /**< year of date*/
+ uint8_t month[3]; /**< month of date*/
+ uint8_t day[3]; /**< day of date*/
+ uint8_t hour[3]; /**< hour of time*/
+ uint8_t minutes[3]; /**< minute of time*/
+ uint8_t seconds[3]; /**< second of time*/
+ uint8_t timezone[4]; /**< timezone*/
+} gsw_hal_sms_date_s;
+
+typedef struct gsw_hal_sms_msg_type
+{
+ int8_t src_num[GSW_HAL_SMS_ADDRESS_LEN+1]; /**< sms phone num send msg*/
+ int8_t dest_num[GSW_HAL_SMS_ADDRESS_LEN + 1]; /**< sms phone num recv msg*/
+ gsw_hal_sms_format_e content_encode; /**< sms content is 7bit or 8bit or Ucs2 encode*/
+ uint32_t content_len; /**< sms content size*/
+ int8_t content[GSW_HAL_SMS_RECV_CONT_MAX + 1]; /**< sms content*/
+ gsw_hal_sms_date_s date; /**< message time*/
+} gsw_hal_sms_msg_type_s;
+
+typedef void (* GSW_HAL_SMS_CALLBACK_FUN)(gsw_hal_sms_state_e state, gsw_hal_sms_msg_type_s *report_info);
+
+/**
+ * @brief SDK interface to call back sms messages
+ * @param [in] handle_ptr
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_sms_reg_callback(GSW_HAL_SMS_CALLBACK_FUN handle_ptr);
+
+/**
+ * @brief sms sdk init
+ * @param [in] token
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_sms_sdk_init(int32_t token);
+
+/**
+ * @brief sms sdk deinit
+ * @param
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_sms_sdk_deinit(void);
+
+/**
+ * @brief send sms fuction *
+ * @param [in] phone_num dest phone num send sms
+ * @param [in] char_set encode format for sms 0 7bit 1 binary 2 usc2
+ * @param [in] msg sms content
+ * @param [in] msg_len send sms length,max is 1024
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_send_sms(int8_t *phone_num, int32_t char_set, int8_t *msg, int32_t msg_len);
+
+/**
+ * @brief get smsc fuction *
+ * @param [in] len input buf len for smsc,max is 32
+ * @param [out] smsc address for smsc get from this func *
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_get_smsc_address(int32_t len, int8_t *smsc);
+
+/**
+ * @brief set smsc fuction
+ * @param [out] smsc string value for smsc,max length is 32 *
+ * @retval 0: success
+ * @retval other: fail
+ */
+int gsw_set_smsc_address(const int8_t *smsc);
\ No newline at end of file
diff --git a/mbtk/include/gsw/gsw_uart.h b/mbtk/include/gsw/gsw_uart.h
new file mode 100755
index 0000000..137b80f
--- /dev/null
+++ b/mbtk/include/gsw/gsw_uart.h
@@ -0,0 +1,75 @@
+#define GSW_HAL_SUCCESS 0
+#define GSW_HAL_FAIL -1 //表示失败(通用性)
+#define GSW_HAL_MEM_INVAILD -2 //表示入参地址为NULL
+
+
+typedef enum{
+ GSW_HAL_BAUDRATE_1200=1200,
+ GSW_HAL_BAUDRATE_1800=1800,
+ GSW_HAL_BAUDRATE_4800=4800,
+ GSW_HAL_BAUDRATE_9600=9600,
+ GSW_HAL_BAUDRATE_19200=19200,
+ GSW_HAL_BAUDRATE_38400=38400,
+ GSW_HAL_BAUDRATE_57600=57600,
+ GSW_HAL_BAUDRATE_115200=115200,
+ GSW_HAL_BAUDRATE_230400=230400,
+ GSW_HAL_BAUDRATE_460800=460800,
+ GSW_HAL_BAUDRATE_500000=500000,
+ GSW_HAL_BAUDRATE_576000=576000,
+ GSW_HAL_BAUDRATE_921600=921600
+}gsw_hal_uart_baudrate;
+
+
+/**
+* @brief uart open
+* @param [in]int8_t *port
+* @param [in]gsw_hal_uart_baudrate baudrate
+* @param [in]uint32_t bits
+* @param [in]int8_t parity
+* @param [in]uint32_t stop
+* @retval int GSW_HAL_FAIL:fail other:success
+*/
+int32_t gsw_uart_open_ex(int8_t *port, gsw_hal_uart_baudrate baudrate, uint32_t bits, int8_t parity, uint32_t stop);
+
+/**
+* @brief uart flush
+* @param [in]int32_t fd
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_uart_flush(int32_t fd);
+
+/**
+* @brief uart close
+* @param [in]int32_t fd
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_uart_close(int32_t fd);
+
+/**
+* @brief uart write
+* @param [in]int32_t fd
+* @param [in]const uint8_t *buffer
+* @param [in]uint32_t len
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_uart_write(int32_t fd, const uint8_t *buffer, uint32_t len);
+
+/**
+* @brief uart read
+* @param [in]int32_t fd
+* @param [out]uint8_t *buffer
+* @param [in]uint32_t len
+* @param [in]int32_t timout_ms
+* @retval GSW_HAL_FAIL:fail 0~len:success
+*/
+int32_t gsw_uart_read(int32_t fd, uint8_t *buffer, uint32_t len, int32_t timeout_ms);
+
+/**
+* @brief uart ioctl
+* @param [in]int32_t fd
+* @param [in]uint32_t cmd
+* @param [in]void * pvalue
+* @retval GSW_HAL_FAIL:fail 0~len:success
+*/
+int32_t gsw_uart_ioctl(int32_t fd, uint32_t cmd, void *pvalue);
+
diff --git a/mbtk/include/gsw/gsw_voice.h b/mbtk/include/gsw/gsw_voice.h
new file mode 100755
index 0000000..ef465dc
--- /dev/null
+++ b/mbtk/include/gsw/gsw_voice.h
@@ -0,0 +1,131 @@
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <stdbool.h>
+#include <stdio.h>
+
+// GSW includes
+#define GSW_HAL_SUCCESS 0
+#define GSW_HAL_FAIL -1
+#define GSW_HAL_MEM_INVAILD -2
+
+
+typedef int CallHandle;
+typedef enum {
+ GSW_VOICE_CALL_HOLDING = 0,
+ GSW_VOICE_CALL_DIALING,
+ GSW_VOICE_CALL_ALERTING,
+ GSW_VOICE_CALL_CONNECTED,
+ GSW_VOICE_CALL_INCOMING,
+ GSW_VOICE_CALL_WAITING,
+ GSW_VOICE_CALL_END,
+}VoiceCallState;
+
+typedef enum{
+ GSW_AUDIO_MODE_CODEC = 0,
+ GSW_AUDIO_MODE_RTP = 1,
+}AudioMode;
+
+typedef enum {
+ GSW_RTP_CLIENT = 0,
+ GSW_RTP_SERVER,
+}RTPMode;
+
+typedef void (*CallStateInd)(CallHandle, VoiceCallState);
+
+/**
+* @brief init voice sdk,and register the status indicated callback function
+* @param [in] CallStateInd ind: status indicated callback function
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_voice_sdk_init(CallStateInd ind);
+
+
+/**
+* @brief set speaker_volume
+* @param [in] int32_t volume:1(Min)-7(Max)
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_voice_set_speaker_volume(int32_t volume);
+
+
+/**
+* @brief set audio mode
+* @param [in] AudioMode audioMode
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_voice_set_audio_mode(AudioMode audioMode);
+
+/**
+* @brief start a voice call
+* @param [in] char *callNumber
+* @param [out] CallHandle *handle
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_voice_normal_voice_start(CallHandle *handle, const char *callNumber);
+
+/**
+* @brief answer a voice call
+* @param [in] CallHandle handle
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_voice_answer(CallHandle handle);
+
+/**
+* @brief hangup a voice call
+* @param [in] CallHandle handle
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_voice_hangup(CallHandle handle);
+
+
+/**
+* @brief set auto answer mode
+* @param [in] int32_t mode:0-1, 0:NO(close auto answer), 1:YES(auto answer)
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_voice_set_auto_answer_mode(int32_t mode);
+
+/**
+* @brief set rtp ip address of remote
+* @param [in] char *ip :ip address
+* @param [in] int32_t len: length
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_voice_set_remote_rtp_ip(const char *ip, int32_t len);
+
+
+/**
+* @brief set rtp vlan Noneme
+* @param [in] char *interfaceNoneme:vlan Noneme
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_voice_set_rtp_vlan_info(const char *interfaceNoneme);
+
+
+/**
+* @brief set rtp mode and port
+* @param [in] RTPMode rtpMode: rtp mode
+* @param [in] int32_t port:rtp port
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_voice_set_rtp_port(RTPMode rtpMode, int32_t port);
+
+/**
+* @brief set rtp mode and port
+* @param [in] int32_t clockRate: clock rate
+* @param [in] int32_t channel:channel
+* @param [in] int32_t latency:latency
+* @param [out] None
+* @retval GSW_HAL_SUCCESS\GSW_HAL_FAIL
+*/
+int32_t gsw_voice_set_rtp_param(int32_t clockRate, int32_t channel, int32_t latency);
diff --git a/mbtk/include/lynq/lynq_gnss.h b/mbtk/include/lynq/lynq_gnss.h
index 893f6a8..a7b738a 100755
--- a/mbtk/include/lynq/lynq_gnss.h
+++ b/mbtk/include/lynq/lynq_gnss.h
@@ -116,5 +116,6 @@
int qser_Gnss_injectEphemeris(uint32_t h_gnss);
+int qser_Gnss_PZ90_switch(uint32_t h_gnss);
#endif /* _QSER_GNSS_H */
diff --git a/mbtk/include/mbtk_device_info.h b/mbtk/include/mbtk_device_info.h
index f03303a..079990b 100755
--- a/mbtk/include/mbtk_device_info.h
+++ b/mbtk/include/mbtk_device_info.h
@@ -12,6 +12,6 @@
#define MBTK_DEVICES_MODEL "LYNQ_T108"
-#define MBTK_DEVICES_REVISION "T108v05.04b01_V2.00"
+#define MBTK_DEVICES_REVISION "T108v05.04b01_4G.001"
#endif /* MBTK_DEVICES_INFO_H */
diff --git a/mbtk/include/ql_v2/ql_tee_asymm_utils.h b/mbtk/include/ql_v2/ql_tee_asymm_utils.h
new file mode 100755
index 0000000..94d9d53
--- /dev/null
+++ b/mbtk/include/ql_v2/ql_tee_asymm_utils.h
@@ -0,0 +1,13 @@
+#ifndef QL_TEE_ASYMM_UTILS_H
+#define QL_TEE_ASYMM_UTILS_H
+
+#include "ql_tee_service.h"
+
+ql_tee_error_t ql_rsa_genkey_args(uint64_t exponent, uint32_t bits, ql_km_key_args_t *args);
+
+ql_tee_error_t ql_ec_genkey_args(ql_km_ec_curve_t curve, ql_km_key_args_t *args);
+
+ql_tee_error_t ql_rsa_operation_args(ql_km_purpose_t purpose, ql_km_rsa_padding_t padding,
+ ql_km_digest_t digest, ql_km_operation_args_t *args);
+
+#endif /* QL_TEE_ASYMM_UTILS_H */
\ No newline at end of file
diff --git a/mbtk/include/ql_v2/ql_tee_service.h b/mbtk/include/ql_v2/ql_tee_service.h
new file mode 100755
index 0000000..7b724c1
--- /dev/null
+++ b/mbtk/include/ql_v2/ql_tee_service.h
@@ -0,0 +1,306 @@
+#ifndef QL_TEE_SERVICE_H
+#define QL_TEE_SERVICE_H
+
+#include <stdint.h>
+#include <stddef.h>
+#include <stdbool.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+
+#define SINGLE_OBJ_MAX_SIZE (512 * 1024)
+#define OPERATION_BUF_MAX_SIZE 4096
+
+
+typedef enum {
+ QL_TEE_OK = 0,
+
+ QL_KM_ERROR_ROOT_OF_TRUST_ALREADY_SET = -1,
+ QL_KM_ERROR_UNSUPPORTED_PURPOSE = -2,
+ QL_KM_ERROR_INCOMPATIBLE_PURPOSE = -3,
+ QL_KM_ERROR_UNSUPPORTED_ALGORITHM = -4,
+ QL_KM_ERROR_INCOMPATIBLE_ALGORITHM = -5,
+ QL_KM_ERROR_UNSUPPORTED_KEY_SIZE = -6,
+ QL_KM_ERROR_UNSUPPORTED_BLOCK_MODE = -7,
+ QL_KM_ERROR_INCOMPATIBLE_BLOCK_MODE = -8,
+ QL_KM_ERROR_UNSUPPORTED_MAC_LENGTH = -9,
+ QL_KM_ERROR_UNSUPPORTED_PADDING_MODE = -10,
+ QL_KM_ERROR_INCOMPATIBLE_PADDING_MODE = -11,
+ QL_KM_ERROR_UNSUPPORTED_DIGEST = -12,
+ QL_KM_ERROR_INCOMPATIBLE_DIGEST = -13,
+ QL_KM_ERROR_INVALID_EXPIRATION_TIME = -14,
+ QL_KM_ERROR_INVALID_USER_ID = -15,
+ QL_KM_ERROR_INVALID_AUTHORIZATION_TIMEOUT = -16,
+ QL_KM_ERROR_UNSUPPORTED_KEY_FORMAT = -17,
+ QL_KM_ERROR_INCOMPATIBLE_KEY_FORMAT = -18,
+ QL_KM_ERROR_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM = -19, /* For PKCS8 & PKCS12 */
+ QL_KM_ERROR_UNSUPPORTED_KEY_VERIFICATION_ALGORITHM = -20, /* For PKCS8 & PKCS12 */
+ QL_KM_ERROR_INVALID_INPUT_LENGTH = -21,
+ QL_KM_ERROR_KEY_EXPORT_OPTIONS_INVALID = -22,
+ QL_KM_ERROR_DELEGATION_NOT_ALLOWED = -23,
+ QL_KM_ERROR_KEY_NOT_YET_VALID = -24,
+ QL_KM_ERROR_KEY_EXPIRED = -25,
+ QL_KM_ERROR_KEY_USER_NOT_AUTHENTICATED = -26,
+ QL_KM_ERROR_OUTPUT_PARAMETER_NULL = -27,
+ QL_KM_ERROR_INVALID_OPERATION_HANDLE = -28,
+ QL_KM_ERROR_INSUFFICIENT_BUFFER_SPACE = -29,
+ QL_KM_ERROR_VERIFICATION_FAILED = -30,
+ QL_KM_ERROR_TOO_MANY_OPERATIONS = -31,
+ QL_KM_ERROR_UNEXPECTED_NULL_POINTER = -32,
+ QL_KM_ERROR_INVALID_KEY_BLOB = -33,
+ QL_KM_ERROR_IMPORTED_KEY_NOT_ENCRYPTED = -34,
+ QL_KM_ERROR_IMPORTED_KEY_DECRYPTION_FAILED = -35,
+ QL_KM_ERROR_IMPORTED_KEY_NOT_SIGNED = -36,
+ QL_KM_ERROR_IMPORTED_KEY_VERIFICATION_FAILED = -37,
+ QL_KM_ERROR_INVALID_ARGUMENT = -38,
+ QL_KM_ERROR_UNSUPPORTED_TAG = -39,
+ QL_KM_ERROR_INVALID_TAG = -40,
+ QL_KM_ERROR_MEMORY_ALLOCATION_FAILED = -41,
+ QL_KM_ERROR_IMPORT_PARAMETER_MISMATCH = -44,
+ QL_KM_ERROR_SECURE_HW_ACCESS_DENIED = -45,
+ QL_KM_ERROR_OPERATION_CANCELLED = -46,
+ QL_KM_ERROR_CONCURRENT_ACCESS_CONFLICT = -47,
+ QL_KM_ERROR_SECURE_HW_BUSY = -48,
+ QL_KM_ERROR_SECURE_HW_COMMUNICATION_FAILED = -49,
+ QL_KM_ERROR_UNSUPPORTED_EC_FIELD = -50,
+ QL_KM_ERROR_MISSING_NONCE = -51,
+ QL_KM_ERROR_INVALID_NONCE = -52,
+ QL_KM_ERROR_MISSING_MAC_LENGTH = -53,
+ QL_KM_ERROR_KEY_RATE_LIMIT_EXCEEDED = -54,
+ QL_KM_ERROR_CALLER_NONCE_PROHIBITED = -55,
+ QL_KM_ERROR_KEY_MAX_OPS_EXCEEDED = -56,
+ QL_KM_ERROR_INVALID_MAC_LENGTH = -57,
+ QL_KM_ERROR_MISSING_MIN_MAC_LENGTH = -58,
+ QL_KM_ERROR_UNSUPPORTED_MIN_MAC_LENGTH = -59,
+ QL_KM_ERROR_UNSUPPORTED_KDF = -60,
+ QL_KM_ERROR_UNSUPPORTED_EC_CURVE = -61,
+ QL_KM_ERROR_KEY_REQUIRES_UPGRADE = -62,
+ QL_KM_ERROR_ATTESTATION_CHALLENGE_MISSING = -63,
+ QL_KM_ERROR_KEYMASTER_NOT_CONFIGURED = -64,
+ QL_KM_ERROR_ATTESTATION_APPLICATION_ID_MISSING = -65,
+
+ QL_KM_ERROR_UNIMPLEMENTED = -100,
+ QL_KM_ERROR_VERSION_MISMATCH = -101,
+
+ QL_KM_ERROR_UNKNOWN_ERROR = -1000,
+
+ QL_SS_ERROR_GENERIC = -200,
+ QL_SS_ERROR_ACCESS_DENIED = -201,
+ QL_SS_ERROR_CANCEL = -202,
+ QL_SS_ERROR_ACCESS_CONFLICT = -203,
+ QL_SS_ERROR_EXCESS_DATA = -204,
+ QL_SS_ERROR_BAD_FORMAT = -205,
+ QL_SS_ERROR_BAD_PARAMETERS = -206,
+ QL_SS_ERROR_BAD_STATE = -207,
+ QL_SS_ERROR_ITEM_NOT_FOUND = -208,
+ QL_SS_ERROR_NOT_IMPLEMENTED = -209,
+ QL_SS_ERROR_NOT_SUPPORTED = -210,
+ QL_SS_ERROR_NO_DATA = -211,
+ QL_SS_ERROR_OUT_OF_MEMORY = -212,
+ QL_SS_ERROR_BUSY = -213,
+ QL_SS_ERROR_COMMUNICATION = -214,
+ QL_SS_ERROR_SECURITY = -215,
+ QL_SS_ERROR_SHORT_BUFFER = -216,
+ QL_SS_ERROR_EXTERNAL_CANCEL = -217,
+
+ QL_SS_ERROR_TARGET_DEAD = -2000,
+ QL_SS_ERROR_UNKNOWN_ERROR = -2001,
+} ql_tee_error_t;
+
+
+typedef enum {
+ QL_SS_SEEK_SET = 0,
+ QL_SS_SEEK_CUR = 1,
+ QL_SS_SEEK_END = 2
+} ql_ss_whence_t;
+
+
+
+typedef enum {
+ QL_KM_ALGO_RSA = 1,
+ QL_KM_ALGO_EC = 3,
+ QL_KM_ALGO_AES = 32,
+} ql_km_algo_t;
+
+typedef enum {
+ QL_KM_MODE_ECB = 1,
+ QL_KM_MODE_CBC = 2,
+ QL_KM_MODE_CTR = 3,
+ QL_KM_MODE_GCM = 32,
+} ql_km_aes_mode_t;
+
+
+typedef enum {
+ QL_KM_PAD_RSA_NONE = 1,
+ QL_KM_PAD_RSA_OAEP = 2,
+ QL_KM_PAD_RSA_PSS = 3,
+ QL_KM_PAD_RSA_PKCS1_1_5_ENCRYPT = 4,
+ QL_KM_PAD_RSA_PKCS1_1_5_SIGN = 5,
+} ql_km_rsa_padding_t;
+
+
+typedef enum {
+ QL_KM_DIGEST_NONE = 0,
+ QL_KM_DIGEST_MD5 = 1,
+ QL_KM_DIGEST_SHA1 = 2,
+ QL_KM_DIGEST_SHA_2_224 = 3,
+ QL_KM_DIGEST_SHA_2_256 = 4,
+ QL_KM_DIGEST_SHA_2_384 = 5,
+ QL_KM_DIGEST_SHA_2_512 = 6,
+} ql_km_digest_t;
+
+
+typedef enum {
+ QL_KM_EC_CURVE_P_224 = 0,
+ QL_KM_EC_CURVE_P_256 = 1,
+ QL_KM_EC_CURVE_P_384 = 2,
+ QL_KM_EC_CURVE_P_521 = 3,
+} ql_km_ec_curve_t;
+
+
+typedef enum {
+ QL_KM_PURPOSE_ENCRYPT = 0, /* Usable with RSA, EC and AES keys. */
+ QL_KM_PURPOSE_DECRYPT = 1, /* Usable with RSA, EC and AES keys. */
+ QL_KM_PURPOSE_SIGN = 2, /* Usable with RSA, EC keys. */
+ QL_KM_PURPOSE_VERIFY = 3, /* Usable with RSA, EC keys. */
+} ql_km_purpose_t;
+
+
+typedef struct {
+ uint8_t *key_blob;
+ uint32_t key_blob_size;
+} ql_km_key_t;
+
+
+typedef struct {
+ ql_km_algo_t algo;
+ union {
+ struct {
+ ql_km_aes_mode_t mode;
+ uint32_t bits;
+ uint32_t min_mac_len;
+ } aes_args;
+ struct {
+ uint64_t exponent;
+ uint32_t bits;
+ } rsa_args;
+ struct {
+ ql_km_ec_curve_t curve;
+ } ec_args;
+ };
+} ql_km_key_args_t;
+
+
+typedef struct {
+ uint8_t *data;
+ uint32_t data_size;
+} ql_km_blob_t;
+
+
+typedef struct {
+ ql_km_algo_t algo;
+ ql_km_purpose_t purpose;
+ uint64_t handle;
+} ql_km_operation_handle_t;
+
+
+typedef struct {
+ ql_km_algo_t algo;
+ ql_km_purpose_t purpose;
+ union {
+ struct {
+ ql_km_aes_mode_t mode;
+ ql_km_blob_t iv;
+ } aes_args;
+ struct {
+ ql_km_rsa_padding_t padding;
+ ql_km_digest_t digest;
+ } rsa_args;
+ };
+} ql_km_operation_args_t;
+
+
+/*
+ * Secure Storage APIs
+ */
+ql_tee_error_t ql_ss_initialize();
+
+void ql_ss_deinitialize();
+
+ql_tee_error_t ql_ss_open(const void *id, uint32_t id_size, uint32_t *object);
+
+ql_tee_error_t ql_ss_create(const void *id, uint32_t id_size,
+ void *data, uint32_t data_size,
+ uint32_t *object, bool overwrite);
+
+ql_tee_error_t ql_ss_close(uint32_t object);
+
+ql_tee_error_t ql_ss_read(uint32_t object, void *data, uint32_t data_size, uint32_t *count);
+
+ql_tee_error_t ql_ss_write(uint32_t object, void *data, uint32_t data_size);
+
+ql_tee_error_t ql_ss_seek(uint32_t object, int32_t offset, ql_ss_whence_t whence);
+
+ql_tee_error_t ql_ss_unlink(uint32_t object);
+
+ql_tee_error_t ql_ss_trunc(uint32_t object, uint32_t len);
+
+ql_tee_error_t ql_ss_rename(uint32_t object, const void *id, uint32_t id_size);
+
+ql_tee_error_t ql_ss_get_info(uint32_t object, uint32_t *obj_size, uint32_t *cur_pos);
+
+
+/*
+ * Key Master APIs
+ */
+
+ql_tee_error_t ql_km_initialize();
+
+void ql_km_deinitialize();
+
+ql_tee_error_t ql_km_gen_key(const ql_km_key_args_t *key_args, ql_km_key_t *key);
+
+ql_tee_error_t ql_km_import_key(const ql_km_key_args_t *key_args, const ql_km_blob_t *rawkey, ql_km_key_t *key);
+
+ql_tee_error_t ql_km_destroy_key(ql_km_key_t *key);
+
+ql_tee_error_t ql_km_destroy_blob(ql_km_blob_t *blob);
+
+ql_tee_error_t ql_km_operation_begin(const ql_km_key_t *key,
+ ql_km_operation_args_t *op_args,
+ ql_km_operation_handle_t *op_handle);
+
+
+ql_tee_error_t ql_km_operation_update(ql_km_operation_handle_t *op_handle,
+ uint8_t *input, uint32_t input_size,
+ ql_km_blob_t *output, uint32_t *consumed);
+
+/*
+ * ql_tee_error_t ql_km_operation_finish(ql_km_operation_handle_t *op_handle,
+ * uint8_t *input, uint32_t input_size,
+ * ql_km_blob_t *output);
+ *
+ * ql_tee_error_t ql_km_operation_finish(ql_km_operation_handle_t *op_handle,
+ * uint8_t *input, uint32_t input_size,
+ * ql_km_blob_t *output, uint8_t *signature, uint32_t sig_size);
+ *
+ */
+ql_tee_error_t ql_km_operation_finish(ql_km_operation_handle_t *op_handle,
+ uint8_t *input, uint32_t input_size,
+ ql_km_blob_t *output, ...);
+
+
+ql_tee_error_t ql_km_export_key(ql_km_key_t *keypair, ql_km_blob_t *pubkey);
+
+
+ql_tee_error_t ql_km_get_key_algo(ql_km_key_t *keyblob, ql_km_algo_t *algo);
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* QL_TEE_SERVICE_H */
\ No newline at end of file
diff --git a/mbtk/include/ql_v2/ql_tee_symm_utils.h b/mbtk/include/ql_v2/ql_tee_symm_utils.h
new file mode 100755
index 0000000..741024d
--- /dev/null
+++ b/mbtk/include/ql_v2/ql_tee_symm_utils.h
@@ -0,0 +1,12 @@
+#ifndef QL_TEE_SYMM_UTILS_H
+#define QL_TEE_SYMM_UTILS_H
+
+#include "ql_tee_service.h"
+
+ql_tee_error_t ql_aes_genkey_args(ql_km_aes_mode_t mode, uint32_t bits,
+ ql_km_key_args_t *args, ...);
+
+ql_tee_error_t ql_aes_operation_args(ql_km_purpose_t purpose, ql_km_aes_mode_t mode,
+ ql_km_blob_t *iv, ql_km_operation_args_t *args);
+
+#endif /* QL_TEE_SYMM_UTILS_H */
\ No newline at end of file