[Bugfix][T108-GSW][bug-view-1585] gsw_reg_operating_mode_callback didn't work

    Only Configure: No
    Affected branch: unknown
    Affected module: network
    Is it affected on both ZXIC and ASR: only ASR
    Self-test: yes
    Doc Update: no

Change-Id: Ia5d4c16f5c6f30970ed9ccbbf9b1b5f99c96e885
diff --git a/mbtk/libgsw_lib/gsw_nw_interface.c b/mbtk/libgsw_lib/gsw_nw_interface.c
index 5ce858e..c8853c0 100755
--- a/mbtk/libgsw_lib/gsw_nw_interface.c
+++ b/mbtk/libgsw_lib/gsw_nw_interface.c
@@ -306,6 +306,7 @@
 static GSW_NW_SigInfoHandlePtr sig_cb;

 static GSW_NW_RejectCauseHandlePtr reject_cb;

 static GSW_NW_ModemStateHandlePtr modem_cb;

+static GSW_NW_AirplaneModeHandlePtr airplane_cb;

 

 static void *dlHandle_mbtk;

 int nw_init_flag = 0;

@@ -1112,8 +1113,8 @@
         {

             LOGI("rsrp = %d",signal->rsrp);

             sig_strength->lte_sig_valid = 1;

-            sig_strength->rsrp = -rsrp_convert_to_minus_dBm(signal->rsrp);

-            sig_strength->rsrq = -rsrq_convert_to_minus_dB(signal->rsrq);

+            sig_strength->rsrp = rsrp_convert_to_minus_dBm(signal->rsrp);

+            sig_strength->rsrq = rsrq_convert_to_minus_dB(signal->rsrq);

             sig_strength->rssi =rsrpToLevel(signal->rsrp-141);

             sig_strength->rssnr=INT_32_MAX;

             break;

@@ -1279,33 +1280,24 @@
     }

 }

 

-static void gsw_modem_status_event_callback(const void* data, int data_len)

+static void gsw_operating_mode_event_callback(const void* data, int data_len)

 {

-    LOGE("gsw_modem_status_event_callback start\n");

+    LOGE("gsw_operating_mode_event_callback start\n");

 

-    gsw_mode_state_e state = GSW_MODEM_STATE_UNKNOWN;

-

+ 

     if(data && data_len > 0)

     {

-        uint8 *net_data = (uint8*)data;

-        LOGE("gsw_modem_status_event_callback,data = %d\n", *net_data);

-        if(*net_data == 1)

+        const uint8 *cfun_state = (const uint8*)data;

+        LOGE("gsw_operating_mode_event_callback,data = %d\n", *cfun_state);

+        if(airplane_cb != NULL)

         {

-            state = GSW_MODEM_STATE_ONLINE;

-        }

-        else if(*net_data == 0)

-        {

-            state = GSW_MODEM_STATE_OFFLINE;

-        }

-

-        if(modem_cb != NULL)

-        {

-            modem_cb(state);

+            airplane_cb(*cfun_state);

         }

     }

 

 }

 

+

 static void gsw_reject_callback(GSW_NW_RADIO_ACCESS_TECH_E rat, GSW_SERVICE_DOMAIN_E domain, int cause)

 {

     LOGE("gsw_reject_callback start,rat = %d,domain = %d,cause = %d\n",rat,domain,cause);

@@ -1668,19 +1660,6 @@
     LOGD("get cell id/tac/lac/sid/nid\n");

     //cell id/tac/lac/sid/nid

     mbtk_cell_type_enum cell_type;

-    if(serving_info->reg_rat == GSW_NETWORK_RADIO_GSM)

-    {

-        cell_type = MBTK_CELL_TYPE_GSM;

-    }

-    else if(serving_info->reg_rat == GSW_NETWORK_RADIO_UMTS)

-    {

-        cell_type = MBTK_CELL_TYPE_UMTS;

-    }

-    else

-    {

-        cell_type = MBTK_CELL_TYPE_LTE;

-    }

-

     list_node_t* cell_list = NULL;

     

     LOGD("mbtk_cell_get start\n");

@@ -1708,7 +1687,7 @@
                     LOGE("LTE : tac=%d, PCI=%d, dlEuarfcn=%d, ulEuarfcn=%d, band=%d\n", cell->value1, cell->value2, cell->value3, cell->value4, cell->value5);

                     snprintf(serving_info->tac,sizeof(serving_info->tac),"%d",cell->value1);

                     strcpy(serving_info->lac,"");

-                    snprintf(serving_info->cell_id,sizeof(serving_info->cell_id),"%d",cell->value8);

+                    snprintf(serving_info->cell_id,sizeof(serving_info->cell_id),"%d",cell->value10);

                     break;

                 }

 

