Add toolchain and mbtk source

Change-Id: Ie12546301367ea59240bf23d5e184ad7e36e40b3
diff --git a/mbtk/ql_lib/src/ql_quec_sim.c b/mbtk/ql_lib/src/ql_quec_sim.c
new file mode 100755
index 0000000..edcef9a
--- /dev/null
+++ b/mbtk/ql_lib/src/ql_quec_sim.c
@@ -0,0 +1,406 @@
+#include "ql/ql_sim.h"
+#include "mbtk_type.h"
+#include "mbtk_info_api.h"
+
+extern mbtk_info_handle_t* ql_info_handle;
+extern int ql_info_handle_num;
+static bool inited = FALSE;
+
+QL_SIM_CardStatusIndMsgHandlerFunc_t handlerPtr_cb = NULL;
+
+typedef struct
+{
+    uint8 *operator_l;
+    uint8 *operator_s;
+    uint32 mcc_mnc;
+} operator_mcc_mnc_t;
+
+static operator_mcc_mnc_t operator_mcc_mnc[] =
+{
+    {"China Mobile","CMCC",46000},
+    {"China Unicom","CU",46001},
+    {"China Mobile","CMCC",46002},
+    {"China Telecom","CT",46003},
+    {"China Mobile","CMCC",46004},
+    {"China Telecom","CT",46005},
+    {"China Unicom","CU",46006},
+    {"China Mobile","CMCC",46007},
+    {"China Mobile","CMCC",46008},
+    {"China Unicom","CU",46009},
+    {"China Telecom","CT",46011}
+};
+
+void ql_sim_state_change_cb(const void* data, int data_len)
+{
+    if(handlerPtr_cb != NULL)
+    {
+        //QL_SIM_NFY_MSG_ID msg_id, void *pv_data, int pv_data_len, void *contextPtr
+        //handlerPtr_cb(net_data[2]);
+    }
+    mbtk_sim_card_info *info = NULL;
+    info = (mbtk_sim_card_info*)data;
+
+    QL_SIM_CARD_STATUS_INFO sim_card_info = {0};
+    sim_card_info.card_state = info->sim;
+    sim_card_info.card_type = info->sim_card_type;
+    /*
+        sim_client_handle_type  h_sim,
+        E_QL_SIM_NFY_MSG_ID_T   e_msg_id,
+        void                    *pv_data,
+        void                    *contextPtr
+    */
+    handlerPtr_cb(QL_SIM_CARD_STATUS_UPDATE_EVENT, &sim_card_info, sizeof(QL_SIM_CARD_STATUS_INFO), NULL);
+}
+
+QL_SIM_ERROR_CODE ql_sim_init()
+{
+    if(!inited && ql_info_handle == NULL)
+    {
+        ql_info_handle = mbtk_info_handle_get();
+        if(ql_info_handle)
+        {
+            ql_info_handle_num++;
+            inited = TRUE;
+            return QL_SIM_SUCCESS;
+        } else {
+            LOGE("mbtk_info_handle_get() fail.");
+            return QL_SIM_GENERIC_FAILURE;
+        }
+    } else {
+        if(!inited) {
+            ql_info_handle_num++;
+            inited = TRUE;
+        }
+        return QL_SIM_SUCCESS;
+    }
+}
+
+
+QL_SIM_ERROR_CODE ql_sim_release()
+{
+    if(ql_info_handle)
+    {
+        LOGD("ql_info_handle_num = %d", ql_info_handle_num);
+        if(ql_info_handle_num == 1) { // 最后一个引用,可释放。
+            int ret = mbtk_info_handle_free(&ql_info_handle);
+            if(ret) {
+                LOGE("mbtk_info_handle_free() fail.");
+                return QL_SIM_GENERIC_FAILURE;
+            }
+            else
+            {
+                ql_info_handle_num = 0;
+                ql_info_handle = NULL;
+                return QL_SIM_SUCCESS;
+            }
+        } else {
+            ql_info_handle_num--;
+            return QL_SIM_SUCCESS;
+        }
+    }
+    else
+    {
+        LOGE("Sim handle not inited.");
+        return QL_SIM_GENERIC_FAILURE;
+    }
+}
+
+
+QL_SIM_ERROR_CODE ql_sim_get_imsi(uint8_t *imsi, size_t imsiLen)
+{
+    if(ql_info_handle == NULL || imsi == NULL || imsiLen <= 0)
+    {
+        LOGE("ARG error.");
+        return QL_SIM_GENERIC_FAILURE;
+    }
+    memset(imsi,0,imsiLen);
+    int err = mbtk_imsi_get(ql_info_handle, imsi);
+    if(err) {
+        return QL_SIM_GENERIC_FAILURE;
+    } else {
+        return QL_SIM_SUCCESS;
+    }
+}
+
+QL_SIM_ERROR_CODE ql_sim_get_iccid(uint8_t *iccid, size_t iccidLen)
+{
+    if(ql_info_handle == NULL || iccid == NULL || iccidLen <= 0)
+    {
+        LOGE("ARG error.");
+        return QL_SIM_GENERIC_FAILURE;
+    }
+    memset(iccid, 0, iccidLen);
+    int err = mbtk_iccid_get(ql_info_handle, iccid);
+    if(err) {
+        return QL_SIM_GENERIC_FAILURE;
+    } else {
+        return QL_SIM_SUCCESS;
+    }
+}
+
+QL_SIM_ERROR_CODE ql_sim_get_phonenumber(uint8_t *phone_num, size_t phoneLen)
+{
+    if(ql_info_handle == NULL || phone_num == NULL || phoneLen <= 0)
+    {
+        LOGE("ARG error.");
+        return QL_SIM_GENERIC_FAILURE;
+    }
+    memset(phone_num, 0, phoneLen);
+    int err = mbtk_phone_number_get(ql_info_handle, phone_num);
+    if(err) {
+        return QL_SIM_GENERIC_FAILURE;
+    } else {
+        return QL_SIM_SUCCESS;
+    }
+}
+
+QL_SIM_ERROR_CODE ql_sim_get_operator_plmn_list(QL_SIM_PREFERRED_OPERATOR_LIST *pt_info)
+{
+    if(ql_info_handle == NULL || pt_info == NULL)
+    {
+        LOGE("ARG error.");
+        return QL_SIM_GENERIC_FAILURE;
+    }
+
+    mbtk_plmn_info plmn;
+    int err = mbtk_get_plmn_list(ql_info_handle, &plmn);
+    if(err) {
+        LOGE("mbtk_get_plmn_list file : %d",err);
+        return QL_SIM_GENERIC_FAILURE;
+    } else {
+        memset(pt_info, 0x0, sizeof(QL_SIM_PREFERRED_OPERATOR_LIST));
+        pt_info->preferred_operator_list_num = plmn.count;
+        int list_count;
+        for(list_count = 0; list_count < plmn.count; list_count++)
+        {
+            if(plmn.mbtk_plmn_name[list_count].format == 2)    //number
+            {
+                uint32 plmn_name = (uint32)atoi(plmn.mbtk_plmn_name[list_count].plmn_name);
+                sprintf(pt_info->preferred_operator_list[list_count].mcc,"%d",plmn_name/100);
+                sprintf(pt_info->preferred_operator_list[list_count].mnc,"%02d",plmn_name%100);
+            }
+            else if(plmn.mbtk_plmn_name[list_count].format == 0)
+            {
+                int i = 0;
+                while(i < ARRAY_SIZE(operator_mcc_mnc))
+                {
+                    if(!strcmp(operator_mcc_mnc[i].operator_l,plmn.mbtk_plmn_name))
+                        break;
+                    i++;
+                }
+
+                if(i == ARRAY_SIZE(operator_mcc_mnc))   // No found mcc&mnc
+                {
+                    memcpy(pt_info->preferred_operator_list[list_count].mcc,0,3);
+                    memcpy(pt_info->preferred_operator_list[list_count].mnc,0,3);
+                }
+                else
+                {
+                    sprintf(pt_info->preferred_operator_list[list_count].mcc, "%d", (operator_mcc_mnc[i].mcc_mnc)/100);
+                    sprintf(pt_info->preferred_operator_list[list_count].mnc, "%d", (operator_mcc_mnc[i].mcc_mnc)%100);
+                }
+            }
+            else
+            {
+                int i = 0;
+                while(i < ARRAY_SIZE(operator_mcc_mnc))
+                {
+                    if(!strcmp(operator_mcc_mnc[i].operator_s,plmn.mbtk_plmn_name))
+                        break;
+                    i++;
+                }
+
+                if(i == ARRAY_SIZE(operator_mcc_mnc))   // No found mcc&mnc
+                {
+                    memcpy(pt_info->preferred_operator_list[list_count].mcc,0,3);
+                    memcpy(pt_info->preferred_operator_list[list_count].mnc,0,3);
+                }
+                else
+                {
+                    sprintf(pt_info->preferred_operator_list[list_count].mcc, "%d", (operator_mcc_mnc[i].mcc_mnc)/100);
+                    sprintf(pt_info->preferred_operator_list[list_count].mnc, "%d", (operator_mcc_mnc[i].mcc_mnc)%100);
+                }
+            }
+        }
+        int i;
+        for (i=0;i<pt_info->preferred_operator_list_num;i++)
+        {
+            LOGD("pt_info->preferred_operator_list[%d].mcc=%s",i, pt_info->preferred_operator_list[i].mcc);
+            LOGD("pt_info->preferred_operator_list[%d].mnc=%s",i, pt_info->preferred_operator_list[i].mnc);
+        }
+        return QL_SIM_SUCCESS;
+    }
+}
+
+QL_SIM_ERROR_CODE ql_sim_verify_pin(QL_SIM_VERIFY_PIN_INFO *pt_info)
+{
+    if(ql_info_handle == NULL || pt_info == NULL)
+    {
+        LOGE("ARG error.");
+        return QL_SIM_GENERIC_FAILURE;
+    }
+
+    int err = mbtk_verify_pin(ql_info_handle, pt_info->pin_value);
+    if(err) {
+        LOGE("mbtk_verify_pin fail : %d",err);
+        return QL_SIM_GENERIC_FAILURE;
+    } else {
+        return QL_SIM_SUCCESS;
+    }
+}
+
+QL_SIM_ERROR_CODE ql_sim_change_pin(QL_SIM_CHANGE_PIN_INFO *pt_info)
+{
+    if(ql_info_handle == NULL || pt_info == NULL)
+    {
+        LOGE("ARG error.");
+        return QL_SIM_GENERIC_FAILURE;
+    }
+    mbtk_change_pin_info pin_info = {0};
+    memcpy(pin_info.old_pin_value, pt_info->old_pin_value, strlen(pt_info->old_pin_value));
+    memcpy(pin_info.new_pin_value, pt_info->new_pin_value, strlen(pt_info->new_pin_value));
+    int err = mbtk_change_pin(ql_info_handle, &pin_info);
+    if(err) {
+        LOGE("mbtk_change_pin fail : %d",err);
+        return QL_SIM_GENERIC_FAILURE;
+    } else {
+        return QL_SIM_SUCCESS;
+    }
+}
+
+QL_SIM_ERROR_CODE ql_sim_unblock_pin(QL_SIM_UNBLOCK_PIN_INFO *pt_info)
+{
+    if(ql_info_handle == NULL || pt_info == NULL)
+    {
+        LOGE("ARG error.");
+        return QL_SIM_GENERIC_FAILURE;
+    }
+    mbtk_unlock_pin_info puk_pin_info = {0};
+    memcpy(puk_pin_info.pin_value, pt_info->new_pin_value, strlen(pt_info->new_pin_value));
+    memcpy(puk_pin_info.puk_value, pt_info->puk_value, strlen(pt_info->puk_value));
+    int err = mbtk_unlock_pin(ql_info_handle, &puk_pin_info);
+    if(err) {
+        LOGE("mbtk_unlock_pin fail : %d",err);
+        return QL_SIM_GENERIC_FAILURE;
+    } else {
+        return QL_SIM_SUCCESS;
+    }
+}
+
+QL_SIM_ERROR_CODE ql_sim_enable_pin(QL_SIM_VERIFY_PIN_INFO *pt_info)
+{
+    if(ql_info_handle == NULL || pt_info == NULL)
+    {
+        LOGE("ARG error.");
+        return QL_SIM_GENERIC_FAILURE;
+    }
+    mbtk_enable_pin_info pin_info = {0};
+    memcpy(pin_info.pin_value, pt_info->pin_value, strlen(pt_info->pin_value));
+    pin_info.enable = 1;
+    int err = mbtk_enable_pin(ql_info_handle, &pin_info);
+    if(err) {
+        LOGE("mbtk_enable_pin fail : %d",err);
+        return QL_SIM_GENERIC_FAILURE;
+    } else {
+        return QL_SIM_SUCCESS;
+    }
+}
+
+QL_SIM_ERROR_CODE ql_sim_disable_pin(QL_SIM_VERIFY_PIN_INFO *pt_info)
+{
+    if(ql_info_handle == NULL || pt_info == NULL)
+    {
+        LOGE("ARG error.");
+        return QL_SIM_GENERIC_FAILURE;
+    }
+    mbtk_enable_pin_info pin_info = {0};
+    memcpy(pin_info.pin_value, pt_info->pin_value, strlen(pt_info->pin_value));
+    pin_info.enable = 0;
+    int err = mbtk_enable_pin(ql_info_handle, &pin_info);
+    if(err) {
+        LOGE("ql_sim_disable_pin fail : %d",err);
+        return QL_SIM_GENERIC_FAILURE;
+    } else {
+        return QL_SIM_SUCCESS;
+    }
+}
+
+QL_SIM_ERROR_CODE ql_sim_get_card_status(QL_SIM_CARD_STATUS_INFO *pt_info)
+{
+    if(ql_info_handle == NULL || pt_info == NULL)
+    {
+        LOGE("sim not init.");
+        return QL_SIM_GENERIC_FAILURE;
+    }
+
+    mbtk_sim_state_enum sim;
+    mbtk_sim_card_type_enum sim_card_type;
+    mbtk_pin_puk_last_times ql_last_times = {0};
+    int err = mbtk_sim_state_get(ql_info_handle, &sim);
+    LOGD("mbtk_sim_state_get - %d");
+    if(err) {
+        return QL_SIM_GENERIC_FAILURE;
+    } else {
+        memset(pt_info, 0x0, sizeof(QL_SIM_CARD_STATUS_INFO));
+        pt_info->card_state = sim;
+        switch (sim)
+        {
+            case 0:                     //ABSENT
+                pt_info->card_state = QL_SIM_STAT_NOT_INSERTED;
+                break;
+            case 1:                     //NOT READY
+                pt_info->card_state = QL_SIM_STAT_UNKNOWN;
+                break;
+            case 2:                     //READY
+                pt_info->card_state = QL_SIM_STAT_READY;
+                break;
+            case 3:                     //SIM PIN
+                pt_info->card_state = QL_SIM_STAT_SIM_PIN;
+                break;
+            case 4:                     //SIM PUK
+                pt_info->card_state = QL_SIM_STAT_SIM_PUK;
+                break;
+            case 5:                     //NETWORK
+                pt_info->card_state = QL_SIM_STAT_UNKNOWN;
+                break;
+            default:
+                pt_info->card_state = QL_SIM_STAT_UNKNOWN;
+                break;
+        }
+    }
+    err = mbtk_sim_card_type_get(ql_info_handle, &sim_card_type);
+    LOGD("mbtk_sim_card_type_get - %d", err);
+    if(err) {
+        return QL_SIM_GENERIC_FAILURE;
+    } else {
+        if(sim_card_type == 0 || sim_card_type == 2)
+            pt_info->card_type = QL_SIM_CARD_TYPE_ICC;
+        else if(sim_card_type == 1 || sim_card_type == 3)
+            pt_info->card_type = QL_SIM_CARD_TYPE_UICC;
+        else
+            pt_info->card_type = QL_SIM_CARD_TYPE_UNKNOWN;
+    }
+    err = mbtk_pin_last_num_get(ql_info_handle, &ql_last_times);
+    LOGD("mbtk_pin_last_num_get - %d", err);
+    if(err) {
+        return QL_SIM_GENERIC_FAILURE;
+    } else {
+        pt_info->card_pin_info.pin1_num_retries = ql_last_times.p1_retry;
+        pt_info->card_pin_info.pin2_num_retries = ql_last_times.p2_retry;
+        pt_info->card_pin_info.puk1_num_retries = ql_last_times.puk1_retry;
+        pt_info->card_pin_info.puk2_num_retries = ql_last_times.puk2_retry;
+    }
+    return QL_SIM_SUCCESS;
+}
+
+QL_SIM_ERROR_CODE ql_sim_add_event_handler(QL_SIM_CardStatusIndMsgHandlerFunc_t handlerPtr, void* contextPtr)
+{
+    if(ql_info_handle == NULL || handlerPtr == NULL)
+    {
+        return QL_SIM_GENERIC_FAILURE;
+    }
+    handlerPtr_cb = handlerPtr;
+    mbtk_sim_state_change_cb_reg(ql_info_handle, ql_sim_state_change_cb);
+    return QL_SIM_SUCCESS;
+}
+