Fix mbtk from v1265 GSW

Change-Id: I5d8d395616f284bc74c8b9448cfa347164b5a668
diff --git a/mbtk/libgsw_lib/gsw_sim.c b/mbtk/libgsw_lib/gsw_sim.c
new file mode 100755
index 0000000..b8cfa52
--- /dev/null
+++ b/mbtk/libgsw_lib/gsw_sim.c
@@ -0,0 +1,660 @@
+#include "gsw_nw_interface.h"

+#include <unistd.h>

+#include <dlfcn.h>

+#include <time.h>

+

+#define MBTK_BUFF_TEMP_SIZE_32  32

+#define MBTK_ERR_OK             0

+#define MBTK_ERR_FAIL             -1

+#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

+

+//mbtk include

+typedef unsigned int uint32;

+typedef unsigned char uint8;

+typedef unsigned short uint16;

+typedef void (*mbtk_info_callback_func)(const void* data, int data_len);

+typedef struct

+{

+    int client_fd;

+    pthread_t read_thread_id;

+    int exit_fd[2];

+    bool is_waitting;

+    pthread_cond_t cond;

+    pthread_mutex_t mutex;

+

+    pthread_mutex_t send_mutex;

+

+    // Temp response data.

+    uint16 info_err;

+    uint16 data_len;

+    void *data;

+

+    //mbtk wyq for server_ready_status add start

+    char server_ready_status;

+    //mbtk wyq for server_ready_status add end

+

+    mbtk_info_callback_func net_state_cb;

+    mbtk_info_callback_func call_state_cb;

+    mbtk_info_callback_func sms_state_cb;

+    mbtk_info_callback_func radio_state_cb;

+    mbtk_info_callback_func sim_state_cb;

+    mbtk_info_callback_func pdp_state_cb;

+    //add signal by xr

+    mbtk_info_callback_func signal_state_cb;

+} mbtk_info_handle_t;

+

+typedef enum {

+    MBTK_SIM_ABSENT = 0,

+    MBTK_SIM_NOT_READY = 1,

+    MBTK_SIM_READY = 2,

+    MBTK_SIM_PIN = 3,

+    MBTK_SIM_PUK = 4,

+    MBTK_SIM_NETWORK_PERSONALIZATION = 5

+} mbtk_sim_state_enum;

+

+typedef enum

+{

+    MBTK_DEV_MODEM_MIN_FUN,                                   //Modem 最小功能

+    MBTK_DEV_MODEM_FULL_FUN,                                  //Modem 全功能

+    MBTK_DEV_MODEM_DISABLE_RECEIVE_RF_CIRCUITS = 3,           //Modem 禁用射频接收电路

+    MBTK_DEV_MODEM_DISABLE_TRANSMIT_AND_RECEIVE_RF_CIRCUITS,  //Modem禁用射频发射和接收电路

+    MBTK_DEV_MODEM_DISABLE_SIM,                               //Modem 禁用(U)SIM 卡

+    MBTK_DEV_MODEM_TURN_OFF_FULL_SECONDARY_RECEIVE,           //Modem 完全禁用辅助接收

+}MBTK_DEV_MODEM_FUNCTION;

+

+typedef struct

+{

+    MBTK_DEV_MODEM_FUNCTION fun;

+    int rst;

+} mbtk_modem_info_t;

+

+//api

+

+static mbtk_info_handle_t* (*mbtk_info_handle_get)(void);

+#define GSW_HAL_FAIL GSW_HAL_NORMAL_FAIL

+#define GSW_HAL_MEM_INVAILD GSW_HAL_ARG_INVALID

+#define lib_mbtk_path "/lib/libmbtk_lib.so"

+

+static int sim_init_flag = 0;

+mbtk_info_handle_t*       sim_info_handle = NULL;

+static int (*mbtk_info_handle_free)(mbtk_info_handle_t** handle);

+int (*mbtk_sim_state_get)(mbtk_info_handle_t* handle, mbtk_sim_state_enum *sim_state);

+int (*mbtk_imsi_get)(mbtk_info_handle_t* handle, void *imsi);

+int (*mbtk_iccid_get)(mbtk_info_handle_t* handle, void *iccid);

+int (*mbtk_phone_number_get)(mbtk_info_handle_t* handle, void *phone_number);