@@ -2385,8 +2364,6 @@
         return GSW_HAL_NORMAL_FAIL;

     }

 

-    int ret = -1;

-

     if(handle_ptr == NULL)

     {

         LOGE("handle_ptr is NULL\n");

@@ -2395,13 +2372,6 @@
 

     modem_cb = handle_ptr;

 

-    ret = mbtk_radio_state_change_cb_reg(nw_info_handle,gsw_modem_status_event_callback);

-    if(ret != 0)

-    {

-        LOGE("mbtk_radio_state_change_cb_reg failed : %d\n", ret);

-        return GSW_HAL_NORMAL_FAIL;

-    }

-

     return GSW_HAL_SUCCESS;

 

 }

@@ -2785,3 +2755,30 @@
     return GSW_HAL_SUCCESS;

 }

 

+int gsw_reg_operating_mode_callback(GSW_NW_AirplaneModeHandlePtr handle_ptr)

+{

+    if (nw_init_flag == 0 || nw_info_handle == NULL)

+    {

+        return GSW_HAL_NORMAL_FAIL;

+    }

+   

+    if(handle_ptr == NULL)

+    {

+        LOGE("handle_ptr is NULL\n");

+        return GSW_HAL_NORMAL_FAIL;

+    }

+ 

+    airplane_cb = handle_ptr;

+ 

+    int ret = mbtk_radio_state_change_cb_reg(nw_info_handle,gsw_operating_mode_event_callback);

+    if(ret != 0)

+    {

+        LOGE("mbtk_radio_state_change_cb_reg failed : %d\n", ret);

+        airplane_cb=NULL;

+        return GSW_HAL_NORMAL_FAIL;

+    }

+ 

+    return GSW_HAL_SUCCESS;

+

+}

+

diff --git a/mbtk/test/libgsw_lib/gsw_nw_test.c b/mbtk/test/libgsw_lib/gsw_nw_test.c
index 9cfb040..b50dcf5 100755
--- a/mbtk/test/libgsw_lib/gsw_nw_test.c
+++ b/mbtk/test/libgsw_lib/gsw_nw_test.c
@@ -609,6 +609,8 @@
 typedef void (* GSW_NW_RejectCauseHandlePtr)(GSW_NW_REJ_CAUSE_E *rej_cause);
 typedef void (* GSW_HAL_NW_AIRPLANE_MODE_HANDLE_PTR)(int32_t airplane_mode);
 typedef void (* GSW_NW_ModemStateHandlePtr)(gsw_mode_state_e state);
+typedef void (* GSW_NW_AirplaneModeHandlePtr)(int airplane_mode);
+
 
 int (*gsw_reg_serving_info_callback)(GSW_NW_ServingInfoHandlePtr handle_ptr);
 int (*gsw_reg_sig_info_callback)(GSW_NW_SigInfoHandlePtr handle_ptr);
@@ -635,6 +637,8 @@
 int (*gsw_oos_config_set)(GSW_NW_OOS_CONFIG_INFO_T *pt_info);
 int (*gsw_get_imei)(int32_t len, int8_t *imei);
 int (*gsw_reset_modem)(void);
+int (*gsw_reg_operating_mode_callback)(GSW_NW_AirplaneModeHandlePtr handle_ptr);
+
 
 static int gsw_nw_api_import()
 {
@@ -794,6 +798,12 @@
         return GSW_HAL_FAIL;
     }
 
