[Bugfix][T108-GSW][bug-view-1583] gsw_get_cellinfo: miss info

    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: Ie1f0f9e6a9a7cf13627269a7063f8af5e92c06de
diff --git a/marvell/lte-telephony/apps/atcmd_server_ss/src/dev_api.c b/marvell/lte-telephony/apps/atcmd_server_ss/src/dev_api.c
index 16e728e..61e7357 100644
--- a/marvell/lte-telephony/apps/atcmd_server_ss/src/dev_api.c
+++ b/marvell/lte-telephony/apps/atcmd_server_ss/src/dev_api.c
@@ -12809,26 +12809,26 @@
 
             //phyCellId, euArfcn, rsrp, rsrq
 #ifdef MBTK_AT_SUPPORT
-			p += sprintf(p, "%d, %u, %d, %d, %d ", pLteEngmodeInterFreqInfoInd->interFreq[index].phyCellId,
+			p += sprintf(p, "%d, %u, %d, %d, %d", pLteEngmodeInterFreqInfoInd->interFreq[index].phyCellId,  //hq modify at 25/06/20
 					pLteEngmodeInterFreqInfoInd->interFreq[index].euArfcn,
 					pLteEngmodeInterFreqInfoInd->interFreq[index].rsrp,
 					pLteEngmodeInterFreqInfoInd->interFreq[index].rsrq,
 					pLteEngmodeInterFreqInfoInd->interFreq[index].cellId);
 #else
-			p += sprintf(p, "%u, %u, %u, %u", pLteEngmodeInterFreqInfoInd->interFreq[index].phyCellId,
+			p += sprintf(p, "%u, %u, %u, %u", pLteEngmodeInterFreqInfoInd->interFreq[index].phyCellId,  //hq modify at 25/06/20
 					pLteEngmodeInterFreqInfoInd->interFreq[index].euArfcn,
 					pLteEngmodeInterFreqInfoInd->interFreq[index].rsrp,
 					pLteEngmodeInterFreqInfoInd->interFreq[index].rsrq);
 #endif
 			//mcc, lenOfMnc, mnc, tac, cellId
-			p += sprintf(p, "%u, %u, %u, %u, %u", pLteEngmodeInterFreqInfoInd->interFreq[index].mcc,
+			p += sprintf(p, ", %u, %u, %u, %u, %u, ", pLteEngmodeInterFreqInfoInd->interFreq[index].mcc,  //hq modify at 25/06/20
 					pLteEngmodeInterFreqInfoInd->interFreq[index].lenOfMnc,
 					pLteEngmodeInterFreqInfoInd->interFreq[index].mnc,
 					pLteEngmodeInterFreqInfoInd->interFreq[index].tac,
 					pLteEngmodeInterFreqInfoInd->interFreq[index].cellId);
 
 			//srxlev, threshXLow, threshXHigh, cellReselectionPriority
-			p += sprintf(p, "%u, %u, %u, %u", pLteEngmodeInterFreqInfoInd->interFreq[index].srxlev,
+			p += sprintf(p, ", %u, %u, %u, %u", pLteEngmodeInterFreqInfoInd->interFreq[index].srxlev, //hq modify at 25/06/20
 					pLteEngmodeInterFreqInfoInd->interFreq[index].threshXLow,
 					pLteEngmodeInterFreqInfoInd->interFreq[index].threshXHigh,
 					pLteEngmodeInterFreqInfoInd->interFreq[index].cellReselectionPriority);
@@ -12839,7 +12839,7 @@
 			  conv_bandwidth = guldlbandwidth[pLteEngmodeInterFreqInfoInd->interFreq[index].dlBandwidth];
 
 			//refSignalPower, dlBandwidth, band, rssi
-			p += sprintf(p, "%d, %u, %u, %u", pLteEngmodeInterFreqInfoInd->interFreq[index].refSignalPower,
+			p += sprintf(p, ", %d, %u, %u, %u", pLteEngmodeInterFreqInfoInd->interFreq[index].refSignalPower,
 					conv_bandwidth,
 					pLteEngmodeInterFreqInfoInd->interFreq[index].band,
 					pLteEngmodeInterFreqInfoInd->interFreq[index].rssi);
diff --git a/mbtk/include/mbtk/mbtk_info_api.h b/mbtk/include/mbtk/mbtk_info_api.h
index 362b592..246ef3f 100755
--- a/mbtk/include/mbtk/mbtk_info_api.h
+++ b/mbtk/include/mbtk/mbtk_info_api.h
@@ -413,26 +413,34 @@
     MBTK_DISCONNECTED,

 } mbtk_call_enum;

 

-typedef struct

-{

-    // LTE server cell: tac, PCI, dlEuarfcn, ulEuarfcn, band

-    // LTE cell: phyCellId,euArfcn,rsrp,rsrq

-    // WCDMA server cell: lac, ci, arfcn

-    // WCDMA cell: lac, ci, arfcn

-    // GSM server cell: lac, ci, arfcn, bsic

+ typedef struct

+{
+    // NR server cell:
+    // NR cell:
+    // LTE server cell: tac, PCI, dlEuarfcn, ulEuarfcn, band
+    // LTE cell: phyCellId,euArfcn,rsrp,rsrq
+    // WCDMA server cell: lac, ci, arfcn
+    // WCDMA cell: lac, ci, arfcn
+    // GSM server cell: lac, ci, arfcn, bsic
     // GSM cell:

-    uint32 value1;

-    uint32 value2;

-    uint32 value3;

-    uint32 value4;

-    uint32 value5;

-	uint32 value6;

-    uint32 value7;

-    uint32 value8;

-    uint32 value9;

-    uint32 value10;

+    uint32 value1; //tac

+    uint32 value2; //pci

+    uint32 value3; //dlEuarfcn

+    uint32 value4; //bler

+    uint32 value5; //band

+	uint32 value6; //mcc

+    uint32 value7; //mnc

+    uint32 value8; //rsrp

+    uint32 value9; //rsrq

+    uint32 value10; //cell identiy

+    uint32 value11; //sinr

+    uint32 value12; //is tdd
+    uint32 value13;
+    uint32 value14;
+    uint32 value15;

 } __attribute__((packed)) mbtk_cell_info_t;

 

+

 typedef enum {

     MBTK_CALL_RADY,                 //MT allows commands from TA/TE

     MBTK_CALL_UNAVAILABLE,          //MT does not allow commands from TA/TE

@@ -818,14 +826,6 @@
     MBTK_ECALL_URC_ID_MSD_SEND_FAIL_FOR_NG  // NG-eCall fail to transfer MSD

 } mbtk_ecall_urc_id_enum;

 

-typedef struct{

-    uint8            cid; //cid number

-    bool             connect_state; //true: connect, false: disconnect;

-    bool             auto_urc; //urc generated by manual/auto dialing

-    uint8            pdp_result; //The cause of the dialing result 

-    mbtk_ipv4_info_t ipv4; //ipv4 info

-    mbtk_ipv6_info_t ipv6; //ipv6 info

-}mbtk_pdp_cb_info_s;

 

 int ipv6_2_str(const void *ipv6, void *ipv6_str);

 

diff --git a/mbtk/libgsw_lib/gsw_nw_interface.c b/mbtk/libgsw_lib/gsw_nw_interface.c
index c8853c0..147293c 100755
--- a/mbtk/libgsw_lib/gsw_nw_interface.c
+++ b/mbtk/libgsw_lib/gsw_nw_interface.c
@@ -91,28 +91,32 @@
 

 typedef struct

 {

+    // NR server cell:

+    // NR cell:

     // LTE server cell: tac, PCI, dlEuarfcn, ulEuarfcn, band

     // LTE cell: phyCellId,euArfcn,rsrp,rsrq

     // WCDMA server cell: lac, ci, arfcn

     // WCDMA cell: lac, ci, arfcn

     // GSM server cell: lac, ci, arfcn, bsic

     // GSM cell:

-    uint32 value1;

-    uint32 value2;

-    uint32 value3;

-    uint32 value4;

-    uint32 value5;

-    uint32 value6;

-    uint32 value7;

-    uint32 value8;

-    uint32 value9;

-    uint32 value10;

+    uint32 value1; //tac

+    uint32 value2; //pci

+    uint32 value3; //dlEuarfcn

+    uint32 value4; //bler

+    uint32 value5; //band

+    uint32 value6; //mcc

+    uint32 value7; //mnc

+    uint32 value8; //rsrp

+    uint32 value9; //rsrq

+    uint32 value10; //cell identiy

+    uint32 value11; //sinr

+    uint32 value12; //is tdd

+    uint32 value13;

+    uint32 value14;

+    uint32 value15;

 } __attribute__((packed)) mbtk_cell_info_t;

 

 

-

-

-

 typedef struct

 {

     uint8 net_pref;     // mbtk_net_pref_enum

@@ -302,11 +306,11 @@
 #define lib_mbtk_path "/lib/libmbtk_lib.so"

 mbtk_info_handle_t*       nw_info_handle = NULL;

 

-static GSW_NW_ServingInfoHandlePtr serving_cb;

-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 GSW_NW_ServingInfoHandlePtr serving_cb=NULL;

+static GSW_NW_SigInfoHandlePtr sig_cb=NULL;

+static GSW_NW_RejectCauseHandlePtr reject_cb=NULL;

+static GSW_NW_ModemStateHandlePtr modem_cb=NULL;

+static GSW_NW_AirplaneModeHandlePtr airplane_cb=NULL;

 

 static void *dlHandle_mbtk;

 int nw_init_flag = 0;

@@ -670,6 +674,20 @@
     }

 }

 

+static int32_t gsm_rssi_convert_to_dBm(uint8 rssi)

+{

+   if(rssi <= 31)

+    {

+        return rssi * 2 - 113;  //0 map -113

+                                //31 map -51

+    }

+    else

+    {

+        return INT_32_MAX;

+    }

+}

+

+

 static int32_t rscp_convert_to_minus_dBm(uint8 rscp)

 {

     if(rscp <= 96)

@@ -710,6 +728,46 @@
     }

 }

 

+static int32_t sinr_convert_to_10_times_dB(uint8 sinr)

+{

+    if(sinr <=35 && sinr>=-20)

+    {

+        return sinr*10;   //35 map 350 db

+                            // -20 map -2000 db

+    }

+    else 

+    {

+        return INT_32_MAX;

+    }

+}

+

+

+static int32_t rscp_minus_dbm_convert_to_rssi_dBm(int32_t rscp)

+{

+    if(rscp!=INT_32_MAX)

+    {

+        return -rscp;

+    }

+    else

+    {

+        return INT_32_MAX;

+    }

+}

+

+static int32_t rsrp_minus_dbm_convert_to_rssi_dBm(int32_t rsrp)

+{

+    if(rsrp!=INT_32_MAX)

+    {

+        return -rsrp;

+    }

+    else

+    {

+        return INT_32_MAX;

+    }

+}

+

+

+

 

 //int ecno;        /**< Valid values are positive integers.  This value is the actual Ec/Io multiplied

 //                      * by -10.  Example: If the actual Ec/Io is -12.5 dB, then this response value

@@ -1115,7 +1173,7 @@
             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->rssi =rsrpToLevel(signal->rsrp-141);

+            sig_strength->rssi = rsrp_minus_dbm_convert_to_rssi_dBm(sig_strength->rsrp);

             sig_strength->rssnr=INT_32_MAX;

             break;

         }

@@ -1129,7 +1187,7 @@
             sig_strength->wcdma_sig_valid = 1;

             sig_strength->rscp = rscp_convert_to_minus_dBm(signal->rscp);

             sig_strength->ecno = ecno_convert_to_minus_10_times_dB(signal->ecno);

-            sig_strength->rssi =rscpToLevel(signal->rscp-121);

+            sig_strength->rssi = rscp_minus_dbm_convert_to_rssi_dBm(sig_strength->rscp);   

             break;

         }

         case MBTK_RADIO_TECH_GSM:

@@ -1138,7 +1196,7 @@
         {

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

             sig_strength->gw_sig_valid = 1;

-            sig_strength->rssi = signal->rssi;

+            sig_strength->rssi = gsm_rssi_convert_to_dBm(signal->rssi);

             break;

         }

         default:

@@ -2144,7 +2202,6 @@
  */

 int gsw_get_cell_info(GSW_NW_CELL_INFO *cell_info)

 {

-    int ret = -1;

 

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

     {

@@ -2153,12 +2210,14 @@
     }

 

     list_node_t* cell_list = NULL;

-    int neibor_count = 0;

     mbtk_cell_type_enum type;

-    ret = mbtk_cell_get(nw_info_handle, &type, &cell_list);

+    int ret = mbtk_cell_get(nw_info_handle, &type, &cell_list);

     if(ret || cell_list == NULL) {

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

+        list_free(cell_list);

+        return GSW_HAL_NORMAL_FAIL;

     } else {

+        memset(cell_info,0,sizeof(GSW_NW_CELL_INFO));

         list_first(cell_list);

         mbtk_cell_info_t* cell = (mbtk_cell_info_t*) list_next(cell_list);

         if(cell) { // Current server cell.

@@ -2167,7 +2226,7 @@
                 case 0:

                 {

                     LOGD("GSM : lac=%d, ci=%d, arfcn=%d, bsic=%d\n", cell->value1, cell->value2, cell->value3, cell->value4);

-                    char gsm_temp[12] = {0};

+                    char gsm_temp[12];

 

                     cell_info->rat = GSW_NETWORK_RADIO_GSM;

 

@@ -2196,7 +2255,7 @@
                 case 1:

                 {

                     LOGD("UMTS : lac=%d, ci=%d, arfcn=%d\n", cell->value1, cell->value2, cell->value3);

-                    char wcdma_temp[12] = {0};

+                    char wcdma_temp[12];

 

                     cell_info->rat = GSW_NETWORK_RADIO_UMTS;

 

@@ -2227,17 +2286,14 @@
                 case 2:

                 {

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

-                    

-                    char lte_temp[12] = {0};

 

+                    char lte_temp[12];

                     cell_info->rat = GSW_NETWORK_RADIO_LTE;

 

                     cell_info->mcc_valid = 1;

                     snprintf(lte_temp, sizeof(lte_temp) ,"%X", cell->value6);

                     strncpy(cell_info->mcc, lte_temp, sizeof(cell_info->mcc));

 

-                    memset(lte_temp, 0, sizeof(lte_temp));

-

                     cell_info->mnc_valid = 1;

                     snprintf(lte_temp, sizeof(lte_temp) ,"%X", cell->value7);

                     strncpy(cell_info->mnc, lte_temp, sizeof(cell_info->mnc));

@@ -2257,15 +2313,25 @@
                     cell_info->band_valid = 1;

                     cell_info->band = cell->value5;

 

-                    cell_info->rsrp_valid = 1;

-                    cell_info->rsrp = cell->value8;

+                    cell_info->rssnr = sinr_convert_to_10_times_dB(cell->value11);

+                    cell_info->rssnr_valid=(cell_info->rssnr!=INT_32_MAX);

 

-                    cell_info->rsrq_valid = 1;

-                    cell_info->rsrq = cell->value9;

+                    cell_info->lteMode_valid = 1;

+                    cell_info->lteMode =(!(cell->value12));            

+

+                    

+                    cell_info->rsrp = rsrp_convert_to_minus_dBm(cell->value8);

+                    cell_info->rsrp_valid = (cell_info->rsrp!=INT_32_MAX);

+

+                    cell_info->rsrq = rsrq_convert_to_minus_dB(cell->value9);

+                    cell_info->rsrq_valid = (cell_info->rsrq!=INT_32_MAX);

 

                     cell_info->cell_id_valid = 1;

                     cell_info->cell_id = cell->value10;

 

+                    cell_info->rssi=rsrp_minus_dbm_convert_to_rssi_dBm(cell_info->rsrp);

+                    cell_info->rssi_valid = (cell_info->rssi!=INT_32_MAX);

+

                     break;

                 }

 

@@ -2273,7 +2339,7 @@
                     break;

             }

         }

-

+        int neibor_count = 0;

         while ((cell = (mbtk_cell_info_t*) list_next(cell_list)) && neibor_count < 5)

         {

             switch(type)

@@ -2308,34 +2374,40 @@
                     char lte_temp[12] = {0};

                     cell_info->ext_info[neibor_count].rat = GSW_NETWORK_RADIO_LTE;

 

-                    snprintf(lte_temp, sizeof(lte_temp) ,"%X", cell->value6);

-                    strncpy(cell_info->ext_info[neibor_count].mcc, lte_temp, sizeof(cell_info->mcc));

-

-                    memset(lte_temp, 0, sizeof(lte_temp));

-

-                    snprintf(lte_temp, sizeof(lte_temp) ,"%X", cell->value7);

-                    strncpy(cell_info->ext_info[neibor_count].mnc, lte_temp, sizeof(cell_info->mnc));

-

+                 

                     cell_info->ext_info[neibor_count].pci = cell->value1;

                     cell_info->ext_info[neibor_count].pci_valid = 1;

 

                     cell_info->ext_info[neibor_count].arfcn = cell->value2;

                     cell_info->ext_info[neibor_count].arfcn_valid = 1;

 

-                    cell_info->ext_info[neibor_count].rsrp = cell->value3;

-                    cell_info->ext_info[neibor_count].rsrp_valid = 1;

+                    cell_info->ext_info[neibor_count].rsrp = rsrp_convert_to_minus_dBm(cell->value3);

+                    cell_info->ext_info[neibor_count].rsrp_valid = (cell_info->ext_info[neibor_count].rsrp!=INT_32_MAX);

 

-                    cell_info->ext_info[neibor_count].rsrq = cell->value4;

-                    cell_info->ext_info[neibor_count].rsrq_valid = 1;

+                    cell_info->ext_info[neibor_count].rsrq = rsrq_convert_to_minus_dB(cell->value4);

+                    cell_info->ext_info[neibor_count].rsrq_valid = (cell_info->ext_info[neibor_count].rsrq!=INT_32_MAX);                 

+                    

+                    if(cell->value7!=INT_32_MAX)

+                    {

+                          cell_info->ext_info[neibor_count].cell_id = cell->value5;

+                          cell_info->ext_info[neibor_count].cell_id_valid = 1;

+                          

+                          snprintf(lte_temp, sizeof(lte_temp) ,"%X", cell->value6);

+                          strncpy(cell_info->ext_info[neibor_count].mcc, lte_temp, sizeof(cell_info->ext_info[neibor_count].mcc));

 

-                    cell_info->ext_info[neibor_count].cell_id = cell->value5;

-                    cell_info->ext_info[neibor_count].cell_id_valid = 1;

 

-                    cell_info->ext_info[neibor_count].band = cell->value9;

-                    cell_info->ext_info[neibor_count].band_valid = 1;

+                          snprintf(lte_temp, sizeof(lte_temp) ,"%X", cell->value7);

+                          strncpy(cell_info->ext_info[neibor_count].mnc, lte_temp, sizeof(cell_info->ext_info[neibor_count].mnc));

+                         

+                          

+                          //value 8 is tac

 

-                    cell_info->ext_info[neibor_count].rssi = cell->value10;

-                    cell_info->ext_info[neibor_count].rssi_valid = 1;

+                          cell_info->ext_info[neibor_count].band = cell->value9;

+                          cell_info->ext_info[neibor_count].band_valid = 1;

+

+                          cell_info->ext_info[neibor_count].rssi=rsrp_minus_dbm_convert_to_rssi_dBm(cell_info->ext_info[neibor_count].rsrp);

+                          cell_info->ext_info[neibor_count].rssi_valid = (cell_info->ext_info[neibor_count].rssi!=INT_32_MAX);

+                    }

 

                     neibor_count++;

                 }

@@ -2344,6 +2416,7 @@
                     break;

             }

         }

+        cell_info->ext_info_len=neibor_count;

     }

     list_free(cell_list);

 

diff --git a/mbtk/test/libgsw_lib/gsw_nw_test.c b/mbtk/test/libgsw_lib/gsw_nw_test.c
index 5082226..67c43b8 100755
--- a/mbtk/test/libgsw_lib/gsw_nw_test.c
+++ b/mbtk/test/libgsw_lib/gsw_nw_test.c
@@ -86,29 +86,36 @@
 
 typedef struct
 {
+    // NR server cell:
+    // NR cell:
     // LTE server cell: tac, PCI, dlEuarfcn, ulEuarfcn, band
     // LTE cell: phyCellId,euArfcn,rsrp,rsrq
     // WCDMA server cell: lac, ci, arfcn
     // WCDMA cell: lac, ci, arfcn
     // GSM server cell: lac, ci, arfcn, bsic
     // GSM cell:
-    mbtk_cell_type_enum type : 8;
     uint32 value1; //tac
     uint32 value2; //pci
     uint32 value3; //dlEuarfcn
-    uint32 value4; //ul arfcn
+    uint32 value4; //bler
     uint32 value5; //band
-	uint32 value6; //mcc
+    uint32 value6; //mcc
     uint32 value7; //mnc
-    uint32 value8; //cid
-    uint32 value9; //rsrp
+    uint32 value8; //rsrp
+    uint32 value9; //rsrq
     uint32 value10; //cell identiy
+    uint32 value11; //sinr
+    uint32 value12; //is tdd
+    uint32 value13;
+    uint32 value14;
+    uint32 value15;
 } __attribute__((packed)) mbtk_cell_info_t;
 
 
 
 
 
+
 typedef struct
 {
     uint8 net_pref;     // mbtk_net_pref_enum
@@ -581,8 +588,8 @@
 
     unsigned char   bler_valid;
     int             bler;           /*bit error rate*/
-
-    GSW_NW_CELL_EXT_INFO ext_info[MAX_CELL_EXT_INFO];   /* Used to hold neighborhood information for service cells. */
+    int ext_info_len;   /**<ext_info len*/
+    GSW_NW_CELL_EXT_INFO ext_info[MAX_CELL_EXT_INFO];
 } GSW_NW_CELL_INFO;
 
 typedef struct {
@@ -807,7 +814,7 @@
     return 0;
 
 }
-
+    
 static void gsw_serving_info_callback(GSW_NW_SERVING_INFO serving_info)
 {
     printf("gsw_serving_info_callback: \n");
@@ -960,7 +967,7 @@
                 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);
+            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.tac = %s\nwinfo.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->tac,nwinfo->lac, nwinfo->sid, nwinfo->nid);
             free(nwinfo);
             break;
         }
