diff --git a/mbtk/libmbtk_lib/ril/v2/mbtk_ril_api.c b/mbtk/libmbtk_lib/ril/v2/mbtk_ril_api.c
index ddebb76..f881408 100755
--- a/mbtk/libmbtk_lib/ril/v2/mbtk_ril_api.c
+++ b/mbtk/libmbtk_lib/ril/v2/mbtk_ril_api.c
@@ -57,6 +57,8 @@
 #define EPOLL_LISTEN_MAX 100
 #define RIL_TIMEOUT_DEF 10  // Second
 
+#define INIT_DEFAULT_0 0
+
 static ril_cli_info_t ril_cli;
 static int pthread_id_index = 1;
 
@@ -929,6 +931,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    *volte_state = INIT_DEFAULT_0;
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -983,6 +986,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    *radio_state = MBTK_RADIO_STATE_MINI_FUNC;
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1048,6 +1052,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    *temp = INIT_DEFAULT_0;
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1151,6 +1156,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    *sim_state = MBTK_SIM_STATE_ABSENT;
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1178,6 +1184,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    *sim_card_type = MBTK_SIM;
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1277,6 +1284,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    *lock_state = INIT_DEFAULT_0;
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1329,6 +1337,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(retry_times, 0x00, sizeof(mbtk_pin_puk_last_times_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1353,6 +1362,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(plmn_list, 0x00, sizeof(mbtk_plmn_info));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1377,6 +1387,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(net_array, 0x00, sizeof(mbtk_net_info_array_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1425,6 +1436,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(net, 0x00, sizeof(mbtk_net_info_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1450,6 +1462,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(band, 0x00, sizeof(mbtk_band_info_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1475,6 +1488,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(band, 0x00, sizeof(mbtk_band_info_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1523,6 +1537,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(cell_array, 0x00, sizeof(mbtk_cell_info_array_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1577,6 +1592,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(signal, 0x00, sizeof(mbtk_signal_info_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1601,6 +1617,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(reg, 0x00, sizeof(mbtk_net_reg_info_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1625,6 +1642,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(oos_info, 0x00, sizeof(mbtk_ril_oos_info_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1702,6 +1720,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(apns, 0x0, sizeof(mbtk_apn_info_array_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1850,6 +1869,7 @@
         return MBTK_RIL_ERR_CID;
     }
 
+    memset(ip, 0x00, sizeof(mbtk_ip_info_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -1879,6 +1899,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    *sms_state = INIT_DEFAULT_0;
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -2691,6 +2712,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(reg, 0x00, sizeof(mbtk_call_info_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -2715,6 +2737,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    *mute_state = INIT_DEFAULT_0;
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -2812,6 +2835,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    *centric = INIT_DEFAULT_0;
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -2996,6 +3020,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(info, 0x00, sizeof(mbtk_ecall_only_info_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -3071,6 +3096,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    *type = MBTK_ECALL_DIAL_TYPE_TEST;
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -3123,6 +3149,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    *mode = MBTK_ECALL_MODE_TYPE_EU;
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
@@ -3175,6 +3202,7 @@
         return MBTK_RIL_ERR_PARAMETER;
     }
 
+    memset(cfg, 0x00, sizeof(mbtk_ecall_cfg_info_t));
     ril_at_port_info_t *port_info = (ril_at_port_info_t*)handle;
     if(!at_port_check(port_info->port)) {
         return MBTK_RIL_ERR_PORT;