+    gsw_reg_operating_mode_callback = (int(*)(GSW_NW_AirplaneModeHandlePtr handle_ptr))dlsym(dlHandle_nw,"gsw_reg_operating_mode_callback");
+    if (gsw_reg_operating_mode_callback == NULL) {
+        printf("dlsym gsw_reg_operating_mode_callback fail\n");
+        return GSW_HAL_FAIL;
+    }
+
     return 0;
 
 }
@@ -850,6 +860,13 @@
     printf("state = %d\n", state);
 }
 
+static void gsw_operating_state_cb(int airplane_mode)
+{
+    printf("gsw_operating_state_cb: \n");
+    printf("airplane mode = %d\n", airplane_mode);
+}
+
+
 
 void dump_items()
 {
@@ -884,6 +901,7 @@
     printf("   23      gsw_oos_config_set\n");
     printf("   24      gsw_get_imei\n");
     printf("   25      gsw_reset modem\n");
+    printf("   26      gsw_reg_operating_mode_callback\n");
     printf("-------------------------------------------------------------------------\n");
 }
 
@@ -895,7 +913,7 @@
 
     ret = gsw_nw_api_import();
     if (ret != 0) {
-        printf("gsw_nw_api_import failed \n");
+        printf("gsw_nw_api_import failed, ret is %d\n",ret);
         return -1;
     }
     
@@ -939,7 +957,7 @@
             ret = gsw_get_nwinfo(nwinfo);
             if(ret != 0)
             {
-                printf("gsw_get_nwinfo failed \n");
+                printf("gsw_get_nwinfo failed, ret is %d\n",ret);
                 continue;
             }
             printf("nwinfo.reg_state = %d\nnwinfo.ps_state = %d\nnwinfo.reg_rat = %d\nnwinfo.srv_domain = %d\nnwinfo.roaming_ind = %d\nnwinfo.reg_plmn = %s\nnwinfo.operator_name = %s\nnwinfo.cell_id = %s\nnwinfo.lac = %s\nnwinfo.sid=%d\nnwinfo.nid = %d\n",nwinfo->reg_state, nwinfo->ps_state, nwinfo->reg_rat, nwinfo->srv_domain, nwinfo->roaming_ind, nwinfo->reg_plmn, nwinfo->operator_name, nwinfo->cell_id, nwinfo->lac, nwinfo->sid, nwinfo->nid);
@@ -952,7 +970,7 @@
             ret = gsw_get_netype(&nettype);
             if(ret != 0)
             {
-                printf("gsw_get_netype failed \n");
+                printf("gsw_get_netype failed, ret is %d\n",ret);
                 continue;
             }
             printf("nettype = %d\n", nettype);
@@ -965,7 +983,7 @@
             ret = gsw_get_opmode(&opmode);
             if(ret != 0)
             {
-                printf("gsw_get_opmode failed \n");
+                printf("gsw_get_opmode failed, ret is %d\n",ret);
                 continue;
             }
             printf("opmode = %d\n", opmode);
@@ -982,7 +1000,7 @@
             ret = gsw_set_opmode(opt);
             if(ret != 0)
             {
-                printf("gsw_set_opmode failed \n");
+                printf("gsw_set_opmode failed, ret is %d\n",ret);
                 continue;
             }
             break;
@@ -994,7 +1012,7 @@
             ret = gsw_get_mode_preference(&mode_pref);
             if(ret != 0)
             {
-                printf("gsw_get_mode_preference failed \n");
+                printf("gsw_get_mode_preference failed, ret is %d\n",ret);
                 continue;
             }
             printf("mode_pref = %d\n", mode_pref);
@@ -1011,7 +1029,7 @@
             ret = gsw_set_mode_preference(opt);
             if(ret != 0)
             {
-                printf("gsw_set_mode_preference failed \n");
+                printf("gsw_set_mode_preference failed, ret is %d\n",ret);
                 continue;
             }
             break;