+int (*mbtk_imei_get)(mbtk_info_handle_t* handle, void *imei);

+int (*mbtk_set_modem_fun)(mbtk_info_handle_t* handle, mbtk_modem_info_t *info);

+int (*mbtk_sim_power_set)(int power);

+static void (*mbtk_log)(int level, const char *format, ...);

+static void (*mbtk_log_init)(char *path, char *tag);

+

+#ifndef LOG_ERR_LEVEL

+#define LOG_ERR_LEVEL  3      /* error conditions */

+#endif

+#ifndef LOG_WARN_LEVEL

+#define LOG_WARN_LEVEL 4   /* warning conditions */

+#endif

+#ifndef LOG_INFO_LEVEL

+#define LOG_INFO_LEVEL 6      /* informational */

+#endif

+#ifndef LOG_DEBUG_LEVEL

+#define LOG_DEBUG_LEVEL 7     /* debug-level messages */

+#endif

+#ifndef LOG_VERBOSE_LEVEL

+#define LOG_VERBOSE_LEVEL 8

+#endif

+

+#define LOGV(fmt, args ...) \

+    do{ \

+        char *file_ptr_1001 = __FILE__; \

+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \

+        char line_1001[10] = {0}; \

+        sprintf(line_1001, "%d", __LINE__); \

+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \

+            if(*ptr_1001 == '/') \

+                 break; \

+            ptr_1001--; \

+        } \

+        mbtk_log(LOG_VERBOSE_LEVEL, "%s#%s: " fmt, ptr_1001 + 1, line_1001, ##args); \

+    } while(0)

+

+#define LOGI(fmt, args...) \

+    do{ \

+        char *file_ptr_1001 = __FILE__; \

+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \

+        char line_1001[10] = {0}; \

+        sprintf(line_1001, "%d", __LINE__); \

+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \

+            if(*ptr_1001 == '/') \

+                 break; \

+            ptr_1001--; \

+        } \

+        mbtk_log(LOG_INFO_LEVEL, "%s#%s: " fmt, ptr_1001 + 1, line_1001, ##args); \

+    } while(0)

+

+#define LOGD(fmt, args...) \

+    do{ \

+        char *file_ptr_1001 = __FILE__; \

+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \

+        char line_1001[10] = {0}; \

+        sprintf(line_1001, "%d", __LINE__); \

+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \

+            if(*ptr_1001 == '/') \

+                 break; \

+            ptr_1001--; \

+        } \

+        mbtk_log(LOG_DEBUG_LEVEL, "%s#%s: " fmt, ptr_1001 + 1, line_1001, ##args); \

+    } while(0)

+

+#define LOGW(fmt, args...) \

+    do{ \

+        char *file_ptr_1001 = __FILE__; \

+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \

+        char line_1001[10] = {0}; \

+        sprintf(line_1001, "%d", __LINE__); \

+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \

+            if(*ptr_1001 == '/') \

+                 break; \

+            ptr_1001--; \

+        } \

+        mbtk_log(LOG_WARN_LEVEL, "%s#%s: " fmt, ptr_1001 + 1, line_1001, ##args); \

+    } while(0)

+

+#define LOGE(fmt, args...) \