@@ -1243,15 +1250,13 @@
 
             printf("-------------------------------------inter cell info ------------------------------\n");
 
-            for(int i = 0; i <MAX_CELL_EXT_INFO ; i++)
+            printf("ext_info_len = %d\n",cell_info.ext_info_len);
+
+            for(int i = 0; i <cell_info.ext_info_len ; i++)
             {
                 printf("-----------------------------------------------------------\n");
                 printf("inter cell info[%d] rat = %d\n",i,cell_info.ext_info[i].rat);
 
-                printf("inter cell info[%d] mcc = %s\n",i,cell_info.ext_info[i].mcc);
-
-                printf("inter cell info[%d] mnc = %s\n",i,cell_info.ext_info[i].mnc);
-
                 printf("inter cell info[%d] pci_valid = %d\n",i,cell_info.ext_info[i].pci_valid);
                 printf("inter cell info[%d] pci = %d\n",i,cell_info.ext_info[i].pci);
 
@@ -1264,12 +1269,19 @@
                 printf("inter cell info[%d] rsrq_valid = %d\n",i,cell_info.ext_info[i].rsrq_valid);
                 printf("inter cell info[%d] rsrq = %d\n",i,cell_info.ext_info[i].rsrq);
 
+                printf("inter cell info[%d] mcc = %s\n",i,cell_info.ext_info[i].mcc);
+
+                printf("inter cell info[%d] mnc = %s\n",i,cell_info.ext_info[i].mnc);
+
                 printf("inter cell info[%d] cell_id_valid = %d\n",i,cell_info.ext_info[i].cell_id_valid);
                 printf("inter cell info[%d] cell_id = %u\n",i,cell_info.ext_info[i].cell_id);
 
                 printf("inter cell info[%d] band_valid = %d\n",i,cell_info.ext_info[i].band_valid);
                 printf("inter cell info[%d] band = %u\n",i,cell_info.ext_info[i].band);
 
+                printf("inter cell info[%d] rssi_valid = %d\n",i,cell_info.ext_info[i].rssi_valid);
+                printf("inter cell info[%d] rssi = %d\n",i,cell_info.ext_info[i].rssi);
+
                 printf("-----------------------------------------------------------\n");
             }