@@ -1023,7 +1041,7 @@
             ret = gsw_get_sig_info(&siginfo);
             if(ret != 0)
             {
-                printf("gsw_get_sig_info failed \n");
+                printf("gsw_get_sig_info failed, ret is %d\n",ret);
                 continue;
             }
             printf("signal info: siginfo = %d\n", siginfo);
@@ -1040,7 +1058,7 @@
             ret = gsw_network_set_power_mode(opt);
             if(ret != 0)
             {
-                printf("gsw_network_set_power_mode failed \n");
+                printf("gsw_network_set_power_mode failed, ret is %d\n",ret);
                 continue;
             }
             break;
@@ -1076,7 +1094,7 @@
             ret = gsw_get_forbidden_networks(&fplmn_list);
             if(ret != 0)
             {
-                printf("gsw_get_forbidden_networks failed \n");
+                printf("gsw_get_forbidden_networks failed, ret is %d\n",ret);
                 continue;
             }
 
@@ -1099,7 +1117,7 @@
             ret = gsw_add_forbidden_networks(&fplmn_list_set);
             if(ret != 0)
             {
-                printf("gsw_add_forbidden_networks failed \n");
+                printf("gsw_add_forbidden_networks failed, ret is %d\n",ret);
                 continue;
             }
             printf("gsw_add_forbidden_networks end\n");
@@ -1116,7 +1134,7 @@
             ret = gsw_remove_forbidden_networks(&fplmn_list_remove);
             if(ret != 0)
             {
-                printf("gsw_add_forbidden_networks failed \n");
+                printf("gsw_add_forbidden_networks failed, ret is %d\n",ret);
                 continue;
             }
             printf("gsw_add_forbidden_networks end\n");
@@ -1129,7 +1147,7 @@
             ret = gsw_clear_forbidden_networks();
             if(ret != 0)
             {
-                printf("gsw_clear_forbidden_networks failed \n");
+                printf("gsw_clear_forbidden_networks failed, ret is %d\n",ret);
                 continue;
             }
             printf("gsw_clear_forbidden_networks end\n");
@@ -1143,7 +1161,7 @@
             ret = gsw_get_mobile_operator_name(&opname);
             if(ret != 0)
             {
-                printf("gsw_get_mobile_operator_name failed \n");
+                printf("gsw_get_mobile_operator_name failed, ret is %d\n",ret);
                 continue;
             }
 
@@ -1157,7 +1175,7 @@
             ret = gsw_reg_set_modem_status_event_callback(gsw_modem_status_cb);
             if(ret != 0)
             {
-                printf("gsw_reg_set_modem_status_event_callback failed \n");
+                printf("gsw_reg_set_modem_status_event_callback failed, ret is %d\n",ret);
                 continue;
             }
             printf("gsw_reg_set_modem_status_event_callback success\n");
@@ -1172,7 +1190,7 @@
             ret = gsw_get_cell_info(&cell_info);
             if(ret != 0)
             {
-                printf("gsw_get_cell_info failed \n");
+                printf("gsw_get_cell_info failed, ret is %d\n",ret);
                 continue;
             }
             
@@ -1287,7 +1305,7 @@
             ret = gsw_oos_config_get(&oos_cfg);
             if(ret != 0)
             {
-                printf("gsw_oos_config_get failed \n");
+                printf("gsw_oos_config_get failed, ret is %d\n",ret);
                 continue;
             }
 
@@ -1311,7 +1329,7 @@
             ret = gsw_oos_config_set(&oos_cfg);
             if(ret != 0)
             {
-                printf("gsw_oos_config_set failed \n");
+                printf("gsw_oos_config_set failed, ret is %d\n",ret);
                 continue;
             }
             else
@@ -1350,6 +1368,18 @@
             }
             break;
         }
+        case 26:
+        {
+            printf("gsw_reg_operating_mode_callback\n");
+            ret = gsw_reg_operating_mode_callback(gsw_operating_state_cb);
+            if(ret != 0)
+            {
+                printf("gsw_reg_operating_mode_callback failed, ret is %d\n",ret);
+                break;
+            }
+            printf("gsw_reg_operating_mode_callback success\n");
+            break;
+        }
         default:
         {
             continue;