+    do{ \

+		char *file_ptr_1001 = __FILE__; \

+        char *ptr_1001 = file_ptr_1001 + strlen(file_ptr_1001) - 1;   \

+        char line_1001[10] = {0}; \

+        sprintf(line_1001, "%d", __LINE__); \

+        while(ptr_1001 >= file_ptr_1001 && *ptr_1001){ \

+            if(*ptr_1001 == '/') \

+                 break; \

+            ptr_1001--; \

+        } \

+        mbtk_log(LOG_ERR_LEVEL, "%s#%s: " fmt, ptr_1001 + 1, line_1001, ##args); \

+    } while(0)

+

+

+

+

+static void *dlHandle_mbtk;

+

+

+static int gsw_sim_api_import()

+{

+    dlHandle_mbtk = dlopen(lib_mbtk_path, RTLD_NOW);

+    if (dlHandle_mbtk == NULL) 

+    {

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_log_init = (void (*)(char *path, char *tag))dlsym(dlHandle_mbtk, "mbtk_log_init");

+    if (mbtk_log_init == NULL) 

+    {

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_log = (void (*)(int level, const char *format, ...))dlsym(dlHandle_mbtk, "mbtk_log");

+    if (mbtk_log == NULL) 

+    {

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_info_handle_get = (mbtk_info_handle_t* (*)(void))dlsym(dlHandle_mbtk, "mbtk_info_handle_get");

+    if (mbtk_info_handle_get == NULL) 

+    {

+        LOGE("mbtk_info_handle_get dlsym fail\n");

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_info_handle_free = (int (*)(mbtk_info_handle_t** handle))dlsym(dlHandle_mbtk, "mbtk_info_handle_free");

+    if (mbtk_info_handle_free == NULL) 

+    {

+        LOGE("mbtk_info_handle_free dlsym fail\n");

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_imsi_get = (int (*)(mbtk_info_handle_t* handle, void *imsi))dlsym(dlHandle_mbtk, "mbtk_imsi_get");

+    if (mbtk_imsi_get == NULL) 

+    {

+        LOGE("mbtk_imsi_get dlsym fail\n");

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_iccid_get = (int (*)(mbtk_info_handle_t* handle, void *iccid))dlsym(dlHandle_mbtk, "mbtk_iccid_get");

+    if (mbtk_iccid_get == NULL) 

+    {

+        LOGE("mbtk_iccid_get dlsym fail\n");

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_phone_number_get = (int (*)(mbtk_info_handle_t* handle, void *phone_number))dlsym(dlHandle_mbtk, "mbtk_phone_number_get");

+    if (mbtk_phone_number_get == NULL) 

+    {

+        LOGE("mbtk_phone_number_get dlsym fail\n");

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_imei_get = (int (*)(mbtk_info_handle_t* handle, void *imei))dlsym(dlHandle_mbtk, "mbtk_imei_get");

+    if (mbtk_imei_get == NULL) 

+    {

+        LOGE("mbtk_imei_get dlsym fail\n");

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_sim_state_get = (int (*)(mbtk_info_handle_t* handle, mbtk_sim_state_enum *sim_state))dlsym(dlHandle_mbtk, "mbtk_sim_state_get");

+    if (mbtk_sim_state_get == NULL) 

+    {

+        LOGE("mbtk_sim_state_get dlsym fail\n");

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_set_modem_fun = (int (*)(mbtk_info_handle_t* handle, mbtk_modem_info_t *info))dlsym(dlHandle_mbtk, "mbtk_set_modem_fun");

+    if (mbtk_set_modem_fun == NULL) 

+    {

+        LOGE("mbtk_set_modem_fun dlsym fail\n");

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_sim_power_set = (int (*)(int power))dlsym(dlHandle_mbtk, "mbtk_sim_power_set");

+    if (mbtk_sim_power_set == NULL)

+    {

+        LOGE("mbtk_sim_power_set dlsym fail\n");

+        return GSW_HAL_FAIL;

+    }

+

+    LOGD("gsw_sim_api_import end\n");

+    return GSW_HAL_SUCCESS;

+}

+

+/**

+ * @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)

+{

+    int ret = GSW_HAL_FAIL;

+

+    if(sim_init_flag == 1 && sim_info_handle != NULL)

+    {

+        return GSW_HAL_SUCCESS;

+    }

+

+    ret = gsw_sim_api_import();

+    if(ret != GSW_HAL_SUCCESS)

+    {

+        if(mbtk_log != NULL)

+        {

+            LOGE("gsw_sim_import fail\n");

+        }

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_log_init("syslog", "MBTK_RIL");

+

+    sim_info_handle = mbtk_info_handle_get();

+    if(sim_info_handle == NULL)

+    {

+        LOGE("mbtk_info_handle_get fail\n");

+        return GSW_HAL_FAIL;

+    }

+

+    sim_init_flag = 1;

+    return GSW_HAL_SUCCESS;

+}

+

+

+/**

+ * @brief sim sdk deinit

+ * @param 

+ * @retval 0: success

+ * @retval other: fail

+ */

+int gsw_sim_sdk_deinit(void)

+{

+    int ret = -1;

+

+    if(sim_init_flag == 0 && sim_info_handle == NULL)

+    {

+        LOGE("sim sdk has been deinit\n");

+        return GSW_HAL_FAIL;

+    }

+

+    ret = mbtk_info_handle_free(&sim_info_handle);

+    if(ret != GSW_HAL_SUCCESS)

+    {

+        LOGE("mbtk_info_handle_free fail\n");

+        return GSW_HAL_FAIL;

+    }

+

+    sim_init_flag = 0;

+    sim_info_handle = NULL;

+    dlclose(dlHandle_mbtk);

+

+    return GSW_HAL_SUCCESS;

+

+}

+

+

+/**

+ * @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(int *sim_state)

+{

+    LOGD("gsw_get_sim_status enter\n");

+    int ret = -1;

+

+    if(sim_init_flag == 0 && sim_info_handle == NULL)

+    {

+        LOGE("sim sdk has been deinit\n");

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_sim_state_enum sim = MBTK_SIM_ABSENT;

+

+    LOGD("mbtk_get_sim_status start\n");

+    ret = mbtk_sim_state_get(sim_info_handle, &sim);

+    if(ret)

+    {

+        LOGE("[gsw_get_sim_status] mbtk_sim_state_get fail [err = %d].", ret);

+        return GSW_HAL_FAIL;

+    }

+

+    else

+    {

+        LOGD("[gsw_get_sim_status] sim = %d\n", sim);

+        switch (sim)

+        {

+            case MBTK_SIM_ABSENT:

+            {

+                *sim_state = SIM_STATUS_ABSENT;

+                break;

+            }

+            case MBTK_SIM_NOT_READY:

+            {

+                *sim_state = SIM_STATUS_PRESENT;

+                break;

+            }

+                

+            case MBTK_SIM_READY:

+            {

+                *sim_state = SIM_STATUS_READY;

+                break;

+            }

+                

+            case MBTK_SIM_PIN:

+            {

+                *sim_state = SIM_STATUS_PIN;

+                break;

+            }

+

+            case MBTK_SIM_PUK:

+            {

+                break;

+            }

+

+            case MBTK_SIM_NETWORK_PERSONALIZATION:

+            {

+                break;

+            }

+        

+        }

+    }

+

+    return GSW_HAL_SUCCESS;

+}

+

+/**

+ * @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(int len, char *iccid)

+{

+    int ret = -1;

+

+    if(sim_init_flag == 0 && sim_info_handle == NULL)

+    {

+        LOGE("sim sdk has been deinit\n");

+        return GSW_HAL_FAIL;

+    }

+

+    if(iccid == NULL)

+    {

+        LOGE("iccid is NULL.");

+        return GSW_HAL_MEM_INVAILD;

+    }

+

+    if(len < GSW_SIM_ICCID_LENGTH)

+    {

+        LOGE("iccid len is too short,len = %d\n", len);

+        return GSW_HAL_FAIL;

+    }

+

+    ret = mbtk_iccid_get(sim_info_handle, (void *)iccid);

+    if(ret != MBTK_ERR_OK)

+    {

+        LOGE("[gsw_sim] mbtk_iccid_get fail [err = %d].", ret);

+        return GSW_HAL_FAIL;

+    }

+

+    return GSW_HAL_SUCCESS;

+}

+

+/**

+ * @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(int len, char *imsi)

+{

+    int ret = -1;

+

+    if(sim_init_flag == 0 && sim_info_handle == NULL)

+    {

+        LOGE("sim sdk has been deinit\n");

+        return GSW_HAL_FAIL;

+    }

+

+    if(imsi == NULL)

+    {

+        LOGE("imsi is NULL.");

+        return GSW_HAL_MEM_INVAILD;

+    }

+

+    if(len < GSW_SIM_IMSI_LENGTH)

+    {

+        LOGE("imsi len is too short,len = %d\n", len);

+        return GSW_HAL_FAIL;

+    }

+

+    ret = mbtk_imsi_get(sim_info_handle, (void *)imsi);

+    if(ret != MBTK_ERR_OK)

+    {

+        LOGE("[gsw_sim] mbtk_imsi_get fail [err = %d].", ret);

+        return GSW_HAL_FAIL;

+    }

+

+    return GSW_HAL_SUCCESS;

+}

+

+/**

+ * @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(int len, char *msisdn)

+{

+    int ret = -1;

+

+    if(sim_init_flag == 0 && sim_info_handle == NULL)

+    {

+        printf("sim sdk has been deinit\n");

+        return GSW_HAL_FAIL;

+    }

+

+    if(msisdn == NULL)

+    {

+        printf("msisdn is NULL.");

+        return GSW_HAL_MEM_INVAILD;

+    }

+

+    if(len < GSW_SIM_MSISDN_LENGTH)

+    {

+        printf("msisdn len is too short,len = %d\n", len);

+        return GSW_HAL_FAIL;

+    }

+

+    ret = mbtk_phone_number_get(sim_info_handle, (void *)msisdn);

+    if(ret != MBTK_ERR_OK)

+    {

+        LOGE("[gsw_sim] mbtk_phone_number_get fail [err = %d].", ret);

+        return GSW_HAL_FAIL;

+    }

+

+    return GSW_HAL_SUCCESS;

+}

+

+/**

+ * @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(int len, char *imei)

+{

+    int ret = -1;

+

+    if(sim_init_flag == 0 && sim_info_handle == NULL)

+    {

+        LOGE("sim sdk has been deinit\n");

+        return GSW_HAL_FAIL;

+    }

+

+    if(imei == NULL)

+    {

+        LOGE("imei is NULL.");

+        return GSW_HAL_MEM_INVAILD;

+    }

+

+    if(len < GSW_SIM_MSISDN_LENGTH)

+    {

+        LOGE("imei len is too short,len = %d\n", len);

+        return GSW_HAL_FAIL;

+    }

+

+    ret = mbtk_imei_get(sim_info_handle, (void *)imei);

+    if(ret != MBTK_ERR_OK)

+    {

+        LOGE("[gsw_sim] mbtk_imei_get fail [err = %d].", ret);

+        return GSW_HAL_FAIL;

+    }

+

+    return GSW_HAL_SUCCESS;

+}

+

+

+/**

+ * @brief set sim power down

+ * @param  

+ * @retval 0: success

+ * @retval other: fail

+ */

+int gsw_set_sim_power_down(void)

+{

+    int ret = -1;

+    if(sim_init_flag == 0 && sim_info_handle == NULL)

+    {

+        LOGE("sim sdk has been deinit\n");

+        return GSW_HAL_FAIL;

+    }

+

+    ret = mbtk_sim_power_set(0);

+    if(ret != MBTK_ERR_OK)

+    {

+        LOGE("[gsw_sim] mbtk_sim_power_set fail [err = %d].", ret);

+        return GSW_HAL_FAIL;

+    }

+    return GSW_HAL_SUCCESS;

+}

+

+

+

+/**

+ * @brief set sim power up

+ * @param 

+ * @retval 0: success

+ * @retval other: fail

+ */

+int gsw_set_sim_power_up(void)

+{

+    int ret = -1;

+    if(sim_init_flag == 0 && sim_info_handle == NULL)

+    {

+        LOGE("sim sdk has been deinit\n");

+        return GSW_HAL_FAIL;

+    }

+

+    ret = mbtk_sim_power_set(1);

+    if(ret != MBTK_ERR_OK)

+    {

+        LOGE("[gsw_sim] mbtk_sim_power_set fail [err = %d].", ret);

+        return GSW_HAL_FAIL;

+    }

+    return GSW_HAL_SUCCESS;

+}

+

+

+/**

+ * @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)

+{

+    int ret = -1;

+    if(sim_init_flag == 0 && sim_info_handle == NULL)

+    {

+        LOGE("sim sdk has been deinit\n");

+        return GSW_HAL_FAIL;

+    }

+

+    mbtk_modem_info_t info;

+    info.fun = MBTK_DEV_MODEM_MIN_FUN;

+    info.rst = 0;

+

+    ret = mbtk_set_modem_fun(sim_info_handle, &info);

+    if(ret)

+    {

+        LOGE("[gsw_sim] mbtk_set_modem_fun fail [err = %d].", ret);

+        return GSW_HAL_FAIL;

+    }

+

+    sleep(1);

+

+    info.fun = MBTK_DEV_MODEM_FULL_FUN;

+    ret = mbtk_set_modem_fun(sim_info_handle, &info);

+    if(ret)

+    {

+        LOGE("[gsw_sim] mbtk_set_modem_fun fail [err = %d].", ret);

+        return GSW_HAL_FAIL;

+    }

+    return GSW_HAL_SUCCESS;

+}
\ No newline at end of file