Fix mbtk from v1265 GSW

Change-Id: I5d8d395616f284bc74c8b9448cfa347164b5a668
diff --git a/mbtk/test/libgsw_lib/gsw_nw_test.c b/mbtk/test/libgsw_lib/gsw_nw_test.c
new file mode 100755
index 0000000..9fc90b1
--- /dev/null
+++ b/mbtk/test/libgsw_lib/gsw_nw_test.c
@@ -0,0 +1,1318 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <dlfcn.h>
+#include <stdint.h>
+#include <string.h>
+#include <pthread.h>
+
+//mbtk include
+#define LYNQ_AIR_PLANE_MODE_ON      4    //at+cfun = 4
+#define LYNQ_AIR_PLANE_MODE_OFF     1   // at+cfun = 1
+
+
+#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
+
+#ifndef FALSE
+#define FALSE   (0)
+#endif
+ 
+ 
+#ifndef TRUE
+#define TRUE    (!FALSE)
+#endif
+
+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 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 enum
+{
+    MBTK_CELL_TYPE_GSM = 0,
+    MBTK_CELL_TYPE_UMTS,
+    MBTK_CELL_TYPE_LTE
+} mbtk_cell_type_enum;
+
+typedef struct
+{
+    MBTK_DEV_MODEM_FUNCTION fun;
+    int rst;
+} mbtk_modem_info_t;
+
+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 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
+    // GSM cell:
+    mbtk_cell_type_enum type : 8;
+    uint32 value1; //tac
+    uint32 value2; //pci
+    uint32 value3; //dlEuarfcn
+    uint32 value4; //ul arfcn
+    uint32 value5; //band
+	uint32 value6; //mcc
+    uint32 value7; //mnc
+    uint32 value8; //cid
+    uint32 value9; //rsrp
+    uint32 value10; //cell identiy
+} __attribute__((packed)) mbtk_cell_info_t;
+
+
+
+
+
+typedef struct
+{
+    uint8 net_pref;     // mbtk_net_pref_enum
+    uint16 gsm_band;    // mbtk_gsm_band_enum
+    uint16 umts_band;   // mbtk_umts_band_enum
+    uint32 tdlte_band;  // mbtk_tdlte_band_enum
+    uint32 fddlte_band; // mbtk_fddlte_band_enum
+    uint32 lte_ext_band; // mbtk_lte_ext_band_enum
+} __attribute__((packed)) mbtk_band_info_t;
+
+typedef struct list_arraynode
+{
+    void *data;
+    struct list_arraynode *next;
+} list_arraynode_t;
+
+typedef struct list_treenode
+{
+    list_arraynode_t *data;
+    int count;
+    struct list_treenode *left;
+    struct list_treenode *right;
+} list_treenode_t;
+
+typedef int (*list_sort_func)(void *data1, void *data2);
+typedef void (*list_free_func)(void *data);
+
+typedef struct list_node
+{
+    uint32 size;
+    list_sort_func sort_func;
+    list_free_func free_func;
+
+    uint32 cur_index;
+    list_arraynode_t *cur_array_data;
+
+    list_arraynode_t array_data;
+    list_treenode_t tree_data;
+} list_node_t;
+
+/*
+0: GSM
+1: GSM Compact
+2: UTRAN
+3: GSM w/EGPRS
+4: UTRAN w/HSDPA
+5: UTRAN w/HSUPA
+6: UTRAN w/HSDPA and HSUPA
+7: E-UTRAN
+8: UTRAN HSPA+
+*/
+typedef enum {
+    MBTK_RADIO_TECH_GSM = 0,
+    MBTK_RADIO_TECH_GSM_COMPACT,
+    MBTK_RADIO_TECH_UTRAN,
+    MBTK_RADIO_TECH_GSM_EGPRS,
+    MBTK_RADIO_TECH_UTRAN_HSDPA,
+    MBTK_RADIO_TECH_UTRAN_HSUPA,
+    MBTK_RADIO_TECH_UTRAN_HSDPA_HSUPA,
+    MBTK_RADIO_TECH_E_UTRAN,      // LTE
+    MBTK_RADIO_TECH_UTRAN_HSPA
+} mbtk_radio_technology_enum;
+
+typedef struct
+{
+    /*
+    0: automatic
+    1: manual
+    */
+    uint8 net_sel_mode;
+    /*
+    0: GSM
+    1: GSM Compact
+    2: UTRAN
+    3: GSM w/EGPRS
+    4: UTRAN w/HSDPA
+    5: UTRAN w/HSUPA
+    6: UTRAN w/HSDPA and HSUPA
+    7: E-UTRAN
+    8: UTRAN HSPA+
+    0xFF: Unused
+    */
+    uint8 net_type;
+    //uint8 plmn[10]; // 46000
+    /*
+    0: unknown
+    1: available
+    2: current
+    3: forbidden
+    */
+    uint8 net_state;
+    uint32 plmn;
+} __attribute__((packed)) mbtk_net_info_t;
+
+
+typedef enum
+{
+    MBTK_NET_REG_STATE_NON = 0,
+    MBTK_NET_REG_STATE_HOME,
+    MBTK_NET_REG_STATE_SEARCHING,
+    MBTK_NET_REG_STATE_DENIED,
+    MBTK_NET_REG_STATE_UNKNOWN,
+    MBTK_NET_REG_STATE_ROAMING,
+    MBTK_NET_REG_STATE_SMS_ONLY,
+    MBTK_NET_REG_STATE_ROAMING_SMS,
+    MBTK_NET_REG_STATE_ATTACHED_EMERGENCY,
+    MBTK_NET_REG_STATE_CSFB_HOME,
+    MBTK_NET_REG_STATE_CSFB_ROAMING,
+    MBTK_NET_REG_STATE_EMERGENCY_ONLY
+} mbtk_net_reg_state_enum;
+
+typedef struct
+{
+    uint8 call_state;// mbtk_net_reg_state_enum
+    uint8 data_state;// mbtk_net_reg_state_enum
+    uint8 ims_state;// mbtk_net_reg_state_enum
+    uint8 type; // mbtk_radio_technology_enum
+    uint16 lac;
+    uint32 ci;
+} __attribute__((packed)) mbtk_net_reg_info_t;
+
+typedef struct
+{
+    uint8 type; // mbtk_radio_technology_enum
+    uint8 rssi; // 0: 113 dBm or less
+                // 1: 111 dBm
+                // 2��30: 109��53 dBm
+                // 31: 51 dBm or greater
+                // 99: not known or not detectable
+    uint8 rxlev;// 0:rssi < -110 dBm
+                // 1: -110 dBm �� rssi < -109 dBm
+                // 2: -109 dBm �� rssi < -108 dBm
+                // ......
+                // 61: -50 dBm �� rssi < -49 dBm
+                // 62: -49 dBm �� rssi < -48 dBm
+                // 63: -48 dBm �� rssi
+                // 99: not known or not detectable
+    uint8 ber;  // 0...7 as RXQUAL values in the table in 3GPP TS 45.008 [20] subclause 8.2.4
+                // 99 not known or not detectable
+    uint8 rscp; // 0: rscp < -120 dBm
+                // 1: -120 dBm �� rscp < -119 dBm
+                // 2: -119 dBm �� rscp < -118 dBm
+                // ......
+                // 94: -27 dBm �� rscp < -26 dBm
+                // 95: -26 dBm �� rscp < -25 dBm
+                // 96: - 25 dBm �� rscp
+                // 255: not known or not detectable
+    uint8 ecno; // 0: Ec/Io < -24 dB
+                // 1: -24 dB �� Ec/Io < -23.5 dB
+                // 2: -23.5 dB �� Ec/Io < -23 dB
+                // ......
+                // 47: -1 dB �� Ec/Io < -0.5 dB
+                // 48: -0.5 dB �� Ec/Io < 0 dB
+                // 49: 0 dB �� Ec/Io
+                // 255: not known or not detectable
+    uint8 rsrq; // 0: rsrq < -19.5 dB
+                // 1: -19.5 dB �� rsrq < -19 dB
+                // 2: -19 dB �� rsrq < -18.5 dB
+                // ......
+                // 32: -4 dB �� rsrq < -3.5 dB
+                // 33: -3.5 dB �� rsrq < -3 dB
+                // 34: -3 dB �� rsrq
+                // 255: not known or not detectable
+    uint8 rsrp; // 0: rsrp < -140 dBm
+                // 1: -140 dBm �� rsrp < -139 dBm
+                // 2: -139 dBm �� rsrp < -138 dBm
+                // ......
+                // 95: -46 dBm �� rsrp < -45 dBm
+                // 96: -45 dBm �� rsrp < -44 dBm
+                // 97: -44 dBm �� rsrp
+                // 255: not known or not detectable
+} __attribute__((packed)) mbtk_signal_info_t;
+
+#define lib_gsw_nw_path "/lib/libgsw_lib.so"
+static void *dlHandle_nw = NULL;
+
+//gsw include
+
+
+#define GSW_HAL_SUCCESS 0
+#define GSW_HAL_FAIL -1
+#define GSW_HAL_MEM_INVAILD -2
+#define GSW_NW_OPERATION_NAME_LEN 128
+#define GSW_NW_PLMN_LEN 6
+#define GSW_NW_MCC_LEN 3
+#define GSW_NW_MNC_LEN 3
+#define GSW_NW_PARA_MAX_LEN 128
+#define GSW_MCC_MAX_LEN 16
+#define GSW_MNC_MAX_LEN 16
+#define GSW_APN_CHANNEL_MAX 10
+#define GSW_POXY_ADDR_MAX_LEN 64
+#define GSW_PDP_TYPE_MAX_LEN 16
+#define GSW_APN_MAX_LEN 65
+#define GSW_APN_ID_MAX_LEN 32
+#define GSW_APN_TYPE_MAX_LEN 50
+#define GSW_USR_MAX_LEN 16
+#define GSW_PWD_MAX_LEN 16
+#define GSW_AUTH_TYPE_MAX_LEN 50
+#define GSW_PROTOCO_MAX_LEN 64
+#define GSW_CARRIER_ID_MAX_LEN 64
+#define GSW_IFACE_NAME_MAX_LEN 50
+#define GSW_PDP_ADDR_MAX_LEN 64
+#define GSW_DNS_APN_MAX_LEN 64
+#define GSW_GETWAYS_ADDR_MAX_LEN 64
+#define GSW_RSP_MAX_LEN 256
+#define GSW_PLMN_LIST_MAX_LEN 85
+
+
+
+typedef enum service_domain
+{
+    GSW_SRV_DOMAIN_NO_SVC       = 0x0,   /**< no service */
+    GSW_SRV_DOMAIN_CS_ONLY      = 0x1,   /**< cs only */
+    GSW_SRV_DOMAIN_PS_ONLY      = 0x2,   /**< ps only */
+    GSW_SRV_DOMAIN_CS_PS        = 0x3,   /**< reg all in service */
+} GSW_SERVICE_DOMAIN_E;
+
+typedef enum gsw_network_reg_state
+{
+    GSW_NETWORK_REG_NOT_REGISTERED           = 0x0,   /**< no service */
+    GSW_NETWORK_REG_REGISTERED               = 0x1,   /**< reg in service home */
+    GSW_NETWORK_REG_NOT_REGISTERED_SEARCHING = 0x2,   /**< searching network */
+    GSW_NETWORK_REG_REGISTRATION_DENIED      = 0x3,   /**< network denny device */
+    GSW_NETWORK_REG_REGISTRATION_UNKNOWN     = 0x4,   /**< unknown state */
+    GSW_NETWORK_REG_REGISTRATION_ROAMING     = 0x5,   /**< roaming state  in service */
+    GSW_NETWORK_REG_LIMITED_SERVICE     = 0x6,   /**< limited service */
+} GSW_NW_REG_STATE_E;
+
+typedef enum gsw_network_radio_interface
+{
+    GSW_NETWORK_RADIO_NO_SVC            = 0x0,   /**< radio state no service */
+    GSW_NETWORK_RADIO_CDMA_1X           = 0x1,   /**< cdma 1x */
+    GSW_NETWORK_RADIO_CDMA_1XEVDO       = 0x2,   /**< cdma evdo */
+    GSW_NETWORK_RADIO_AMPS              = 0x3,   /**< amps gsm 2g*/
+    GSW_NETWORK_RADIO_GSM               = 0x4,   /**< gsm */
+    GSW_NETWORK_RADIO_UMTS              = 0x5,   /**< umts wcdma*/
+    GSW_NETWORK_RADIO_LTE               = 0x6,   /**< LTE 4G */
+    GSW_NETWORK_RADIO_TDSCDMA           = 0x7,   /**< TDS 3G*/
+    GSW_NETWORK_RADIO_NR5G              = 0x8,   /**< NR 5G*/
+} GSW_NW_RADIO_ACCESS_TECH_E;
+
+
+typedef enum gsw_network_roaming_state
+{
+    GSW_NETWORK_ROAMING_OFF      = 0x0,   /**< roaming off */
+    GSW_NETWORK_ROAMING_ON       = 0x1,   /**< roaming on*/
+} GSW_NW_ROAMING_STATE_E;
+
+typedef enum oprate_mode
+{
+    GSW_OP_MODE_LPM    = 0,   /**< radio state off*/
+    GSW_OP_MODE_ONLINE = 1,   /**< radio state on*/
+    GSW_OP_MODE_FTM    = 2,   /**< radio state ftm*/
+    GSW_OP_MODE_OFFLINE = 3,   /**< radio state offline*/
+} OPERATE_MODE_E;
+
+typedef enum prefer_mode
+{
+    GSW_PREFER_MODE_GSW    = 1,   /**<2G only*/
+    GSW_PREFER_MODE_WCDMA    = 2,   /**< 3G only*/ 
+    GSW_PREFER_MODE_WCDMA_GSM    = 3,   /**< 3G/2G*/
+    GSW_PREFER_MODE_LTE    = 4,   /**< 4G only*/
+    GSW_PREFER_MODE_NR5G    = 5,   /**< 5G only*/
+    GSW_PREFER_MODE_NR5G_LTE    = 8,   /**< 5G/4G*/
+    GSW_PREFER_MODE_LTE_WCDMA_GSM    = 9,   /**< 4G/3G/2G*/
+    GSW_PREFER_MODE_NR5G_LTE_WCDMA_GSM    = 32,   /**<  5G/4G/3G/2G*/
+} PREFER_MODE_E;
+
+typedef enum gsw_hal_nw_mode_state_type
+{
+    GSW_MODEM_STATE_UNKNOWN = 0,
+    GSW_MODEM_STATE_ONLINE,
+    GSW_MODEM_STATE_OFFLINE,
+    GSW_SDK_STATE_SERVICE_DOWN,
+    GSW_SDK_STATE_SERVICE_UP,// service down->up 需要routectl 重启
+    GSW_SDK_STATE_GPS_DOWN,
+    GSW_SDK_STATE_GPS_UP,
+} gsw_mode_state_e;
+
+
+typedef struct
+{
+    GSW_NW_RADIO_ACCESS_TECH_E   rej_rat;   /**< current network radio tech*/
+    GSW_SERVICE_DOMAIN_E         rej_domain;   /**< reject code from ps or cs*/
+    int                          rej_cause;   /**< reject code number*/
+} GSW_NW_REJ_CAUSE_E;
+
+typedef struct
+{
+    int32_t gw_sig_valid; /**< 1 valid,1 invalid*/
+    int32_t rssi;         /**< Valid values are (0-31, 99) as defined in TS 27.007 8.5 */
+    int32_t wcdma_sig_valid;/**< 1 valid,0 invalid*/
+    int32_t rscp;        /**< The Received Signal Code Power in dBm multipled by -1.
+                      * Range : 25 to 120
+                      * INT_MAX: 0x7FFFFFFF denotes invalid value.
+                      * Reference: 3GPP TS 25.123, section 9.1.1.1 */
+    int32_t 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
+                      * will be 125.*/
+    int32_t lte_sig_valid;/**< 1 valid,0 invalid*/
+    int32_t rsrp;        /**< The current Reference Signal Receive Power in dBm multipled by -1.
+                      * Range: 44 to 140 dBm
+                      * INT_MAX: 0x7FFFFFFF denotes invalid value.
+                      * Reference: 3GPP TS 36.133 9.1.4 */
+    int32_t rsrq;        /**< The current Reference Signal Receive Quality in dB multiplied by -1.
+                      * Range: 20 to 3 dB.
+                      * INT_MAX: 0x7FFFFFFF denotes invalid value.
+                      * Reference: 3GPP TS 36.133 9.1.7 */
+    int32_t rssnr;       /**< The current reference signal signal-to-noise ratio in 0.1 dB units.
+                      * Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB).
+                      * INT_MAX : 0x7FFFFFFF denotes invalid value.
+                      * Reference: 3GPP TS 36.101 8.1.1 */
+    int32_t nr_sig_valid;/**<1 valid,0 invalid*/
+    int32_t ssRsrp;      /**< SS(Synchronization Signal) reference signal received power, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [44, 140], INT_MAX means invalid/unreported.*/
+    int32_t ssRsrq;      /**< SS reference signal received quality, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [3, 20], INT_MAX means invalid/unreported.*/
+    int32_t ssSinr;      /**< SS signal-to-noise and interference ratio.
+                      * Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
+                      * Range [-23, 40], INT_MAX means invalid/unreported.*/
+    int32_t csiRsrp;     /**< CSI reference signal received power, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [44, 140], INT_MAX means invalid/unreported.*/
+    int32_t csiRsrq;     /**< CSI reference signal received quality, multipled by -1.
+                      * Reference: 3GPP TS 38.215.
+                      * Range [3, 20], INT_MAX means invalid/unreported.*/
+    int32_t csiSinr;     /**< CSI signal-to-noise and interference ratio.
+                      * Reference: 3GPP TS 138.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
+                      * Range [-23, 40], INT_MAX means invalid/unreported.*/
+} signalStrength_t;
+
+typedef struct
+{
+    GSW_NW_REG_STATE_E           reg_state;   /**< network cs regstate*/
+    GSW_NW_REG_STATE_E           ps_state;   /**< network ps regstate*/
+    GSW_NW_RADIO_ACCESS_TECH_E   reg_rat;   /**< current radio state*/
+    GSW_SERVICE_DOMAIN_E         srv_domain;   /**< current cs or ps state*/
+    GSW_NW_ROAMING_STATE_E       roaming_ind;   /**< roaming state*/
+    char                         reg_plmn[GSW_NW_PLMN_LEN + 1];   /**< current cell plmn*/
+    char                         operator_name[GSW_NW_OPERATION_NAME_LEN + 1];   /**< operator name*/
+    char                         cell_id[128];   /**< cell id*/
+    char                         tac[128];   /**< cell tac*/
+    char                         lac[128];   /**< cell lac*/
+    int                          sid;   /**< cell sid cdma*/
+    int                          nid;   /**< cell nid cdma*/
+} GSW_NW_SERVING_INFO;
+
+
+typedef struct
+{
+       char long_eons[128];     /* Full name of the operator*/
+       char short_eons[128];      /* Shor name of the operator*/
+       char mcc[4];        /* Mobile country code*/
+       char mnc[4];        /* Mobile network code*/
+}gsw_mobile_operator_name;
+
+#define MAX_CELL_EXT_INFO           (5)
+
+typedef struct
+{
+    unsigned char   cell_id_valid;
+    unsigned char   pci_valid;
+    unsigned char   psc_valid;
+    unsigned char   band_valid;
+    unsigned char   arfcn_valid;
+    unsigned char   rssi_valid;
+    unsigned char   rsrp_valid;
+    unsigned char   rsrq_valid;
+    unsigned char   sinr_valid;
+    unsigned char   rscp_valid;
+    unsigned char   ecio_valid;
+    GSW_NW_RADIO_ACCESS_TECH_E   rat;
+    unsigned int    cell_id;
+    int             pci;
+    int             psc;
+    int             band;
+    int             arfcn;
+    int             rssi;
+    int             rsrp;
+    int             rsrq;
+    int             sinr;
+    int             rscp;
+    int             ecio;
+    char            mcc[5];
+    char            mnc[5];
+} GSW_NW_CELL_EXT_INFO;
+
+typedef struct
+{
+    GSW_NW_RADIO_ACCESS_TECH_E   rat;   /**< current radio state*/
+
+    unsigned char   mcc_valid;
+    char            mcc[5];
+
+    unsigned char   mnc_valid;
+    char            mnc[5];
+
+    unsigned char   cell_id_valid;
+    unsigned int    cell_id;        /**< cell id*/
+
+    unsigned char   pci_valid;
+    int             pci;            /**<physical cell id*/
+
+    unsigned char   psc_valid;
+    int             psc;            /*wcdma primary scramble code*/
+
+    unsigned char   nrarfcn_valid;
+    int             nrarfcn;         /*nr cell freq*/
+
+    unsigned char   earfcn_valid;
+    int             earfcn;         /*lte cell freq*/
+
+    unsigned char   uarfcn_valid;
+    int             uarfcn;         /*wcdma cell freq*/
+
+    unsigned char   arfcn_valid;
+    int             arfcn;          /*gsw cell freq*/
+
+    unsigned char   tac_valid;
+    unsigned int    tac;            /**< cell tac*/
+
+    unsigned char   lac_valid;
+    unsigned int    lac;            /**< cell lac*/
+
+    unsigned char   sid_valid;
+    int             sid;            /**< cell sid cdma*/
+
+    unsigned char   nid_valid;
+    int             nid;            /**< cell nid cdma*/
+
+    unsigned char   lteMode_valid;
+    int             lteMode;        /*tdd 0, fdd 1*/
+
+    unsigned char   rssi_valid;
+    int             rssi;           /**< Valid values are (0-31, 99) as defined in TS 27.007 8.5 */
+
+    unsigned char   rscp_valid;
+    int             rscp;           /**< The Received Signal Code Power in dBm multipled by -1.
+                                      * Range : 25 to 120
+                                      * INT_MAX: 0x7FFFFFFF denotes invalid value.
+                                      * Reference: 3GPP TS 25.123, section 9.1.1.1 */
+
+    unsigned char   ecio_valid;
+    int             ecio;           /**< 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
+                                      * will be 125.*/
+
+    unsigned char   rsrp_valid;
+    int             rsrp;           /**< The current Reference Signal Receive Power in dBm multipled by -1.
+                                      * Range: 44 to 140 dBm
+                                      * INT_MAX: 0x7FFFFFFF denotes invalid value.
+                                      * Reference: 3GPP TS 36.133 9.1.4 */
+
+    unsigned char   rsrq_valid;
+    int             rsrq;           /**< The current Reference Signal Receive Quality in dB multiplied by -1.
+                                      * Range: 20 to 3 dB.
+                                      * INT_MAX: 0x7FFFFFFF denotes invalid value.
+                                      * Reference: 3GPP TS 36.133 9.1.7 */
+
+    unsigned char   rssnr_valid;
+    int             rssnr;          /**< The current reference signal signal-to-noise ratio in 0.1 dB units.
+                                      * Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB).
+                                      * INT_MAX : 0x7FFFFFFF denotes invalid value.
+                                      * Reference: 3GPP TS 36.101 8.1.1 */
+
+    unsigned char   band_valid;
+    int             band;
+
+    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. */
+} GSW_NW_CELL_INFO;
+
+typedef struct {
+    char mcc[GSW_MCC_MAX_LEN];
+    char mnc[GSW_MNC_MAX_LEN];
+} gsw_nw_plmn_t;
+
+
+typedef struct {
+    int plmn_list_len;
+    gsw_nw_plmn_t plmn_list[GSW_PLMN_LIST_MAX_LEN];
+} gsw_nw_plmn_list_t;
+
+typedef struct
+{
+    /*    Configuration parameters for MCM network full band network scan when OOS (out of service)*/
+    int t_min;
+    int t_step;
+    int t_max;
+}GSW_NW_OOS_CONFIG_INFO_T;
+
+typedef void (* GSW_NW_ServingInfoHandlePtr)(GSW_NW_SERVING_INFO serving_info);
+typedef void (* GSW_NW_SigInfoHandlePtr)(signalStrength_t sig_info);
+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);
+
+int (*gsw_reg_serving_info_callback)(GSW_NW_ServingInfoHandlePtr handle_ptr);
+int (*gsw_reg_sig_info_callback)(GSW_NW_SigInfoHandlePtr handle_ptr);
+int (*gsw_reg_rej_cause_callback)(GSW_NW_RejectCauseHandlePtr handle_ptr);
+int (*gsw_nw_sdk_init)(int token);
+int (*gsw_nw_sdk_deinit)(void);
+int (*gsw_get_nwinfo)(GSW_NW_SERVING_INFO *serving_info);
+int (*gsw_get_netype)(int32_t *netype);
+int (*gsw_get_opmode)(int *op_mode);
+int (*gsw_set_opmode)(int32_t op_mode);
+int (*gsw_get_mode_preference)(int32_t *mode_pref);
+int (*gsw_set_mode_preference)(int32_t mode_pref);
+int (*gsw_get_sig_info)(int32_t *csq_value);
+int (*gsw_network_set_power_mode)(int8_t mode);
+int (*gsw_sigInfo_to_csq)(int32_t netType, int32_t sigValue);
+int (*gsw_get_forbidden_networks)(gsw_nw_plmn_list_t *plmn_list);
+int (*gsw_add_forbidden_networks)(gsw_nw_plmn_list_t *plmn_list);
+int (*gsw_remove_forbidden_networks)(gsw_nw_plmn_list_t *plmn_list);
+int (*gsw_clear_forbidden_networks)(void);
+int (*gsw_get_mobile_operator_name)(gsw_mobile_operator_name *nw_operator_name_infos);
+int (*gsw_reg_set_modem_status_event_callback)(GSW_NW_ModemStateHandlePtr handle_ptr);
+int (*gsw_get_cell_info)(GSW_NW_CELL_INFO *cell_info);
+int (*gsw_oos_config_get)(GSW_NW_OOS_CONFIG_INFO_T *pt_info);
+int (*gsw_oos_config_set)(GSW_NW_OOS_CONFIG_INFO_T *pt_info);
+
+
+static int gsw_nw_api_import()
+{
+    dlHandle_nw = dlopen(lib_gsw_nw_path, RTLD_NOW);
+    if (dlHandle_nw == NULL) {
+        printf("error: %s\n", dlerror());
+        return -1;
+    }
+
+    gsw_nw_sdk_init = (int(*)(int token))dlsym(dlHandle_nw, "gsw_nw_sdk_init");
+    if (gsw_nw_sdk_init == NULL) {
+        printf("gsw_nw_sdk_init dlysm failed \n");
+        return -1;
+    }
+
+    gsw_nw_sdk_deinit = (int(*)(void))dlsym(dlHandle_nw, "gsw_nw_sdk_deinit");
+    if (gsw_nw_sdk_deinit == NULL) {
+        printf("gsw_nw_sdk_deinit dlysm failed \n");
+        return -1;
+    }
+
+    gsw_get_nwinfo = (int(*)(GSW_NW_SERVING_INFO *serving_info))dlsym(dlHandle_nw, "gsw_get_nwinfo");
+    if (gsw_get_nwinfo == NULL) {
+        printf("gsw_get_nwinfo dlysm failed \n");
+        return -1;
+    }
+
+    gsw_get_netype = (int(*)(int32_t *netype))dlsym(dlHandle_nw, "gsw_get_netype");
+    if (gsw_get_netype == NULL) {
+        printf("gsw_get_netype dlysm failed \n");
+        return -1;
+    }
+
+    gsw_get_opmode = (int(*)(int *op_mode))dlsym(dlHandle_nw, "gsw_get_opmode");
+    if (gsw_get_opmode == NULL) {
+        printf("gsw_get_opmode dlysm failed \n");
+        return -1;
+    }
+
+    gsw_set_opmode = (int(*)(int32_t op_mode))dlsym(dlHandle_nw, "gsw_set_opmode");
+    if (gsw_set_opmode == NULL) {
+        printf("gsw_set_opmode dlysm failed \n");
+        return -1;
+    }
+
+    gsw_get_mode_preference = (int(*)(int32_t *mode_pref))dlsym(dlHandle_nw, "gsw_get_mode_preference");
+    if (gsw_get_mode_preference == NULL) {
+        printf("gsw_get_mode_preference dlysm failed \n");
+        return -1;
+    }
+
+    gsw_set_mode_preference = (int(*)(int32_t mode_pref))dlsym(dlHandle_nw, "gsw_set_mode_preference");
+    if (gsw_set_mode_preference == NULL) {
+        printf("gsw_set_mode_preference dlysm failed \n");
+        return -1;
+    }
+
+    gsw_get_sig_info = (int(*)(int32_t *csq_value))dlsym(dlHandle_nw, "gsw_get_sig_info");
+    if (gsw_get_sig_info == NULL) {
+        printf("gsw_get_sig_info dlysm failed \n");
+        return -1;
+    }
+
+    gsw_network_set_power_mode = (int(*)(int8_t mode))dlsym(dlHandle_nw, "gsw_network_set_power_mode");
+    if (gsw_network_set_power_mode == NULL) {
+        printf("gsw_network_set_power_mode dlysm failed \n");
+        return -1;
+    }
+
+    gsw_sigInfo_to_csq = (int(*)(int32_t netType, int32_t sigValue))dlsym(dlHandle_nw, "gsw_sigInfo_to_csq");
+    if (gsw_sigInfo_to_csq == NULL) {
+        printf("gsw_sigInfo_to_csq dlysm failed \n");
+        return -1;
+    }
+
+    gsw_get_forbidden_networks = (int(*)(gsw_nw_plmn_list_t *plmn_list))dlsym(dlHandle_nw, "gsw_get_forbidden_networks");
+    if (gsw_get_forbidden_networks == NULL) {
+        printf("gsw_get_forbidden_networks dlysm failed \n");
+        return -1;
+    }
+
+    gsw_add_forbidden_networks = (int(*)(gsw_nw_plmn_list_t *plmn_list))dlsym(dlHandle_nw, "gsw_add_forbidden_networks");
+    if (gsw_add_forbidden_networks == NULL) {
+        printf("gsw_add_forbidden_networks dlysm failed \n");
+        return -1;
+    }
+
+    gsw_remove_forbidden_networks = (int(*)(gsw_nw_plmn_list_t *plmn_list))dlsym(dlHandle_nw, "gsw_remove_forbidden_networks");
+    if (gsw_remove_forbidden_networks == NULL) {
+        printf("gsw_remove_forbidden_networks dlysm failed \n");
+        return -1;
+    }
+
+    gsw_clear_forbidden_networks = (int(*)(void))dlsym(dlHandle_nw, "gsw_clear_forbidden_networks");
+    if (gsw_clear_forbidden_networks == NULL) {
+        printf("gsw_clear_forbidden_networks dlysm failed \n");
+        return -1;
+    }
+
+    gsw_get_mobile_operator_name = (int(*)(gsw_mobile_operator_name *nw_operator_name_infos))dlsym(dlHandle_nw, "gsw_get_mobile_operator_name");
+    if (gsw_get_mobile_operator_name == NULL) {
+        printf("gsw_get_mobile_operator_name dlysm failed \n");
+        return -1;
+    }
+
+    gsw_reg_set_modem_status_event_callback = (int(*)(GSW_NW_ModemStateHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_set_modem_status_event_callback");
+    if (gsw_reg_set_modem_status_event_callback == NULL) {
+        printf("gsw_reg_set_modem_status_event_callback dlysm failed \n");
+        return -1;
+    }
+
+    gsw_get_cell_info = (int(*)(GSW_NW_CELL_INFO *cell_info))dlsym(dlHandle_nw, "gsw_get_cell_info");
+    if (gsw_get_cell_info == NULL) {
+        printf("gsw_get_cell_info dlysm failed \n");
+        return -1;
+    }
+
+    gsw_reg_serving_info_callback = (int(*)(GSW_NW_ServingInfoHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_serving_info_callback");
+    if (gsw_reg_serving_info_callback == NULL) {
+        printf("gsw_reg_serving_info_callback dlysm failed \n");
+        return -1;
+    }
+
+    gsw_reg_sig_info_callback = (int(*)(GSW_NW_SigInfoHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_sig_info_callback");
+    if (gsw_reg_sig_info_callback == NULL) {
+        printf("gsw_reg_sig_info_callback dlysm failed \n");
+        return -1;
+    }
+
+    gsw_reg_rej_cause_callback = (int(*)(GSW_NW_RejectCauseHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_rej_cause_callback");
+    if (gsw_reg_rej_cause_callback == NULL) {
+        printf("gsw_reg_rej_cause_callback dlysm failed \n");
+        return -1;
+    }
+
+    gsw_oos_config_get = (int(*)(GSW_NW_OOS_CONFIG_INFO_T *oos_config))dlsym(dlHandle_nw, "gsw_oos_config_get");
+    if (gsw_oos_config_get == NULL) {
+        printf("gsw_oos_config_get dlysm failed \n");
+        return -1;
+    }
+
+    gsw_oos_config_set = (int(*)(GSW_NW_OOS_CONFIG_INFO_T *oos_config))dlsym(dlHandle_nw, "gsw_oos_config_set");
+    if (gsw_oos_config_set == NULL) {
+        printf("gsw_oos_config_set dlysm failed \n");
+        return -1;
+    }
+
+    return 0;
+
+}
+
+static void gsw_serving_info_callback(GSW_NW_SERVING_INFO serving_info)
+{
+    printf("gsw_serving_info_callback: \n");
+    printf("reg_state = %d\n", serving_info.reg_state);
+    printf("ps_state = %d\n", serving_info.ps_state);
+    printf("reg_rat = %d\n", serving_info.reg_rat);
+    printf("srv_domain = %d\n", serving_info.srv_domain);
+    printf("roaming_ind = %d\n", serving_info.roaming_ind);
+    printf("reg_plmn = %s\n", serving_info.reg_plmn);
+    printf("operator_name = %s\n", serving_info.operator_name);
+    printf("cell_id = %s\n", serving_info.cell_id);
+    printf("tac = %s\n", serving_info.tac);
+    printf("lac = %s\n", serving_info.lac);
+    printf("sid = %d\n", serving_info.sid);
+    printf("nid = %d\n", serving_info.nid);
+}
+
+static void gsw_sig_info_callback(signalStrength_t sig_info)
+{
+    printf("gsw_sig_info_callback: \n");
+    printf("gw_sig_valid = %d\n", sig_info.gw_sig_valid);
+    printf("rssi = %d\n", sig_info.rssi);
+    printf("wcdma_sig_valid = %d\n", sig_info.wcdma_sig_valid);
+    printf("rscp = %d\n", sig_info.rscp);
+    printf("ecno = %d\n", sig_info.ecno);
+    printf("lte_sig_valid = %d\n", sig_info.lte_sig_valid);
+    printf("rsrp = %d\n", sig_info.rsrp);
+    printf("rsrq = %d\n", sig_info.rsrq);
+    printf("rssnr = %d\n", sig_info.rssnr);
+    printf("nr_sig_valid = %d\n", sig_info.nr_sig_valid);
+    printf("ssRsrp = %d\n", sig_info.ssRsrp);
+    printf("ssRsrq = %d\n", sig_info.ssRsrq);
+    printf("ssSinr = %d\n", sig_info.ssSinr);
+    printf("csiRsrp = %d\n", sig_info.csiRsrp);
+    printf("csiRsrq = %d\n", sig_info.csiRsrq);
+    printf("csiSinr = %d\n", sig_info.csiSinr);
+}
+
+static void gsw_rej_cause_callback(GSW_NW_REJ_CAUSE_E *rej_cause)
+{
+    printf("gsw_rej_cause_callback: \n");
+    printf("rej_rat = %d\n", rej_cause->rej_rat);
+    printf("rej_domain = %d\n", rej_cause->rej_domain);
+    printf("rej_cause = %d\n", rej_cause->rej_cause);
+}
+
+static void gsw_modem_status_cb(gsw_mode_state_e state)
+{
+    printf("gsw_modem_status_cb: \n");
+    printf("state = %d\n", state);
+}
+
+
+void dump_items()
+{
+    printf("\n");
+    printf("The current module is: network \n");
+
+    printf("-------------------------------------------------------------------------\n");
+    printf("|  index | function name                                              |\n");
+    printf("|  -1       exit\n");
+    printf("   1       gsw_nw_sdk_init\n");
+    printf("   2       gsw_nw_sdk_deinit\n");
+    printf("   3       gsw_get_nwinfo\n");
+    printf("   4       gsw_get_netype\n");
+    printf("   5       gsw_get_opmode\n");
+    printf("   6       gsw_set_opmode\n");
+    printf("   7       gsw_get_mode_preference\n");
+    printf("   8       gsw_set_mode_preference\n");
+    printf("   9       gsw_get_sig_info\n");
+    printf("   10      gsw_network_set_power_mode\n");
+    printf("   11      gsw_sigInfo_to_csq\n");
+    printf("   12      gsw_get_forbidden_networks\n");
+    printf("   13      gsw_add_forbidden_networks\n");
+    printf("   14      gsw_remove_forbidden_networks\n");
+    printf("   15      gsw_clear_forbidden_networks\n");
+    printf("   16      gsw_get_mobile_operator_name\n");
+    printf("   17      gsw_reg_set_modem_status_event_callback\n");
+    printf("   18      gsw_get_cell_info\n");
+    printf("   19      gsw_reg_serving_info_callback\n");
+    printf("   20      gsw_reg_sig_info_callback\n");
+    printf("   21      gsw_reg_rej_cause_callback\n");
+    printf("   22      gsw_oos_config_get\n");
+    printf("   23      gsw_oos_config_set\n");
+    printf("-------------------------------------------------------------------------\n");
+}
+
+int main(int argc, char *argv[])
+{
+    int ret;
+    char operator[10];
+    int opt;
+
+    ret = gsw_nw_api_import();
+    if (ret != 0) {
+        printf("gsw_nw_api_import failed \n");
+        return -1;
+    }
+    
+
+    while(1)
+    {
+        dump_items();
+        printf("input the index of module: ");
+
+        opt = -1;
+        printf("%s",fgets(operator, sizeof(operator), stdin));
+        fflush(stdin);
+
+        opt = atoi(operator);
+        switch (opt) {
+        case -1:
+        {
+            printf("main exit\n");
+            return 0;
+        }
+        case 1:
+        {
+            printf("gsw_nw_sdk_init\n");
+            ret = gsw_nw_sdk_init(1024);
+            printf("gsw_nw_sdk_init ret = %d\n",ret);
+            break;
+        }
+        case 2:
+        {
+            printf("gsw_nw_sdk_deinit\n");
+            ret = gsw_nw_sdk_deinit();
+            printf("gsw_nw_sdk_deinit ret = %d\n",ret);
+            break;
+        }
+        case 3:
+        {
+            GSW_NW_SERVING_INFO* nwinfo;
+            nwinfo = (GSW_NW_SERVING_INFO*)malloc(sizeof(GSW_NW_SERVING_INFO));
+            memset(nwinfo, 0x00, sizeof(GSW_NW_SERVING_INFO));
+            printf("gsw_get_nwinfo start\n");
+            ret = gsw_get_nwinfo(nwinfo);
+            if(ret != 0)
+            {
+                printf("gsw_get_nwinfo failed \n");
+                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);
+            free(nwinfo);
+            break;
+        }
+        case 4:
+        {
+            int nettype;
+            ret = gsw_get_netype(&nettype);
+            if(ret != 0)
+            {
+                printf("gsw_get_netype failed \n");
+                continue;
+            }
+            printf("nettype = %d\n", nettype);
+            break;
+        }
+
+        case 5:
+        {
+            int opmode;
+            ret = gsw_get_opmode(&opmode);
+            if(ret != 0)
+            {
+                printf("gsw_get_opmode failed \n");
+                continue;
+            }
+            printf("opmode = %d\n", opmode);
+            break;
+        }
+
+        case 6:
+        {
+            printf("input the opmode: ");
+            memset(operator,0x00, sizeof(operator));
+            printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
+            fflush(stdin);
+            opt = atoi(operator);
+            ret = gsw_set_opmode(opt);
+            if(ret != 0)
+            {
+                printf("gsw_set_opmode failed \n");
+                continue;
+            }
+            break;
+        }
+
+        case 7:
+        {
+            int mode_pref;
+            ret = gsw_get_mode_preference(&mode_pref);
+            if(ret != 0)
+            {
+                printf("gsw_get_mode_preference failed \n");
+                continue;
+            }
+            printf("mode_pref = %d\n", mode_pref);
+            break;
+        }
+
+        case 8:
+        {
+            printf("input the mode_pref: ");
+            memset(operator,0x00, sizeof(operator));
+            printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
+            fflush(stdin);
+            opt = atoi(operator);
+            ret = gsw_set_mode_preference(opt);
+            if(ret != 0)
+            {
+                printf("gsw_set_mode_preference failed \n");
+                continue;
+            }
+            break;
+        }
+
+        case 9:
+        {
+            int siginfo;
+            ret = gsw_get_sig_info(&siginfo);
+            if(ret != 0)
+            {
+                printf("gsw_get_sig_info failed \n");
+                continue;
+            }
+            printf("signal info: siginfo = %d\n", siginfo);
+            break;
+        }
+            
+        case 10:
+        {
+            printf("input the power mode: ");
+            memset(operator,0x00, sizeof(operator));
+            printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
+            fflush(stdin);
+            opt = atoi(operator);
+            ret = gsw_network_set_power_mode(opt);
+            if(ret != 0)
+            {
+                printf("gsw_network_set_power_mode failed \n");
+                continue;
+            }
+            break;
+        }
+
+        case 11:
+        {
+            int nettype;
+            int sigValue;
+            printf("please input the netType:");
+            memset(operator,0x00, sizeof(operator));
+            printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
+            fflush(stdin);
+            nettype = atoi(operator);
+
+            printf("input the sigValue: ");
+            memset(operator,0x00, sizeof(operator));
+            printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
+            fflush(stdin);
+            sigValue = atoi(operator);
+
+            ret = gsw_sigInfo_to_csq(nettype, sigValue);
+            printf("csq = %d\n", ret);
+
+            break;
+        }
+
+        case 12:
+        {
+            printf("gsw_get_forbidden_networks start\n");
+            gsw_nw_plmn_list_t fplmn_list;
+            fplmn_list.plmn_list_len = 0;
+            ret = gsw_get_forbidden_networks(&fplmn_list);
+            if(ret != 0)
+            {
+                printf("gsw_get_forbidden_networks failed \n");
+                continue;
+            }
+
+            printf("gsw_get_forbidden_networks end\n");
+            for(int i = 0; i < fplmn_list.plmn_list_len; i++)
+            {
+                printf("list[%d] mcc = %s,mnc = %s\n",i, fplmn_list.plmn_list[i].mcc, fplmn_list.plmn_list[i].mnc);
+            }
+
+            break;
+        }
+        case 13:
+        {
+            printf("gsw_add_forbidden_networks start\n");
+            gsw_nw_plmn_list_t fplmn_list_set;
+            fplmn_list_set.plmn_list_len = 1;
+            strcpy(fplmn_list_set.plmn_list[0].mcc, "460");
+            strcpy(fplmn_list_set.plmn_list[0].mnc, "09");
+
+            ret = gsw_add_forbidden_networks(&fplmn_list_set);
+            if(ret != 0)
+            {
+                printf("gsw_add_forbidden_networks failed \n");
+                continue;
+            }
+            printf("gsw_add_forbidden_networks end\n");
+            break;
+        }
+        case 14:
+        {
+            printf("gsw_add_forbidden_networks start\n");
+            gsw_nw_plmn_list_t fplmn_list_remove;
+            fplmn_list_remove.plmn_list_len = 1;
+            strcpy(fplmn_list_remove.plmn_list[0].mcc, "460");
+            strcpy(fplmn_list_remove.plmn_list[0].mnc, "02");
+
+            ret = gsw_remove_forbidden_networks(&fplmn_list_remove);
+            if(ret != 0)
+            {
+                printf("gsw_add_forbidden_networks failed \n");
+                continue;
+            }
+            printf("gsw_add_forbidden_networks end\n");
+            break;
+        }
+            
+        case 15:
+        {
+            printf("gsw_clear_forbidden_networks start\n");
+            ret = gsw_clear_forbidden_networks();
+            if(ret != 0)
+            {
+                printf("gsw_clear_forbidden_networks failed \n");
+                continue;
+            }
+            printf("gsw_clear_forbidden_networks end\n");
+            break;
+        }
+
+        case 16:
+        {
+            gsw_mobile_operator_name opname;
+
+            ret = gsw_get_mobile_operator_name(&opname);
+            if(ret != 0)
+            {
+                printf("gsw_get_mobile_operator_name failed \n");
+                continue;
+            }
+
+            printf("opname.operator_name = %s\nopname.operator_code = %s\nopname.mcc=%s\nopname.mnc=%s", opname.long_eons, opname.short_eons, opname.mcc, opname.mnc);
+            break;
+        }
+
+        case 17:
+        {
+            printf("gsw_reg_set_modem_status_event_callback\n");
+            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");
+                continue;
+            }
+            printf("gsw_reg_set_modem_status_event_callback success\n");
+            break;
+        }
+
+        case 18:
+        {
+            printf("gsw_get_cell_info starts\n");
+            GSW_NW_CELL_INFO cell_info;
+            memset(&cell_info, 0x00, sizeof(GSW_NW_CELL_INFO));
+            ret = gsw_get_cell_info(&cell_info);
+            if(ret != 0)
+            {
+                printf("gsw_get_cell_info failed \n");
+                continue;
+            }
+            
+            printf("--------------------serving cell info ------------------------------\n");
+            printf("mcc_valid = %d\n",cell_info.mcc_valid);
+            printf("mcc = %s\n",cell_info.mcc);
+            printf("mnc_valid = %d\n",cell_info.mnc_valid);
+            printf("mnc = %s\n",cell_info.mnc);
+            printf("cell_id_valid = %d\n",cell_info.cell_id_valid);
+            printf("cell_id = %u\n",cell_info.cell_id);
+            printf("pci_valid = %d\n",cell_info.pci_valid);
+            printf("pci = %d\n",cell_info.pci);
+            printf("psc_valid = %d\n",cell_info.psc_valid);
+            printf("psc = %d\n",cell_info.psc);
+            printf("earfcn_valid = %d\n",cell_info.earfcn_valid);
+            printf("earfcn = %d\n",cell_info.earfcn);
+            printf("uarfcn_valid = %d\n",cell_info.uarfcn_valid);
+            printf("uarfcn = %d\n",cell_info.uarfcn);
+            printf("arfcn_valid = %d\n",cell_info.arfcn_valid);
+            printf("arfcn = %d\n",cell_info.arfcn);
+            printf("tac_valid = %d\n",cell_info.tac_valid);
+            printf("tac = %u\n",cell_info.tac);
+            printf("lac_valid = %d\n",cell_info.lac_valid);
+            printf("lac = %u\n",cell_info.lac);
+            printf("sid_valid = %d\n",cell_info.sid_valid);
+            printf("sid = %d\n",cell_info.sid);
+            printf("nid_valid = %d\n",cell_info.nid_valid);
+            printf("nid = %d\n",cell_info.nid);
+            printf("lteMode_valid = %d\n",cell_info.lteMode_valid);
+            printf("lteMode = %d\n",cell_info.lteMode);
+            printf("rssi_valid = %d\n",cell_info.rssi_valid);
+            printf("rssi = %d\n",cell_info.rssi);
+            printf("rsrq_valid = %d\n",cell_info.rsrq_valid);
+            printf("rsrq = %d\n",cell_info.rsrq);
+            printf("ecio_valid = %d\n",cell_info.ecio_valid);
+            printf("ecio = %d\n",cell_info.ecio);
+            printf("rsrp_valid = %d\n",cell_info.rsrp_valid);
+            printf("rsrp = %d\n",cell_info.rsrp);
+            printf("rsrq_valid = %d\n",cell_info.rsrq_valid);
+            printf("rsrq = %d\n",cell_info.rsrq);
+            printf("rssnr_valid = %d\n",cell_info.rssnr_valid);
+            printf("rssnr = %d\n",cell_info.rssnr);
+            printf("band_valid = %d\n",cell_info.band_valid);
+            printf("band = %d\n",cell_info.band);
+            printf("bler_valid = %d\n",cell_info.bler_valid);
+            printf("bler = %d\n",cell_info.bler);
+
+
+            printf("-----------------------------------------------------------------------------------\n");
+
+            printf("-------------------------------------inter cell info ------------------------------\n");
+
+            for(int i = 0; i <MAX_CELL_EXT_INFO ; 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);
+
+                printf("inter cell info[%d] arfcn_valid = %d\n",i,cell_info.ext_info[i].arfcn_valid);
+                printf("inter cell info[%d] arfcn = %d\n",i,cell_info.ext_info[i].arfcn);
+
+                printf("inter cell info[%d] rsrp_valid = %d\n",i,cell_info.ext_info[i].rsrp_valid);
+                printf("inter cell info[%d] rsrp = %d\n",i,cell_info.ext_info[i].rsrp);
+                
+                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] 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("-----------------------------------------------------------\n");
+            }
+
+
+            break;
+        }
+
+        case 19:
+        {
+            printf("gsw_reg_serving_info_callback start\n");
+            ret = gsw_reg_serving_info_callback(gsw_serving_info_callback);
+            break;
+        }
+
+        case 20:
+        {
+            printf("gsw_reg_sig_info_callback start\n");
+            ret = gsw_reg_sig_info_callback(gsw_sig_info_callback);
+            break;
+        }
+
+        case 21:
+        {
+            printf("gsw_reg_rej_cause_callback\n");
+            ret = gsw_reg_rej_cause_callback(gsw_rej_cause_callback);
+            break;
+        }
+
+        case 22:
+        {
+            printf("gsw_oos_config_get\n");
+            GSW_NW_OOS_CONFIG_INFO_T oos_cfg;
+            ret = gsw_oos_config_get(&oos_cfg);
+            if(ret != 0)
+            {
+                printf("gsw_oos_config_get failed \n");
+                continue;
+            }
+
+            else
+            {
+                printf("oos_cfg.t_min = %d\n",oos_cfg.t_min);
+                printf("oos_cfg.t_max = %d\n",oos_cfg.t_max);
+                printf("oos_cfg.t_step = %d\n",oos_cfg.t_step);
+            }
+            break;
+        }
+
+        case 23:
+        {
+            printf("gsw_oos_config_set\n");
+            GSW_NW_OOS_CONFIG_INFO_T oos_cfg;
+            oos_cfg.t_min = 5;
+            oos_cfg.t_step = 5;
+            oos_cfg.t_max = 5;
+
+            ret = gsw_oos_config_set(&oos_cfg);
+            if(ret != 0)
+            {
+                printf("gsw_oos_config_set failed \n");
+                continue;
+            }
+            else
+            {
+                printf("gsw_oos_config_set success\n");
+            }
+            break;
+        }
+
+
+        default:
+        {
+            continue;
+        }
+
+
+        }
+    }
+
+
+}