blob: 9b262269d55516397efdd58e3702e85627f2fc70 [file] [log] [blame]
b.liu68a94c92025-05-24 12:53:41 +08001#include <stdio.h>
2#include <stdlib.h>
3#include <stdbool.h>
4#include <dlfcn.h>
5#include <stdint.h>
6#include <string.h>
7#include <pthread.h>
8
9//mbtk include
10#define LYNQ_AIR_PLANE_MODE_ON 4 //at+cfun = 4
11#define LYNQ_AIR_PLANE_MODE_OFF 1 // at+cfun = 1
12
13
14#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
15
q.huang238b22a2025-06-10 14:36:59 +080016#define GSW_IMEI_LENGTH 20+1
17
b.liu68a94c92025-05-24 12:53:41 +080018#ifndef FALSE
19#define FALSE (0)
20#endif
21
22
23#ifndef TRUE
24#define TRUE (!FALSE)
25#endif
26
27typedef unsigned int uint32;
28typedef unsigned char uint8;
29typedef unsigned short uint16;
30typedef void (*mbtk_info_callback_func)(const void* data, int data_len);
31
32typedef enum
33{
34 MBTK_DEV_MODEM_MIN_FUN, //Modem 最小功能
35 MBTK_DEV_MODEM_FULL_FUN, //Modem 全功能
36 MBTK_DEV_MODEM_DISABLE_RECEIVE_RF_CIRCUITS = 3, //Modem 禁用射频接收电路
37 MBTK_DEV_MODEM_DISABLE_TRANSMIT_AND_RECEIVE_RF_CIRCUITS, //Modem禁用射频发射和接收电路
38 MBTK_DEV_MODEM_DISABLE_SIM, //Modem 禁用(U)SIM 卡
39 MBTK_DEV_MODEM_TURN_OFF_FULL_SECONDARY_RECEIVE, //Modem 完全禁用辅助接收
40}MBTK_DEV_MODEM_FUNCTION;
41
42typedef enum
43{
44 MBTK_CELL_TYPE_GSM = 0,
45 MBTK_CELL_TYPE_UMTS,
46 MBTK_CELL_TYPE_LTE
47} mbtk_cell_type_enum;
48
49typedef struct
50{
51 MBTK_DEV_MODEM_FUNCTION fun;
52 int rst;
53} mbtk_modem_info_t;
54
55typedef struct
56{
57 int client_fd;
58 pthread_t read_thread_id;
59 int exit_fd[2];
60 bool is_waitting;
61 pthread_cond_t cond;
62 pthread_mutex_t mutex;
63
64 pthread_mutex_t send_mutex;
65
66 // Temp response data.
67 uint16 info_err;
68 uint16 data_len;
69 void *data;
70
71 //mbtk wyq for server_ready_status add start
72 char server_ready_status;
73 //mbtk wyq for server_ready_status add end
74
75 mbtk_info_callback_func net_state_cb;
76 mbtk_info_callback_func call_state_cb;
77 mbtk_info_callback_func sms_state_cb;
78 mbtk_info_callback_func radio_state_cb;
79 mbtk_info_callback_func sim_state_cb;
80 mbtk_info_callback_func pdp_state_cb;
81 //add signal by xr
82 mbtk_info_callback_func signal_state_cb;
83} mbtk_info_handle_t;
84
85
86
87typedef struct
88{
q.huang638d5872025-06-21 13:44:43 +080089 // NR server cell:
90 // NR cell:
b.liu68a94c92025-05-24 12:53:41 +080091 // LTE server cell: tac, PCI, dlEuarfcn, ulEuarfcn, band
92 // LTE cell: phyCellId,euArfcn,rsrp,rsrq
93 // WCDMA server cell: lac, ci, arfcn
94 // WCDMA cell: lac, ci, arfcn
95 // GSM server cell: lac, ci, arfcn, bsic
96 // GSM cell:
b.liu68a94c92025-05-24 12:53:41 +080097 uint32 value1; //tac
98 uint32 value2; //pci
99 uint32 value3; //dlEuarfcn
q.huang638d5872025-06-21 13:44:43 +0800100 uint32 value4; //bler
b.liu68a94c92025-05-24 12:53:41 +0800101 uint32 value5; //band
q.huang638d5872025-06-21 13:44:43 +0800102 uint32 value6; //mcc
b.liu68a94c92025-05-24 12:53:41 +0800103 uint32 value7; //mnc
q.huang638d5872025-06-21 13:44:43 +0800104 uint32 value8; //rsrp
105 uint32 value9; //rsrq
b.liu68a94c92025-05-24 12:53:41 +0800106 uint32 value10; //cell identiy
q.huang638d5872025-06-21 13:44:43 +0800107 uint32 value11; //sinr
108 uint32 value12; //is tdd
109 uint32 value13;
110 uint32 value14;
111 uint32 value15;
b.liu68a94c92025-05-24 12:53:41 +0800112} __attribute__((packed)) mbtk_cell_info_t;
113
114
115
116
117
q.huang638d5872025-06-21 13:44:43 +0800118
b.liu68a94c92025-05-24 12:53:41 +0800119typedef struct
120{
121 uint8 net_pref; // mbtk_net_pref_enum
122 uint16 gsm_band; // mbtk_gsm_band_enum
123 uint16 umts_band; // mbtk_umts_band_enum
124 uint32 tdlte_band; // mbtk_tdlte_band_enum
125 uint32 fddlte_band; // mbtk_fddlte_band_enum
126 uint32 lte_ext_band; // mbtk_lte_ext_band_enum
127} __attribute__((packed)) mbtk_band_info_t;
128
129typedef struct list_arraynode
130{
131 void *data;
132 struct list_arraynode *next;
133} list_arraynode_t;
134
135typedef struct list_treenode
136{
137 list_arraynode_t *data;
138 int count;
139 struct list_treenode *left;
140 struct list_treenode *right;
141} list_treenode_t;
142
143typedef int (*list_sort_func)(void *data1, void *data2);
144typedef void (*list_free_func)(void *data);
145
146typedef struct list_node
147{
148 uint32 size;
149 list_sort_func sort_func;
150 list_free_func free_func;
151
152 uint32 cur_index;
153 list_arraynode_t *cur_array_data;
154
155 list_arraynode_t array_data;
156 list_treenode_t tree_data;
157} list_node_t;
158
b.liu68a94c92025-05-24 12:53:41 +0800159#define lib_gsw_nw_path "/lib/libgsw_lib.so"
160static void *dlHandle_nw = NULL;
161
162//gsw include
163
164
165#define GSW_HAL_SUCCESS 0
166#define GSW_HAL_FAIL -1
167#define GSW_HAL_MEM_INVAILD -2
q.huang50e8e942025-06-17 18:07:03 +0800168#define GSW_NW_OPERATION_NAME_LEN 32
b.liu68a94c92025-05-24 12:53:41 +0800169#define GSW_NW_PLMN_LEN 6
170#define GSW_NW_MCC_LEN 3
171#define GSW_NW_MNC_LEN 3
172#define GSW_NW_PARA_MAX_LEN 128
173#define GSW_MCC_MAX_LEN 16
174#define GSW_MNC_MAX_LEN 16
175#define GSW_APN_CHANNEL_MAX 10
176#define GSW_POXY_ADDR_MAX_LEN 64
177#define GSW_PDP_TYPE_MAX_LEN 16
178#define GSW_APN_MAX_LEN 65
179#define GSW_APN_ID_MAX_LEN 32
180#define GSW_APN_TYPE_MAX_LEN 50
181#define GSW_USR_MAX_LEN 16
182#define GSW_PWD_MAX_LEN 16
183#define GSW_AUTH_TYPE_MAX_LEN 50
184#define GSW_PROTOCO_MAX_LEN 64
185#define GSW_CARRIER_ID_MAX_LEN 64
186#define GSW_IFACE_NAME_MAX_LEN 50
187#define GSW_PDP_ADDR_MAX_LEN 64
188#define GSW_DNS_APN_MAX_LEN 64
189#define GSW_GETWAYS_ADDR_MAX_LEN 64
190#define GSW_RSP_MAX_LEN 256
191#define GSW_PLMN_LIST_MAX_LEN 85
192
193
194
195typedef enum service_domain
196{
197 GSW_SRV_DOMAIN_NO_SVC = 0x0, /**< no service */
198 GSW_SRV_DOMAIN_CS_ONLY = 0x1, /**< cs only */
199 GSW_SRV_DOMAIN_PS_ONLY = 0x2, /**< ps only */
200 GSW_SRV_DOMAIN_CS_PS = 0x3, /**< reg all in service */
201} GSW_SERVICE_DOMAIN_E;
202
203typedef enum gsw_network_reg_state
204{
205 GSW_NETWORK_REG_NOT_REGISTERED = 0x0, /**< no service */
206 GSW_NETWORK_REG_REGISTERED = 0x1, /**< reg in service home */
207 GSW_NETWORK_REG_NOT_REGISTERED_SEARCHING = 0x2, /**< searching network */
208 GSW_NETWORK_REG_REGISTRATION_DENIED = 0x3, /**< network denny device */
209 GSW_NETWORK_REG_REGISTRATION_UNKNOWN = 0x4, /**< unknown state */
210 GSW_NETWORK_REG_REGISTRATION_ROAMING = 0x5, /**< roaming state in service */
211 GSW_NETWORK_REG_LIMITED_SERVICE = 0x6, /**< limited service */
212} GSW_NW_REG_STATE_E;
213
214typedef enum gsw_network_radio_interface
215{
216 GSW_NETWORK_RADIO_NO_SVC = 0x0, /**< radio state no service */
217 GSW_NETWORK_RADIO_CDMA_1X = 0x1, /**< cdma 1x */
218 GSW_NETWORK_RADIO_CDMA_1XEVDO = 0x2, /**< cdma evdo */
219 GSW_NETWORK_RADIO_AMPS = 0x3, /**< amps gsm 2g*/
220 GSW_NETWORK_RADIO_GSM = 0x4, /**< gsm */
221 GSW_NETWORK_RADIO_UMTS = 0x5, /**< umts wcdma*/
222 GSW_NETWORK_RADIO_LTE = 0x6, /**< LTE 4G */
223 GSW_NETWORK_RADIO_TDSCDMA = 0x7, /**< TDS 3G*/
224 GSW_NETWORK_RADIO_NR5G = 0x8, /**< NR 5G*/
225} GSW_NW_RADIO_ACCESS_TECH_E;
226
227
228typedef enum gsw_network_roaming_state
229{
230 GSW_NETWORK_ROAMING_OFF = 0x0, /**< roaming off */
231 GSW_NETWORK_ROAMING_ON = 0x1, /**< roaming on*/
232} GSW_NW_ROAMING_STATE_E;
233
234typedef enum oprate_mode
235{
236 GSW_OP_MODE_LPM = 0, /**< radio state off*/
237 GSW_OP_MODE_ONLINE = 1, /**< radio state on*/
238 GSW_OP_MODE_FTM = 2, /**< radio state ftm*/
239 GSW_OP_MODE_OFFLINE = 3, /**< radio state offline*/
240} OPERATE_MODE_E;
241
242typedef enum prefer_mode
243{
244 GSW_PREFER_MODE_GSW = 1, /**<2G only*/
245 GSW_PREFER_MODE_WCDMA = 2, /**< 3G only*/
246 GSW_PREFER_MODE_WCDMA_GSM = 3, /**< 3G/2G*/
247 GSW_PREFER_MODE_LTE = 4, /**< 4G only*/
248 GSW_PREFER_MODE_NR5G = 5, /**< 5G only*/
249 GSW_PREFER_MODE_NR5G_LTE = 8, /**< 5G/4G*/
250 GSW_PREFER_MODE_LTE_WCDMA_GSM = 9, /**< 4G/3G/2G*/
251 GSW_PREFER_MODE_NR5G_LTE_WCDMA_GSM = 32, /**< 5G/4G/3G/2G*/
252} PREFER_MODE_E;
253
254typedef enum gsw_hal_nw_mode_state_type
255{
256 GSW_MODEM_STATE_UNKNOWN = 0,
257 GSW_MODEM_STATE_ONLINE,
258 GSW_MODEM_STATE_OFFLINE,
259 GSW_SDK_STATE_SERVICE_DOWN,
260 GSW_SDK_STATE_SERVICE_UP,// service down->up 需要routectl 重启
261 GSW_SDK_STATE_GPS_DOWN,
262 GSW_SDK_STATE_GPS_UP,
263} gsw_mode_state_e;
264
265
266typedef struct
267{
268 GSW_NW_RADIO_ACCESS_TECH_E rej_rat; /**< current network radio tech*/
269 GSW_SERVICE_DOMAIN_E rej_domain; /**< reject code from ps or cs*/
270 int rej_cause; /**< reject code number*/
271} GSW_NW_REJ_CAUSE_E;
272
273typedef struct
274{
275 int32_t gw_sig_valid; /**< 1 valid,1 invalid*/
276 int32_t rssi; /**< Valid values are (0-31, 99) as defined in TS 27.007 8.5 */
277 int32_t wcdma_sig_valid;/**< 1 valid,0 invalid*/
278 int32_t rscp; /**< The Received Signal Code Power in dBm multipled by -1.
279 * Range : 25 to 120
280 * INT_MAX: 0x7FFFFFFF denotes invalid value.
281 * Reference: 3GPP TS 25.123, section 9.1.1.1 */
282 int32_t ecno; /**< Valid values are positive integers. This value is the actual Ec/Io multiplied
283 * by -10. Example: If the actual Ec/Io is -12.5 dB, then this response value
284 * will be 125.*/
285 int32_t lte_sig_valid;/**< 1 valid,0 invalid*/
286 int32_t rsrp; /**< The current Reference Signal Receive Power in dBm multipled by -1.
287 * Range: 44 to 140 dBm
288 * INT_MAX: 0x7FFFFFFF denotes invalid value.
289 * Reference: 3GPP TS 36.133 9.1.4 */
290 int32_t rsrq; /**< The current Reference Signal Receive Quality in dB multiplied by -1.
291 * Range: 20 to 3 dB.
292 * INT_MAX: 0x7FFFFFFF denotes invalid value.
293 * Reference: 3GPP TS 36.133 9.1.7 */
294 int32_t rssnr; /**< The current reference signal signal-to-noise ratio in 0.1 dB units.
295 * Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB).
296 * INT_MAX : 0x7FFFFFFF denotes invalid value.
297 * Reference: 3GPP TS 36.101 8.1.1 */
298 int32_t nr_sig_valid;/**<1 valid,0 invalid*/
299 int32_t ssRsrp; /**< SS(Synchronization Signal) reference signal received power, multipled by -1.
300 * Reference: 3GPP TS 38.215.
301 * Range [44, 140], INT_MAX means invalid/unreported.*/
302 int32_t ssRsrq; /**< SS reference signal received quality, multipled by -1.
303 * Reference: 3GPP TS 38.215.
304 * Range [3, 20], INT_MAX means invalid/unreported.*/
305 int32_t ssSinr; /**< SS signal-to-noise and interference ratio.
306 * Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
307 * Range [-23, 40], INT_MAX means invalid/unreported.*/
308 int32_t csiRsrp; /**< CSI reference signal received power, multipled by -1.
309 * Reference: 3GPP TS 38.215.
310 * Range [44, 140], INT_MAX means invalid/unreported.*/
311 int32_t csiRsrq; /**< CSI reference signal received quality, multipled by -1.
312 * Reference: 3GPP TS 38.215.
313 * Range [3, 20], INT_MAX means invalid/unreported.*/
314 int32_t csiSinr; /**< CSI signal-to-noise and interference ratio.
315 * Reference: 3GPP TS 138.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
316 * Range [-23, 40], INT_MAX means invalid/unreported.*/
317} signalStrength_t;
318
319typedef struct
320{
321 GSW_NW_REG_STATE_E reg_state; /**< network cs regstate*/
322 GSW_NW_REG_STATE_E ps_state; /**< network ps regstate*/
323 GSW_NW_RADIO_ACCESS_TECH_E reg_rat; /**< current radio state*/
324 GSW_SERVICE_DOMAIN_E srv_domain; /**< current cs or ps state*/
325 GSW_NW_ROAMING_STATE_E roaming_ind; /**< roaming state*/
326 char reg_plmn[GSW_NW_PLMN_LEN + 1]; /**< current cell plmn*/
327 char operator_name[GSW_NW_OPERATION_NAME_LEN + 1]; /**< operator name*/
328 char cell_id[128]; /**< cell id*/
329 char tac[128]; /**< cell tac*/
330 char lac[128]; /**< cell lac*/
331 int sid; /**< cell sid cdma*/
332 int nid; /**< cell nid cdma*/
333} GSW_NW_SERVING_INFO;
334
335
336typedef struct
337{
338 char long_eons[128]; /* Full name of the operator*/
339 char short_eons[128]; /* Shor name of the operator*/
340 char mcc[4]; /* Mobile country code*/
341 char mnc[4]; /* Mobile network code*/
342}gsw_mobile_operator_name;
343
344#define MAX_CELL_EXT_INFO (5)
345
346typedef struct
347{
348 unsigned char cell_id_valid;
349 unsigned char pci_valid;
350 unsigned char psc_valid;
351 unsigned char band_valid;
352 unsigned char arfcn_valid;
353 unsigned char rssi_valid;
354 unsigned char rsrp_valid;
355 unsigned char rsrq_valid;
356 unsigned char sinr_valid;
357 unsigned char rscp_valid;
358 unsigned char ecio_valid;
359 GSW_NW_RADIO_ACCESS_TECH_E rat;
360 unsigned int cell_id;
361 int pci;
362 int psc;
363 int band;
364 int arfcn;
365 int rssi;
366 int rsrp;
367 int rsrq;
368 int sinr;
369 int rscp;
370 int ecio;
371 char mcc[5];
372 char mnc[5];
373} GSW_NW_CELL_EXT_INFO;
374
375typedef struct
376{
377 GSW_NW_RADIO_ACCESS_TECH_E rat; /**< current radio state*/
378
379 unsigned char mcc_valid;
380 char mcc[5];
381
382 unsigned char mnc_valid;
383 char mnc[5];
384
385 unsigned char cell_id_valid;
386 unsigned int cell_id; /**< cell id*/
387
388 unsigned char pci_valid;
389 int pci; /**<physical cell id*/
390
391 unsigned char psc_valid;
392 int psc; /*wcdma primary scramble code*/
393
394 unsigned char nrarfcn_valid;
395 int nrarfcn; /*nr cell freq*/
396
397 unsigned char earfcn_valid;
398 int earfcn; /*lte cell freq*/
399
400 unsigned char uarfcn_valid;
401 int uarfcn; /*wcdma cell freq*/
402
403 unsigned char arfcn_valid;
404 int arfcn; /*gsw cell freq*/
405
406 unsigned char tac_valid;
407 unsigned int tac; /**< cell tac*/
408
409 unsigned char lac_valid;
410 unsigned int lac; /**< cell lac*/
411
412 unsigned char sid_valid;
413 int sid; /**< cell sid cdma*/
414
415 unsigned char nid_valid;
416 int nid; /**< cell nid cdma*/
417
418 unsigned char lteMode_valid;
419 int lteMode; /*tdd 0, fdd 1*/
420
421 unsigned char rssi_valid;
422 int rssi; /**< Valid values are (0-31, 99) as defined in TS 27.007 8.5 */
423
424 unsigned char rscp_valid;
425 int rscp; /**< The Received Signal Code Power in dBm multipled by -1.
426 * Range : 25 to 120
427 * INT_MAX: 0x7FFFFFFF denotes invalid value.
428 * Reference: 3GPP TS 25.123, section 9.1.1.1 */
429
430 unsigned char ecio_valid;
431 int ecio; /**< Valid values are positive integers. This value is the actual Ec/Io multiplied
432 * by -10. Example: If the actual Ec/Io is -12.5 dB, then this response value
433 * will be 125.*/
434
435 unsigned char rsrp_valid;
436 int rsrp; /**< The current Reference Signal Receive Power in dBm multipled by -1.
437 * Range: 44 to 140 dBm
438 * INT_MAX: 0x7FFFFFFF denotes invalid value.
439 * Reference: 3GPP TS 36.133 9.1.4 */
440
441 unsigned char rsrq_valid;
442 int rsrq; /**< The current Reference Signal Receive Quality in dB multiplied by -1.
443 * Range: 20 to 3 dB.
444 * INT_MAX: 0x7FFFFFFF denotes invalid value.
445 * Reference: 3GPP TS 36.133 9.1.7 */
446
447 unsigned char rssnr_valid;
448 int rssnr; /**< The current reference signal signal-to-noise ratio in 0.1 dB units.
449 * Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB).
450 * INT_MAX : 0x7FFFFFFF denotes invalid value.
451 * Reference: 3GPP TS 36.101 8.1.1 */
452
453 unsigned char band_valid;
454 int band;
455
456 unsigned char bler_valid;
457 int bler; /*bit error rate*/
q.huang638d5872025-06-21 13:44:43 +0800458 int ext_info_len; /**<ext_info len*/
459 GSW_NW_CELL_EXT_INFO ext_info[MAX_CELL_EXT_INFO];
b.liu68a94c92025-05-24 12:53:41 +0800460} GSW_NW_CELL_INFO;
461
462typedef struct {
463 char mcc[GSW_MCC_MAX_LEN];
464 char mnc[GSW_MNC_MAX_LEN];
465} gsw_nw_plmn_t;
466
467
468typedef struct {
469 int plmn_list_len;
470 gsw_nw_plmn_t plmn_list[GSW_PLMN_LIST_MAX_LEN];
471} gsw_nw_plmn_list_t;
472
473typedef struct
474{
475 /* Configuration parameters for MCM network full band network scan when OOS (out of service)*/
476 int t_min;
477 int t_step;
478 int t_max;
479}GSW_NW_OOS_CONFIG_INFO_T;
480
481typedef void (* GSW_NW_ServingInfoHandlePtr)(GSW_NW_SERVING_INFO serving_info);
482typedef void (* GSW_NW_SigInfoHandlePtr)(signalStrength_t sig_info);
483typedef void (* GSW_NW_RejectCauseHandlePtr)(GSW_NW_REJ_CAUSE_E *rej_cause);
484typedef void (* GSW_HAL_NW_AIRPLANE_MODE_HANDLE_PTR)(int32_t airplane_mode);
485typedef void (* GSW_NW_ModemStateHandlePtr)(gsw_mode_state_e state);
q.huangc8b93122025-06-17 17:46:05 +0800486typedef void (* GSW_NW_AirplaneModeHandlePtr)(int airplane_mode);
487
b.liu68a94c92025-05-24 12:53:41 +0800488
489int (*gsw_reg_serving_info_callback)(GSW_NW_ServingInfoHandlePtr handle_ptr);
490int (*gsw_reg_sig_info_callback)(GSW_NW_SigInfoHandlePtr handle_ptr);
491int (*gsw_reg_rej_cause_callback)(GSW_NW_RejectCauseHandlePtr handle_ptr);
492int (*gsw_nw_sdk_init)(int token);
493int (*gsw_nw_sdk_deinit)(void);
494int (*gsw_get_nwinfo)(GSW_NW_SERVING_INFO *serving_info);
495int (*gsw_get_netype)(int32_t *netype);
496int (*gsw_get_opmode)(int *op_mode);
497int (*gsw_set_opmode)(int32_t op_mode);
498int (*gsw_get_mode_preference)(int32_t *mode_pref);
499int (*gsw_set_mode_preference)(int32_t mode_pref);
500int (*gsw_get_sig_info)(int32_t *csq_value);
501int (*gsw_network_set_power_mode)(int8_t mode);
502int (*gsw_sigInfo_to_csq)(int32_t netType, int32_t sigValue);
503int (*gsw_get_forbidden_networks)(gsw_nw_plmn_list_t *plmn_list);
504int (*gsw_add_forbidden_networks)(gsw_nw_plmn_list_t *plmn_list);
505int (*gsw_remove_forbidden_networks)(gsw_nw_plmn_list_t *plmn_list);
506int (*gsw_clear_forbidden_networks)(void);
507int (*gsw_get_mobile_operator_name)(gsw_mobile_operator_name *nw_operator_name_infos);
508int (*gsw_reg_set_modem_status_event_callback)(GSW_NW_ModemStateHandlePtr handle_ptr);
509int (*gsw_get_cell_info)(GSW_NW_CELL_INFO *cell_info);
510int (*gsw_oos_config_get)(GSW_NW_OOS_CONFIG_INFO_T *pt_info);
511int (*gsw_oos_config_set)(GSW_NW_OOS_CONFIG_INFO_T *pt_info);
q.huang238b22a2025-06-10 14:36:59 +0800512int (*gsw_get_imei)(int32_t len, int8_t *imei);
513int (*gsw_reset_modem)(void);
q.huangc8b93122025-06-17 17:46:05 +0800514int (*gsw_reg_operating_mode_callback)(GSW_NW_AirplaneModeHandlePtr handle_ptr);
515
b.liu68a94c92025-05-24 12:53:41 +0800516
517static int gsw_nw_api_import()
518{
519 dlHandle_nw = dlopen(lib_gsw_nw_path, RTLD_NOW);
520 if (dlHandle_nw == NULL) {
521 printf("error: %s\n", dlerror());
522 return -1;
523 }
524
525 gsw_nw_sdk_init = (int(*)(int token))dlsym(dlHandle_nw, "gsw_nw_sdk_init");
526 if (gsw_nw_sdk_init == NULL) {
527 printf("gsw_nw_sdk_init dlysm failed \n");
528 return -1;
529 }
530
531 gsw_nw_sdk_deinit = (int(*)(void))dlsym(dlHandle_nw, "gsw_nw_sdk_deinit");
532 if (gsw_nw_sdk_deinit == NULL) {
533 printf("gsw_nw_sdk_deinit dlysm failed \n");
534 return -1;
535 }
536
537 gsw_get_nwinfo = (int(*)(GSW_NW_SERVING_INFO *serving_info))dlsym(dlHandle_nw, "gsw_get_nwinfo");
538 if (gsw_get_nwinfo == NULL) {
539 printf("gsw_get_nwinfo dlysm failed \n");
540 return -1;
541 }
542
543 gsw_get_netype = (int(*)(int32_t *netype))dlsym(dlHandle_nw, "gsw_get_netype");
544 if (gsw_get_netype == NULL) {
545 printf("gsw_get_netype dlysm failed \n");
546 return -1;
547 }
548
549 gsw_get_opmode = (int(*)(int *op_mode))dlsym(dlHandle_nw, "gsw_get_opmode");
550 if (gsw_get_opmode == NULL) {
551 printf("gsw_get_opmode dlysm failed \n");
552 return -1;
553 }
554
555 gsw_set_opmode = (int(*)(int32_t op_mode))dlsym(dlHandle_nw, "gsw_set_opmode");
556 if (gsw_set_opmode == NULL) {
557 printf("gsw_set_opmode dlysm failed \n");
558 return -1;
559 }
560
561 gsw_get_mode_preference = (int(*)(int32_t *mode_pref))dlsym(dlHandle_nw, "gsw_get_mode_preference");
562 if (gsw_get_mode_preference == NULL) {
563 printf("gsw_get_mode_preference dlysm failed \n");
564 return -1;
565 }
566
567 gsw_set_mode_preference = (int(*)(int32_t mode_pref))dlsym(dlHandle_nw, "gsw_set_mode_preference");
568 if (gsw_set_mode_preference == NULL) {
569 printf("gsw_set_mode_preference dlysm failed \n");
570 return -1;
571 }
572
573 gsw_get_sig_info = (int(*)(int32_t *csq_value))dlsym(dlHandle_nw, "gsw_get_sig_info");
574 if (gsw_get_sig_info == NULL) {
575 printf("gsw_get_sig_info dlysm failed \n");
576 return -1;
577 }
578
579 gsw_network_set_power_mode = (int(*)(int8_t mode))dlsym(dlHandle_nw, "gsw_network_set_power_mode");
580 if (gsw_network_set_power_mode == NULL) {
581 printf("gsw_network_set_power_mode dlysm failed \n");
582 return -1;
583 }
584
585 gsw_sigInfo_to_csq = (int(*)(int32_t netType, int32_t sigValue))dlsym(dlHandle_nw, "gsw_sigInfo_to_csq");
586 if (gsw_sigInfo_to_csq == NULL) {
587 printf("gsw_sigInfo_to_csq dlysm failed \n");
588 return -1;
589 }
590
591 gsw_get_forbidden_networks = (int(*)(gsw_nw_plmn_list_t *plmn_list))dlsym(dlHandle_nw, "gsw_get_forbidden_networks");
592 if (gsw_get_forbidden_networks == NULL) {
593 printf("gsw_get_forbidden_networks dlysm failed \n");
594 return -1;
595 }
596
597 gsw_add_forbidden_networks = (int(*)(gsw_nw_plmn_list_t *plmn_list))dlsym(dlHandle_nw, "gsw_add_forbidden_networks");
598 if (gsw_add_forbidden_networks == NULL) {
599 printf("gsw_add_forbidden_networks dlysm failed \n");
600 return -1;
601 }
602
603 gsw_remove_forbidden_networks = (int(*)(gsw_nw_plmn_list_t *plmn_list))dlsym(dlHandle_nw, "gsw_remove_forbidden_networks");
604 if (gsw_remove_forbidden_networks == NULL) {
605 printf("gsw_remove_forbidden_networks dlysm failed \n");
606 return -1;
607 }
608
609 gsw_clear_forbidden_networks = (int(*)(void))dlsym(dlHandle_nw, "gsw_clear_forbidden_networks");
610 if (gsw_clear_forbidden_networks == NULL) {
611 printf("gsw_clear_forbidden_networks dlysm failed \n");
612 return -1;
613 }
614
615 gsw_get_mobile_operator_name = (int(*)(gsw_mobile_operator_name *nw_operator_name_infos))dlsym(dlHandle_nw, "gsw_get_mobile_operator_name");
616 if (gsw_get_mobile_operator_name == NULL) {
617 printf("gsw_get_mobile_operator_name dlysm failed \n");
618 return -1;
619 }
620
621 gsw_reg_set_modem_status_event_callback = (int(*)(GSW_NW_ModemStateHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_set_modem_status_event_callback");
622 if (gsw_reg_set_modem_status_event_callback == NULL) {
623 printf("gsw_reg_set_modem_status_event_callback dlysm failed \n");
624 return -1;
625 }
626
627 gsw_get_cell_info = (int(*)(GSW_NW_CELL_INFO *cell_info))dlsym(dlHandle_nw, "gsw_get_cell_info");
628 if (gsw_get_cell_info == NULL) {
629 printf("gsw_get_cell_info dlysm failed \n");
630 return -1;
631 }
632
633 gsw_reg_serving_info_callback = (int(*)(GSW_NW_ServingInfoHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_serving_info_callback");
634 if (gsw_reg_serving_info_callback == NULL) {
635 printf("gsw_reg_serving_info_callback dlysm failed \n");
636 return -1;
637 }
638
639 gsw_reg_sig_info_callback = (int(*)(GSW_NW_SigInfoHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_sig_info_callback");
640 if (gsw_reg_sig_info_callback == NULL) {
641 printf("gsw_reg_sig_info_callback dlysm failed \n");
642 return -1;
643 }
644
645 gsw_reg_rej_cause_callback = (int(*)(GSW_NW_RejectCauseHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_rej_cause_callback");
646 if (gsw_reg_rej_cause_callback == NULL) {
647 printf("gsw_reg_rej_cause_callback dlysm failed \n");
648 return -1;
649 }
650
651 gsw_oos_config_get = (int(*)(GSW_NW_OOS_CONFIG_INFO_T *oos_config))dlsym(dlHandle_nw, "gsw_oos_config_get");
652 if (gsw_oos_config_get == NULL) {
653 printf("gsw_oos_config_get dlysm failed \n");
654 return -1;
655 }
656
657 gsw_oos_config_set = (int(*)(GSW_NW_OOS_CONFIG_INFO_T *oos_config))dlsym(dlHandle_nw, "gsw_oos_config_set");
658 if (gsw_oos_config_set == NULL) {
659 printf("gsw_oos_config_set dlysm failed \n");
660 return -1;
661 }
662
q.huang238b22a2025-06-10 14:36:59 +0800663 gsw_get_imei = (int(*)(int32_t len, int8_t *imei))dlsym(dlHandle_nw,"gsw_get_imei");
664 if (gsw_get_imei == NULL) {
665 printf("dlsym gsw_get_imei fail\n");
666 return GSW_HAL_FAIL;
667 }
668
669 gsw_reset_modem = (int(*)(void))dlsym(dlHandle_nw,"gsw_reset_modem");
670 if (gsw_reset_modem == NULL) {
671 printf("dlsym gsw_reset_modem fail\n");
672 return GSW_HAL_FAIL;
673 }
674
q.huangc8b93122025-06-17 17:46:05 +0800675 gsw_reg_operating_mode_callback = (int(*)(GSW_NW_AirplaneModeHandlePtr handle_ptr))dlsym(dlHandle_nw,"gsw_reg_operating_mode_callback");
676 if (gsw_reg_operating_mode_callback == NULL) {
677 printf("dlsym gsw_reg_operating_mode_callback fail\n");
678 return GSW_HAL_FAIL;
679 }
680
b.liu68a94c92025-05-24 12:53:41 +0800681 return 0;
682
683}
q.huang638d5872025-06-21 13:44:43 +0800684
b.liu68a94c92025-05-24 12:53:41 +0800685static void gsw_serving_info_callback(GSW_NW_SERVING_INFO serving_info)
686{
687 printf("gsw_serving_info_callback: \n");
688 printf("reg_state = %d\n", serving_info.reg_state);
689 printf("ps_state = %d\n", serving_info.ps_state);
690 printf("reg_rat = %d\n", serving_info.reg_rat);
691 printf("srv_domain = %d\n", serving_info.srv_domain);
692 printf("roaming_ind = %d\n", serving_info.roaming_ind);
693 printf("reg_plmn = %s\n", serving_info.reg_plmn);
694 printf("operator_name = %s\n", serving_info.operator_name);
695 printf("cell_id = %s\n", serving_info.cell_id);
696 printf("tac = %s\n", serving_info.tac);
697 printf("lac = %s\n", serving_info.lac);
698 printf("sid = %d\n", serving_info.sid);
699 printf("nid = %d\n", serving_info.nid);
700}
701
702static void gsw_sig_info_callback(signalStrength_t sig_info)
703{
704 printf("gsw_sig_info_callback: \n");
705 printf("gw_sig_valid = %d\n", sig_info.gw_sig_valid);
706 printf("rssi = %d\n", sig_info.rssi);
707 printf("wcdma_sig_valid = %d\n", sig_info.wcdma_sig_valid);
708 printf("rscp = %d\n", sig_info.rscp);
709 printf("ecno = %d\n", sig_info.ecno);
710 printf("lte_sig_valid = %d\n", sig_info.lte_sig_valid);
711 printf("rsrp = %d\n", sig_info.rsrp);
712 printf("rsrq = %d\n", sig_info.rsrq);
713 printf("rssnr = %d\n", sig_info.rssnr);
714 printf("nr_sig_valid = %d\n", sig_info.nr_sig_valid);
715 printf("ssRsrp = %d\n", sig_info.ssRsrp);
716 printf("ssRsrq = %d\n", sig_info.ssRsrq);
717 printf("ssSinr = %d\n", sig_info.ssSinr);
718 printf("csiRsrp = %d\n", sig_info.csiRsrp);
719 printf("csiRsrq = %d\n", sig_info.csiRsrq);
720 printf("csiSinr = %d\n", sig_info.csiSinr);
721}
722
723static void gsw_rej_cause_callback(GSW_NW_REJ_CAUSE_E *rej_cause)
724{
725 printf("gsw_rej_cause_callback: \n");
726 printf("rej_rat = %d\n", rej_cause->rej_rat);
727 printf("rej_domain = %d\n", rej_cause->rej_domain);
728 printf("rej_cause = %d\n", rej_cause->rej_cause);
729}
730
731static void gsw_modem_status_cb(gsw_mode_state_e state)
732{
733 printf("gsw_modem_status_cb: \n");
734 printf("state = %d\n", state);
735}
736
q.huangc8b93122025-06-17 17:46:05 +0800737static void gsw_operating_state_cb(int airplane_mode)
738{
739 printf("gsw_operating_state_cb: \n");
740 printf("airplane mode = %d\n", airplane_mode);
741}
742
743
b.liu68a94c92025-05-24 12:53:41 +0800744
745void dump_items()
746{
747 printf("\n");
748 printf("The current module is: network \n");
749
750 printf("-------------------------------------------------------------------------\n");
751 printf("| index | function name |\n");
752 printf("| -1 exit\n");
753 printf(" 1 gsw_nw_sdk_init\n");
754 printf(" 2 gsw_nw_sdk_deinit\n");
755 printf(" 3 gsw_get_nwinfo\n");
756 printf(" 4 gsw_get_netype\n");
757 printf(" 5 gsw_get_opmode\n");
758 printf(" 6 gsw_set_opmode\n");
759 printf(" 7 gsw_get_mode_preference\n");
760 printf(" 8 gsw_set_mode_preference\n");
761 printf(" 9 gsw_get_sig_info\n");
762 printf(" 10 gsw_network_set_power_mode\n");
763 printf(" 11 gsw_sigInfo_to_csq\n");
764 printf(" 12 gsw_get_forbidden_networks\n");
765 printf(" 13 gsw_add_forbidden_networks\n");
766 printf(" 14 gsw_remove_forbidden_networks\n");
767 printf(" 15 gsw_clear_forbidden_networks\n");
768 printf(" 16 gsw_get_mobile_operator_name\n");
769 printf(" 17 gsw_reg_set_modem_status_event_callback\n");
770 printf(" 18 gsw_get_cell_info\n");
771 printf(" 19 gsw_reg_serving_info_callback\n");
772 printf(" 20 gsw_reg_sig_info_callback\n");
773 printf(" 21 gsw_reg_rej_cause_callback\n");
774 printf(" 22 gsw_oos_config_get\n");
775 printf(" 23 gsw_oos_config_set\n");
q.huang238b22a2025-06-10 14:36:59 +0800776 printf(" 24 gsw_get_imei\n");
777 printf(" 25 gsw_reset modem\n");
q.huangc8b93122025-06-17 17:46:05 +0800778 printf(" 26 gsw_reg_operating_mode_callback\n");
b.liu68a94c92025-05-24 12:53:41 +0800779 printf("-------------------------------------------------------------------------\n");
780}
781
782int main(int argc, char *argv[])
783{
784 int ret;
785 char operator[10];
786 int opt;
787
788 ret = gsw_nw_api_import();
789 if (ret != 0) {
q.huangc8b93122025-06-17 17:46:05 +0800790 printf("gsw_nw_api_import failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800791 return -1;
792 }
793
794
795 while(1)
796 {
797 dump_items();
798 printf("input the index of module: ");
799
800 opt = -1;
801 printf("%s",fgets(operator, sizeof(operator), stdin));
802 fflush(stdin);
803
804 opt = atoi(operator);
805 switch (opt) {
806 case -1:
807 {
808 printf("main exit\n");
809 return 0;
810 }
811 case 1:
812 {
813 printf("gsw_nw_sdk_init\n");
814 ret = gsw_nw_sdk_init(1024);
815 printf("gsw_nw_sdk_init ret = %d\n",ret);
816 break;
817 }
818 case 2:
819 {
820 printf("gsw_nw_sdk_deinit\n");
821 ret = gsw_nw_sdk_deinit();
822 printf("gsw_nw_sdk_deinit ret = %d\n",ret);
823 break;
824 }
825 case 3:
826 {
827 GSW_NW_SERVING_INFO* nwinfo;
828 nwinfo = (GSW_NW_SERVING_INFO*)malloc(sizeof(GSW_NW_SERVING_INFO));
829 memset(nwinfo, 0x00, sizeof(GSW_NW_SERVING_INFO));
830 printf("gsw_get_nwinfo start\n");
831 ret = gsw_get_nwinfo(nwinfo);
832 if(ret != 0)
833 {
q.huangc8b93122025-06-17 17:46:05 +0800834 printf("gsw_get_nwinfo failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800835 continue;
836 }
q.huang638d5872025-06-21 13:44:43 +0800837 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);
b.liu68a94c92025-05-24 12:53:41 +0800838 free(nwinfo);
839 break;
840 }
841 case 4:
842 {
843 int nettype;
844 ret = gsw_get_netype(&nettype);
845 if(ret != 0)
846 {
q.huangc8b93122025-06-17 17:46:05 +0800847 printf("gsw_get_netype failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800848 continue;
849 }
850 printf("nettype = %d\n", nettype);
851 break;
852 }
853
854 case 5:
855 {
856 int opmode;
857 ret = gsw_get_opmode(&opmode);
858 if(ret != 0)
859 {
q.huangc8b93122025-06-17 17:46:05 +0800860 printf("gsw_get_opmode failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800861 continue;
862 }
863 printf("opmode = %d\n", opmode);
864 break;
865 }
866
867 case 6:
868 {
869 printf("input the opmode: ");
870 memset(operator,0x00, sizeof(operator));
871 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
872 fflush(stdin);
873 opt = atoi(operator);
874 ret = gsw_set_opmode(opt);
875 if(ret != 0)
876 {
q.huangc8b93122025-06-17 17:46:05 +0800877 printf("gsw_set_opmode failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800878 continue;
879 }
880 break;
881 }
882
883 case 7:
884 {
885 int mode_pref;
886 ret = gsw_get_mode_preference(&mode_pref);
887 if(ret != 0)
888 {
q.huangc8b93122025-06-17 17:46:05 +0800889 printf("gsw_get_mode_preference failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800890 continue;
891 }
892 printf("mode_pref = %d\n", mode_pref);
893 break;
894 }
895
896 case 8:
897 {
898 printf("input the mode_pref: ");
899 memset(operator,0x00, sizeof(operator));
900 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
901 fflush(stdin);
902 opt = atoi(operator);
903 ret = gsw_set_mode_preference(opt);
904 if(ret != 0)
905 {
q.huangc8b93122025-06-17 17:46:05 +0800906 printf("gsw_set_mode_preference failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800907 continue;
908 }
909 break;
910 }
911
912 case 9:
913 {
914 int siginfo;
915 ret = gsw_get_sig_info(&siginfo);
916 if(ret != 0)
917 {
q.huangc8b93122025-06-17 17:46:05 +0800918 printf("gsw_get_sig_info failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800919 continue;
920 }
921 printf("signal info: siginfo = %d\n", siginfo);
922 break;
923 }
924
925 case 10:
926 {
927 printf("input the power mode: ");
928 memset(operator,0x00, sizeof(operator));
929 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
930 fflush(stdin);
931 opt = atoi(operator);
932 ret = gsw_network_set_power_mode(opt);
933 if(ret != 0)
934 {
q.huangc8b93122025-06-17 17:46:05 +0800935 printf("gsw_network_set_power_mode failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800936 continue;
937 }
938 break;
939 }
940
941 case 11:
942 {
943 int nettype;
944 int sigValue;
945 printf("please input the netType:");
946 memset(operator,0x00, sizeof(operator));
947 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
948 fflush(stdin);
949 nettype = atoi(operator);
950
951 printf("input the sigValue: ");
952 memset(operator,0x00, sizeof(operator));
953 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
954 fflush(stdin);
955 sigValue = atoi(operator);
956
957 ret = gsw_sigInfo_to_csq(nettype, sigValue);
958 printf("csq = %d\n", ret);
959
960 break;
961 }
962
963 case 12:
964 {
965 printf("gsw_get_forbidden_networks start\n");
966 gsw_nw_plmn_list_t fplmn_list;
967 fplmn_list.plmn_list_len = 0;
968 ret = gsw_get_forbidden_networks(&fplmn_list);
969 if(ret != 0)
970 {
q.huangc8b93122025-06-17 17:46:05 +0800971 printf("gsw_get_forbidden_networks failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800972 continue;
973 }
974
975 printf("gsw_get_forbidden_networks end\n");
976 for(int i = 0; i < fplmn_list.plmn_list_len; i++)
977 {
978 printf("list[%d] mcc = %s,mnc = %s\n",i, fplmn_list.plmn_list[i].mcc, fplmn_list.plmn_list[i].mnc);
979 }
980
981 break;
982 }
983 case 13:
984 {
985 printf("gsw_add_forbidden_networks start\n");
986 gsw_nw_plmn_list_t fplmn_list_set;
987 fplmn_list_set.plmn_list_len = 1;
988 strcpy(fplmn_list_set.plmn_list[0].mcc, "460");
989 strcpy(fplmn_list_set.plmn_list[0].mnc, "09");
990
991 ret = gsw_add_forbidden_networks(&fplmn_list_set);
992 if(ret != 0)
993 {
q.huangc8b93122025-06-17 17:46:05 +0800994 printf("gsw_add_forbidden_networks failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800995 continue;
996 }
997 printf("gsw_add_forbidden_networks end\n");
998 break;
999 }
1000 case 14:
1001 {
1002 printf("gsw_add_forbidden_networks start\n");
1003 gsw_nw_plmn_list_t fplmn_list_remove;
1004 fplmn_list_remove.plmn_list_len = 1;
1005 strcpy(fplmn_list_remove.plmn_list[0].mcc, "460");
1006 strcpy(fplmn_list_remove.plmn_list[0].mnc, "02");
1007
1008 ret = gsw_remove_forbidden_networks(&fplmn_list_remove);
1009 if(ret != 0)
1010 {
q.huangc8b93122025-06-17 17:46:05 +08001011 printf("gsw_add_forbidden_networks failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001012 continue;
1013 }
1014 printf("gsw_add_forbidden_networks end\n");
1015 break;
1016 }
1017
1018 case 15:
1019 {
1020 printf("gsw_clear_forbidden_networks start\n");
1021 ret = gsw_clear_forbidden_networks();
1022 if(ret != 0)
1023 {
q.huangc8b93122025-06-17 17:46:05 +08001024 printf("gsw_clear_forbidden_networks failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001025 continue;
1026 }
1027 printf("gsw_clear_forbidden_networks end\n");
1028 break;
1029 }
1030
1031 case 16:
1032 {
1033 gsw_mobile_operator_name opname;
1034
1035 ret = gsw_get_mobile_operator_name(&opname);
1036 if(ret != 0)
1037 {
q.huangc8b93122025-06-17 17:46:05 +08001038 printf("gsw_get_mobile_operator_name failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001039 continue;
1040 }
1041
1042 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);
1043 break;
1044 }
1045
1046 case 17:
1047 {
1048 printf("gsw_reg_set_modem_status_event_callback\n");
q.huang66b79162025-06-27 17:45:34 +08001049 printf("Do you need to test null callback (0:no , 1:yes)\n");
1050 int op=0;
1051 printf("%d\n",scanf("%d", &op));
1052 if(op==0)
1053 {
1054 ret = gsw_reg_set_modem_status_event_callback(gsw_modem_status_cb);
1055 }
1056 else
1057 {
1058 ret = gsw_reg_set_modem_status_event_callback(NULL);
1059 }
b.liu68a94c92025-05-24 12:53:41 +08001060 if(ret != 0)
1061 {
q.huangc8b93122025-06-17 17:46:05 +08001062 printf("gsw_reg_set_modem_status_event_callback failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001063 continue;
1064 }
1065 printf("gsw_reg_set_modem_status_event_callback success\n");
1066 break;
1067 }
1068
1069 case 18:
1070 {
1071 printf("gsw_get_cell_info starts\n");
1072 GSW_NW_CELL_INFO cell_info;
1073 memset(&cell_info, 0x00, sizeof(GSW_NW_CELL_INFO));
1074 ret = gsw_get_cell_info(&cell_info);
1075 if(ret != 0)
1076 {
q.huangc8b93122025-06-17 17:46:05 +08001077 printf("gsw_get_cell_info failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001078 continue;
1079 }
1080
1081 printf("--------------------serving cell info ------------------------------\n");
1082 printf("mcc_valid = %d\n",cell_info.mcc_valid);
1083 printf("mcc = %s\n",cell_info.mcc);
1084 printf("mnc_valid = %d\n",cell_info.mnc_valid);
1085 printf("mnc = %s\n",cell_info.mnc);
1086 printf("cell_id_valid = %d\n",cell_info.cell_id_valid);
1087 printf("cell_id = %u\n",cell_info.cell_id);
1088 printf("pci_valid = %d\n",cell_info.pci_valid);
1089 printf("pci = %d\n",cell_info.pci);
1090 printf("psc_valid = %d\n",cell_info.psc_valid);
1091 printf("psc = %d\n",cell_info.psc);
1092 printf("earfcn_valid = %d\n",cell_info.earfcn_valid);
1093 printf("earfcn = %d\n",cell_info.earfcn);
1094 printf("uarfcn_valid = %d\n",cell_info.uarfcn_valid);
1095 printf("uarfcn = %d\n",cell_info.uarfcn);
1096 printf("arfcn_valid = %d\n",cell_info.arfcn_valid);
1097 printf("arfcn = %d\n",cell_info.arfcn);
1098 printf("tac_valid = %d\n",cell_info.tac_valid);
1099 printf("tac = %u\n",cell_info.tac);
1100 printf("lac_valid = %d\n",cell_info.lac_valid);
1101 printf("lac = %u\n",cell_info.lac);
1102 printf("sid_valid = %d\n",cell_info.sid_valid);
1103 printf("sid = %d\n",cell_info.sid);
1104 printf("nid_valid = %d\n",cell_info.nid_valid);
1105 printf("nid = %d\n",cell_info.nid);
1106 printf("lteMode_valid = %d\n",cell_info.lteMode_valid);
1107 printf("lteMode = %d\n",cell_info.lteMode);
1108 printf("rssi_valid = %d\n",cell_info.rssi_valid);
1109 printf("rssi = %d\n",cell_info.rssi);
1110 printf("rsrq_valid = %d\n",cell_info.rsrq_valid);
1111 printf("rsrq = %d\n",cell_info.rsrq);
1112 printf("ecio_valid = %d\n",cell_info.ecio_valid);
1113 printf("ecio = %d\n",cell_info.ecio);
1114 printf("rsrp_valid = %d\n",cell_info.rsrp_valid);
1115 printf("rsrp = %d\n",cell_info.rsrp);
1116 printf("rsrq_valid = %d\n",cell_info.rsrq_valid);
1117 printf("rsrq = %d\n",cell_info.rsrq);
1118 printf("rssnr_valid = %d\n",cell_info.rssnr_valid);
1119 printf("rssnr = %d\n",cell_info.rssnr);
1120 printf("band_valid = %d\n",cell_info.band_valid);
1121 printf("band = %d\n",cell_info.band);
1122 printf("bler_valid = %d\n",cell_info.bler_valid);
1123 printf("bler = %d\n",cell_info.bler);
1124
1125
1126 printf("-----------------------------------------------------------------------------------\n");
1127
1128 printf("-------------------------------------inter cell info ------------------------------\n");
1129
q.huang638d5872025-06-21 13:44:43 +08001130 printf("ext_info_len = %d\n",cell_info.ext_info_len);
1131
1132 for(int i = 0; i <cell_info.ext_info_len ; i++)
b.liu68a94c92025-05-24 12:53:41 +08001133 {
1134 printf("-----------------------------------------------------------\n");
1135 printf("inter cell info[%d] rat = %d\n",i,cell_info.ext_info[i].rat);
1136
b.liu68a94c92025-05-24 12:53:41 +08001137 printf("inter cell info[%d] pci_valid = %d\n",i,cell_info.ext_info[i].pci_valid);
1138 printf("inter cell info[%d] pci = %d\n",i,cell_info.ext_info[i].pci);
1139
1140 printf("inter cell info[%d] arfcn_valid = %d\n",i,cell_info.ext_info[i].arfcn_valid);
1141 printf("inter cell info[%d] arfcn = %d\n",i,cell_info.ext_info[i].arfcn);
1142
1143 printf("inter cell info[%d] rsrp_valid = %d\n",i,cell_info.ext_info[i].rsrp_valid);
1144 printf("inter cell info[%d] rsrp = %d\n",i,cell_info.ext_info[i].rsrp);
1145
1146 printf("inter cell info[%d] rsrq_valid = %d\n",i,cell_info.ext_info[i].rsrq_valid);
1147 printf("inter cell info[%d] rsrq = %d\n",i,cell_info.ext_info[i].rsrq);
1148
q.huang638d5872025-06-21 13:44:43 +08001149 printf("inter cell info[%d] mcc = %s\n",i,cell_info.ext_info[i].mcc);
1150
1151 printf("inter cell info[%d] mnc = %s\n",i,cell_info.ext_info[i].mnc);
1152
b.liu68a94c92025-05-24 12:53:41 +08001153 printf("inter cell info[%d] cell_id_valid = %d\n",i,cell_info.ext_info[i].cell_id_valid);
1154 printf("inter cell info[%d] cell_id = %u\n",i,cell_info.ext_info[i].cell_id);
1155
1156 printf("inter cell info[%d] band_valid = %d\n",i,cell_info.ext_info[i].band_valid);
1157 printf("inter cell info[%d] band = %u\n",i,cell_info.ext_info[i].band);
1158
q.huang638d5872025-06-21 13:44:43 +08001159 printf("inter cell info[%d] rssi_valid = %d\n",i,cell_info.ext_info[i].rssi_valid);
1160 printf("inter cell info[%d] rssi = %d\n",i,cell_info.ext_info[i].rssi);
1161
b.liu68a94c92025-05-24 12:53:41 +08001162 printf("-----------------------------------------------------------\n");
1163 }
1164
1165
1166 break;
1167 }
1168
1169 case 19:
1170 {
1171 printf("gsw_reg_serving_info_callback start\n");
q.huang934ec0e2025-07-22 19:56:59 +08001172 printf("Do you need to test null callback (0:no , 1:yes)\n");
1173 int op=0;
1174 printf("%d\n",scanf("%d", &op));
1175 if(op==0)
1176 {
1177 ret = gsw_reg_serving_info_callback(gsw_serving_info_callback);
1178 }
1179 else
1180 {
1181 ret = gsw_reg_serving_info_callback(NULL);
1182 }
1183 if(ret != 0)
1184 {
1185 printf("gsw_reg_serving_info_callback failed, ret is %d\n",ret);
1186 continue;
1187 }
1188 printf("gsw_reg_serving_info_callback success\n");
b.liu68a94c92025-05-24 12:53:41 +08001189 break;
1190 }
1191
1192 case 20:
1193 {
1194 printf("gsw_reg_sig_info_callback start\n");
q.huang66b79162025-06-27 17:45:34 +08001195 printf("Do you need to test null callback (0:no , 1:yes)\n");
1196 int op=0;
1197 printf("%d\n",scanf("%d", &op));
1198 if(op==0)
1199 {
1200 ret = gsw_reg_sig_info_callback(gsw_sig_info_callback);
1201 }
1202 else
1203 {
1204 ret = gsw_reg_sig_info_callback(NULL);
1205 }
1206 if(ret != 0)
1207 {
1208 printf("gsw_reg_sig_info_callback failed, ret is %d\n",ret);
1209 continue;
1210 }
1211 printf("gsw_reg_sig_info_callback success\n");
1212
b.liu68a94c92025-05-24 12:53:41 +08001213 break;
1214 }
1215
1216 case 21:
1217 {
1218 printf("gsw_reg_rej_cause_callback\n");
q.huang934ec0e2025-07-22 19:56:59 +08001219 printf("Do you need to test null callback (0:no , 1:yes)\n");
1220 int op=0;
1221 printf("%d\n",scanf("%d", &op));
1222 if(op==0)
1223 {
1224 ret = gsw_reg_rej_cause_callback(gsw_rej_cause_callback);
1225 }
1226 else
1227 {
1228 ret = gsw_reg_rej_cause_callback(NULL);
1229 }
1230 if(ret != 0)
1231 {
1232 printf("gsw_reg_rej_cause_callback failed, ret is %d\n",ret);
1233 continue;
1234 }
1235 printf("gsw_reg_rej_cause_callback success\n");
b.liu68a94c92025-05-24 12:53:41 +08001236 break;
1237 }
1238
1239 case 22:
1240 {
1241 printf("gsw_oos_config_get\n");
1242 GSW_NW_OOS_CONFIG_INFO_T oos_cfg;
1243 ret = gsw_oos_config_get(&oos_cfg);
1244 if(ret != 0)
1245 {
q.huangc8b93122025-06-17 17:46:05 +08001246 printf("gsw_oos_config_get failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001247 continue;
1248 }
1249
1250 else
1251 {
1252 printf("oos_cfg.t_min = %d\n",oos_cfg.t_min);
1253 printf("oos_cfg.t_max = %d\n",oos_cfg.t_max);
1254 printf("oos_cfg.t_step = %d\n",oos_cfg.t_step);
1255 }
1256 break;
1257 }
1258
1259 case 23:
1260 {
1261 printf("gsw_oos_config_set\n");
1262 GSW_NW_OOS_CONFIG_INFO_T oos_cfg;
1263 oos_cfg.t_min = 5;
1264 oos_cfg.t_step = 5;
1265 oos_cfg.t_max = 5;
1266
1267 ret = gsw_oos_config_set(&oos_cfg);
1268 if(ret != 0)
1269 {
q.huangc8b93122025-06-17 17:46:05 +08001270 printf("gsw_oos_config_set failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001271 continue;
1272 }
1273 else
1274 {
1275 printf("gsw_oos_config_set success\n");
1276 }
1277 break;
1278 }
1279
q.huang238b22a2025-06-10 14:36:59 +08001280
1281 case 24:
1282 {
1283 char imei[GSW_IMEI_LENGTH] = {0};
1284 ret = gsw_get_imei(GSW_IMEI_LENGTH, (int8_t *)imei);
1285 if(ret == 0)
1286 {
1287 printf("gsw_get_imei success, imei = %s\n",imei);
1288 }
1289 else
1290 {
1291 printf("gsw_get_imei fail,ret = %d\n",ret);
1292 }
1293 break;
1294 }
1295 //reset modem
1296 case 25:
1297 {
1298 ret = gsw_reset_modem();
1299 if(ret == 0)
1300 {
1301 printf("gsw_reset_modem success\n");
1302 }
1303 else
1304 {
1305 printf("gsw_reset_modem fail,ret = %d\n",ret);
1306 }
1307 break;
1308 }
q.huangc8b93122025-06-17 17:46:05 +08001309 case 26:
1310 {
1311 printf("gsw_reg_operating_mode_callback\n");
q.huang934ec0e2025-07-22 19:56:59 +08001312 printf("Do you need to test null callback (0:no , 1:yes)\n");
1313 int op=0;
1314 printf("%d\n",scanf("%d", &op));
1315 if(op==0)
1316 {
1317 ret = gsw_reg_operating_mode_callback(gsw_operating_state_cb);
1318 }
1319 else
1320 {
1321 ret = gsw_reg_operating_mode_callback(NULL);
1322 }
q.huangc8b93122025-06-17 17:46:05 +08001323 if(ret != 0)
1324 {
1325 printf("gsw_reg_operating_mode_callback failed, ret is %d\n",ret);
q.huang934ec0e2025-07-22 19:56:59 +08001326 continue;
q.huangc8b93122025-06-17 17:46:05 +08001327 }
1328 printf("gsw_reg_operating_mode_callback success\n");
1329 break;
1330 }
b.liu68a94c92025-05-24 12:53:41 +08001331 default:
1332 {
1333 continue;
1334 }
1335
1336
1337 }
1338 }
1339
1340
1341}