Baseline update from LYNQ_SDK_ASR_T108_V05.03.01.00(kernel build error.)
Change-Id: I56fc72cd096e82c589920026553170e5cb9692eb
diff --git a/mbtk/Make.defines b/mbtk/Make.defines
index 9967897..0d77ff7 100755
--- a/mbtk/Make.defines
+++ b/mbtk/Make.defines
@@ -50,7 +50,8 @@
-I$(BUILD_ROOT)/include/mbtk \
-I$(BUILD_ROOT)/include/lynq \
-I$(BUILD_ROOT)/include/mqtt \
- -I$(BUILD_ROOT)/include/ql_v2
+ -I$(BUILD_ROOT)/include/ql_v2 \
+ -I$(BUILD_ROOT)/include/gsw
# -DCONFIG_AB_SYSTEM
DEFINE = \
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
diff --git a/mbtk/liblynq_lib_rilv2/lynq_thermal.c b/mbtk/liblynq_lib_rilv2/lynq_thermal.c
index 6d0c76f..c4056d5 100755
--- a/mbtk/liblynq_lib_rilv2/lynq_thermal.c
+++ b/mbtk/liblynq_lib_rilv2/lynq_thermal.c
@@ -57,9 +57,9 @@
/****************************API***************************************/
int get_thermal_zone(int *numbers, int size)
{
- if(numbers == NULL)
+ if(numbers == NULL || size < 6)
{
- LOGE("[qser_thermal]: numbers is NULL!");
+ LOGE("[qser_thermal]: numbers is NULL! || size < 6! ");
return QSER_RESULT_FAIL;
}
@@ -91,7 +91,7 @@
numbers[thermal_num] = 0;
}
- return size;
+ return 6;
}
/****************************API***************************************/
diff --git a/mbtk/libql_lib_v2_rilv2/ql_dm.c b/mbtk/libql_lib_v2_rilv2/ql_dm.c
index ddf304c..ca0bd6e 100755
--- a/mbtk/libql_lib_v2_rilv2/ql_dm.c
+++ b/mbtk/libql_lib_v2_rilv2/ql_dm.c
@@ -42,6 +42,7 @@
#define LYNQ_AIR_PLANE_MODE_OFF 1 // at+cfun = 1
+
#define MBTK_RILD_ERR -1
#define IMEI_VALID 1
@@ -121,7 +122,7 @@
ql_info = QL_DM_AIR_PLANE_MODE_ON;
}
- if(mbtk_info != MBTK_RADIO_STATE_FULL_FUNC && mbtk_info !=MBTK_RADIO_STATE_DIS_RF)
+ if(mbtk_info != MBTK_RADIO_STATE_FULL_FUNC && mbtk_info !=MBTK_RADIO_STATE_DIS_RF)
{
ql_info = QL_DM_AIR_PLANE_MODE_UNKNOWN;
@@ -290,34 +291,34 @@
/*-----------------------------------------------------------------------------------------------*/
int ql_dm_get_modem_state(QL_DM_MODEM_STATE_TYPE_E *modem_state)
{
- int ret = -1;
- mbtk_radio_state_enum tmp_rf;
- if(ql_info_handle == NULL)
- {
- LOGE("DM no init");
- return QL_ERR_NOT_INIT;
- }
- ret = mbtk_radio_state_get(ql_info_handle, &tmp_rf);
- if (ret != 0)
- {
- LOGE("mbtk_radio_state_get fail.");
- return QL_ERR_FAILED;
- }
-
- if(tmp_rf == 0 )
- {
- *modem_state = QL_DM_MODEM_STATE_OFFLINE;
- }
- else if(tmp_rf == 1)
- {
- *modem_state = QL_DM_MODEM_STATE_ONLINE;
- }
- else
- {
- *modem_state = QL_DM_MODEM_STATE_UNKNOWN;
- }
-
- return QL_ERR_OK;
+ int ret = -1;
+ mbtk_radio_state_enum tmp_rf;
+ if(ql_info_handle == NULL)
+ {
+ LOGE("DM no init");
+ return QL_ERR_NOT_INIT;
+ }
+ ret = mbtk_radio_state_get(ql_info_handle, &tmp_rf);
+ if (ret != 0)
+ {
+ LOGE("mbtk_radio_state_get fail.");
+ return QL_ERR_FAILED;
+ }
+
+ if(tmp_rf == 0 )
+ {
+ *modem_state = QL_DM_MODEM_STATE_OFFLINE;
+ }
+ else if(tmp_rf == 1)
+ {
+ *modem_state = QL_DM_MODEM_STATE_ONLINE;
+ }
+ else
+ {
+ *modem_state = QL_DM_MODEM_STATE_UNKNOWN;
+ }
+
+ return QL_ERR_OK;
}
diff --git a/mbtk/libql_lib_v2_rilv2/ql_ecall.c b/mbtk/libql_lib_v2_rilv2/ql_ecall.c
index 0d77b7d..00b0bac 100755
--- a/mbtk/libql_lib_v2_rilv2/ql_ecall.c
+++ b/mbtk/libql_lib_v2_rilv2/ql_ecall.c
Binary files differ
diff --git a/mbtk/libql_lib_v2_rilv2/ql_tee_service.c b/mbtk/libql_lib_v2_rilv2/ql_tee_service.c
new file mode 100755
index 0000000..14d3b46
--- /dev/null
+++ b/mbtk/libql_lib_v2_rilv2/ql_tee_service.c
@@ -0,0 +1,195 @@
+#include <dlfcn.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "ql_tee_service.h"
+#include "mbtk_log.h"
+#include <tee_client_api.h>
+
+
+struct test_ctx {
+ TEEC_Context ctx;
+ TEEC_Session sess;
+};
+
+
+struct test_ctx ctx;
+
+const void *obj_id;
+uint32_t obj_size;
+
+#define lib_secure_path "/lib/libsecure_storage.so"
+static void *dlHandle_secure;
+
+
+
+
+int (*prepare_tee_session)(struct test_ctx *ctx);
+void (*terminate_tee_session)(struct test_ctx *ctx);
+TEEC_Result (*read_secure_object)(struct test_ctx *ctx, const void *id, uint32_t id_size, char *data, size_t data_len);
+TEEC_Result (*write_secure_object)(struct test_ctx *ctx, const void *id, uint32_t id_size, char *data, size_t data_len);
+TEEC_Result (*delete_secure_object)(struct test_ctx *ctx, const void *id, uint32_t id_size);
+
+
+static int tee_api_import(void)
+{
+ dlHandle_secure = dlopen(lib_secure_path, RTLD_NOW);
+ if (dlHandle_secure == NULL)
+ {
+ return -1;
+ }
+
+ prepare_tee_session = (int (*)(struct test_ctx *ctx))dlsym(dlHandle_secure, "prepare_tee_session");
+ if (prepare_tee_session == NULL)
+ {
+ LOGE("prepare_tee_session dlsym fail\n");
+ return -1;
+ }
+
+ terminate_tee_session = (void (*)(struct test_ctx *ctx))dlsym(dlHandle_secure, "terminate_tee_session");
+ if (terminate_tee_session == NULL)
+ {
+ LOGE("terminate_tee_session dlsym fail\n");
+ return -1;
+ }
+
+ read_secure_object = (TEEC_Result (*)(struct test_ctx *ctx, const void *id, uint32_t id_size,char *data, size_t data_len))dlsym(dlHandle_secure, "read_secure_object");
+ if (read_secure_object == NULL)
+ {
+ LOGE("read_secure_object dlsym fail\n");
+ return -1;
+ }
+
+ write_secure_object = (TEEC_Result (*)(struct test_ctx *ctx, const void *id, uint32_t id_size, char *data, size_t data_len))dlsym(dlHandle_secure, "write_secure_object");
+ if (write_secure_object == NULL)
+ {
+ LOGE("write_secure_object dlsym fail\n");
+ return -1;
+ }
+
+ delete_secure_object = (TEEC_Result (*)(struct test_ctx *ctx, const void *id, uint32_t id_size))dlsym(dlHandle_secure, "delete_secure_object");
+ if (delete_secure_object == NULL)
+ {
+ LOGE("delete_secure_object dlsym fail\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+/**
+* @brief init tee sdk
+* @param [in] None
+* @param [out] None
+* @retval GSW_HAL_SUCCESS is success\other is fail
+*/
+ql_tee_error_t ql_ss_initialize(void)
+{
+ int32_t ret = 0;
+ ret = tee_api_import();
+ if(ret)
+ {
+ LOGE("tee_api_import fail\n");
+ return ret;
+ }
+ ret = prepare_tee_session(&ctx);
+
+ return ret;
+}
+
+void ql_ss_deinitialize(void)
+{
+
+ terminate_tee_session(&ctx);
+
+}
+ql_tee_error_t ql_ss_open(const void *id, uint32_t id_size, uint32_t *object)
+{
+
+ obj_id = id;
+ obj_size = id_size;
+ return 0;
+}
+
+ql_tee_error_t ql_ss_close(uint32_t object)
+{
+
+ obj_id = NULL;
+ obj_size = 0;
+ return 0;
+
+}
+
+/**
+* @brief read sensitive data from tee
+* @param [in] char* in_obj_name :Sensitive data name
+* @param [in] unsigned int* p_out_buf_len:The size of sensitive data output cache
+* @param [out] char* out_buf:Cache of sensitive data output
+* @param [out] unsigned int* p_out_buf_len:Sensitive data length
+* @retval GSW_HAL_SUCCESS is success\other is fail
+*/
+
+ql_tee_error_t ql_ss_read(uint32_t object, void *data, uint32_t data_size, uint32_t *count)
+{
+ int32_t ret = 0;
+ TEEC_Result res;
+
+ res = read_secure_object(&ctx, obj_id, obj_size, data, data_size);
+ if (res != TEEC_SUCCESS)
+ {
+ LOGE("Failed to read an object from the secure storage");
+ ret = -1;
+ }
+
+ *count = strlen(data);
+ return ret;
+}
+
+
+/**
+* @brief write sensitive data to tee
+* @param [in] char* in_obj_name :Sensitive data name
+* @param [in] char* in_buf:A cache for writing sensitive data
+* @param [out] unsigned int in_buf_len:Sensitive data length
+* @retval GSW_HAL_SUCCESS is success\other is fail
+*/
+ql_tee_error_t ql_ss_write(uint32_t object, void *data, uint32_t data_size)
+{
+ int32_t ret = 0;
+ TEEC_Result res;
+ res = write_secure_object(&ctx, obj_id, obj_size, data, data_size);
+ if (res != TEEC_SUCCESS)
+ {
+ LOGE("Failed to write an object from the secure storage");
+ ret = -1;
+ }
+
+ return ret;
+}
+
+
+/**
+* @brief delete sensitive data from tee
+* @param [in] char* in_obj_name :Sensitive data name
+* @retval GSW_HAL_SUCCESS is success\other is fail
+*/
+ql_tee_error_t ql_ss_unlink(uint32_t object)
+{
+ int32_t ret = 0;
+ TEEC_Result res;
+ res = delete_secure_object(&ctx, obj_id, obj_size);
+ if (res != TEEC_SUCCESS)
+ {
+ LOGE("Failed to delete the object: 0x%x", res);
+ ret = -1;
+ }
+
+
+ return ret;
+
+}
+
+
+
+
diff --git a/mbtk/mbtk_toolchain_config/Build.defines b/mbtk/mbtk_toolchain_config/Build.defines
new file mode 100755
index 0000000..a7c78ba
--- /dev/null
+++ b/mbtk/mbtk_toolchain_config/Build.defines
@@ -0,0 +1,43 @@
+# Common make definitions, customized for each platform
+
+# Definitions required in all program directories to compile and link
+# C programs using gcc.
+
+INC_DIR += $(addprefix -I, $(MBTK_INC_DIR))
+
+LIB_DIR += $(addprefix -L, $(MBTK_LIB_DIR))
+
+LIBS += $(addprefix -l, $(MBTK_LIBS))
+
+CFLAGS += $(MBTK_CFLAGS)
+
+ifeq ($(MBTK_BUILD_LIB), Y)
+CFLAGS += -shared -Wl,-shared,-Bsymbolic
+endif
+
+DEFINE += $(addprefix -D, $(MBTK_DEFINE))
+
+LOCAL_SRC_FILES := $(foreach dir,$(MBTK_SRC_DIR),$(wildcard $(dir)/*.c)) $(foreach dir,$(MBTK_SRC_DIR),$(wildcard $(dir)/*.cpp))
+
+OBJS = $(patsubst %.c, %.o, $(patsubst %.cpp, %.o, $(LOCAL_SRC_FILES)))
+$(info OBJS = $(OBJS))
+
+ifeq ($(MBTK_BUILD_LIB), Y)
+dtarget := $(OUT_DIR)/lib/lib$(MBTK_PROJECT_NAME).so
+else
+dtarget := $(OUT_DIR)/bin/$(MBTK_PROJECT_NAME)
+endif
+
+all: $(dtarget)
+
+$(dtarget): $(OBJS)
+ $(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $(OBJS) -o $@
+
+%.o:%.c
+ $(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+ $(CC) $(CFLAGS) $(INC_DIR) $(DEFINE) -c $< -o $@
+
+clean:
+ rm -f $(OBJS) $(dtarget)
\ No newline at end of file
diff --git a/mbtk/mbtk_toolchain_config/Make.defines b/mbtk/mbtk_toolchain_config/Make.defines
new file mode 100755
index 0000000..4d6a1df
--- /dev/null
+++ b/mbtk/mbtk_toolchain_config/Make.defines
@@ -0,0 +1,65 @@
+# Common make definitions, customized for each platform
+
+# Definitions required in all program directories to compile and link
+# C programs using gcc.
+
+# static / shared
+BUILD_LIB_TYPE = shared
+
+ROOT = $(BUILD_ROOT)
+OUT_DIR = $(ROOT)/out
+BUILD_TOOLCHAIN_DIR = $(ROOT)/toolchain
+LOCAL_PATH=.
+
+export STAGING_DIR=
+
+CC=$(BUILD_TOOLCHAIN_DIR)/bin/arm-openwrt-linux-gnueabi-gcc
+AR=$(BUILD_TOOLCHAIN_DIR)/bin/arm-openwrt-linux-gnueabi-ar
+
+MAKE=make
+
+$(info BUILD_LIB_TYPE=$(BUILD_LIB_TYPE))
+$(info ROOT=$(ROOT))
+$(info CC=$(CC))
+$(info AR=$(AR))
+
+# -Werror=non-virtual-dtor
+#CFLAGS= --sysroot=$(BUILD_TOOLCHAIN_DIR) -Os -pipe -rdynamic -march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -mfloat-abi=hard -fno-exceptions -Wno-multichar -ffunction-sections -fdata-sections -funwind-tables -Wa,--noexecstack -fno-short-enums -no-canonical-prefixes -fno-canonical-system-headers -mfpu=neon -fno-builtin-sin -fno-strict-volatile-bitfields -Wno-psabi -mthumb-interwork -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith -g -Wstrict-aliasing=2 -fgcse-after-reload -frerun-cse-after-loop -frename-registers -mthumb -fomit-frame-pointer -fno-strict-aliasing -Werror=format-security -Werror=return-type -Werror=address -Werror=sequence-point -ffunction-sections -Wl,--gc-sections -Wl,--no-undefined -Wno-sign-compare -Wno-pointer-arith
+CFLAGS_DEF = --sysroot=$(BUILD_TOOLCHAIN_DIR) -Os -pipe -rdynamic -march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -Wall -Werror -g
+
+CFLAGS_IGNORE_WARN = --sysroot=$(BUILD_TOOLCHAIN_DIR) -Os -pipe -rdynamic -march=armv7-a -mtune=cortex-a7 -mfpu=neon-vfpv4 -fno-caller-saves -fhonour-copts -Wno-error=unused-but-set-variable -mfloat-abi=hard -fno-exceptions -Wno-multichar -ffunction-sections -fdata-sections -funwind-tables -Wa,--noexecstack -fno-short-enums -no-canonical-prefixes -fno-canonical-system-headers -mfpu=neon -fno-builtin-sin -fno-strict-volatile-bitfields -Wno-psabi -mthumb-interwork -fmessage-length=0 -W -Wall -Wno-unused -Winit-self -Wpointer-arith -g -Wstrict-aliasing=2 -fgcse-after-reload -frerun-cse-after-loop -frename-registers -mthumb -fomit-frame-pointer -fno-strict-aliasing -Werror=format-security -Werror=return-type -Werror=address -Werror=sequence-point -ffunction-sections -Wl,--gc-sections -Wl,--no-undefined -Wno-sign-compare -Wno-pointer-arith
+
+AWK=awk
+
+#CFLAGS += -Wno-error=format-truncation -Wno-error=format-overflow= -Wno-error=stringop-overread -Wno-error=deprecated-declarations
+
+CFLAGS=$(CFLAGS_IGNORE_WARN)
+
+INC_DIR = \
+ -I$(LOCAL_PATH)/ \
+ -I$(BUILD_ROOT)/mbtk/include \
+ -I$(BUILD_ROOT)/mbtk/include/mbtk \
+ -I$(BUILD_ROOT)/mbtk/include/lynq \
+ -I$(BUILD_ROOT)/mbtk/include/mqtt \
+ -I$(BUILD_ROOT)/mbtk/include/ql_v2
+
+# -DCONFIG_AB_SYSTEM
+DEFINE = \
+ -DMBTK_SUPPORT \
+ -DMARVELL_EXTENDED \
+ -DPXA1826_AUDIO \
+ -D__USE_GNU \
+ -DNOT_DROPPED_FLAGS_TEST \
+ -DNDEBUG \
+ -UDEBUG \
+ -D_FORTIFY_SOURCE=2 \
+ -D_GNU_SOURCE
+
+# -L$(OUT_DIR)/lib
+LIB_DIR = \
+ -L$(BUILD_ROOT)/mbtk/lib
+
+LIBS = -lpthread -lstdc++
+
+# Common temp files to delete from each directory.
+TEMPFILES=core core.* *.o temp.* *.out
diff --git a/mbtk/mbtk_toolchain_config/Makefile b/mbtk/mbtk_toolchain_config/Makefile
new file mode 100755
index 0000000..58b0270
--- /dev/null
+++ b/mbtk/mbtk_toolchain_config/Makefile
@@ -0,0 +1,50 @@
+BUILD_ROOT = $(shell pwd)
+include Make.defines
+
+#DIRS = helloworld test_ql
+include config
+
+# (cd $$i && echo "making $$i" && $(MAKE))
+all:
+ @echo ROOT=$(ROOT)
+ @echo CC=$(CC)
+ @echo OUT_DIR=$(OUT_DIR)
+ @rm -rf $(OUT_DIR)
+ @ [ ! -d out/bin ] && mkdir -p out/bin
+ @ [ ! -d out/lib ] && mkdir -p out/lib
+ @for i in $(MBTK_BUILD_DIRS); do \
+ if [ -d $$i ];then \
+ ($(MAKE) -C $$i) || exit 1; \
+ fi \
+ done
+ @echo "Success"
+
+clean:
+ @for i in $(MBTK_BUILD_DIRS); do \
+ (cd $$i && echo "Cleaning $$i" && $(MAKE) clean) || exit 1; \
+ done
+ rm -rf $(OUT_DIR)
+
+
+#SUBDIRS := $(wildcard */)
+#SUBDIRS_WITH_MAKEFILES := $(foreach dir,$(SUBDIRS),$(if $(wildcard $(dir)Makefile),$(dir),))
+#
+#all:
+# @echo $(ROOT)
+# @echo $(CC)
+# @echo $(OUT_DIR)
+# @rm -rf $(OUT_DIR)
+# @ [ ! -d out/bin ] && mkdir -p out/bin
+# @ [ ! -d out/lib ] && mkdir -p out/lib
+# @echo DIR=$(SUBDIRS_WITH_MAKEFILES)
+# @for dir in $(SUBDIRS_WITH_MAKEFILES); do \
+# echo "Building $$dir"; \
+# $(MAKE) -C $$dir || exit 1; \
+# done
+#
+#clean:
+# @echo DIR=$(SUBDIRS_WITH_MAKEFILES)
+# @for i in $(SUBDIRS_WITH_MAKEFILES); do \
+# (cd $$i && echo "Cleaning $$i" && $(MAKE) clean) || exit 1; \
+# done
+# rm -rf $(OUT_DIR)
\ No newline at end of file
diff --git a/mbtk/mbtk_toolchain_config/ReadMe.txt b/mbtk/mbtk_toolchain_config/ReadMe.txt
new file mode 100755
index 0000000..1130180
--- /dev/null
+++ b/mbtk/mbtk_toolchain_config/ReadMe.txt
@@ -0,0 +1,13 @@
+说明:
+1、把需要编译的工程放在目录 mbtk_toolchain 下面,可以放置多个工程;
+2、配置需要编译的工程目录:
+ 修改文件 config 中的变量 MBTK_BUILD_DIRS,指定要编译的工程目录,注意:如果工程存在依赖关系,请将被依赖的工程放在前面;
+3、在要编译的工程目录下创建文件 Makefile,可直接从 bin_test/lib_test 中复制;
+4、修改 Makefile ,具体见 bin_test/lib_test 中的 Makefile;
+5、执行 make 命令编译,要clean可执行: make clean
+6、编译成功后,如果是可执行文件位于 out/bin ;如果是库文件位于 out/lib
+
+
+注:平台库文件 ql_lib/lynq_lib 是开源的,代码分别位于SDK的 mbtk/libql_lib_v2_rilv2 和 mbtk/liblynq_lib_rilv2,如果修改了这部分代码可能需要重新生成编译工具链。
+ 在SDK中编译完成后可执行如下命令生成上述编译工具链 : ./build.sh toolchain
+
diff --git a/mbtk/mbtk_toolchain_config/bin_test/Makefile b/mbtk/mbtk_toolchain_config/bin_test/Makefile
new file mode 100755
index 0000000..f49a76d
--- /dev/null
+++ b/mbtk/mbtk_toolchain_config/bin_test/Makefile
@@ -0,0 +1,33 @@
+BUILD_ROOT = $(shell pwd)/..
+include $(BUILD_ROOT)/Make.defines
+LOCAL_PATH=$(shell pwd)
+
+#####################################################################
+
+# 工程名(编译后生成文件名)
+MBTK_PROJECT_NAME=bin_test
+
+# 编译库文件或可执行文件(Y/N),N为编译可执行文件
+MBTK_BUILD_LIB=N
+
+# 指定代码路径,用空格分隔(不支持子目录)
+MBTK_SRC_DIR=$(LOCAL_PATH)/src
+
+# 指定依赖的头文件目录,用空格分隔
+MBTK_INC_DIR=$(LOCAL_PATH)/inc $(BUILD_ROOT)/lib_test/inc
+
+# 指定依赖的库文件目录,用空格分隔
+MBTK_LIB_DIR=$(BUILD_ROOT)/out/lib
+
+# 指定依赖的库文件,用空格分隔
+MBTK_LIBS=mbtk_lib ql_lib lib_test
+
+# 指定额外的编译选项,用空格分隔
+MBTK_CFLAGS=
+
+# 指定需要添加的宏,用空格分隔,如 MBTK_TEST_SUPPORT
+MBTK_DEFINE=
+
+
+######################################################################
+include $(BUILD_ROOT)/Build.defines
diff --git a/mbtk/mbtk_toolchain_config/bin_test/inc/helloworld.h b/mbtk/mbtk_toolchain_config/bin_test/inc/helloworld.h
new file mode 100755
index 0000000..3ba512c
--- /dev/null
+++ b/mbtk/mbtk_toolchain_config/bin_test/inc/helloworld.h
@@ -0,0 +1,6 @@
+#ifndef _HELLO_WORLD_H
+#define _HELLO_WORLD_H
+
+#define HELLO_WORLD "Hello World!"
+
+#endif /* _HELLO_WORLD_H */
\ No newline at end of file
diff --git a/mbtk/mbtk_toolchain_config/bin_test/src/main.c b/mbtk/mbtk_toolchain_config/bin_test/src/main.c
new file mode 100755
index 0000000..40f73f5
--- /dev/null
+++ b/mbtk/mbtk_toolchain_config/bin_test/src/main.c
@@ -0,0 +1,11 @@
+#include <stdio.h>
+
+#include "helloworld.h"
+#include "lib_test.h"
+
+int main(int argc, char *argv[])
+{
+ printf("%s\n", HELLO_WORLD);
+
+ return test_at("ATI");
+}
\ No newline at end of file
diff --git a/mbtk/mbtk_toolchain_config/config b/mbtk/mbtk_toolchain_config/config
new file mode 100755
index 0000000..5f9e5ac
--- /dev/null
+++ b/mbtk/mbtk_toolchain_config/config
@@ -0,0 +1,2 @@
+# 指定需要编译的工程,如果工程存在依赖关系,请将被依赖的工程放在前面。
+MBTK_BUILD_DIRS = lib_test bin_test
diff --git a/mbtk/mbtk_toolchain_config/lib_test/Makefile b/mbtk/mbtk_toolchain_config/lib_test/Makefile
new file mode 100755
index 0000000..aa76930
--- /dev/null
+++ b/mbtk/mbtk_toolchain_config/lib_test/Makefile
@@ -0,0 +1,33 @@
+BUILD_ROOT = $(shell pwd)/..
+include $(BUILD_ROOT)/Make.defines
+LOCAL_PATH=$(shell pwd)
+
+#####################################################################
+
+# 工程名(编译后生成文件名)
+MBTK_PROJECT_NAME=lib_test
+
+# 编译库文件或可执行文件(Y/N),N为编译可执行文件
+MBTK_BUILD_LIB=Y
+
+# 指定代码路径,用空格分隔(不支持子目录)
+MBTK_SRC_DIR=$(LOCAL_PATH)/src
+
+# 指定依赖的头文件目录,用空格分隔
+MBTK_INC_DIR=$(LOCAL_PATH)/inc
+
+# 指定依赖的库文件目录,用空格分隔
+MBTK_LIB_DIR=
+
+# 指定依赖的库文件,用空格分隔
+MBTK_LIBS=mbtk_lib ql_lib
+
+# 指定额外的编译选项,用空格分隔
+MBTK_CFLAGS=
+
+# 指定需要添加的宏,用空格分隔,如 MBTK_TEST_SUPPORT
+MBTK_DEFINE=
+
+
+######################################################################
+include $(BUILD_ROOT)/Build.defines
diff --git a/mbtk/mbtk_toolchain_config/lib_test/inc/lib_test.h b/mbtk/mbtk_toolchain_config/lib_test/inc/lib_test.h
new file mode 100755
index 0000000..ddb17b2
--- /dev/null
+++ b/mbtk/mbtk_toolchain_config/lib_test/inc/lib_test.h
@@ -0,0 +1,6 @@
+#ifndef _LIB_TEST_H
+#define _LIB_TEST_H
+
+int test_at(const char *argv);
+
+#endif /* _LIB_TEST_H */
\ No newline at end of file
diff --git a/mbtk/mbtk_toolchain_config/lib_test/src/lib_test.c b/mbtk/mbtk_toolchain_config/lib_test/src/lib_test.c
new file mode 100755
index 0000000..460582c
--- /dev/null
+++ b/mbtk/mbtk_toolchain_config/lib_test/src/lib_test.c
@@ -0,0 +1,25 @@
+#include <stdio.h>
+#include "ql_atc.h"
+
+int test_at(char *argv)
+{
+ if(ql_atc_init()) {
+ printf("ql_atc_init() fail.\n");
+ return -1;
+ }
+
+ char resp[1024];
+ if(ql_atc_send(argv, resp, sizeof(resp))) {
+ printf("ql_atc_send() fail.\n");
+ return -1;
+ }
+
+ if(ql_atc_deinit()) {
+ printf("ql_atc_deinit() fail.\n");
+ return -1;
+ }
+
+ printf("RSP : %s\n", resp);
+
+ return 0;
+}
diff --git "a/mbtk/optee_test/T108_TEE_API\347\224\250\346\210\267\346\211\213\345\206\214V1.0.pdf" "b/mbtk/optee_test/T108_TEE_API\347\224\250\346\210\267\346\211\213\345\206\214V1.0.pdf"
new file mode 100755
index 0000000..53b1e28
--- /dev/null
+++ "b/mbtk/optee_test/T108_TEE_API\347\224\250\346\210\267\346\211\213\345\206\214V1.0.pdf"
Binary files differ
diff --git a/mbtk/rootfs/etc/init.d/mbtk_boot_eary b/mbtk/rootfs/etc/init.d/mbtk_boot_eary
index 07c5c9f..5bffd35 100755
--- a/mbtk/rootfs/etc/init.d/mbtk_boot_eary
+++ b/mbtk/rootfs/etc/init.d/mbtk_boot_eary
@@ -34,12 +34,12 @@
if [ "$project" == "T108_2" ];then
i2cset -y -f 2 0x31 0x15 0x00
-# mbtk_start /bin/mbtk_gnssd 8122 /dev/ttyS3 0
+ [ -e /bin/mbtk_gnssd ] && mbtk_start /bin/mbtk_gnssd 8122 /dev/ttyS3 0
elif [ "$project" == "L508_X6" ];then
- mbtk_start /bin/mbtk_gnssd 5311 /dev/ttyS3 255
+ [ -e /bin/mbtk_gnssd ] && mbtk_start /bin/mbtk_gnssd 5311 /dev/ttyS3 255
else
# Only auto open gnss but not open any port.
- mbtk_start /bin/mbtk_gnssd 5311 /dev/ttyS2 255
+ [ -e /bin/mbtk_gnssd ] && mbtk_start /bin/mbtk_gnssd 5311 /dev/ttyS2 255
fi
if [ "$project" == "L508_X6" -o "$project" == "L509" ]
@@ -47,11 +47,6 @@
#echo "$project"
i2cset -y -f 2 0x32 0x0d 0x00
fi
-
- if [ "$project" == "T108_2" ]
- then
- i2cset -y -f 2 0x31 0x15 0x00
- fi
echo "--mbtk eary boot end--" > /dev/kmsg
}
diff --git a/mbtk/rootfs/etc/init.d/mbtk_boot_server_ready b/mbtk/rootfs/etc/init.d/mbtk_boot_server_ready
index 7d50c92..983f5fa 100755
--- a/mbtk/rootfs/etc/init.d/mbtk_boot_server_ready
+++ b/mbtk/rootfs/etc/init.d/mbtk_boot_server_ready
@@ -14,8 +14,9 @@
echo "--mbtk server ready boot start--" > /dev/kmsg
#mbtk_start /bin/mbtk_info_test
- #mbtk_start /bin/mbtk_logd
-
+ mbtk_start /bin/mbtk_logd
+ # i2s ×ó¶ÔÆë´«ÊäģʽÉèÖÃÖ¸Áî
+ #ubus call audio_if config_pcmexpert "{ 'frame_format': 1, 'invert_frame' : 0, 'frame_polarity' : 1, 'bitclk_polarity' : 0, 'fsyc_shift' : 1}"
echo "--mbtk server ready boot end--" > /dev/kmsg
}
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/Makefile b/mbtk/test/Mobiletek_Tester_RDIT/Makefile
new file mode 100755
index 0000000..150ba51
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/Makefile
@@ -0,0 +1,56 @@
+BUILD_ROOT = $(shell pwd)/../..
+include $(BUILD_ROOT)/Make.defines
+
+INC_DIR +=
+
+LIB_DIR += -I.
+
+LIBS += -lmbtk_lib -llynq_lib -ldl -lprop2uci
+
+CFLAGS = $(CFLAGS_TEST)
+
+DEFINE +=
+
+LOCAL_SRC_FILES = $(wildcard *.c) $(wildcard *.cpp)
+
+LOCAL_SRC_FILES = $(wildcard src/*.c) $(wildcard src/*.cpp)
+OBJS = $(patsubst %.c, %.o, $(patsubst %.cpp, %.o, $(LOCAL_SRC_FILES)))
+$(info OBJS = $(OBJS))
+
+SOURCES = main.cpp dispatch.cpp sms.cpp network.cpp data.cpp qser-voice.cpp sim.cpp
+SOURCES_TOOL = sms.cpp network.cpp data.cpp qser-voice.cpp sim.cpp dispatch.cpp socket-tool.cpp
+
+EXECUTABLE := $(OUT_DIR)/bin/Mobiletek-Tester-RDIT
+EXEC_TOOL = $(OUT_DIR)/bin/socket-tool
+
+#EXECUTABLE := Mobiletek-Tester-RDIT
+#EXEC_TOOL := socket-tool
+
+OBJECTS=$(SOURCES:.cpp=.o)
+
+OBJECTS_TOOL=$(SOURCES_TOOL:.cpp=.o)
+
+all: $(EXECUTABLE) $(EXEC_TOOL)
+
+$(EXECUTABLE): $(OBJECTS)
+ @echo " BIN $@"
+ $(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $(OBJECTS) -o $@
+
+%.o:%.c
+ $(CC) $(CFLAGS) $(INC_DIR) $(LIBS) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+ $(CC) $(CFLAGS) $(INC_DIR) $(LIBS) $(DEFINE) -c $< -o $@
+
+$(EXEC_TOOL): $(OBJECTS_TOOL)
+ @echo " BIN $@"
+ $(CC) $(CFLAGS) $(LIB_DIR) $(LIBS) $(OBJECTS_TOOL) -o $@
+
+%.o:%.c
+ $(CC) $(CFLAGS) $(INC_DIR) $(LIBS) $(DEFINE) -c $< -o $@
+
+%.o:%.cpp
+ $(CC) $(CFLAGS) $(INC_DIR) $(LIBS) $(DEFINE) -c $< -o $@
+
+clean:
+ rm -f $(OBJECTS) $(OBJECTS_TOOL) $(EXECUTABLE) $(EXEC_TOOL)
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/cc.cpp b/mbtk/test/Mobiletek_Tester_RDIT/cc.cpp
new file mode 100755
index 0000000..8c5b2ad
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/cc.cpp
@@ -0,0 +1,41 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include "lynq_call.h"
+#include "cc.h"
+#define TEST_RESULT "lynq_result="
+
+static int handle = 0;
+
+int init_call(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ int uToken = atoi(argv[1]);
+ ret = lynq_init_call(uToken);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+int dial_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ ret = lynq_call(&handle,argv[1]);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+int answer_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ ret = lynq_call_answer();
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+int hungup_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ ret = lynq_call_hungup(&handle);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/cc.h b/mbtk/test/Mobiletek_Tester_RDIT/cc.h
new file mode 100755
index 0000000..a746002
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/cc.h
@@ -0,0 +1,4 @@
+int init_call(int argc, char *argv[], int sp_test);
+int dial_test(int argc, char *argv[], int sp_test);
+int answer_test(int argc, char *argv[], int sp_test);
+int hungup_test(int argc, char *argv[], int sp_test);
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/data.cpp b/mbtk/test/Mobiletek_Tester_RDIT/data.cpp
new file mode 100755
index 0000000..e628023
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/data.cpp
@@ -0,0 +1,458 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include "lynq_data.h"
+#include "lynq_qser_data.h"
+#include "data.h"
+#define TEST_RESULT "lynq_result="
+
+// int init_data(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int uToken = atoi(argv[1]);
+// ret = lynq_init_data(uToken);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int deinit_data(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// ret = lynq_deinit_data();
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int setup_data_call(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int handle = atoi(argv[1]);
+
+// ret = lynq_setup_data_call(&handle);
+
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("handle = %d\n", handle);
+// return ret;
+// }
+// int deactivte_data_call(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int handle = atoi(argv[1]);
+
+// ret = lynq_deactive_data_call(&handle);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int wait_data_call(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int handle = atoi(argv[1]);
+
+// ret = lynq_wait_data_call_state_change(&handle);
+// printf("LYNQ_WAIT_DATA_CALL: handle = %d\n", handle);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int setup_data_call_sp(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int flag = atoi(argv[5]);
+// int handle = atoi(argv[1]);
+
+// ret = lynq_setup_data_call_sp(&handle, argv[2], argv[3], NULL, NULL, NULL, argv[4], NULL);
+
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("handle = %d\n", handle);
+// return ret;
+// }
+// int get_data_call_list(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int handle = atoi(argv[1]);
+// lynq_data_call_response_v11_t dataCallList = {-1, -1, -1, -1,"", "", "", "", "", "", -1};
+
+// ret = lynq_get_data_call_list(&handle, &dataCallList);
+
+// printf("LYNQ_GET_DATA_CALL_LIST: handle = %d\n", handle);
+// printf("LYNQ_GET_DATA_CALL_LIST: status=%d, suggestedRetryTime=%d, cid=%d, active=%d, type=%s, ifname=%s, addresses=%s, dnses=%s, gateways=%s, pcscf=%s, mtu=%d\n",
+// dataCallList.status, dataCallList.suggestedRetryTime, dataCallList.cid, dataCallList.active,
+// dataCallList.type, dataCallList.ifname, dataCallList.addresses, dataCallList.dnses, dataCallList.gateways, dataCallList.pcscf,
+// dataCallList.mtu);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+//=====================================QSER-DATA=========================================================
+
+qser_data_call_state_s state = {0};
+void evt_cb(qser_data_call_state_s *state)
+{
+ char buf_ip[64] = {0};
+ char buf_gateway[64] = {0};
+ char buf_pri_dns[64] = {0};
+ char buf_sec_dns[64] = {0};
+ printf("LYNQ_QSER_DATA_INIT: profile_idx=%d, name=%s, ip_family=%d, state=%d, error=%d\n"
+ , state->profile_idx, state->name, state->ip_family, state->state, state->err);
+ printf("LYNQ_QSER_DATA_INIT: v4.ip=%s\n"
+ , inet_ntoa(state->v4.ip));
+ printf("LYNQ_QSER_DATA_INIT: v4.gateway=%s\n"
+ , inet_ntoa(state->v4.gateway));
+ printf("LYNQ_QSER_DATA_INIT: v4.pri_dns=%s\n"
+ , inet_ntoa(state->v4.pri_dns));
+ printf("LYNQ_QSER_DATA_INIT: v4.sec_dns=%s\n"
+ , inet_ntoa(state->v4.sec_dns));
+ inet_ntop(AF_INET6, &(state->v6.ip), buf_ip, sizeof(buf_ip));
+ inet_ntop(AF_INET6, &(state->v6.gateway), buf_gateway, sizeof(buf_gateway));
+ inet_ntop(AF_INET6, &(state->v6.pri_dns), buf_pri_dns, sizeof(buf_pri_dns));
+ inet_ntop(AF_INET6, &(state->v6.sec_dns), buf_sec_dns, sizeof(buf_sec_dns));
+ printf("LYNQ_QSER_DATA_INIT: v6.ip=%s, v6.gateway=%s, v6.pri_dns=%s, v6.sec_dns=%s\n"
+ , buf_ip, buf_gateway, buf_pri_dns, buf_sec_dns);
+}
+
+int qser_init_data(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ int uToken = atoi(argv[1]);
+ ret = qser_data_call_init(evt_cb);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_deinit_data(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+
+ qser_data_call_destroy();
+ printf("LYNQ_QSER_DATA_DEINIT end\n");
+ return 0;
+}
+int qser_setup_data_call(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ qser_data_call_s datacall;
+ qser_data_call_error_e err = QSER_DATA_CALL_ERROR_NONE;
+ int ip_family_flag = atoi(argv[3]);
+
+ datacall.profile_idx = atoi(argv[1]);
+ datacall.reconnect = (bool)atoi(argv[2]);
+
+ if(strcmp(argv[3], "QSER_DATA_CALL_TYPE_IPV4") == 0)
+ {
+ datacall.ip_family = QSER_DATA_CALL_TYPE_IPV4;
+ }
+ else if(strcmp(argv[3], "QSER_DATA_CALL_TYPE_IPV6") == 0)
+ {
+ datacall.ip_family = QSER_DATA_CALL_TYPE_IPV6;
+ }
+ else if(strcmp(argv[3], "QSER_DATA_CALL_TYPE_IPV4V6") == 0)
+ {
+ datacall.ip_family = QSER_DATA_CALL_TYPE_IPV4V6;
+ }
+ else
+ {
+ printf("LYNQ_QSER_SETUP_DATA_CALL: ip_family input error\n");
+ return ret;
+ }
+
+ memcpy(datacall.cdma_username, argv[4], QSER_APN_USERNAME_SIZE);
+ memcpy(datacall.cdma_password, argv[5], QSER_APN_PASSWORD_SIZE);
+
+ ret = qser_data_call_start(&datacall, &err);
+ printf("LYNQ_QSER_SETUP_DATA_CALL err = %d\n", err);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+int qser_setup_data_call_async(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ qser_data_call_s datacall;
+ qser_data_call_error_e err = QSER_DATA_CALL_ERROR_NONE;
+ int ip_family_flag = atoi(argv[3]);
+
+ datacall.profile_idx = atoi(argv[1]);
+ datacall.reconnect = (bool)atoi(argv[2]);
+
+ if(strcmp(argv[3], "QSER_DATA_CALL_TYPE_IPV4") == 0)
+ {
+ datacall.ip_family = QSER_DATA_CALL_TYPE_IPV4;
+ }
+ else if(strcmp(argv[3], "QSER_DATA_CALL_TYPE_IPV6") == 0)
+ {
+ datacall.ip_family = QSER_DATA_CALL_TYPE_IPV6;
+ }
+ else if(strcmp(argv[3], "QSER_DATA_CALL_TYPE_IPV4V6") == 0)
+ {
+ datacall.ip_family = QSER_DATA_CALL_TYPE_IPV4V6;
+ }
+ else
+ {
+ printf("LYNQ_QSER_SETUP_DATA_CALL_ASYNC: ip_family input error\n");
+ return ret;
+ }
+
+ memcpy(datacall.cdma_username, argv[4], QSER_APN_USERNAME_SIZE);
+ memcpy(datacall.cdma_password, argv[5], QSER_APN_PASSWORD_SIZE);
+
+ ret = qser_data_call_start_async(&datacall, &err);
+ printf("LYNQ_QSER_SETUP_DATA_CALL_ASYNC err = %d\n", err);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+int qser_deactivte_data_call(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ int profile_idx_int = atoi(argv[1]);
+ qser_data_call_ip_family_e ip_family = QSER_DATA_CALL_TYPE_IPV4V6;
+ qser_data_call_error_e err = QSER_DATA_CALL_ERROR_NONE;
+
+ if(strcmp(argv[2], "QSER_DATA_CALL_TYPE_IPV4") == 0)
+ {
+ ip_family = QSER_DATA_CALL_TYPE_IPV4;
+ }
+ else if(strcmp(argv[2], "QSER_DATA_CALL_TYPE_IPV6") == 0)
+ {
+ ip_family = QSER_DATA_CALL_TYPE_IPV6;
+ }
+ else if(strcmp(argv[2], "QSER_DATA_CALL_TYPE_IPV4V6") == 0)
+ {
+ ip_family = QSER_DATA_CALL_TYPE_IPV4V6;
+ }
+ else
+ {
+ printf("LYNQ_QSER_DEACTIVATE_DATA_CALL: ip_family input error\n");
+ return ret;
+ }
+
+ ret = qser_data_call_stop(profile_idx_int, ip_family, &err);
+ printf("LYNQ_QSER_DEACTIVATE_DATA_CALL err = %d\n", err);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+int qser_get_data_call_list(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ char buf_ip[64] = {0};
+ char buf_gateway[64] = {0};
+ char buf_pri_dns[64] = {0};
+ char buf_sec_dns[64] = {0};
+ qser_data_call_info_s info = {0};
+ int profile_idx_int = atoi(argv[1]);
+ qser_data_call_error_e err = QSER_DATA_CALL_ERROR_NONE;
+ qser_data_call_ip_family_e ip_family = QSER_DATA_CALL_TYPE_IPV4V6;
+
+ if(strcmp(argv[2], "QSER_DATA_CALL_TYPE_IPV4") == 0)
+ {
+ ip_family = QSER_DATA_CALL_TYPE_IPV4;
+ }
+ else if(strcmp(argv[2], "QSER_DATA_CALL_TYPE_IPV6") == 0)
+ {
+ ip_family = QSER_DATA_CALL_TYPE_IPV6;
+ }
+ else if(strcmp(argv[2], "QSER_DATA_CALL_TYPE_IPV4V6") == 0)
+ {
+ ip_family = QSER_DATA_CALL_TYPE_IPV4V6;
+ }
+ else
+ {
+ printf("LYNQ_QSER_GET_DATA_CALL_LIST: ip_family input error\n");
+ return ret;
+ }
+
+ ret = qser_data_call_info_get(profile_idx_int, ip_family, &info, &err);
+ printf("%s%d\n",TEST_RESULT,ret);
+ printf("LYNQ_QSER_GET_DATA_CALL_LIST: error=%d, profile_idx=%d, ip_family=%d\n", err, info.profile_idx, info.ip_family);
+ printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.name=%s, v4.state=%d, v4.reconnect=%d\n", info.v4.name, info.v4.state, info.v4.reconnect);
+ printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.ip=%s\n"
+ , inet_ntoa(info.v4.addr.ip));
+ printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.gateway=%s\n"
+ , inet_ntoa(info.v4.addr.gateway));
+ printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.pri_dns=%s\n"
+ , inet_ntoa(info.v4.addr.pri_dns));
+ printf("LYNQ_QSER_GET_DATA_CALL_LIST: v4.sec_dns=%s\n"
+ , inet_ntoa(info.v4.addr.sec_dns));
+
+ printf("LYNQ_QSER_GET_DATA_CALL_LIST: v6.name=%s, v6.state=%d, v6.reconnect=%d\n", info.v6.name, info.v6.state, info.v6.reconnect);
+ inet_ntop(AF_INET6, &(info.v6.addr.ip), buf_ip, sizeof(buf_ip));
+ inet_ntop(AF_INET6, &(info.v6.addr.gateway), buf_gateway, sizeof(buf_gateway));
+ inet_ntop(AF_INET6, &(info.v6.addr.pri_dns), buf_pri_dns, sizeof(buf_pri_dns));
+ inet_ntop(AF_INET6, &(info.v6.addr.sec_dns), buf_sec_dns, sizeof(buf_sec_dns));
+ printf("LYNQ_QSER_GET_DATA_CALL_LIST: v6.ip=%s, v6.gateway=%s, v6.pri_dns=%s, v6.sec_dns=%s\n"
+ , buf_ip, buf_gateway, buf_pri_dns, buf_sec_dns);
+ return ret;
+}
+
+int lynq_qser_apn_set(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ qser_apn_info_s apn = {'1', QSER_APN_PDP_TYPE_IPV4V6, QSER_APN_AUTH_PROTO_DEFAULT, NULL, NULL, NULL, NULL};
+
+ apn.profile_idx = atoi(argv[1]);
+ //set pdptype
+ if(strcmp(argv[2], "QSER_APN_PDP_TYPE_IPV4") == 0)
+ {
+ apn.pdp_type = QSER_APN_PDP_TYPE_IPV4;
+ }
+ else if(strcmp(argv[2], "QSER_APN_PDP_TYPE_PPP") == 0)
+ {
+ apn.pdp_type = QSER_APN_PDP_TYPE_PPP;
+ }
+ else if(strcmp(argv[2], "QSER_APN_PDP_TYPE_IPV6") == 0)
+ {
+ apn.pdp_type = QSER_APN_PDP_TYPE_IPV6;
+ }
+ else if(strcmp(argv[2], "QSER_APN_PDP_TYPE_IPV4V6") == 0)
+ {
+ apn.pdp_type = QSER_APN_PDP_TYPE_IPV4V6;
+ }
+ else
+ {
+ printf("LYNQ_QSER_APN_SET: pdp_type input error\n");
+ return ret;
+ }
+ //set auth_proto
+ if(strcmp(argv[3], "QSER_APN_AUTH_PROTO_DEFAULT") == 0)
+ {
+ apn.auth_proto = QSER_APN_AUTH_PROTO_DEFAULT;
+ }
+ else if(strcmp(argv[3], "QSER_APN_AUTH_PROTO_NONE") == 0)
+ {
+ apn.auth_proto = QSER_APN_AUTH_PROTO_NONE;
+ }
+ else if(strcmp(argv[3], "QSER_APN_AUTH_PROTO_PAP") == 0)
+ {
+ apn.auth_proto = QSER_APN_AUTH_PROTO_PAP;
+ }
+ else if(strcmp(argv[3], "QSER_APN_AUTH_PROTO_CHAP") == 0)
+ {
+ apn.auth_proto = QSER_APN_AUTH_PROTO_CHAP;
+ }
+ else if(strcmp(argv[3], "QSER_APN_AUTH_PROTO_PAP_CHAP") == 0)
+ {
+ apn.auth_proto = QSER_APN_AUTH_PROTO_PAP_CHAP;
+ }
+ else
+ {
+ printf("LYNQ_QSER_APN_SET: auth_proto input error\n");
+ return ret;
+ }
+ memcpy(apn.apn_name,argv[4],QSER_APN_NAME_SIZE);
+ memcpy(apn.username,argv[5],QSER_APN_USERNAME_SIZE);
+ memcpy(apn.password,argv[6],QSER_APN_PASSWORD_SIZE);
+ memcpy(apn.apn_type,argv[7],QSER_APN_NAME_SIZE);
+ ret = qser_apn_set(&apn);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+int lynq_qser_apn_get(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ qser_apn_info_s apn = {0};
+ int profile_idx_int = atoi(argv[1]);
+ ret = qser_apn_get(profile_idx_int, &apn);
+ printf("%s%d\n",TEST_RESULT,ret);
+ printf("LYNQ_QSER_APN_GET: pdp_type=%d, auth_proto=%d, apn_name=%s, username=%s, password=%s, apn_type=%s\n"
+ ,apn.pdp_type, apn.auth_proto, apn.apn_name, apn.username, apn.password, apn.apn_type);
+ return ret;
+}
+int lynq_qser_apn_add(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ unsigned char profile_idx_char;
+ qser_apn_add_s apn = {QSER_APN_PDP_TYPE_IPV4V6, QSER_APN_AUTH_PROTO_DEFAULT, "cmnet", NULL, NULL, NULL};
+
+ if(strcmp(argv[1], "QSER_APN_PDP_TYPE_IPV4") == 0)
+ {
+ apn.pdp_type = QSER_APN_PDP_TYPE_IPV4;
+ }
+ else if(strcmp(argv[1], "QSER_APN_PDP_TYPE_PPP") == 0)
+ {
+ apn.pdp_type = QSER_APN_PDP_TYPE_PPP;
+ }
+ else if(strcmp(argv[1], "QSER_APN_PDP_TYPE_IPV6") == 0)
+ {
+ apn.pdp_type = QSER_APN_PDP_TYPE_IPV6;
+ }
+ else if(strcmp(argv[1], "QSER_APN_PDP_TYPE_IPV4V6") == 0)
+ {
+ apn.pdp_type = QSER_APN_PDP_TYPE_IPV4V6;
+ }
+ else
+ {
+ printf("LYNQ_QSER_APN_ADD: pdp_type input error\n");
+ return ret;
+ }
+ //set auth_proto
+ if(strcmp(argv[2], "QSER_APN_AUTH_PROTO_DEFAULT") == 0)
+ {
+ apn.auth_proto = QSER_APN_AUTH_PROTO_DEFAULT;
+ }
+ else if(strcmp(argv[2], "QSER_APN_AUTH_PROTO_NONE") == 0)
+ {
+ apn.auth_proto = QSER_APN_AUTH_PROTO_NONE;
+ }
+ else if(strcmp(argv[2], "QSER_APN_AUTH_PROTO_PAP") == 0)
+ {
+ apn.auth_proto = QSER_APN_AUTH_PROTO_PAP;
+ }
+ else if(strcmp(argv[2], "QSER_APN_AUTH_PROTO_CHAP") == 0)
+ {
+ apn.auth_proto = QSER_APN_AUTH_PROTO_CHAP;
+ }
+ else if(strcmp(argv[2], "QSER_APN_AUTH_PROTO_PAP_CHAP") == 0)
+ {
+ apn.auth_proto = QSER_APN_AUTH_PROTO_PAP_CHAP;
+ }
+ else
+ {
+ printf("LYNQ_QSER_APN_ADD: auth_proto input error\n");
+ return ret;
+ }
+
+ memcpy(apn.apn_name,argv[3],QSER_APN_NAME_SIZE);
+ memcpy(apn.username,argv[4],QSER_APN_USERNAME_SIZE);
+ memcpy(apn.password,argv[5],QSER_APN_PASSWORD_SIZE);
+ memcpy(apn.apn_type,argv[6],QSER_APN_NAME_SIZE);
+
+ printf("LYNQ_QSER_APN_ADD: ready to qser_apn_add\n");
+ ret = qser_apn_add(&apn, &profile_idx_char);
+ printf("%s%d,profile = %d\n",TEST_RESULT,ret,profile_idx_char);
+ return ret;
+}
+int lynq_qser_apn_del(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ int profile_idx_int = atoi(argv[1]);
+ ret = qser_apn_del(profile_idx_int);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+int lynq_qser_apn_get_list(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ qser_apn_info_list_s apn_list = {0};
+ ret = qser_apn_get_list(&apn_list);
+ printf("%s%d\n",TEST_RESULT,ret);
+ for(int i = 0; i < apn_list.cnt; i++)
+ {
+ printf("LYNQ_QSER_APN_GET_LIST: profile_idx=%d, pdp_type=%d, auth_proto=%d, apn_name=%s, username=%s, password=%s, apn_type=%s\n"
+ ,apn_list.apn[i].profile_idx, apn_list.apn[i].pdp_type, apn_list.apn[i].auth_proto, apn_list.apn[i].apn_name, apn_list.apn[i].username, apn_list.apn[i].password, apn_list.apn[i].apn_type);
+ }
+ return ret;
+}
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/data.h b/mbtk/test/Mobiletek_Tester_RDIT/data.h
new file mode 100755
index 0000000..33364fb
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/data.h
@@ -0,0 +1,19 @@
+//DATA
+int init_data(int argc, char *argv[], int sp_test);
+int deinit_data(int argc, char *argv[], int sp_test);
+int setup_data_call(int argc, char *argv[], int sp_test);
+int deactivte_data_call(int argc, char *argv[], int sp_test);
+int wait_data_call(int argc, char *argv[], int sp_test);
+int setup_data_call_sp(int argc, char *argv[], int sp_test);
+int get_data_call_list(int argc, char *argv[], int sp_test);
+int qser_init_data(int argc, char *argv[], int sp_test);
+int qser_deinit_data(int argc, char *argv[], int sp_test);
+int qser_setup_data_call(int argc, char *argv[], int sp_test);
+int qser_setup_data_call_async(int argc, char *argv[], int sp_test);
+int qser_deactivte_data_call(int argc, char *argv[], int sp_test);
+int qser_get_data_call_list(int argc, char *argv[], int sp_test);
+int lynq_qser_apn_set(int argc, char *argv[], int sp_test);
+int lynq_qser_apn_get(int argc, char *argv[], int sp_test);
+int lynq_qser_apn_add(int argc, char *argv[], int sp_test);
+int lynq_qser_apn_del(int argc, char *argv[], int sp_test);
+int lynq_qser_apn_get_list(int argc, char *argv[], int sp_test);
\ No newline at end of file
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/dispatch.cpp b/mbtk/test/Mobiletek_Tester_RDIT/dispatch.cpp
new file mode 100755
index 0000000..a4f6071
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/dispatch.cpp
@@ -0,0 +1,396 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <sys/types.h>
+#include <pthread.h>
+#include <errno.h>
+
+#include "dispatch.h"
+#include "lynq.h"
+#include "cc.h"
+#include "sms.h"
+#include "network.h"
+#include "data.h"
+#include "qser-voice.h"
+#include "sim.h"
+
+#define SOCKET_BUF_SIZE 512
+typedef struct {
+ char *name; /* User printable name of the function. */
+ int (*func)(int argc, char *argv[], int sp_test); /* Function to call to do the job. */
+ char *doc; /* Documentation for this function. */
+ int request;
+} COMMAND;
+
+COMMAND commands[] = {
+#include "req_commands.h"
+};
+
+int g_rdit_socket_fd = 0;
+int g_rdit_client_connect = -1;
+static pthread_mutex_t s_startupMutex = PTHREAD_MUTEX_INITIALIZER;
+static pthread_cond_t s_startupCond = PTHREAD_COND_INITIALIZER;
+
+int has_registe_cmd = 0;
+struct sockaddr_un g_remote_addr = {0};
+struct sockaddr_un g_local_addr = {0};
+int g_create_socket = 0;
+int g_start_main_loop = 0;
+
+
+COMMAND* find_command (char *name)
+{
+ register int i;
+
+ for (i = 0; commands[i].name; i++)
+ if (strcmp (name, commands[i].name) == 0)
+ return (&commands[i]);
+
+ return ((COMMAND *)NULL);
+}
+
+const char *requestToString(int request)
+{
+ switch(request)
+ {
+ case LYNQ_DIAL: return "LYNQ_DIAL";
+ case LYNQ_ANSWER: return "LYNQ_ANSWER";
+ case LYNQ_HUNGUP: return "LYNQ_HUNGUP";
+ case LYNQ_QSER_CALL_INIT :return "LYNQ_QSER_CALL_INIT";
+ case LYNQ_QSER_CALL_DEINIT : return "LYNQ_QSER_CALL_DEINIT";
+ case LYNQ_QSER_CALL_START : return "LYNQ_QSER_CALL_START";
+ case LYNQ_QSER_CALL_ANSWER : return "LYNQ_QSER_CALL_ANSWER";
+ case LYNQ_QSER_CALL_END : return "LYNQ_QSER_CALL_END";
+ case LYNQ_QSER_CALL_HANDLER : return "LYNQ_QSER_CALL_HANDLER";
+ case LYNQ_QSER_CALL_REMOVE : return "LYNQ_QSER_CALL_REMOVE ";
+ default: return "<unknown request>";
+ }
+}
+int parse_param(char *cmd, char *argv[], int max_args)
+{
+ char *pos, *pos2;
+ int argc = 0;
+ printf("recive tester cmd=%s\n",cmd);
+ pos = cmd;
+ while (1) {
+ // Trim the space characters.
+ while (*pos == ' ') {
+ pos++;
+ }
+
+ if (*pos == '\0') {
+ break;
+ }
+
+ // One token may start with '"' or other characters.
+ if (*pos == '"' && (pos2 = strrchr(pos+1, '"'))) {
+ argv[argc++] = pos + 1;
+ *pos2 = '\0';
+ pos = pos2 + 1;
+ if(*pos == '\n'){
+ *pos = '\0';
+ pos = pos + 1;
+ }
+
+ } else {
+ argv[argc++] = pos;
+ while (*pos != '\0' && *pos != ' '&& *pos != '\n') {
+ pos++;
+ }
+ *pos++ = '\0';
+
+ if(argc == 1) {
+ char* at_cmd = strstr(argv[0], "RIL_REQUEST_OEM_HOOK_RAW");
+ if(at_cmd != NULL) {
+ while (*pos == ' ') {
+ pos++;
+ }
+ argv[argc++] = pos;
+ while (*pos != '\0' && *pos != '\n') {
+ pos++;
+ }
+ *pos++ = '\0';
+ break;
+ }
+ }
+
+ }
+
+ // Check if the maximum of arguments is reached.
+ if (argc == max_args) {
+ break;
+ }
+ }
+
+ return argc;
+}
+dispatch_manager::dispatch_manager()
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ __init_msg();
+}
+dispatch_manager::~ dispatch_manager(){}
+
+int dispatch_manager::__init_msg()
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ __request = 0;
+ __argc = 0;
+ __argv = NULL;
+ __socket_name = NULL;
+ return 0;
+}
+int dispatch_manager::__set_request_msg(int req,int argc,char *argv)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ printf("requet=%d,argc=%d,argv p=%x\n");
+ __request = req;
+ __argc = argc;
+ __argv = argv;
+ return 0;
+}
+int dispatch_manager::set_request_msg(int req,int argc,char *argv)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ return __set_request_msg(req,argc,argv);
+}
+
+
+int actsvc_cmd_recv(int fd, char *buf, int len)
+{
+ int ret = 0;
+ ret = recv(fd, buf, len, 0);
+ printf("[%d][%s] recv before\n",__LINE__,__FUNCTION__);
+ if (ret < 0)
+ {
+ printf("acti_cmd_recv service select error, ret=%d, error=%s(%d),fd=%d\n", ret,strerror(errno), errno, fd);
+ return LYNQ_E_SOCKET_FAIL;
+ }
+ else if(ret == 0)
+ {
+ printf("acti_cmd_recv service recv error, ret=%d, error=%s(%d),fd=%d\n", ret,strerror(errno), errno, fd);
+ return LYNQ_E_SOCKET_ZERO;
+ }
+ else
+ {
+ printf("[%d][%s] buf is:%s\n",__LINE__,__FUNCTION__,buf);
+ return LYNQ_E_SOCKET_SUCC;
+ }
+}
+
+int create_socket(const int domain, const int type, const int protocol,const int port,const char *IP,const char *socket_name,void * addr,int backlog,int cs)
+{
+ printf("[%d][%s]start create socket\n",__LINE__,__FUNCTION__);
+ printf("domain:%d,type:%d,protocol:%d,port:%d,IP:%s,socket_name:%s,backlog:%d\n",domain,type,protocol,port,IP,socket_name,backlog);
+ int socket_fd = -1;
+ char acBuf[1024] = {0};
+ struct sockaddr_un *local_addr = NULL;
+ local_addr = (struct sockaddr_un *)addr;
+ socket_fd = socket(domain, type,protocol);
+ if(0 > socket_fd)
+ {
+ printf("create socket fail:fd = %d\n",socket_fd);
+ return socket_fd;
+ }
+ switch (domain)
+ {
+ case AF_UNIX:
+ {
+ if (strlen(socket_name) > sizeof(local_addr->sun_path) - 1)
+ {
+ printf("Server socket path too long: %s\n", socket_name);
+ return (-strlen(socket_name));
+ }
+ if(cs == 0)//0:service 1:client
+ {
+ printf("remove %s\n", socket_name);
+ if (remove(socket_name) == -1 && errno != ENOENT)
+ {
+ printf("remove-%s fail and errno:%d\n", socket_name,errno);
+ }
+ }
+ if(type == SOCK_STREAM)
+ {
+ while(access(socket_name, R_OK)==0)
+ {
+ printf("%s still exist\n", socket_name);
+ usleep(10);
+ }
+ }
+ local_addr->sun_family = AF_UNIX;
+ sprintf(local_addr->sun_path, "%s", socket_name);
+ if(cs == 0)//0:service 1:client
+ {
+ if(bind(socket_fd, (struct sockaddr *)local_addr, sizeof(struct sockaddr_un)) < 0)
+ {
+ printf("bind failed name=[%s] reason=[%s]\n", socket_name, strerror(errno));
+ //printf("[%d][%s]bind fail and errno: %d",LINE,FUNC,errno);
+ close(socket_fd);
+ return -1;
+ }
+ if(type == SOCK_STREAM)
+ {
+ if(listen(socket_fd,backlog) == -1)
+ {
+ printf("[%d]listen fd: %dfail\n",__LINE__);
+ close(socket_fd);
+ return -1;
+ }
+ }
+ }
+ else
+ {
+ printf("init this client\n");
+ }
+ break;
+ }
+ case AF_INET:
+ {
+ break;
+ }
+ default:
+ break;
+ }
+ return socket_fd;
+}
+
+int dispatch_manager::init_socket(char *socket_name)
+{
+ socklen_t client_len;
+ int ret;
+ char parser_buf[SOCKET_BUF_SIZE];
+ TryNewSocket:
+ g_rdit_socket_fd = create_socket(AF_UNIX, SOCK_DGRAM,0, 0, NULL,socket_name, (void *)&g_local_addr, 2, 0);
+ if(0 > g_rdit_socket_fd)
+ {
+ printf("init socket fail and fd:%d",g_rdit_socket_fd);
+ g_create_socket++;
+ if(g_create_socket == 10)
+ {
+ printf("create_socket max try count is %d\n", g_create_socket);
+ return LYNQ_E_SOCKET_CREATE_FAIL;
+ }
+ else
+ {
+ printf("create_socket try again %d\n", g_create_socket);
+ usleep(500*1000);
+ goto TryNewSocket;
+ }
+ }
+ set_socket_fd(g_rdit_socket_fd);
+ return LYNQ_E_SUCCESS;
+}
+
+void *socket_read_loop(void *param)
+{
+ socklen_t client_len;
+ int ret = -1;
+ int socket_fd = -1;
+ char parser_buf[SOCKET_BUF_SIZE];
+ char *argv[32] = {0};
+ int argc = 0;
+ int *temp = (int*)param;
+ printf("in socket_read_loop , param=%p, *param=%d\n", param, (int)*(int*)param);
+ printf("[%d][%s] TryNewLink!\n", __LINE__,__FUNCTION__);
+ socket_fd = (int)*(int*)param;
+ pthread_mutex_lock(&s_startupMutex);
+ g_start_main_loop = 1;
+ pthread_cond_broadcast(&s_startupCond);
+ pthread_mutex_unlock(&s_startupMutex);
+ client_len = sizeof(g_local_addr);
+ printf("[%d][%s] socket_fd = %d,*temp=%d,%p, *param=%d!\n",__LINE__,__FUNCTION__,socket_fd,*temp, temp, (int)*(int*)param);
+#if 0
+ int conn = accept(socket_fd,(struct sockaddr *) &g_local_addr, &client_len);
+ if (conn <= 0)
+ {
+ printf("[%d][%s] accept error!",__LINE__,__FUNCTION__);
+ close(conn);
+ return NULL;
+ }
+ printf("Accept a client , fd is %d", conn);
+ if(g_rdit_client_connect >= 0)
+ {
+ printf("g_rdit_client_connect need close!");
+ close(g_rdit_client_connect);
+ }
+ g_rdit_client_connect = conn;
+#endif
+ /* tranlate data */
+ while (true)
+ {
+ memset(parser_buf, 0, sizeof(parser_buf));
+ ret = actsvc_cmd_recv(socket_fd, parser_buf, SOCKET_BUF_SIZE);
+ if (ret == LYNQ_E_SOCKET_FAIL)
+ {
+ printf("[%d][%s] LYNQ_E_SOCKET_FAIL receive CMD error\n",__LINE__,__FUNCTION__);
+ continue;
+ }
+ argc = parse_param(parser_buf,argv,32);
+ if(argc < 1)
+ {
+ printf("%s: error input.\n", parser_buf);
+ continue;
+ }
+ for(int i = 0;i < argc;i++)
+ {
+ printf("argc:%d---argv = %s\n",i,argv[i]);
+ }
+ COMMAND *command = find_command(argv[0]);
+ if(!command)
+ {
+ printf("%s: No such command for MobileTek_Tester_RDIT\n", argv[0]);
+ continue;
+ }
+ (*(command->func))(argc,argv,0);
+ }
+ return NULL;
+}
+
+
+void dispatch_manager::start_main_loop()
+{
+ printf("[%d][%s] enter!\n",__LINE__,__FUNCTION__);
+ g_start_main_loop = 0;
+ pthread_t s_tid_dispatch;
+ pthread_mutex_lock(&s_startupMutex);
+ pthread_attr_t attr;
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ int socket_fd = get_socket_fd();
+ printf("[%d][%s] socket_fd = %d,%p!\n",__LINE__,__FUNCTION__,socket_fd,&socket_fd);
+ int result = pthread_create(&s_tid_dispatch, &attr,socket_read_loop, (void *)&socket_fd);
+ if (result != 0) {
+ printf("Failed to create dispatch thread: %s\n", strerror(result));
+ goto done;
+ }
+
+ while (g_start_main_loop == 0) {
+ pthread_cond_wait(&s_startupCond, &s_startupMutex);
+ }
+ //warren delete,beacuse of update at fwk.
+ /*mobiletek add*
+ s_started = 0;
+ result = pthread_create(&s_tid_dispatch, &attr, eventLoop_at, NULL);
+ if (result != 0) {
+ printf("Failed to create dispatch thread: %s", strerror(result));
+ goto done;
+ }
+
+ while (s_started == 0) {
+ pthread_cond_wait(&s_startupCond, &s_startupMutex);
+ }
+ *mobiletek add
+ result = pthread_create(&s_tid_dispatch, &attr, responseLoop, NULL);
+ if (result != 0) {
+ printf("Failed to create response dispatch thread: %s", strerror(result));
+ goto done;
+ }
+
+ while (s_responseDispatch == 0) {
+ pthread_cond_wait(&s_startupCond, &s_startupMutex);
+ }
+ */
+done:
+ pthread_mutex_unlock(&s_startupMutex);
+}
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/dispatch.h b/mbtk/test/Mobiletek_Tester_RDIT/dispatch.h
new file mode 100755
index 0000000..5c3fb49
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/dispatch.h
@@ -0,0 +1,53 @@
+/*=============================================================================
+# FileName: dispatch.h
+# Desc:
+# Author: Warren
+# Version: V1.0
+# LastChange: 2023-04-17
+# History:
+=============================================================================*/
+#ifndef __LYNQ_DISPATCH__
+#define __LYNQ_DISPATCH__
+#ifdef __cplusplus
+extern "C" {
+#endif
+class dispatch_manager
+{
+ public:
+ dispatch_manager(void);
+ virtual ~ dispatch_manager();
+ char *get_socket_name()
+ {
+ return __socket_name;
+ }
+ int get_request_msg()
+ {
+ return __request;
+ }
+ int get_socket_fd()
+ {
+ return __socket_fd;
+ }
+ void set_socket_fd(int fd)
+ {
+ __socket_fd = fd;
+ }
+ int set_request_msg(int req,int argc,char *argv);
+ int init_socket(char *socket_name);
+ void start_main_loop();
+ int dispatch_request();
+ int run_event();
+
+ private:
+ int __init_msg();
+ int __set_request_msg(int req,int argc,char *argv);
+ int __request;
+ int __argc;
+ int __socket_fd;
+ char *__argv;
+ char *__socket_name;
+};
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/lynq.h b/mbtk/test/Mobiletek_Tester_RDIT/lynq.h
new file mode 100755
index 0000000..19ec1f0
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/lynq.h
@@ -0,0 +1,127 @@
+
+typedef enum
+{
+ LYNQ_E_SUCCESS=0,
+ LYNQ_E_SOCKET_CREATE_FAIL,
+ LYNQ_E_SOCKET_FAIL,
+ LYNQ_E_SOCKET_ZERO,
+ LYNQ_E_SOCKET_SUCC,
+ LYNQ_E_SOCKET_LINK_FAIL
+}LYNQ_E_T;
+
+#define LYNQ_BASE 100
+#define LYNQ_DIAL LYNQ_BASE + 1
+#define LYNQ_ANSWER LYNQ_BASE + 2
+#define LYNQ_HUNGUP LYNQ_BASE + 3
+#define LYNQ_CALL_INIT LYNQ_BASE + 4
+
+#define LYNQ_SMS LYNQ_BASE + 20
+#define LYNQ_SMS_INIT LYNQ_SMS + 1
+#define LYNQ_SMS_DEINIT LYNQ_SMS + 2
+#define LYNQ_SEND_SMS LYNQ_SMS + 3
+#define LYNQ_READ_SMS LYNQ_SMS + 4
+#define LYNQ_LIST_SMS LYNQ_SMS + 5
+#define LYNQ_DELETE_SMS LYNQ_SMS + 6
+#define LYNQ_WAIT_SMS LYNQ_SMS + 7
+#define LYNQ_GET_SMSC_ADDRESS LYNQ_SMS + 8
+#define LYNQ_SET_SMSC_ADDRESS LYNQ_SMS + 9
+
+#define LYNQ_NETWORK LYNQ_BASE + 30
+#define LYNQ_NETWORK_INIT LYNQ_NETWORK + 1
+#define LYNQ_NETWORK_DEINIT LYNQ_NETWORK + 2
+#define LYNQ_QUERY_OPERATER LYNQ_NETWORK + 3
+#define LYNQ_QUERY_NETWORK_SELECTION_MODE LYNQ_NETWORK + 4
+#define LYNQ_SET_NETWORK_SELECTION_MODE LYNQ_NETWORK + 5
+#define LYNQ_QUERY_AVAILABLE_NETWORK LYNQ_NETWORK + 6
+#define LYNQ_QUERY_REGISTRATION_STATE LYNQ_NETWORK + 7
+#define LYNQ_QUERY_PREFFERRED_NETWORKTYPE LYNQ_NETWORK + 8
+#define LYNQ_SET_PREFFERRED_NETWORKTYPE LYNQ_NETWORK + 9
+#define LYNQ_SOLICITED_SIGNAL_STRENGTH LYNQ_NETWORK + 10
+#define LYNQ_SET_IMS LYNQ_NETWORK + 11
+
+#define LYNQ_DATA LYNQ_BASE + 60
+#define LYNQ_DATA_INIT LYNQ_DATA + 1
+#define LYNQ_DATA_DEINIT LYNQ_DATA + 2
+#define LYNQ_DEACTIVATE_DATA_CALL LYNQ_DATA + 3
+#define LYNQ_WAIT_DATA_CALL LYNQ_DATA + 4
+#define LYNQ_SETUP_DATA_CALL LYNQ_DATA + 5
+#define LYNQ_SETUP_DATA_CALL_SP LYNQ_DATA + 6
+#define LYNQ_GET_DATA_CALL_LIST LYNQ_DATA + 7
+
+#define LYNQ_QSER_DATA LYNQ_BASE + 70
+#define LYNQ_QSER_DATA_INIT LYNQ_QSER_DATA + 1
+#define LYNQ_QSER_DATA_DEINIT LYNQ_QSER_DATA + 2
+#define LYNQ_QSER_SETUP_DATA_CALL LYNQ_QSER_DATA + 3
+#define LYNQ_QSER_DEACTIVATE_DATA_CALL LYNQ_QSER_DATA + 4
+#define LYNQ_QSER_GET_DATA_CALL_LIST LYNQ_QSER_DATA + 5
+#define LYNQ_QSER_APN_SET LYNQ_QSER_DATA + 6
+#define LYNQ_QSER_APN_GET LYNQ_QSER_DATA + 7
+#define LYNQ_QSER_APN_ADD LYNQ_QSER_DATA + 8
+#define LYNQ_QSER_APN_DEL LYNQ_QSER_DATA + 9
+#define LYNQ_QSER_APN_GET_LIST LYNQ_QSER_DATA + 10
+#define LYNQ_QSER_SETUP_DATA_CALL_ASYNC LYNQ_QSER_DATA + 11
+
+
+#define LYNQ_QSER_NETWORK LYNQ_BASE + 100
+#define LYNQ_QSER_NETWORK_INIT LYNQ_QSER_NETWORK + 1
+#define LYNQ_QSER_NETWORK_DEINIT LYNQ_QSER_NETWORK + 2
+#define LYNQ_QSER_NETWORK_SET_CONCIFG LYNQ_QSER_NETWORK + 3
+#define LYNQ_QSER_NETWORK_GTE_OPERRATOR_NAME LYNQ_QSER_NETWORK + 4
+#define LYNQ_QSER_NETWORK_GET_REG_STATUS LYNQ_QSER_NETWORK + 5
+#define LYNQ_QSER_NETWORK_SOLICITED_SIGNAL_STRENGTH LYNQ_QSER_NETWORK + 6
+
+#define LYNQ_QSER LYNQ_BASE + 110
+#define LYNQ_QSER_CALL_INIT LYNQ_QSER + 1
+#define LYNQ_QSER_CALL_DEINIT LYNQ_QSER + 2
+#define LYNQ_QSER_CALL_START LYNQ_QSER + 3
+#define LYNQ_QSER_CALL_ANSWER LYNQ_QSER + 4
+#define LYNQ_QSER_CALL_END LYNQ_QSER + 5
+#define LYNQ_QSER_CALL_HANDLER LYNQ_QSER + 6
+#define LYNQ_QSER_CALL_REMOVE LYNQ_QSER + 7
+
+#define LYNQ_SIM LYNQ_BASE + 120
+#define LYNQ_SIM_INIT LYNQ_SIM + 1
+#define LYNQ_GET_IMSI LYNQ_SIM + 2
+#define LYNQ_GET_SIM_STATUS LYNQ_SIM + 3
+#define LYNQ_GET_ICCID LYNQ_SIM + 4
+#define LYNQ_ENABLE_PIN LYNQ_SIM + 5
+#define LYNQ_DISABLE_PIN LYNQ_SIM + 6
+#define LYNQ_SIM_POWER LYNQ_SIM + 7
+#define LYNQ_QUERY_PIN_LOCK LYNQ_SIM + 8
+#define LYNQ_VERIFY_PIN LYNQ_SIM + 9
+#define LYNQ_CHANGE_PIN LYNQ_SIM + 10
+#define LYNQ_UNLOCK_PIN LYNQ_SIM + 11
+#define LYNQ_GET_IMEI_AND_SV LYNQ_SIM + 12
+#define LYNQ_GETPHONENUMBER LYNQ_SIM + 13
+#define LYNQ_SIM_DEINIT LYNQ_SIM + 14
+#define LYNQ_GET_IMEI LYNQ_SIM + 15
+#define LYNQ_GET_VERSION LYNQ_SIM + 16
+#define LYNQ_RESET_MD LYNQ_SIM + 17
+#define LYNQ_GET_MSISDN LYNQ_SIM + 18
+#define LYNQ_RESET_SIMCARD LYNQ_SIM + 19
+
+
+#define LYNQ_QSER_SIM LYNQ_BASE + 140
+#define LYNQ_QSER_SIM_INIT LYNQ_QSER_SIM + 1
+#define LYNQ_QSER_GET_IMSI LYNQ_QSER_SIM + 2
+#define LYNQ_QSER_GET_ICCID LYNQ_QSER_SIM + 3
+#define LYNQ_QSER_GETPHONENUMBER LYNQ_QSER_SIM + 4
+#define LYNQ_QSER_VERIFY_PIN LYNQ_QSER_SIM + 5
+#define LYNQ_QSER_CHANGE_PIN LYNQ_QSER_SIM + 6
+#define LYNQ_QSER_UNLOCK_PIN LYNQ_QSER_SIM + 7
+#define LYNQ_QSER_ENABLE_PIN LYNQ_QSER_SIM + 8
+#define LYNQ_QSER_DISABLE_PIN LYNQ_QSER_SIM + 9
+#define LYNQ_QSER_GET_SIM_STATUS LYNQ_QSER_SIM + 10
+#define LYNQ_QSER_SIM_DEINIT LYNQ_QSER_SIM + 11
+
+#define LYNQ_QSER_SMS LYNQ_BASE + 160
+#define LYNQ_QSER_SMS_INIT LYNQ_QSER_SMS + 1
+#define LYNQ_QSER_SEND_SMS LYNQ_QSER_SMS + 2
+#define LYNQ_QSER_READ_SMS LYNQ_QSER_SMS + 3
+#define LYNQ_QSER_LIST_SMS LYNQ_QSER_SMS + 4
+#define LYNQ_QSER_DELETE_SMS LYNQ_QSER_SMS + 5
+#define LYNQ_QSER_WAIT_SMS LYNQ_QSER_SMS + 6
+#define LYNQ_QSER_SMS_DEINIT LYNQ_QSER_SMS + 7
+
+
+int create_socket(const int domain, const int type, const int protocol,const int port,const char *IP,const char *socket_name,void * addr,int backlog,int cs);
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/main.cpp b/mbtk/test/Mobiletek_Tester_RDIT/main.cpp
new file mode 100755
index 0000000..3f7bbf0
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/main.cpp
@@ -0,0 +1,58 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include "dispatch.h"
+#include "lynq.h"
+dispatch_manager *g_dispatch;
+
+int init_msg_dispatch(char * socket_name,int token)
+{
+ int ret;
+ g_dispatch = new dispatch_manager;
+ if(g_dispatch == NULL)
+ {
+ printf("[%s][%d] new class fail!\n",__FUNCTION__,__LINE__);
+ return -1;
+ }
+ ret = g_dispatch->init_socket(socket_name);
+ if(ret!=LYNQ_E_SUCCESS)
+ {
+ printf("[%s][%d] create socket fail!\n",__FUNCTION__,__LINE__);
+ return ret;
+ }
+ g_dispatch->start_main_loop();
+ return LYNQ_E_SUCCESS;
+}
+int main(int argc,char*argv[])
+{
+ printf("[%s][%d] enter\n",__FUNCTION__,__LINE__);
+ int ret = 0;
+ char socket_name[64]={0};
+
+ system("rm -rf /var/run/socket");
+ system("mkdir -p /var/run/socket");
+
+ if(argc < 3)
+ {
+ printf("[%s][%d] please input socket name and token\n",__FUNCTION__,__LINE__);
+ exit(1);
+ }
+ if((argv[1] != NULL) && (argv[2]!=NULL))
+ {
+ sprintf(socket_name,"/var/run/socket/%s",argv[1]);
+ if(LYNQ_E_SUCCESS != init_msg_dispatch(socket_name, atoi(argv[2])))
+ {
+ exit(1);
+ }
+ }
+ else
+ {
+ printf("[%s][%d] param fail!\n",__FUNCTION__,__LINE__);
+ exit(1);
+ }
+ while (1)
+ {
+ sleep(1);
+ }
+ return 0;
+}
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/network.cpp b/mbtk/test/Mobiletek_Tester_RDIT/network.cpp
new file mode 100755
index 0000000..c78f218
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/network.cpp
@@ -0,0 +1,311 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include "lynq_network.h"
+#include "network.h"
+#include "lynq_qser_network.h"
+#define TEST_RESULT "lynq_result="
+
+// int init_network(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int uToken = atoi(argv[1]);
+// ret = lynq_network_init(uToken);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int deinit_network(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// ret = lynq_network_deinit();
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int query_operater(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// ret = lynq_query_operater(argv[1], argv[2], argv[3]);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("LYNQ_QUERY_OPERATER: OperatorFN=%s, OperatorSH=%s, MccMnc=%s\n", argv[1], argv[2], argv[3]);
+// return ret;
+// }
+// int query_network_selection_mode(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int netselMode = atoi(argv[1]);
+// ret = lynq_query_network_selection_mode(&netselMode);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("LYNQ_QUERY_NETWORK_SELECTION_MODE: netselMode=%d\n", netselMode);
+// return ret;
+// }
+// int set_network_selection_mode(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// ret = lynq_set_network_selection_mode(argv[1], argv[2]);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int query_available_network(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// ret = lynq_query_available_network(argv[1], argv[2], argv[3], argv[4]);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("LYNQ_QUERY_AVAILABLE_NETWORK: OperatorFN=%s, OperatorSH=%s, MccMnc=%s, NetStatus=%s\n", argv[1], argv[2], argv[3], argv[4]);
+// return ret;
+// }
+// int query_registration_state(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int regState = atoi(argv[2]);
+// int imsRegState = atoi(argv[3]);
+// int netType = atoi(argv[6]);
+// int radioTechFam = atoi(argv[7]);
+// int netRejected = atoi(argv[8]);
+// ret = lynq_query_registration_state(argv[1], ®State, &imsRegState, argv[4], argv[5], &netType, &radioTechFam, &netRejected);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("LYNQ_QUERY_REGISTRATION_STATE: regState=%d, imsRegState=%d, LAC=%s, CID=%s, netType=%d, radioTechFam=%d, netRejected=%d\n", regState, imsRegState, argv[4], argv[5], netType, radioTechFam, netRejected);
+// return ret;
+// }
+// int query_prefferred_networktype(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int preNetType = atoi(argv[1]);
+// ret = lynq_query_prefferred_networktype(&preNetType);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("LYNQ_QUERY_PREFFERRED_NETWORKTYPE: preNetType=%d\n", preNetType);
+// return ret;
+// }
+// int set_prefferred_networktype(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int preNetType = atoi(argv[1]);
+// ret = lynq_set_prefferred_networktype(preNetType);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int solicited_signal_strength(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// signalStrength_t solSigStren = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
+
+// ret = lynq_solicited_signal_strength(&solSigStren);
+// printf("%s%d\n",TEST_RESULT,ret);
+// if(ret==0)
+// {
+// printf("solicited_signal_strength gw_sig_valid = %d\n"
+// " rssi = %d\n"
+// " wcdma_sig_valid = %d\n"
+// " wcdma_signalstrength = %d\n"
+// " rscp"
+// " ecio = %d\n"
+// " lte_sig_info_valid = %d\n"
+// " lte_signalstrength = %d\n"
+// " rsrp = %d\n"
+// " rsrq = %d\n"
+// " rssnr = %d\n"
+// " nr_sig_valid = %d\n"
+// " ssRsrp = %d\n"
+// " ssRsrq = %d\n"
+// " ssSinr = %d\n"
+// " csiRsrp = %d\n"
+// " csiRsrq = %d\n"
+// " nr_sig_info.csiSinr = %d\n",
+// solSigStren.gw_sig_valid, solSigStren.rssi,
+// solSigStren.wcdma_sig_valid, solSigStren.wcdma_signalstrength, solSigStren.rscp,solSigStren.ecno,
+// solSigStren.lte_sig_valid, solSigStren.lte_signalstrength, solSigStren.rsrp, solSigStren.rsrq, solSigStren.rssnr,
+// solSigStren.nr_sig_valid, solSigStren.ssRsrp, solSigStren.ssRsrq, solSigStren.ssSinr,
+// solSigStren.csiRsrp, solSigStren.csiRsrq, solSigStren.csiSinr);
+// }
+// return ret;
+// }
+// int set_ims(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int ims_mode = atoi(argv[1]);
+// ret = lynq_set_ims(ims_mode);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+int qser_network_init(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+
+ int ret = -1;
+ nw_client_handle_type h_nw;
+
+ ret = qser_nw_client_init(&h_nw);
+ printf("%s%d\n",TEST_RESULT,ret);
+ if(ret==0)
+ {
+ printf("qser_nw_client_init: h_nw=%d\n", h_nw);
+ }
+ return ret;
+}
+
+int qser_network_deinit(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+
+ if(argc !=2)
+ {
+ printf("error, argc %d is not equal 2 \n",argc);
+ return -1;
+ }
+
+ int ret = -1;
+ nw_client_handle_type h_nw;
+
+ h_nw=atoi(argv[1]);
+ ret = qser_nw_client_deinit(h_nw);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_network_set_config(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+
+ if(argc !=3)
+ {
+ printf("error, argc %d is not equal 3 \n",argc);
+ return -1;
+ }
+
+ nw_client_handle_type h_nw;
+ QSER_NW_CONFIG_INFO_T t_info;
+
+ h_nw=atoi(argv[1]);
+ t_info.preferred_nw_mode=atoi(argv[2]);
+
+ int ret = -1;
+ ret = qser_nw_set_config(h_nw,&t_info);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_network_get_operator_name(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+
+ if(argc !=2)
+ {
+ printf("error, argc %d is not equal 2 \n",argc);
+ return -1;
+ }
+
+ nw_client_handle_type h_nw;
+ QSER_NW_OPERATOR_NAME_INFO_T t_info;
+
+ h_nw=atoi(argv[1]);
+
+ int ret = -1;
+ ret = qser_nw_get_operator_name(h_nw,&t_info);
+ printf("%s%d\n",TEST_RESULT,ret);
+ if(ret==0)
+ {
+ printf("qser_nw_get_operator_name: h_nw=%d, long_eons=%s, short_eons=%s, mcc=%s, mnc=%s \n", h_nw, t_info.long_eons,t_info.short_eons,t_info.mcc,t_info.mnc);
+ }
+ return ret;
+}
+
+int qser_network_get_reg_status(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+
+ if(argc !=2)
+ {
+ printf("error, argc %d is not equal 3 \n",argc);
+ return -1;
+ }
+
+ nw_client_handle_type h_nw;
+ QSER_NW_REG_STATUS_INFO_T t_info;
+
+ h_nw=atoi(argv[1]);
+
+ int ret = -1;
+ ret = qser_nw_get_reg_status(h_nw,&t_info);
+ printf("%s%d\n",TEST_RESULT,ret);
+ if(ret==0)
+ {
+ printf("qser_nw_get_reg_status: voice_registration_valid=%d, tech_domain=%d, radio_tech=%d, roaming=%d deny_reason=%d registration_state=%d\n",
+ t_info.voice_registration_valid,
+ t_info.voice_registration.tech_domain,
+ t_info.voice_registration.radio_tech,
+ t_info.voice_registration.roaming,
+ t_info.voice_registration.deny_reason,
+ t_info.voice_registration.registration_state);
+ printf("qser_nw_get_reg_status: data_registration_valid=%d, tech_domain=%d, radio_tech=%d, roaming=%d deny_reason=%d registration_state=%d\n",
+ t_info.data_registration_valid,
+ t_info.data_registration.tech_domain,
+ t_info.data_registration.radio_tech,
+ t_info.data_registration.roaming,
+ t_info.data_registration.deny_reason,
+ t_info.data_registration.registration_state);
+ }
+ return ret;
+}
+
+
+int qser_network_solicited_signal_strength(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ if(argc !=2)
+ {
+ printf("error, argc %d is not equal 2 \n",argc);
+ return -1;
+ }
+ int ret = -1;
+ nw_client_handle_type h_nw;
+ QSER_NW_SIGNAL_STRENGTH_INFO_T t_info;
+ memset(&t_info,sizeof (t_info) , 0);
+ h_nw=atoi(argv[1]);
+ ret = qser_nw_get_signal_strength(h_nw,&t_info);
+ printf("%s%d\n",TEST_RESULT,ret);
+ if(ret==0)
+ {
+ printf("qser_solicited_signal_strength gsm_sig_info_valid = %d\n"
+ " gsm_sig_info.rssi = %d\n"
+ " wcdma _sig_info_valid = %d\n"
+ " wcdma_sig_info.rssi = %d\n"
+ " wcdma_sig_info.ecio = %d\n"
+ " tdscdma_sig_info_valid = %d\n"
+ " lte_sig_info_valid = %d\n"
+ " lte_sig_info.rssi = %d\n"
+ " lte_sig_info.rsrp = %d\n"
+ " lte_sig_info.rsrq = %d\n"
+ " lte_sig_info.snr = %d\n"
+ " cdma_sig_info_valid = %d\n"
+ " hdr_sig_info_valid = %d\n"
+ " nr_sig_info_valid = %d\n"
+ " nr_sig_info.ssRsrp = %d\n"
+ " nr_sig_info.ssRsrq = %d\n"
+ " nr_sig_info.ssSinr = %d\n"
+ " nr_sig_info.csiRsrp = %d\n"
+ " nr_sig_info.csiRsrq = %d\n"
+ " nr_sig_info.csiSinr = %d\n",
+ t_info.gsm_sig_info_valid, t_info.gsm_sig_info.rssi,
+ t_info.wcdma_sig_info_valid, t_info.wcdma_sig_info.rssi, t_info.wcdma_sig_info.ecio,
+ t_info.tdscdma_sig_info_valid,
+ t_info.lte_sig_info_valid, t_info.lte_sig_info.rssi, t_info.lte_sig_info.rsrp, t_info.lte_sig_info.rsrq, t_info.lte_sig_info.snr,
+ t_info.cdma_sig_info_valid,
+ t_info.hdr_sig_info_valid,
+ t_info.nr_sig_info_valid, t_info.nr_sig_info.ssRsrp, t_info.nr_sig_info.ssRsrq, t_info.nr_sig_info.ssSinr,
+ t_info.nr_sig_info.csiRsrp, t_info.nr_sig_info.csiRsrq, t_info.nr_sig_info.csiSinr);
+ }
+ return ret;
+}
+
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/network.h b/mbtk/test/Mobiletek_Tester_RDIT/network.h
new file mode 100755
index 0000000..c7791b1
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/network.h
@@ -0,0 +1,18 @@
+//network
+int init_network(int argc, char *argv[], int sp_test);
+int deinit_network(int argc, char *argv[], int sp_test);
+int query_operater(int argc, char *argv[], int sp_test);
+int query_network_selection_mode(int argc, char *argv[], int sp_test);
+int set_network_selection_mode(int argc, char *argv[], int sp_test);
+int query_available_network(int argc, char *argv[], int sp_test);
+int query_registration_state(int argc, char *argv[], int sp_test);
+int query_prefferred_networktype(int argc, char *argv[], int sp_test);
+int set_prefferred_networktype(int argc, char *argv[], int sp_test);
+int solicited_signal_strength(int argc, char *argv[], int sp_test);
+int set_ims(int argc, char *argv[], int sp_test);
+int qser_network_init(int argc, char *argv[], int sp_test);
+int qser_network_deinit(int argc, char *argv[], int sp_test);
+int qser_network_set_config(int argc, char *argv[], int sp_test);
+int qser_network_get_operator_name(int argc, char *argv[], int sp_test);
+int qser_network_get_reg_status(int argc, char *argv[], int sp_test);
+int qser_network_solicited_signal_strength(int argc, char *argv[], int sp_test);
\ No newline at end of file
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/qser-voice.cpp b/mbtk/test/Mobiletek_Tester_RDIT/qser-voice.cpp
new file mode 100755
index 0000000..30efe86
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/qser-voice.cpp
@@ -0,0 +1,104 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <string.h>
+#include <cstring>
+#include "lynq-qser-voice.h"
+
+#include "qser-voice.h"
+
+#define TEST_RESULT "lynq_result="
+
+static int qser_hadler = 1 ;
+
+
+static int handle = -1;
+void callback_state_handler_fun(int id,char *num,qser_voice_call_state_t state, void *contextPtr )
+{
+ printf("callback show call id is %d,call num %s,call_state is %d,\n",id,num,state);
+ handle = id;
+ return ;
+}
+
+
+//lynq_call_init
+int qser_voice_call_client_init_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret= 0;
+ unsigned int uToken = atoi(argv[1]);
+ ret = qser_voice_call_client_init(&uToken);//
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+//call deinit
+int qser_voice_call_client_deinit_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = 0;
+ ret = qser_voice_call_client_deinit(qser_hadler);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+
+}
+
+//lynq_call
+int qser_voice_call_start_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = 0;
+ int call_id = -1;
+ char addr[16] = {0};
+ strncpy(addr,argv[1],sizeof(addr) - 1);
+ ret = qser_voice_call_start(qser_hadler,E_QSER_VCALL_EXTERNAL_SLOT_1,addr,&call_id);
+ printf("%s%d%d\n",TEST_RESULT,ret,call_id);
+ return ret;
+
+}
+
+//lynq_call_answer
+int qser_voice_call_answer_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = 0;
+ ret = qser_voice_call_answer(qser_hadler,qser_hadler);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+//hugup
+int qser_voice_call_end_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = 0;
+ ret = qser_voice_call_end(qser_hadler,handle);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+
+//add callback
+int qser_voice_call_addstatehandler_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = 0;
+ ret = qser_voice_call_addstatehandler(qser_hadler,callback_state_handler_fun,NULL);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret ;
+}
+
+//remove
+int qser_voice_call_removestatehandle_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = 0;
+ ret = qser_voice_call_removestatehandle(qser_hadler);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret ;
+
+}
+
+
+
+
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/qser-voice.h b/mbtk/test/Mobiletek_Tester_RDIT/qser-voice.h
new file mode 100755
index 0000000..2f365f0
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/qser-voice.h
@@ -0,0 +1,10 @@
+
+int qser_voice_call_client_init_test(int argc, char *argv[], int sp_test);
+int qser_voice_call_client_deinit_test(int argc, char *argv[], int sp_test);
+int qser_voice_call_start_test(int argc, char *argv[], int sp_test);
+int qser_voice_call_answer_test(int argc, char *argv[], int sp_test);
+int qser_voice_call_end_test(int argc, char *argv[], int sp_test);
+int qser_voice_call_addstatehandler_test(int argc, char *argv[], int sp_test);
+int qser_voice_call_removestatehandle_test(int argc, char *argv[], int sp_test);
+
+
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/req_commands.h b/mbtk/test/Mobiletek_Tester_RDIT/req_commands.h
new file mode 100755
index 0000000..d6f32f7
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/req_commands.h
@@ -0,0 +1,113 @@
+// //CC
+// {"LYNQ_DIAL",dial_test, "dial a call", LYNQ_DIAL},
+// {"LYNQ_CALL_INIT",init_call, "init the call lib", LYNQ_CALL_INIT},
+// {"LYNQ_ANSWER",answer_test, "answer a call", LYNQ_ANSWER},
+// {"LYNQ_HUNGUP",hungup_test, "hungup a call", LYNQ_HUNGUP},
+// //SMS
+// {"LYNQ_SMS_INIT",init_sms, "init the sms lib", LYNQ_SMS_INIT},
+// {"LYNQ_SMS_DEINIT",deinit_sms, "deinit the sms lib", LYNQ_SMS_DEINIT},
+// {"LYNQ_SEND_SMS",send_sms, "send short message", LYNQ_SEND_SMS},
+// {"LYNQ_READ_SMS",read_sms, "read short message", LYNQ_READ_SMS},
+// {"LYNQ_LIST_SMS",list_sms, "list short message", LYNQ_LIST_SMS},
+// {"LYNQ_DELETE_SMS",delete_sms, "delete short messsage", LYNQ_DELETE_SMS},
+// {"LYNQ_WAIT_SMS",wait_sms, "wait short messsage", LYNQ_WAIT_SMS},
+// {"LYNQ_GET_SMSC_ADDRESS",get_smsc_address, "get smsc address", LYNQ_GET_SMSC_ADDRESS},
+// {"LYNQ_SET_SMSC_ADDRESS",set_smsc_address, "set smsc address", LYNQ_SET_SMSC_ADDRESS},
+// //NETWORK
+// {"LYNQ_NETWORK_INIT",init_network, "init the network lib", LYNQ_NETWORK_INIT},
+// {"LYNQ_NETWORK_DEINIT",deinit_network, "deinit the network lib", LYNQ_NETWORK_DEINIT},
+// {"LYNQ_QUERY_OPERATER",query_operater, "query operater infomation ", LYNQ_QUERY_OPERATER},
+// {"LYNQ_QUERY_NETWORK_SELECTION_MODE",query_network_selection_mode, "query network selection mode", LYNQ_QUERY_NETWORK_SELECTION_MODE},
+// {"LYNQ_SET_NETWORK_SELECTION_MODE",set_network_selection_mode, "set network selection mode", LYNQ_SET_NETWORK_SELECTION_MODE},
+// {"LYNQ_QUERY_AVAILABLE_NETWORK",query_available_network, "query available network", LYNQ_QUERY_AVAILABLE_NETWORK},
+// {"LYNQ_QUERY_REGISTRATION_STATE",query_registration_state, "query registration state", LYNQ_QUERY_REGISTRATION_STATE},
+// {"LYNQ_QUERY_PREFFERRED_NETWORKTYPE",query_prefferred_networktype, "query prefferred networktype", LYNQ_QUERY_PREFFERRED_NETWORKTYPE},
+// {"LYNQ_SET_PREFFERRED_NETWORKTYPE",set_prefferred_networktype, "set prefferred networktype", LYNQ_SET_PREFFERRED_NETWORKTYPE},
+// {"LYNQ_SOLICITED_SIGNAL_STRENGTH",solicited_signal_strength, "solicited signal strength", LYNQ_SOLICITED_SIGNAL_STRENGTH},
+// {"LYNQ_SET_IMS",set_ims, "set ims open or close", LYNQ_SET_IMS},
+// //DATA
+// {"LYNQ_DATA_INIT",init_data, "init the data lib", LYNQ_DATA_INIT},
+// {"LYNQ_DATA_DEINIT",deinit_data, "deinit the data lib", LYNQ_DATA_DEINIT},
+// {"LYNQ_SETUP_DATA_CALL",setup_data_call, "set up data call", LYNQ_SETUP_DATA_CALL},
+// {"LYNQ_SETUP_DATA_CALL_SP",setup_data_call_sp, "set up data call sp", LYNQ_SETUP_DATA_CALL_SP},
+// {"LYNQ_DEACTIVATE_DATA_CALL",deactivte_data_call, "deactive data call", LYNQ_DEACTIVATE_DATA_CALL},
+// {"LYNQ_WAIT_DATA_CALL",wait_data_call, "wait data call", LYNQ_WAIT_DATA_CALL},
+// {"LYNQ_GET_DATA_CALL_LIST",get_data_call_list, "get data call list", LYNQ_GET_DATA_CALL_LIST},
+//QSER_NETWORK
+ {"LYNQ_QSER_NETWORK_INIT",qser_network_init, "init the network lib", LYNQ_QSER_NETWORK_INIT},
+ {"LYNQ_QSER_NETWORK_DEINIT",qser_network_deinit, "deinit the network lib", LYNQ_QSER_NETWORK_DEINIT},
+ {"LYNQ_QSER_NETWORK_SET_CONCIFG",qser_network_set_config, "set network config", LYNQ_QSER_NETWORK_SET_CONCIFG},
+ {"LYNQ_QSER_NETWORK_GTE_OPERRATOR_NAME",qser_network_get_operator_name, "query operater infomation", LYNQ_QSER_NETWORK_GTE_OPERRATOR_NAME},
+ {"LYNQ_QSER_NETWORK_GET_REG_STATUS",qser_network_get_reg_status, "query registration status", LYNQ_QSER_NETWORK_GET_REG_STATUS},
+ {"LYNQ_QSER_NETWORK_SOLICITED_SIGNAL_STRENGTH",qser_network_solicited_signal_strength, "solicited signal strength", LYNQ_QSER_NETWORK_SOLICITED_SIGNAL_STRENGTH},
+//QSER_DATA
+ {"LYNQ_QSER_DATA_INIT",qser_init_data, "init the data lib", LYNQ_QSER_DATA_INIT},
+ {"LYNQ_QSER_DATA_DEINIT",qser_deinit_data, "deinit the data lib", LYNQ_QSER_DATA_DEINIT},
+ {"LYNQ_QSER_SETUP_DATA_CALL",qser_setup_data_call, "set up data call", LYNQ_QSER_SETUP_DATA_CALL},
+ {"LYNQ_QSER_SETUP_DATA_CALL_ASYNC",qser_setup_data_call_async, "set up data call asynchronously", LYNQ_QSER_SETUP_DATA_CALL_ASYNC},
+ {"LYNQ_QSER_DEACTIVATE_DATA_CALL",qser_deactivte_data_call, "deactive data call", LYNQ_QSER_DEACTIVATE_DATA_CALL},
+ {"LYNQ_QSER_GET_DATA_CALL_LIST",qser_get_data_call_list, "get data call list", LYNQ_QSER_GET_DATA_CALL_LIST},
+ {"LYNQ_QSER_APN_SET",lynq_qser_apn_set, "set apn", LYNQ_QSER_APN_SET},
+ {"LYNQ_QSER_APN_GET",lynq_qser_apn_get, "get apn", LYNQ_QSER_APN_GET},
+ {"LYNQ_QSER_APN_ADD",lynq_qser_apn_add, "set apn", LYNQ_QSER_APN_ADD},
+ {"LYNQ_QSER_APN_DEL",lynq_qser_apn_del, "del apn", LYNQ_QSER_APN_DEL},
+ {"LYNQ_QSER_APN_GET_LIST",lynq_qser_apn_get_list, "get apn list", LYNQ_QSER_APN_GET_LIST},
+//QSER VOICE
+ {"LYNQ_QSER_CALL_INIT",qser_voice_call_client_init_test,"qser_voice_call_client_init_test",LYNQ_QSER_CALL_INIT},
+ {"LYNQ_QSER_CALL_DEINIT",qser_voice_call_client_deinit_test,"qser_voice_call_client_deinit_test",LYNQ_QSER_CALL_DEINIT},
+ {"LYNQ_QSER_CALL_START",qser_voice_call_start_test,"qser_voice_call_start_test",LYNQ_QSER_CALL_START},
+ {"LYNQ_QSER_CALL_ANSWER",qser_voice_call_answer_test,"qser_voice_call_answer_test",LYNQ_QSER_CALL_ANSWER},
+ {"LYNQ_QSER_CALL_END",qser_voice_call_end_test,"qser_voice_call_end_test",LYNQ_QSER_CALL_END},
+ {"LYNQ_QSER_CALL_HANDLER",qser_voice_call_addstatehandler_test,"qser_voice_call_addstatehandler_test",LYNQ_QSER_CALL_HANDLER},
+ {"LYNQ_QSER_CALL_REMOVE",qser_voice_call_removestatehandle_test,"qser_voice_call_removestatehandle_test",LYNQ_QSER_CALL_REMOVE},
+
+// //SIM
+// {"LYNQ_SIM_INIT",init_sim, "init sim lib", LYNQ_SIM_INIT},
+// {"LYNQ_GET_IMSI",get_imsi_test, "get imsi", LYNQ_GET_IMSI},
+// {"LYNQ_GET_SIM_STATUS",get_sim_status_test, "get sim status", LYNQ_GET_SIM_STATUS},
+// //GET_SIM_STATUS, /*radiooptions 11 1 0*/
+// {"LYNQ_GET_ICCID",get_iccid_test, "get iccid", LYNQ_GET_ICCID},
+// //QUERY_ICCID, /*radiooptions 30 1 0*/
+// {"LYNQ_ENABLE_PIN",enable_pin_test, "enable pin", LYNQ_ENABLE_PIN},
+// {"LYNQ_SIM_POWER",sim_power_test, "sim power", LYNQ_SIM_POWER},
+// {"LYNQ_DISABLE_PIN",disable_pin_test, "disable pin", LYNQ_DISABLE_PIN},
+// {"LYNQ_QUERY_PIN_LOCK",query_pin_lock_test, "query pin lock", LYNQ_QUERY_PIN_LOCK},
+// //QUERY_FACILITY_LOCK, /*radiooptions 35 fac 1 0*/
+// {"LYNQ_VERIFY_PIN",verify_pin_test, "verify pin", LYNQ_VERIFY_PIN},
+// {"LYNQ_CHANGE_PIN",change_pin_test, "change pin", LYNQ_CHANGE_PIN},
+// {"LYNQ_UNLOCK_PIN",unlock_pin_test, "unlock pin", LYNQ_UNLOCK_PIN},
+// {"LYNQ_GET_IMEI",get_imei_test, "get imei", LYNQ_GET_IMEI},//lynq_get_imei ,at cmd
+// {"LYNQ_GET_IMEI_AND_SV",get_imei_and_sv_test, "get imei and sv", LYNQ_GET_IMEI_AND_SV},
+// {"LYNQ_SWITCH_CARD",switch_card_test, "switch card", LYNQ_GET_IMEI_AND_SV},
+// {"LYNQ_GETPHONENUMBER",query_phone_number_test, "query phone num", LYNQ_GETPHONENUMBER},//LYNQ_RIL_REQUEST_OEM_HOOK_RAW
+// //RIL_REQUEST_OEM_HOOK_RAW
+// {"LYNQ_SIM_DEINIT",deinit_sim, "deinit sim lib", LYNQ_SIM_DEINIT},
+// {"LYNQ_GET_VERSION",get_version, "lynq get version", LYNQ_GET_VERSION},
+// {"LYNQ_RESET_MD",reset_modem,"reset modem",LYNQ_RESET_MD},
+// {"LYNQ_GET_MSISDN",get_msisdn, "lynq get msisdn", LYNQ_GET_MSISDN},
+
+
+//QSER SIM
+ {"LYNQ_QSER_SIM_INIT",qser_init_sim, "init sim lib", LYNQ_QSER_SIM_INIT},
+ {"LYNQ_QSER_GET_IMSI",qser_get_imsi_test, "get imsi", LYNQ_QSER_GET_IMSI},
+ {"LYNQ_QSER_GET_ICCID",qser_get_iccid_test, "get iccid", LYNQ_QSER_GET_ICCID},
+ {"LYNQ_QSER_GETPHONENUMBER",qser_get_phonenumber_test, "get phonenumber", LYNQ_QSER_GETPHONENUMBER},
+ {"LYNQ_QSER_VERIFY_PIN",qser_verify_pin_test, "verify pin", LYNQ_QSER_VERIFY_PIN},
+ {"LYNQ_QSER_CHANGE_PIN",qser_change_pin_test, "change pin", LYNQ_QSER_CHANGE_PIN},
+ {"LYNQ_QSER_UNLOCK_PIN",qser_unlock_pin_test, "unlock pin", LYNQ_QSER_UNLOCK_PIN},
+ {"LYNQ_QSER_ENABLE_PIN",qser_enable_pin_test, "enable pin", LYNQ_QSER_ENABLE_PIN},
+ {"LYNQ_QSER_DISABLE_PIN",qser_disable_pin_test, "disable pin", LYNQ_QSER_DISABLE_PIN},
+ {"LYNQ_QSER_GET_SIM_STATUS",qser_get_sim_status_test, "get sim status", LYNQ_QSER_GET_SIM_STATUS},
+ {"LYNQ_QSER_SIM_DEINIT",qser_deinit_sim, "deinit sim lib", LYNQ_QSER_SIM_DEINIT},
+//QSER SMS
+ {"LYNQ_QSER_SMS_INIT",qser_init_sms, "init the sms lib", LYNQ_QSER_SMS_INIT},
+ {"LYNQ_QSER_SMS_DEINIT",qser_deinit_sms, "deinit the sms lib", LYNQ_QSER_SMS_DEINIT},
+ {"LYNQ_QSER_SEND_SMS",qser_send_sms, "send short message", LYNQ_QSER_SEND_SMS},
+ //{"LYNQ_QSER_READ_SMS",qser_read_sms, "read short message", LYNQ_QSER_READ_SMS},
+ //{"LYNQ_QSER_LIST_SMS",qser_list_sms, "list short message", LYNQ_QSER_LIST_SMS},
+ {"LYNQ_QSER_DELETE_SMS",qser_delete_sms, "delete short messsage", LYNQ_QSER_DELETE_SMS},
+ //{"LYNQ_QSER_WAIT_SMS",qser_wait_sms, "wait short messsage", LYNQ_QSER_WAIT_SMS},
+
+ {(char *)NULL, NULL, (char *)NULL , -1},
+
+
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/sim.cpp b/mbtk/test/Mobiletek_Tester_RDIT/sim.cpp
new file mode 100755
index 0000000..9a8a2a6
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/sim.cpp
@@ -0,0 +1,363 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "lynq_sim.h"
+#include "lynq_qser_sim.h"
+#include "sim.h"
+#define TEST_RESULT "lynq_result="
+
+static int handle = 0;
+
+
+// int init_sim(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int uToken = atoi(argv[1]);
+// ret = lynq_sim_init(uToken);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+// int get_imsi_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// char imsi_buf[SIM_BUF] = "";
+// ret = lynq_get_imsi(imsi_buf);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("[%s-%d] IMSI:%s\n", __FUNCTION__, __LINE__, imsi_buf);
+// return ret;
+// }
+
+// int get_sim_status_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int sim_status = -1;
+// //ret = lynq_get_sim_status(&sim_status);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+// int get_iccid_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// char iccid[SIM_BUF] = "";
+// ret = lynq_get_iccid(iccid);
+// printf("%s%d\n",TEST_RESULT,ret);
+// if(!ret)
+// printf("[%s-%d] ICCID:%s\n", __FUNCTION__, __LINE__, iccid);
+
+// return ret;
+// }
+
+// int enable_pin_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// char pin[SIM_BUF] = "";
+// ret = lynq_enable_pin(pin);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+
+
+// int sim_power_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int mode = 0;
+// #ifdef MOBILETEK_TARGET_PLATFORM_T106
+// ret = lynq_reset_sim();
+// #else
+// ret = lynq_sim_power(mode);
+// #endif
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+// int disable_pin_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// char pin[SIM_BUF] = "";
+// ret = lynq_disable_pin(pin);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+// int query_pin_lock_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// char pin[SIM_BUF] = "";
+// int lock[SIM_BUF] = {0};
+// ret = lynq_query_pin_lock(pin,lock);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+// int verify_pin_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// char pin[SIM_BUF] = "";
+// ret = lynq_verify_pin(pin);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+// int change_pin_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// char old_pin[SIM_BUF] = "";
+// char new_pin[SIM_BUF] = "";
+// ret = lynq_change_pin(old_pin, new_pin);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+// int unlock_pin_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// char puk[SIM_BUF] = "";
+// char new_pin[SIM_BUF] = "";
+// ret = lynq_unlock_pin(puk, new_pin);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// //#error rita
+
+// int get_imei_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// char buf[SIM_BUF] = "";
+// ret = lynq_get_imei(buf);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("[%s-%d] IMEI:%s\n", __FUNCTION__, __LINE__, buf);
+// return ret;
+// }
+
+// int get_imei_and_sv_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// char imei[SIM_BUF] = "";
+// char sv[SIM_BUF] = "";
+// ret = lynq_get_imei_and_sv(imei, sv);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("[%s-%d] IMEI:%s, SV:%s\n", __FUNCTION__, __LINE__, imei, sv);
+// return ret;
+// }
+
+// int switch_card_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// char solt = 0;
+// ret = lynq_switch_card(solt);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+// int query_phone_number_test(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// char buf[SIM_BUF] = "";
+// ret = lynq_query_phone_number(buf);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("[%s-%d] PHONE_NUM:%s\n", __FUNCTION__, __LINE__, buf);
+// return ret;
+// }
+
+// int deinit_sim(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// ret = lynq_sim_deinit();
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int get_version(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// char buf[128] = "";
+// int ret = -1;
+// ret = lynq_get_version(buf);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("[%s-%d] VERSION:%s\n", __FUNCTION__, __LINE__, buf);
+// return ret;
+// }
+
+// int reset_modem(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// char buf[128] = "";
+// int ret = -1;
+// ret = lynq_reset_modem();
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+// int get_msisdn(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// char buf[128] = "";
+// int ret = -1;
+// ret = lynq_query_phone_number(buf);
+// printf("[%s][%d] buf = %s\n",__FUNCTION__,__LINE__, buf);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+//qser api
+sim_client_handle_type ph_sim;
+int qser_init_sim(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ ph_sim = (sim_client_handle_type)atoi(argv[1]);
+ ret = qser_sim_client_init(&ph_sim);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_get_imsi_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ char imsi_buf[SIM_BUF] = "";
+ //sim_client_handle_type h_sim = ph_sim;
+ QSER_SIM_APP_ID_INFO_T pt_info;
+ size_t imsiLen = 0;
+ ret = qser_sim_getimsi(ph_sim, &pt_info, imsi_buf, imsiLen);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_get_iccid_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ char iccid[SIM_BUF] = "";
+ int uToken = atoi(argv[1]);
+ //sim_client_handle_type h_sim = gtoken;
+ QSER_SIM_SLOT_ID_TYPE_T simId;
+ int iccidLen = 0;
+ ret = qser_sim_geticcid(ph_sim, simId, iccid, iccidLen);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_get_phonenumber_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ char phone_num[SIM_BUF] = "";
+ //sim_client_handle_type h_sim = gtoken;
+ QSER_SIM_APP_ID_INFO_T pt_info;
+ int phoneLen = 0;
+ ret = qser_sim_getphonenumber(ph_sim, &pt_info, phone_num, phoneLen);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_verify_pin_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ //sim_client_handle_type h_sim = gtoken;
+ QSER_SIM_VERIFY_PIN_INFO_T pt_info;
+ strcpy(pt_info.pin_value, argv[1]);
+ ret = qser_sim_verifypin(ph_sim, &pt_info);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_change_pin_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ //sim_client_handle_type h_sim = gtoken;
+ QSER_SIM_CHANGE_PIN_INFO_T pt_info;
+
+ strcpy(pt_info.old_pin_value, argv[1]);
+ strcpy(pt_info.new_pin_value, argv[2]);
+ ret = qser_sim_changepin(ph_sim, &pt_info);
+
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_unlock_pin_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ //sim_client_handle_type h_sim = gtoken;
+ QSER_SIM_UNBLOCK_PIN_INFO_T pt_info;
+
+ strcpy(pt_info.puk_value, argv[1]);
+ strcpy(pt_info.new_pin_value, argv[2]);
+ ret = qser_sim_unblockpin(ph_sim, &pt_info);
+
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_enable_pin_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ //sim_client_handle_type h_sim = gtoken;
+ QSER_SIM_ENABLE_PIN_INFO_T pt_info;
+
+ strcpy(pt_info.pin_value, argv[1]);
+ ret = qser_sim_enablepin(ph_sim, &pt_info);
+
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_disable_pin_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ //sim_client_handle_type h_sim = gtoken;
+ QSER_SIM_DISABLE_PIN_INFO_T pt_info;
+
+ strcpy(pt_info.pin_value, argv[1]);
+ ret = qser_sim_disablepin(ph_sim, &pt_info);
+
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_get_sim_status_test(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ //sim_client_handle_type h_sim = gtoken;
+ QSER_SIM_SLOT_ID_TYPE_T simId;
+ QSER_SIM_CARD_STATUS_INFO_T pt_info;
+
+ ret = qser_sim_getcardstatus(ph_sim, simId, &pt_info);
+
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_deinit_sim(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ ret = qser_sim_client_deinit(ph_sim);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/sim.h b/mbtk/test/Mobiletek_Tester_RDIT/sim.h
new file mode 100755
index 0000000..bd6511f
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/sim.h
@@ -0,0 +1,36 @@
+//SIM
+#define SIM_BUF 32
+int init_sim(int argc, char *argv[], int sp_test);
+int get_imsi_test(int argc, char *argv[], int sp_test);
+int get_sim_status_test(int argc, char *argv[], int sp_test);
+int get_iccid_test(int argc, char *argv[], int sp_test);
+int enable_pin_test(int argc, char *argv[], int sp_test);
+int sim_power_test(int argc, char *argv[], int sp_test);
+int disable_pin_test(int argc, char *argv[], int sp_test);
+int query_pin_lock_test(int argc, char *argv[], int sp_test);
+int verify_pin_test(int argc, char *argv[], int sp_test);
+int change_pin_test(int argc, char *argv[], int sp_test);
+int unlock_pin_test(int argc, char *argv[], int sp_test);
+int get_imei_test(int argc, char *argv[], int sp_test);
+int get_imei_and_sv_test(int argc, char *argv[], int sp_test);
+int switch_card_test(int argc, char *argv[], int sp_test);
+int query_phone_number_test(int argc, char *argv[], int sp_test);
+int deinit_sim(int argc, char *argv[], int sp_test);
+int get_version(int argc, char *argv[], int sp_test);
+int reset_modem(int argc, char *argv[], int sp_test);
+int get_msisdn(int argc, char *argv[], int sp_test);
+int reset_simcard(int argc, char *argv[], int sp_test);
+
+//QSER SIM
+int qser_init_sim(int argc, char *argv[], int sp_test);
+int qser_get_imsi_test(int argc, char *argv[], int sp_test);
+int qser_get_iccid_test(int argc, char *argv[], int sp_test);
+int qser_get_phonenumber_test(int argc, char *argv[], int sp_test);
+int qser_verify_pin_test(int argc, char *argv[], int sp_test);
+int qser_change_pin_test(int argc, char *argv[], int sp_test);
+int qser_unlock_pin_test(int argc, char *argv[], int sp_test);
+int qser_enable_pin_test(int argc, char *argv[], int sp_test);
+int qser_disable_pin_test(int argc, char *argv[], int sp_test);
+int qser_get_sim_status_test(int argc, char *argv[], int sp_test);
+int qser_deinit_sim(int argc, char *argv[], int sp_test);
+
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/sms.cpp b/mbtk/test/Mobiletek_Tester_RDIT/sms.cpp
new file mode 100755
index 0000000..ef22c29
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/sms.cpp
@@ -0,0 +1,157 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "lynq_sms.h"
+#include "lynq_qser_sms.h"
+#include "sms.h"
+#define TEST_RESULT "lynq_result="
+
+// int init_sms(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int uToken = atoi(argv[1]);
+// ret = lynq_sms_init(uToken);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int deinit_sms(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// ret = lynq_sms_deinit();
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int send_sms(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int charset = atoi(argv[2]);
+// int msglen = atoi(argv[4]);
+// ret = lynq_send_sms(argv[1], charset, argv[3], msglen);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int read_sms(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int index = atoi(argv[1]);
+// int status = atoi(argv[2]);
+// int charset = atoi(argv[3]);
+// int smscLen = atoi(argv[5]);
+// int smslen = atoi(argv[7]);
+// int numLen = atoi(argv[9]);
+// int current = atoi(argv[10]);
+// int total = atoi(argv[11]);
+// ret = lynq_read_sms(index, &status, &charset, argv[4], &smscLen, &smslen, argv[6], argv[8], &numLen, ¤t, &total);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("LYNQ_SMS_READ: status=%d, charset=%d, smsc=%s, smscLen=%d, message=%s, smslen=%d, teleNum=%s, numLen=%d, current=%d, total=%d\n", status, charset, argv[4], smscLen, argv[6], smslen, argv[8], numLen, current, total);
+// return ret;
+// }
+// int list_sms(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+
+// ret = lynq_list_sms(argv[1]);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("LYNQ_LIST_SMS: index_list=%s\n", argv[1]);
+// return ret;
+// }
+// int delete_sms(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int index = atoi(argv[1]);
+
+// ret = lynq_delete_sms(index);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+// int wait_sms(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// int handle = atoi(argv[1]);
+
+// ret = lynq_wait_receive_new_sms(&handle);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("LYNQ_WAIT_SMS: handle=%d\n", handle);
+// return ret;
+// }
+
+// int get_smsc_address(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// //int handle = atoi(argv[1]);
+// char service_num[22] = "";
+// ret = lynq_get_smsc_address(service_num);
+// printf("%s%d\n",TEST_RESULT,ret);
+// printf("LYNQ_GET_SMSC_ADDRESS: %s\n", service_num);
+// return ret;
+// }
+
+// int set_smsc_address(int argc, char *argv[], int sp_test)
+// {
+// printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+// int ret = -1;
+// //int handle = atoi(argv[1]);
+// char service_num[22] = "";
+// strncpy(service_num, argv[1], 22);
+// ret = lynq_set_smsc_address(service_num);
+// printf("%s%d\n",TEST_RESULT,ret);
+// return ret;
+// }
+
+//QSER API
+sms_client_handle_type ph_sms;
+int qser_init_sms(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ ph_sms = atoi(argv[1]);
+ ret = qser_sms_client_init(&ph_sms);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_deinit_sms(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ ret = qser_sms_client_deinit(ph_sms);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+
+int qser_send_sms(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ QSER_sms_info_t pt_sms_info;
+
+ strcpy(pt_sms_info.src_addr, argv[1]);
+ pt_sms_info.format = (QSER_SMS_T)atoi(argv[2]);
+ strcpy(pt_sms_info.sms_data, argv[3]);
+ pt_sms_info.sms_data_len = atoi(argv[4]);
+
+ ret = qser_sms_send_sms(ph_sms, &pt_sms_info);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+#if 1
+int qser_delete_sms(int argc, char *argv[], int sp_test)
+{
+ printf("[%s][%d] enter!\n",__FUNCTION__,__LINE__);
+ int ret = -1;
+ QSER_sms_storage_info_t pt_sms_storage;
+
+ pt_sms_storage.storage_idx= atoi(argv[1]);
+ ret = qser_sms_deletefromstorage(ph_sms, &pt_sms_storage);
+ printf("%s%d\n",TEST_RESULT,ret);
+ return ret;
+}
+#endif
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/sms.h b/mbtk/test/Mobiletek_Tester_RDIT/sms.h
new file mode 100755
index 0000000..307ff56
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/sms.h
@@ -0,0 +1,15 @@
+//SMS
+int init_sms(int argc, char *argv[], int sp_test);
+int deinit_sms(int argc, char *argv[], int sp_test);
+int send_sms(int argc, char *argv[], int sp_test);
+int read_sms(int argc, char *argv[], int sp_test);
+int list_sms(int argc, char *argv[], int sp_test);
+int delete_sms(int argc, char *argv[], int sp_test);
+int wait_sms(int argc, char *argv[], int sp_test);
+int get_smsc_address(int argc, char *argv[], int sp_test);
+int set_smsc_address(int argc, char *argv[], int sp_test);
+//QSER SMS
+int qser_init_sms(int argc, char *argv[], int sp_test);
+int qser_deinit_sms(int argc, char *argv[], int sp_test);
+int qser_send_sms(int argc, char *argv[], int sp_test);
+int qser_delete_sms(int argc, char *argv[], int sp_test);
\ No newline at end of file
diff --git a/mbtk/test/Mobiletek_Tester_RDIT/socket-tool.cpp b/mbtk/test/Mobiletek_Tester_RDIT/socket-tool.cpp
new file mode 100755
index 0000000..990a910
--- /dev/null
+++ b/mbtk/test/Mobiletek_Tester_RDIT/socket-tool.cpp
@@ -0,0 +1,48 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <sys/types.h>
+#include <pthread.h>
+#include <errno.h>
+#include "lynq.h"
+
+struct sockaddr_un g_client_local_addr = {0};
+
+int main(int argc,char*argv[])
+{
+ int client_socket_fd = -1;
+ char socket_name_client[64]={0};
+ char socket_name_service[64]={0};
+ memset(&g_client_local_addr,0,sizeof(g_client_local_addr));
+ socklen_t addrlen = sizeof(g_client_local_addr);
+ if(argc < 3)
+ {
+ printf("please input socket name and msg\n");
+ }
+ if((argv[1] != NULL) && (argv[2]!=NULL))
+ {
+ sprintf(socket_name_service,"/var/run/socket/%s",argv[1]);
+ //sprintf(socket_name_client,"/var/socket/%s-client",argv[1]);
+ client_socket_fd = create_socket(AF_UNIX, SOCK_DGRAM,0, 0, NULL,socket_name_service, (void *)&g_client_local_addr, 2, 1);
+ if(0 > client_socket_fd)
+ {
+ printf("init socket fail and fd:%d\n",client_socket_fd);
+ return -1;
+ }
+ }
+ else
+ {
+ return -1;
+ }
+ //g_client_local_addr.sun_family = AF_UNIX;
+ //sprintf(g_client_local_addr.sun_path, socket_name_service);
+ int data_len = sendto(client_socket_fd, argv[2], strlen(argv[2]), 0, (sockaddr*)&g_client_local_addr,addrlen);
+ //int data_len = send(client_socket_fd,argv[2],strlen(argv[2]),0);
+ if(data_len <= 0 )
+ {
+ printf("end msg fail er_code:%s\n",strerror(errno));
+ }
+ close(client_socket_fd);
+ return 0;
+}
diff --git a/mbtk/test/libql_lib_v2/ql_ecall_test.c b/mbtk/test/libql_lib_v2/ql_ecall_test.c
index 0ad1113..5ce5d2e 100755
--- a/mbtk/test/libql_lib_v2/ql_ecall_test.c
+++ b/mbtk/test/libql_lib_v2/ql_ecall_test.c
@@ -821,6 +821,7 @@
void item_ql_ecall_set_config_info(void)
{
ql_ecall_config_t ecall_context_info;
+ memset(&ecall_context_info, 0, sizeof(ql_ecall_config_t));
printf("Whether the time of T5 timer is valid(0:no, 1:yes):\n");
scanf("%hhd", &ecall_context_info.t5_timeout_ms_valid);
diff --git a/mbtk/test/libql_lib_v2/ql_tee_test.c b/mbtk/test/libql_lib_v2/ql_tee_test.c
new file mode 100755
index 0000000..58c7463
--- /dev/null
+++ b/mbtk/test/libql_lib_v2/ql_tee_test.c
@@ -0,0 +1,67 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <errno.h>
+#include "ql_tee_service.h"
+
+
+#define TEST_OBJECT_SIZE 128
+
+int main(void)
+{
+ int ret;
+ unsigned int len;
+ char obj1_id[] = "object#1";
+ char obj1_data[] = "123456789";
+ char read_data[TEST_OBJECT_SIZE];
+ uint32_t object;
+ uint32_t count;
+
+
+ printf("ql_ss_initialize start\n");
+ ret = ql_ss_initialize();
+ if(ret != 0)
+ {
+ printf("ql_ss_initialize fail\n");
+ }
+
+ ret = ql_ss_open(obj1_id, sizeof(obj1_id), &object);
+ if(ret != 0)
+ {
+ printf("ql_ss_open fail\n");
+ return 0;
+ }
+
+ ret = ql_ss_write(object, obj1_data, sizeof(obj1_data));
+ if(ret != 0)
+ {
+ printf("ql_ss_write fail\n");
+ return 0;
+ }
+
+ ret = ql_ss_read(object, read_data, sizeof(obj1_data), &count);
+ if(ret != 0)
+ {
+ printf("ql_ss_read fail\n");
+ return 0;
+ }
+ printf("read_data: %s\n", read_data);
+
+
+ ret = ql_ss_unlink(object);
+ if(ret != 0)
+ {
+ printf("ql_ss_unlink fail\n");
+ return 0;
+ }
+
+ ql_ss_close(object);
+ ql_ss_deinitialize();
+
+ return 0;
+
+
+}
+
+
+
diff --git a/mbtk/test/others/key_ev_demo.c b/mbtk/test/others/key_ev_demo.c
new file mode 100755
index 0000000..728b5d0
--- /dev/null
+++ b/mbtk/test/others/key_ev_demo.c
@@ -0,0 +1,251 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <dirent.h>
+#include <poll.h>
+#include <errno.h>
+#include <linux/input.h>
+#include <sys/stat.h>
+#include <sys/reboot.h>
+#include <sys/timerfd.h>
+#include <time.h>
+
+#include "mbtk_type.h"
+#include "mbtk_log.h"
+
+
+#define MAX_DEVICES 16
+#define EVIOCSSUSPENDBLOCK _IOW('E', 0x91, int)
+#define POWER_KEY_LONG_PRESS_TIMEOUT 8000 // 8s
+#define POWER_KEY_PRESS_TIMEOUT 2000 // 2s
+
+static struct pollfd ev_fds[MAX_DEVICES];
+static unsigned ev_count = 0;
+
+
+static int ev_init(void)
+{
+ DIR *dir;
+ struct dirent *de;
+ int fd;
+
+ fd = open("/dev/rtc0", O_RDONLY);
+ if (fd < 0)
+ {
+ LOGW("open rtc0 error\n");
+ }
+ else
+ {
+ ev_fds[ev_count].fd = fd;
+ ev_fds[ev_count].events = POLLIN;
+ ev_count++;
+ LOGI("Monitor /dev/rtc0");
+ }
+
+ dir = opendir("/dev/input");
+ if (dir != NULL)
+ {
+ LOGI("dir = /dev/input");
+ while ((de = readdir(dir)) != NULL)
+ {
+ if (strncmp(de->d_name, "event", 5))
+ continue;
+ fd = openat(dirfd(dir), de->d_name, O_RDONLY);
+ if (fd < 0)
+ continue;
+
+ ev_fds[ev_count].fd = fd;
+ ev_fds[ev_count].events = POLLIN;
+ ioctl(fd, EVIOCSSUSPENDBLOCK, 1);
+ ev_count++;
+ if (ev_count == MAX_DEVICES)
+ break;
+
+ LOGI("Monitor /dev/input/%s", de->d_name);
+ }
+
+ closedir(dir);
+ }
+ else
+ {
+ LOGE("opendir() fail.[%d]",errno);
+ return -1;
+ }
+ return 0;
+}
+
+#if 0
+static void ev_exit(void)
+{
+ while (ev_count > 0)
+ {
+ close(ev_fds[--ev_count].fd);
+ }
+}
+#endif
+
+/* wait: 0 dont wait; -1 wait forever; >0 wait ms */
+static int ev_get(struct input_event *ev, int wait_ms)
+{
+ int r;
+ unsigned n;
+ unsigned long alarm_data;
+
+// if(wait_ms < 0)
+// {
+// LOGE("poll event return\n");
+// return -1;
+// }
+
+ LOGI("Waitting data...");
+ r = poll(ev_fds, ev_count, wait_ms);
+ LOGI("Get Data:result = %d",r);
+
+ if (r > 0)
+ {
+ for (n = 0; n < ev_count; n++)
+ {
+ if (ev_fds[n].revents & POLLIN)
+ {
+ if (n == 0)
+ {
+ r = read(ev_fds[n].fd, &alarm_data, sizeof(alarm_data));
+ LOGD("get form 0 is %ld", alarm_data);
+ ev->type = EV_KEY;
+ ev->code = KEY_BRL_DOT8;
+ ev->value = 1;
+ return 0;
+ }
+ else
+ {
+ r = read(ev_fds[n].fd, ev, sizeof(*ev));
+ if (r == sizeof(*ev))
+ return 0;
+ }
+ }
+ }
+ }
+ return -1;
+}
+
+
+static void power_process(bool down, struct timeval *time)
+{
+ printf("POWER_KEY - %s,Time : %ld %ld \n", down ? "DOWN" : "UP", time->tv_sec, time->tv_usec);
+#if 0
+ static struct timeval down_time;
+ static bool key_down;
+ if(down) // Down
+ {
+ key_down = true;
+ power_long_press_timeout = false;
+ down_time.tv_sec = time->tv_sec;
+ down_time.tv_usec = time->tv_usec;
+ signal(SIGALRM, power_key_timer_alrm);
+ struct itimerval val;
+ // Only time
+ val.it_interval.tv_sec = 0;
+ val.it_interval.tv_usec = 0;
+ // Time
+ if(POWER_KEY_LONG_PRESS_TIMEOUT >= 1000)
+ {
+ val.it_value.tv_sec = POWER_KEY_LONG_PRESS_TIMEOUT/1000;
+ val.it_value.tv_usec = POWER_KEY_LONG_PRESS_TIMEOUT%1000;
+ }
+ else
+ {
+ val.it_value.tv_sec = 0;
+ val.it_value.tv_usec = POWER_KEY_LONG_PRESS_TIMEOUT;
+ }
+ if (setitimer(ITIMER_REAL, &val, NULL) == -1)
+ {
+ LOGE("setitimer fail.[%d]",errno);
+ return;
+ }
+ }
+ else // UP
+ {
+ if(key_down)
+ {
+ // ms
+ long time_used = (time->tv_sec - down_time.tv_sec) * 1000 + (time->tv_usec - down_time.tv_usec) / 1000;
+ LOGI("Down time[%ld,%ld], Up time[%ld,%ld], time_used = %ld ms",down_time.tv_sec,down_time.tv_usec,
+ time->tv_sec,time->tv_usec,time_used);
+
+ if(!power_long_press_timeout)
+ {
+ // Cancel alarm
+ struct itimerval value;
+ value.it_value.tv_sec = 0;
+ value.it_value.tv_usec = 0;
+ value.it_interval = value.it_value;
+ setitimer(ITIMER_REAL, &value, NULL);
+
+ if(time_used <= POWER_KEY_PRESS_TIMEOUT)
+ {
+ screen_state_change(false);
+ }
+ else
+ {
+ LOGI("Press timeout.");
+ }
+ }
+ else
+ {
+ LOGI("Long Press timeout.");
+ }
+ }
+ else
+ {
+ LOGI("UP key for screen on.");
+ }
+
+ key_down = false;
+ }
+#endif
+}
+
+
+int main(int argc, char *argv[])
+{
+ mbtk_log_init(NULL, "MBTK_KEY");
+ // Open dev
+ ev_init();
+
+ int ret = 0;
+ struct input_event ev;
+ while(1)
+ {
+ ret = ev_get(&ev, -1);
+ if(ret)
+ {
+ LOGW("ev_get() fail.");
+ continue;
+ }
+
+ LOGI("ev:time[%ld,%ld],type:%d,code:%d,value:%d",ev.time.tv_sec,ev.time.tv_usec,
+ ev.type,ev.code,ev.value);
+ if(ev.type != EV_KEY)
+ {
+ LOGW("event type error.[%d]",ev.type);
+ continue;
+ }
+
+ switch(ev.code)
+ {
+ case KEY_POWER: // Power key
+ {
+ power_process(ev.value, &(ev.time));
+ break;
+ }
+ default:
+ {
+ LOGD("Unknown KEY[%d]",ev.code);
+ break;
+ }
+ }
+ }
+ return 0;
+}
diff --git a/mbtk/test/others/rtc_alarm_test.c b/mbtk/test/others/rtc_alarm_test.c
new file mode 100755
index 0000000..805aef9
--- /dev/null
+++ b/mbtk/test/others/rtc_alarm_test.c
@@ -0,0 +1,62 @@
+#include <stdio.h>
+#include <fcntl.h>
+#include <sys/ioctl.h>
+#include <linux/rtc.h>
+
+int main() {
+ int rtc_fd = open("/dev/rtc0", O_RDWR);
+ if (rtc_fd == -1) {
+ perror("open");
+ return 1;
+ }
+
+ struct rtc_time rtc_tm;
+ struct rtc_wkalrm rtc_alarm;
+ int flags;
+
+ // ......
+ if (ioctl(rtc_fd, RTC_RD_TIME, &rtc_alarm.time) == -1) {
+ perror("ioctl RTC_RD_TIME");
+ close(rtc_fd);
+ return 1;
+ }
+
+ // ......
+ printf("Current RTC time: %d-%d-%d %02d:%02d:%02d\n",
+ rtc_alarm.time.tm_year, rtc_alarm.time.tm_mon, rtc_alarm.time.tm_mday, rtc_alarm.time.tm_hour, rtc_alarm.time.tm_min, rtc_alarm.time.tm_sec);
+
+ // .. RTC ...
+ rtc_alarm.time.tm_sec = rtc_tm.tm_sec + 10; // 10 .......
+ rtc_alarm.enabled = 1;
+
+ if (ioctl(rtc_fd, RTC_WKALM_SET, &rtc_alarm) == -1) {
+ perror("ioctl RTC_WKALM_SET1");
+ close(rtc_fd);
+ return 1;
+ }
+ if (ioctl(rtc_fd, RTC_AIE_ON) == -1) {
+ perror("ioctl RTC_AIE_ON");
+ close(rtc_fd);
+ return 1;
+ }
+ printf("RTC alarm set for 10 seconds from now1\n");
+
+#if 0
+ rtc_alarm.time.tm_sec = rtc_tm.tm_sec + 10; // 10 .......
+ rtc_alarm.enabled = 0;
+
+ if (ioctl(rtc_fd, RTC_WKALM_SET, &rtc_alarm) == -1) {
+ perror("ioctl RTC_WKALM_SET2");
+ close(rtc_fd);
+ return 1;
+ }
+ if (ioctl(rtc_fd, RTC_AIE_OFF) == -1) {
+ perror("ioctl RTC_AIE_OFF");
+ close(rtc_fd);
+ return 1;
+ }
+ printf("RTC alarm disable2\n");
+#endif
+ close(rtc_fd);
+ return 0;
+}
\ No newline at end of file