blob: 5082226a7878df360079f85064e903f13d645a2f [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{
89 // LTE server cell: tac, PCI, dlEuarfcn, ulEuarfcn, band
90 // LTE cell: phyCellId,euArfcn,rsrp,rsrq
91 // WCDMA server cell: lac, ci, arfcn
92 // WCDMA cell: lac, ci, arfcn
93 // GSM server cell: lac, ci, arfcn, bsic
94 // GSM cell:
95 mbtk_cell_type_enum type : 8;
96 uint32 value1; //tac
97 uint32 value2; //pci
98 uint32 value3; //dlEuarfcn
99 uint32 value4; //ul arfcn
100 uint32 value5; //band
101 uint32 value6; //mcc
102 uint32 value7; //mnc
103 uint32 value8; //cid
104 uint32 value9; //rsrp
105 uint32 value10; //cell identiy
106} __attribute__((packed)) mbtk_cell_info_t;
107
108
109
110
111
112typedef struct
113{
114 uint8 net_pref; // mbtk_net_pref_enum
115 uint16 gsm_band; // mbtk_gsm_band_enum
116 uint16 umts_band; // mbtk_umts_band_enum
117 uint32 tdlte_band; // mbtk_tdlte_band_enum
118 uint32 fddlte_band; // mbtk_fddlte_band_enum
119 uint32 lte_ext_band; // mbtk_lte_ext_band_enum
120} __attribute__((packed)) mbtk_band_info_t;
121
122typedef struct list_arraynode
123{
124 void *data;
125 struct list_arraynode *next;
126} list_arraynode_t;
127
128typedef struct list_treenode
129{
130 list_arraynode_t *data;
131 int count;
132 struct list_treenode *left;
133 struct list_treenode *right;
134} list_treenode_t;
135
136typedef int (*list_sort_func)(void *data1, void *data2);
137typedef void (*list_free_func)(void *data);
138
139typedef struct list_node
140{
141 uint32 size;
142 list_sort_func sort_func;
143 list_free_func free_func;
144
145 uint32 cur_index;
146 list_arraynode_t *cur_array_data;
147
148 list_arraynode_t array_data;
149 list_treenode_t tree_data;
150} list_node_t;
151
152/*
1530: GSM
1541: GSM Compact
1552: UTRAN
1563: GSM w/EGPRS
1574: UTRAN w/HSDPA
1585: UTRAN w/HSUPA
1596: UTRAN w/HSDPA and HSUPA
1607: E-UTRAN
1618: UTRAN HSPA+
162*/
163typedef enum {
164 MBTK_RADIO_TECH_GSM = 0,
165 MBTK_RADIO_TECH_GSM_COMPACT,
166 MBTK_RADIO_TECH_UTRAN,
167 MBTK_RADIO_TECH_GSM_EGPRS,
168 MBTK_RADIO_TECH_UTRAN_HSDPA,
169 MBTK_RADIO_TECH_UTRAN_HSUPA,
170 MBTK_RADIO_TECH_UTRAN_HSDPA_HSUPA,
171 MBTK_RADIO_TECH_E_UTRAN, // LTE
172 MBTK_RADIO_TECH_UTRAN_HSPA
173} mbtk_radio_technology_enum;
174
175typedef struct
176{
177 /*
178 0: automatic
179 1: manual
180 */
181 uint8 net_sel_mode;
182 /*
183 0: GSM
184 1: GSM Compact
185 2: UTRAN
186 3: GSM w/EGPRS
187 4: UTRAN w/HSDPA
188 5: UTRAN w/HSUPA
189 6: UTRAN w/HSDPA and HSUPA
190 7: E-UTRAN
191 8: UTRAN HSPA+
192 0xFF: Unused
193 */
194 uint8 net_type;
195 //uint8 plmn[10]; // 46000
196 /*
197 0: unknown
198 1: available
199 2: current
200 3: forbidden
201 */
202 uint8 net_state;
203 uint32 plmn;
204} __attribute__((packed)) mbtk_net_info_t;
205
206
207typedef enum
208{
209 MBTK_NET_REG_STATE_NON = 0,
210 MBTK_NET_REG_STATE_HOME,
211 MBTK_NET_REG_STATE_SEARCHING,
212 MBTK_NET_REG_STATE_DENIED,
213 MBTK_NET_REG_STATE_UNKNOWN,
214 MBTK_NET_REG_STATE_ROAMING,
215 MBTK_NET_REG_STATE_SMS_ONLY,
216 MBTK_NET_REG_STATE_ROAMING_SMS,
217 MBTK_NET_REG_STATE_ATTACHED_EMERGENCY,
218 MBTK_NET_REG_STATE_CSFB_HOME,
219 MBTK_NET_REG_STATE_CSFB_ROAMING,
220 MBTK_NET_REG_STATE_EMERGENCY_ONLY
221} mbtk_net_reg_state_enum;
222
223typedef struct
224{
225 uint8 call_state;// mbtk_net_reg_state_enum
226 uint8 data_state;// mbtk_net_reg_state_enum
227 uint8 ims_state;// mbtk_net_reg_state_enum
228 uint8 type; // mbtk_radio_technology_enum
229 uint16 lac;
230 uint32 ci;
231} __attribute__((packed)) mbtk_net_reg_info_t;
232
233typedef struct
234{
235 uint8 type; // mbtk_radio_technology_enum
236 uint8 rssi; // 0: 113 dBm or less
237 // 1: 111 dBm
238 // 2��30: 109��53 dBm
239 // 31: 51 dBm or greater
240 // 99: not known or not detectable
241 uint8 rxlev;// 0:rssi < -110 dBm
242 // 1: -110 dBm �� rssi < -109 dBm
243 // 2: -109 dBm �� rssi < -108 dBm
244 // ......
245 // 61: -50 dBm �� rssi < -49 dBm
246 // 62: -49 dBm �� rssi < -48 dBm
247 // 63: -48 dBm �� rssi
248 // 99: not known or not detectable
249 uint8 ber; // 0...7 as RXQUAL values in the table in 3GPP TS 45.008 [20] subclause 8.2.4
250 // 99 not known or not detectable
251 uint8 rscp; // 0: rscp < -120 dBm
252 // 1: -120 dBm �� rscp < -119 dBm
253 // 2: -119 dBm �� rscp < -118 dBm
254 // ......
255 // 94: -27 dBm �� rscp < -26 dBm
256 // 95: -26 dBm �� rscp < -25 dBm
257 // 96: - 25 dBm �� rscp
258 // 255: not known or not detectable
259 uint8 ecno; // 0: Ec/Io < -24 dB
260 // 1: -24 dB �� Ec/Io < -23.5 dB
261 // 2: -23.5 dB �� Ec/Io < -23 dB
262 // ......
263 // 47: -1 dB �� Ec/Io < -0.5 dB
264 // 48: -0.5 dB �� Ec/Io < 0 dB
265 // 49: 0 dB �� Ec/Io
266 // 255: not known or not detectable
267 uint8 rsrq; // 0: rsrq < -19.5 dB
268 // 1: -19.5 dB �� rsrq < -19 dB
269 // 2: -19 dB �� rsrq < -18.5 dB
270 // ......
271 // 32: -4 dB �� rsrq < -3.5 dB
272 // 33: -3.5 dB �� rsrq < -3 dB
273 // 34: -3 dB �� rsrq
274 // 255: not known or not detectable
275 uint8 rsrp; // 0: rsrp < -140 dBm
276 // 1: -140 dBm �� rsrp < -139 dBm
277 // 2: -139 dBm �� rsrp < -138 dBm
278 // ......
279 // 95: -46 dBm �� rsrp < -45 dBm
280 // 96: -45 dBm �� rsrp < -44 dBm
281 // 97: -44 dBm �� rsrp
282 // 255: not known or not detectable
283} __attribute__((packed)) mbtk_signal_info_t;
284
285#define lib_gsw_nw_path "/lib/libgsw_lib.so"
286static void *dlHandle_nw = NULL;
287
288//gsw include
289
290
291#define GSW_HAL_SUCCESS 0
292#define GSW_HAL_FAIL -1
293#define GSW_HAL_MEM_INVAILD -2
q.huang50e8e942025-06-17 18:07:03 +0800294#define GSW_NW_OPERATION_NAME_LEN 32
b.liu68a94c92025-05-24 12:53:41 +0800295#define GSW_NW_PLMN_LEN 6
296#define GSW_NW_MCC_LEN 3
297#define GSW_NW_MNC_LEN 3
298#define GSW_NW_PARA_MAX_LEN 128
299#define GSW_MCC_MAX_LEN 16
300#define GSW_MNC_MAX_LEN 16
301#define GSW_APN_CHANNEL_MAX 10
302#define GSW_POXY_ADDR_MAX_LEN 64
303#define GSW_PDP_TYPE_MAX_LEN 16
304#define GSW_APN_MAX_LEN 65
305#define GSW_APN_ID_MAX_LEN 32
306#define GSW_APN_TYPE_MAX_LEN 50
307#define GSW_USR_MAX_LEN 16
308#define GSW_PWD_MAX_LEN 16
309#define GSW_AUTH_TYPE_MAX_LEN 50
310#define GSW_PROTOCO_MAX_LEN 64
311#define GSW_CARRIER_ID_MAX_LEN 64
312#define GSW_IFACE_NAME_MAX_LEN 50
313#define GSW_PDP_ADDR_MAX_LEN 64
314#define GSW_DNS_APN_MAX_LEN 64
315#define GSW_GETWAYS_ADDR_MAX_LEN 64
316#define GSW_RSP_MAX_LEN 256
317#define GSW_PLMN_LIST_MAX_LEN 85
318
319
320
321typedef enum service_domain
322{
323 GSW_SRV_DOMAIN_NO_SVC = 0x0, /**< no service */
324 GSW_SRV_DOMAIN_CS_ONLY = 0x1, /**< cs only */
325 GSW_SRV_DOMAIN_PS_ONLY = 0x2, /**< ps only */
326 GSW_SRV_DOMAIN_CS_PS = 0x3, /**< reg all in service */
327} GSW_SERVICE_DOMAIN_E;
328
329typedef enum gsw_network_reg_state
330{
331 GSW_NETWORK_REG_NOT_REGISTERED = 0x0, /**< no service */
332 GSW_NETWORK_REG_REGISTERED = 0x1, /**< reg in service home */
333 GSW_NETWORK_REG_NOT_REGISTERED_SEARCHING = 0x2, /**< searching network */
334 GSW_NETWORK_REG_REGISTRATION_DENIED = 0x3, /**< network denny device */
335 GSW_NETWORK_REG_REGISTRATION_UNKNOWN = 0x4, /**< unknown state */
336 GSW_NETWORK_REG_REGISTRATION_ROAMING = 0x5, /**< roaming state in service */
337 GSW_NETWORK_REG_LIMITED_SERVICE = 0x6, /**< limited service */
338} GSW_NW_REG_STATE_E;
339
340typedef enum gsw_network_radio_interface
341{
342 GSW_NETWORK_RADIO_NO_SVC = 0x0, /**< radio state no service */
343 GSW_NETWORK_RADIO_CDMA_1X = 0x1, /**< cdma 1x */
344 GSW_NETWORK_RADIO_CDMA_1XEVDO = 0x2, /**< cdma evdo */
345 GSW_NETWORK_RADIO_AMPS = 0x3, /**< amps gsm 2g*/
346 GSW_NETWORK_RADIO_GSM = 0x4, /**< gsm */
347 GSW_NETWORK_RADIO_UMTS = 0x5, /**< umts wcdma*/
348 GSW_NETWORK_RADIO_LTE = 0x6, /**< LTE 4G */
349 GSW_NETWORK_RADIO_TDSCDMA = 0x7, /**< TDS 3G*/
350 GSW_NETWORK_RADIO_NR5G = 0x8, /**< NR 5G*/
351} GSW_NW_RADIO_ACCESS_TECH_E;
352
353
354typedef enum gsw_network_roaming_state
355{
356 GSW_NETWORK_ROAMING_OFF = 0x0, /**< roaming off */
357 GSW_NETWORK_ROAMING_ON = 0x1, /**< roaming on*/
358} GSW_NW_ROAMING_STATE_E;
359
360typedef enum oprate_mode
361{
362 GSW_OP_MODE_LPM = 0, /**< radio state off*/
363 GSW_OP_MODE_ONLINE = 1, /**< radio state on*/
364 GSW_OP_MODE_FTM = 2, /**< radio state ftm*/
365 GSW_OP_MODE_OFFLINE = 3, /**< radio state offline*/
366} OPERATE_MODE_E;
367
368typedef enum prefer_mode
369{
370 GSW_PREFER_MODE_GSW = 1, /**<2G only*/
371 GSW_PREFER_MODE_WCDMA = 2, /**< 3G only*/
372 GSW_PREFER_MODE_WCDMA_GSM = 3, /**< 3G/2G*/
373 GSW_PREFER_MODE_LTE = 4, /**< 4G only*/
374 GSW_PREFER_MODE_NR5G = 5, /**< 5G only*/
375 GSW_PREFER_MODE_NR5G_LTE = 8, /**< 5G/4G*/
376 GSW_PREFER_MODE_LTE_WCDMA_GSM = 9, /**< 4G/3G/2G*/
377 GSW_PREFER_MODE_NR5G_LTE_WCDMA_GSM = 32, /**< 5G/4G/3G/2G*/
378} PREFER_MODE_E;
379
380typedef enum gsw_hal_nw_mode_state_type
381{
382 GSW_MODEM_STATE_UNKNOWN = 0,
383 GSW_MODEM_STATE_ONLINE,
384 GSW_MODEM_STATE_OFFLINE,
385 GSW_SDK_STATE_SERVICE_DOWN,
386 GSW_SDK_STATE_SERVICE_UP,// service down->up 需要routectl 重启
387 GSW_SDK_STATE_GPS_DOWN,
388 GSW_SDK_STATE_GPS_UP,
389} gsw_mode_state_e;
390
391
392typedef struct
393{
394 GSW_NW_RADIO_ACCESS_TECH_E rej_rat; /**< current network radio tech*/
395 GSW_SERVICE_DOMAIN_E rej_domain; /**< reject code from ps or cs*/
396 int rej_cause; /**< reject code number*/
397} GSW_NW_REJ_CAUSE_E;
398
399typedef struct
400{
401 int32_t gw_sig_valid; /**< 1 valid,1 invalid*/
402 int32_t rssi; /**< Valid values are (0-31, 99) as defined in TS 27.007 8.5 */
403 int32_t wcdma_sig_valid;/**< 1 valid,0 invalid*/
404 int32_t rscp; /**< The Received Signal Code Power in dBm multipled by -1.
405 * Range : 25 to 120
406 * INT_MAX: 0x7FFFFFFF denotes invalid value.
407 * Reference: 3GPP TS 25.123, section 9.1.1.1 */
408 int32_t ecno; /**< Valid values are positive integers. This value is the actual Ec/Io multiplied
409 * by -10. Example: If the actual Ec/Io is -12.5 dB, then this response value
410 * will be 125.*/
411 int32_t lte_sig_valid;/**< 1 valid,0 invalid*/
412 int32_t rsrp; /**< The current Reference Signal Receive Power in dBm multipled by -1.
413 * Range: 44 to 140 dBm
414 * INT_MAX: 0x7FFFFFFF denotes invalid value.
415 * Reference: 3GPP TS 36.133 9.1.4 */
416 int32_t rsrq; /**< The current Reference Signal Receive Quality in dB multiplied by -1.
417 * Range: 20 to 3 dB.
418 * INT_MAX: 0x7FFFFFFF denotes invalid value.
419 * Reference: 3GPP TS 36.133 9.1.7 */
420 int32_t rssnr; /**< The current reference signal signal-to-noise ratio in 0.1 dB units.
421 * Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB).
422 * INT_MAX : 0x7FFFFFFF denotes invalid value.
423 * Reference: 3GPP TS 36.101 8.1.1 */
424 int32_t nr_sig_valid;/**<1 valid,0 invalid*/
425 int32_t ssRsrp; /**< SS(Synchronization Signal) reference signal received power, multipled by -1.
426 * Reference: 3GPP TS 38.215.
427 * Range [44, 140], INT_MAX means invalid/unreported.*/
428 int32_t ssRsrq; /**< SS reference signal received quality, multipled by -1.
429 * Reference: 3GPP TS 38.215.
430 * Range [3, 20], INT_MAX means invalid/unreported.*/
431 int32_t ssSinr; /**< SS signal-to-noise and interference ratio.
432 * Reference: 3GPP TS 38.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
433 * Range [-23, 40], INT_MAX means invalid/unreported.*/
434 int32_t csiRsrp; /**< CSI reference signal received power, multipled by -1.
435 * Reference: 3GPP TS 38.215.
436 * Range [44, 140], INT_MAX means invalid/unreported.*/
437 int32_t csiRsrq; /**< CSI reference signal received quality, multipled by -1.
438 * Reference: 3GPP TS 38.215.
439 * Range [3, 20], INT_MAX means invalid/unreported.*/
440 int32_t csiSinr; /**< CSI signal-to-noise and interference ratio.
441 * Reference: 3GPP TS 138.215 section 5.1.*, 3GPP TS 38.133 section 10.1.16.1.
442 * Range [-23, 40], INT_MAX means invalid/unreported.*/
443} signalStrength_t;
444
445typedef struct
446{
447 GSW_NW_REG_STATE_E reg_state; /**< network cs regstate*/
448 GSW_NW_REG_STATE_E ps_state; /**< network ps regstate*/
449 GSW_NW_RADIO_ACCESS_TECH_E reg_rat; /**< current radio state*/
450 GSW_SERVICE_DOMAIN_E srv_domain; /**< current cs or ps state*/
451 GSW_NW_ROAMING_STATE_E roaming_ind; /**< roaming state*/
452 char reg_plmn[GSW_NW_PLMN_LEN + 1]; /**< current cell plmn*/
453 char operator_name[GSW_NW_OPERATION_NAME_LEN + 1]; /**< operator name*/
454 char cell_id[128]; /**< cell id*/
455 char tac[128]; /**< cell tac*/
456 char lac[128]; /**< cell lac*/
457 int sid; /**< cell sid cdma*/
458 int nid; /**< cell nid cdma*/
459} GSW_NW_SERVING_INFO;
460
461
462typedef struct
463{
464 char long_eons[128]; /* Full name of the operator*/
465 char short_eons[128]; /* Shor name of the operator*/
466 char mcc[4]; /* Mobile country code*/
467 char mnc[4]; /* Mobile network code*/
468}gsw_mobile_operator_name;
469
470#define MAX_CELL_EXT_INFO (5)
471
472typedef struct
473{
474 unsigned char cell_id_valid;
475 unsigned char pci_valid;
476 unsigned char psc_valid;
477 unsigned char band_valid;
478 unsigned char arfcn_valid;
479 unsigned char rssi_valid;
480 unsigned char rsrp_valid;
481 unsigned char rsrq_valid;
482 unsigned char sinr_valid;
483 unsigned char rscp_valid;
484 unsigned char ecio_valid;
485 GSW_NW_RADIO_ACCESS_TECH_E rat;
486 unsigned int cell_id;
487 int pci;
488 int psc;
489 int band;
490 int arfcn;
491 int rssi;
492 int rsrp;
493 int rsrq;
494 int sinr;
495 int rscp;
496 int ecio;
497 char mcc[5];
498 char mnc[5];
499} GSW_NW_CELL_EXT_INFO;
500
501typedef struct
502{
503 GSW_NW_RADIO_ACCESS_TECH_E rat; /**< current radio state*/
504
505 unsigned char mcc_valid;
506 char mcc[5];
507
508 unsigned char mnc_valid;
509 char mnc[5];
510
511 unsigned char cell_id_valid;
512 unsigned int cell_id; /**< cell id*/
513
514 unsigned char pci_valid;
515 int pci; /**<physical cell id*/
516
517 unsigned char psc_valid;
518 int psc; /*wcdma primary scramble code*/
519
520 unsigned char nrarfcn_valid;
521 int nrarfcn; /*nr cell freq*/
522
523 unsigned char earfcn_valid;
524 int earfcn; /*lte cell freq*/
525
526 unsigned char uarfcn_valid;
527 int uarfcn; /*wcdma cell freq*/
528
529 unsigned char arfcn_valid;
530 int arfcn; /*gsw cell freq*/
531
532 unsigned char tac_valid;
533 unsigned int tac; /**< cell tac*/
534
535 unsigned char lac_valid;
536 unsigned int lac; /**< cell lac*/
537
538 unsigned char sid_valid;
539 int sid; /**< cell sid cdma*/
540
541 unsigned char nid_valid;
542 int nid; /**< cell nid cdma*/
543
544 unsigned char lteMode_valid;
545 int lteMode; /*tdd 0, fdd 1*/
546
547 unsigned char rssi_valid;
548 int rssi; /**< Valid values are (0-31, 99) as defined in TS 27.007 8.5 */
549
550 unsigned char rscp_valid;
551 int rscp; /**< The Received Signal Code Power in dBm multipled by -1.
552 * Range : 25 to 120
553 * INT_MAX: 0x7FFFFFFF denotes invalid value.
554 * Reference: 3GPP TS 25.123, section 9.1.1.1 */
555
556 unsigned char ecio_valid;
557 int ecio; /**< Valid values are positive integers. This value is the actual Ec/Io multiplied
558 * by -10. Example: If the actual Ec/Io is -12.5 dB, then this response value
559 * will be 125.*/
560
561 unsigned char rsrp_valid;
562 int rsrp; /**< The current Reference Signal Receive Power in dBm multipled by -1.
563 * Range: 44 to 140 dBm
564 * INT_MAX: 0x7FFFFFFF denotes invalid value.
565 * Reference: 3GPP TS 36.133 9.1.4 */
566
567 unsigned char rsrq_valid;
568 int rsrq; /**< The current Reference Signal Receive Quality in dB multiplied by -1.
569 * Range: 20 to 3 dB.
570 * INT_MAX: 0x7FFFFFFF denotes invalid value.
571 * Reference: 3GPP TS 36.133 9.1.7 */
572
573 unsigned char rssnr_valid;
574 int rssnr; /**< The current reference signal signal-to-noise ratio in 0.1 dB units.
575 * Range: -200 to +300 (-200 = -20.0 dB, +300 = 30dB).
576 * INT_MAX : 0x7FFFFFFF denotes invalid value.
577 * Reference: 3GPP TS 36.101 8.1.1 */
578
579 unsigned char band_valid;
580 int band;
581
582 unsigned char bler_valid;
583 int bler; /*bit error rate*/
584
585 GSW_NW_CELL_EXT_INFO ext_info[MAX_CELL_EXT_INFO]; /* Used to hold neighborhood information for service cells. */
586} GSW_NW_CELL_INFO;
587
588typedef struct {
589 char mcc[GSW_MCC_MAX_LEN];
590 char mnc[GSW_MNC_MAX_LEN];
591} gsw_nw_plmn_t;
592
593
594typedef struct {
595 int plmn_list_len;
596 gsw_nw_plmn_t plmn_list[GSW_PLMN_LIST_MAX_LEN];
597} gsw_nw_plmn_list_t;
598
599typedef struct
600{
601 /* Configuration parameters for MCM network full band network scan when OOS (out of service)*/
602 int t_min;
603 int t_step;
604 int t_max;
605}GSW_NW_OOS_CONFIG_INFO_T;
606
607typedef void (* GSW_NW_ServingInfoHandlePtr)(GSW_NW_SERVING_INFO serving_info);
608typedef void (* GSW_NW_SigInfoHandlePtr)(signalStrength_t sig_info);
609typedef void (* GSW_NW_RejectCauseHandlePtr)(GSW_NW_REJ_CAUSE_E *rej_cause);
610typedef void (* GSW_HAL_NW_AIRPLANE_MODE_HANDLE_PTR)(int32_t airplane_mode);
611typedef void (* GSW_NW_ModemStateHandlePtr)(gsw_mode_state_e state);
q.huangc8b93122025-06-17 17:46:05 +0800612typedef void (* GSW_NW_AirplaneModeHandlePtr)(int airplane_mode);
613
b.liu68a94c92025-05-24 12:53:41 +0800614
615int (*gsw_reg_serving_info_callback)(GSW_NW_ServingInfoHandlePtr handle_ptr);
616int (*gsw_reg_sig_info_callback)(GSW_NW_SigInfoHandlePtr handle_ptr);
617int (*gsw_reg_rej_cause_callback)(GSW_NW_RejectCauseHandlePtr handle_ptr);
618int (*gsw_nw_sdk_init)(int token);
619int (*gsw_nw_sdk_deinit)(void);
620int (*gsw_get_nwinfo)(GSW_NW_SERVING_INFO *serving_info);
621int (*gsw_get_netype)(int32_t *netype);
622int (*gsw_get_opmode)(int *op_mode);
623int (*gsw_set_opmode)(int32_t op_mode);
624int (*gsw_get_mode_preference)(int32_t *mode_pref);
625int (*gsw_set_mode_preference)(int32_t mode_pref);
626int (*gsw_get_sig_info)(int32_t *csq_value);
627int (*gsw_network_set_power_mode)(int8_t mode);
628int (*gsw_sigInfo_to_csq)(int32_t netType, int32_t sigValue);
629int (*gsw_get_forbidden_networks)(gsw_nw_plmn_list_t *plmn_list);
630int (*gsw_add_forbidden_networks)(gsw_nw_plmn_list_t *plmn_list);
631int (*gsw_remove_forbidden_networks)(gsw_nw_plmn_list_t *plmn_list);
632int (*gsw_clear_forbidden_networks)(void);
633int (*gsw_get_mobile_operator_name)(gsw_mobile_operator_name *nw_operator_name_infos);
634int (*gsw_reg_set_modem_status_event_callback)(GSW_NW_ModemStateHandlePtr handle_ptr);
635int (*gsw_get_cell_info)(GSW_NW_CELL_INFO *cell_info);
636int (*gsw_oos_config_get)(GSW_NW_OOS_CONFIG_INFO_T *pt_info);
637int (*gsw_oos_config_set)(GSW_NW_OOS_CONFIG_INFO_T *pt_info);
q.huang238b22a2025-06-10 14:36:59 +0800638int (*gsw_get_imei)(int32_t len, int8_t *imei);
639int (*gsw_reset_modem)(void);
q.huangc8b93122025-06-17 17:46:05 +0800640int (*gsw_reg_operating_mode_callback)(GSW_NW_AirplaneModeHandlePtr handle_ptr);
641
b.liu68a94c92025-05-24 12:53:41 +0800642
643static int gsw_nw_api_import()
644{
645 dlHandle_nw = dlopen(lib_gsw_nw_path, RTLD_NOW);
646 if (dlHandle_nw == NULL) {
647 printf("error: %s\n", dlerror());
648 return -1;
649 }
650
651 gsw_nw_sdk_init = (int(*)(int token))dlsym(dlHandle_nw, "gsw_nw_sdk_init");
652 if (gsw_nw_sdk_init == NULL) {
653 printf("gsw_nw_sdk_init dlysm failed \n");
654 return -1;
655 }
656
657 gsw_nw_sdk_deinit = (int(*)(void))dlsym(dlHandle_nw, "gsw_nw_sdk_deinit");
658 if (gsw_nw_sdk_deinit == NULL) {
659 printf("gsw_nw_sdk_deinit dlysm failed \n");
660 return -1;
661 }
662
663 gsw_get_nwinfo = (int(*)(GSW_NW_SERVING_INFO *serving_info))dlsym(dlHandle_nw, "gsw_get_nwinfo");
664 if (gsw_get_nwinfo == NULL) {
665 printf("gsw_get_nwinfo dlysm failed \n");
666 return -1;
667 }
668
669 gsw_get_netype = (int(*)(int32_t *netype))dlsym(dlHandle_nw, "gsw_get_netype");
670 if (gsw_get_netype == NULL) {
671 printf("gsw_get_netype dlysm failed \n");
672 return -1;
673 }
674
675 gsw_get_opmode = (int(*)(int *op_mode))dlsym(dlHandle_nw, "gsw_get_opmode");
676 if (gsw_get_opmode == NULL) {
677 printf("gsw_get_opmode dlysm failed \n");
678 return -1;
679 }
680
681 gsw_set_opmode = (int(*)(int32_t op_mode))dlsym(dlHandle_nw, "gsw_set_opmode");
682 if (gsw_set_opmode == NULL) {
683 printf("gsw_set_opmode dlysm failed \n");
684 return -1;
685 }
686
687 gsw_get_mode_preference = (int(*)(int32_t *mode_pref))dlsym(dlHandle_nw, "gsw_get_mode_preference");
688 if (gsw_get_mode_preference == NULL) {
689 printf("gsw_get_mode_preference dlysm failed \n");
690 return -1;
691 }
692
693 gsw_set_mode_preference = (int(*)(int32_t mode_pref))dlsym(dlHandle_nw, "gsw_set_mode_preference");
694 if (gsw_set_mode_preference == NULL) {
695 printf("gsw_set_mode_preference dlysm failed \n");
696 return -1;
697 }
698
699 gsw_get_sig_info = (int(*)(int32_t *csq_value))dlsym(dlHandle_nw, "gsw_get_sig_info");
700 if (gsw_get_sig_info == NULL) {
701 printf("gsw_get_sig_info dlysm failed \n");
702 return -1;
703 }
704
705 gsw_network_set_power_mode = (int(*)(int8_t mode))dlsym(dlHandle_nw, "gsw_network_set_power_mode");
706 if (gsw_network_set_power_mode == NULL) {
707 printf("gsw_network_set_power_mode dlysm failed \n");
708 return -1;
709 }
710
711 gsw_sigInfo_to_csq = (int(*)(int32_t netType, int32_t sigValue))dlsym(dlHandle_nw, "gsw_sigInfo_to_csq");
712 if (gsw_sigInfo_to_csq == NULL) {
713 printf("gsw_sigInfo_to_csq dlysm failed \n");
714 return -1;
715 }
716
717 gsw_get_forbidden_networks = (int(*)(gsw_nw_plmn_list_t *plmn_list))dlsym(dlHandle_nw, "gsw_get_forbidden_networks");
718 if (gsw_get_forbidden_networks == NULL) {
719 printf("gsw_get_forbidden_networks dlysm failed \n");
720 return -1;
721 }
722
723 gsw_add_forbidden_networks = (int(*)(gsw_nw_plmn_list_t *plmn_list))dlsym(dlHandle_nw, "gsw_add_forbidden_networks");
724 if (gsw_add_forbidden_networks == NULL) {
725 printf("gsw_add_forbidden_networks dlysm failed \n");
726 return -1;
727 }
728
729 gsw_remove_forbidden_networks = (int(*)(gsw_nw_plmn_list_t *plmn_list))dlsym(dlHandle_nw, "gsw_remove_forbidden_networks");
730 if (gsw_remove_forbidden_networks == NULL) {
731 printf("gsw_remove_forbidden_networks dlysm failed \n");
732 return -1;
733 }
734
735 gsw_clear_forbidden_networks = (int(*)(void))dlsym(dlHandle_nw, "gsw_clear_forbidden_networks");
736 if (gsw_clear_forbidden_networks == NULL) {
737 printf("gsw_clear_forbidden_networks dlysm failed \n");
738 return -1;
739 }
740
741 gsw_get_mobile_operator_name = (int(*)(gsw_mobile_operator_name *nw_operator_name_infos))dlsym(dlHandle_nw, "gsw_get_mobile_operator_name");
742 if (gsw_get_mobile_operator_name == NULL) {
743 printf("gsw_get_mobile_operator_name dlysm failed \n");
744 return -1;
745 }
746
747 gsw_reg_set_modem_status_event_callback = (int(*)(GSW_NW_ModemStateHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_set_modem_status_event_callback");
748 if (gsw_reg_set_modem_status_event_callback == NULL) {
749 printf("gsw_reg_set_modem_status_event_callback dlysm failed \n");
750 return -1;
751 }
752
753 gsw_get_cell_info = (int(*)(GSW_NW_CELL_INFO *cell_info))dlsym(dlHandle_nw, "gsw_get_cell_info");
754 if (gsw_get_cell_info == NULL) {
755 printf("gsw_get_cell_info dlysm failed \n");
756 return -1;
757 }
758
759 gsw_reg_serving_info_callback = (int(*)(GSW_NW_ServingInfoHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_serving_info_callback");
760 if (gsw_reg_serving_info_callback == NULL) {
761 printf("gsw_reg_serving_info_callback dlysm failed \n");
762 return -1;
763 }
764
765 gsw_reg_sig_info_callback = (int(*)(GSW_NW_SigInfoHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_sig_info_callback");
766 if (gsw_reg_sig_info_callback == NULL) {
767 printf("gsw_reg_sig_info_callback dlysm failed \n");
768 return -1;
769 }
770
771 gsw_reg_rej_cause_callback = (int(*)(GSW_NW_RejectCauseHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_rej_cause_callback");
772 if (gsw_reg_rej_cause_callback == NULL) {
773 printf("gsw_reg_rej_cause_callback dlysm failed \n");
774 return -1;
775 }
776
777 gsw_oos_config_get = (int(*)(GSW_NW_OOS_CONFIG_INFO_T *oos_config))dlsym(dlHandle_nw, "gsw_oos_config_get");
778 if (gsw_oos_config_get == NULL) {
779 printf("gsw_oos_config_get dlysm failed \n");
780 return -1;
781 }
782
783 gsw_oos_config_set = (int(*)(GSW_NW_OOS_CONFIG_INFO_T *oos_config))dlsym(dlHandle_nw, "gsw_oos_config_set");
784 if (gsw_oos_config_set == NULL) {
785 printf("gsw_oos_config_set dlysm failed \n");
786 return -1;
787 }
788
q.huang238b22a2025-06-10 14:36:59 +0800789 gsw_get_imei = (int(*)(int32_t len, int8_t *imei))dlsym(dlHandle_nw,"gsw_get_imei");
790 if (gsw_get_imei == NULL) {
791 printf("dlsym gsw_get_imei fail\n");
792 return GSW_HAL_FAIL;
793 }
794
795 gsw_reset_modem = (int(*)(void))dlsym(dlHandle_nw,"gsw_reset_modem");
796 if (gsw_reset_modem == NULL) {
797 printf("dlsym gsw_reset_modem fail\n");
798 return GSW_HAL_FAIL;
799 }
800
q.huangc8b93122025-06-17 17:46:05 +0800801 gsw_reg_operating_mode_callback = (int(*)(GSW_NW_AirplaneModeHandlePtr handle_ptr))dlsym(dlHandle_nw,"gsw_reg_operating_mode_callback");
802 if (gsw_reg_operating_mode_callback == NULL) {
803 printf("dlsym gsw_reg_operating_mode_callback fail\n");
804 return GSW_HAL_FAIL;
805 }
806
b.liu68a94c92025-05-24 12:53:41 +0800807 return 0;
808
809}
810
811static void gsw_serving_info_callback(GSW_NW_SERVING_INFO serving_info)
812{
813 printf("gsw_serving_info_callback: \n");
814 printf("reg_state = %d\n", serving_info.reg_state);
815 printf("ps_state = %d\n", serving_info.ps_state);
816 printf("reg_rat = %d\n", serving_info.reg_rat);
817 printf("srv_domain = %d\n", serving_info.srv_domain);
818 printf("roaming_ind = %d\n", serving_info.roaming_ind);
819 printf("reg_plmn = %s\n", serving_info.reg_plmn);
820 printf("operator_name = %s\n", serving_info.operator_name);
821 printf("cell_id = %s\n", serving_info.cell_id);
822 printf("tac = %s\n", serving_info.tac);
823 printf("lac = %s\n", serving_info.lac);
824 printf("sid = %d\n", serving_info.sid);
825 printf("nid = %d\n", serving_info.nid);
826}
827
828static void gsw_sig_info_callback(signalStrength_t sig_info)
829{
830 printf("gsw_sig_info_callback: \n");
831 printf("gw_sig_valid = %d\n", sig_info.gw_sig_valid);
832 printf("rssi = %d\n", sig_info.rssi);
833 printf("wcdma_sig_valid = %d\n", sig_info.wcdma_sig_valid);
834 printf("rscp = %d\n", sig_info.rscp);
835 printf("ecno = %d\n", sig_info.ecno);
836 printf("lte_sig_valid = %d\n", sig_info.lte_sig_valid);
837 printf("rsrp = %d\n", sig_info.rsrp);
838 printf("rsrq = %d\n", sig_info.rsrq);
839 printf("rssnr = %d\n", sig_info.rssnr);
840 printf("nr_sig_valid = %d\n", sig_info.nr_sig_valid);
841 printf("ssRsrp = %d\n", sig_info.ssRsrp);
842 printf("ssRsrq = %d\n", sig_info.ssRsrq);
843 printf("ssSinr = %d\n", sig_info.ssSinr);
844 printf("csiRsrp = %d\n", sig_info.csiRsrp);
845 printf("csiRsrq = %d\n", sig_info.csiRsrq);
846 printf("csiSinr = %d\n", sig_info.csiSinr);
847}
848
849static void gsw_rej_cause_callback(GSW_NW_REJ_CAUSE_E *rej_cause)
850{
851 printf("gsw_rej_cause_callback: \n");
852 printf("rej_rat = %d\n", rej_cause->rej_rat);
853 printf("rej_domain = %d\n", rej_cause->rej_domain);
854 printf("rej_cause = %d\n", rej_cause->rej_cause);
855}
856
857static void gsw_modem_status_cb(gsw_mode_state_e state)
858{
859 printf("gsw_modem_status_cb: \n");
860 printf("state = %d\n", state);
861}
862
q.huangc8b93122025-06-17 17:46:05 +0800863static void gsw_operating_state_cb(int airplane_mode)
864{
865 printf("gsw_operating_state_cb: \n");
866 printf("airplane mode = %d\n", airplane_mode);
867}
868
869
b.liu68a94c92025-05-24 12:53:41 +0800870
871void dump_items()
872{
873 printf("\n");
874 printf("The current module is: network \n");
875
876 printf("-------------------------------------------------------------------------\n");
877 printf("| index | function name |\n");
878 printf("| -1 exit\n");
879 printf(" 1 gsw_nw_sdk_init\n");
880 printf(" 2 gsw_nw_sdk_deinit\n");
881 printf(" 3 gsw_get_nwinfo\n");
882 printf(" 4 gsw_get_netype\n");
883 printf(" 5 gsw_get_opmode\n");
884 printf(" 6 gsw_set_opmode\n");
885 printf(" 7 gsw_get_mode_preference\n");
886 printf(" 8 gsw_set_mode_preference\n");
887 printf(" 9 gsw_get_sig_info\n");
888 printf(" 10 gsw_network_set_power_mode\n");
889 printf(" 11 gsw_sigInfo_to_csq\n");
890 printf(" 12 gsw_get_forbidden_networks\n");
891 printf(" 13 gsw_add_forbidden_networks\n");
892 printf(" 14 gsw_remove_forbidden_networks\n");
893 printf(" 15 gsw_clear_forbidden_networks\n");
894 printf(" 16 gsw_get_mobile_operator_name\n");
895 printf(" 17 gsw_reg_set_modem_status_event_callback\n");
896 printf(" 18 gsw_get_cell_info\n");
897 printf(" 19 gsw_reg_serving_info_callback\n");
898 printf(" 20 gsw_reg_sig_info_callback\n");
899 printf(" 21 gsw_reg_rej_cause_callback\n");
900 printf(" 22 gsw_oos_config_get\n");
901 printf(" 23 gsw_oos_config_set\n");
q.huang238b22a2025-06-10 14:36:59 +0800902 printf(" 24 gsw_get_imei\n");
903 printf(" 25 gsw_reset modem\n");
q.huangc8b93122025-06-17 17:46:05 +0800904 printf(" 26 gsw_reg_operating_mode_callback\n");
b.liu68a94c92025-05-24 12:53:41 +0800905 printf("-------------------------------------------------------------------------\n");
906}
907
908int main(int argc, char *argv[])
909{
910 int ret;
911 char operator[10];
912 int opt;
913
914 ret = gsw_nw_api_import();
915 if (ret != 0) {
q.huangc8b93122025-06-17 17:46:05 +0800916 printf("gsw_nw_api_import failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800917 return -1;
918 }
919
920
921 while(1)
922 {
923 dump_items();
924 printf("input the index of module: ");
925
926 opt = -1;
927 printf("%s",fgets(operator, sizeof(operator), stdin));
928 fflush(stdin);
929
930 opt = atoi(operator);
931 switch (opt) {
932 case -1:
933 {
934 printf("main exit\n");
935 return 0;
936 }
937 case 1:
938 {
939 printf("gsw_nw_sdk_init\n");
940 ret = gsw_nw_sdk_init(1024);
941 printf("gsw_nw_sdk_init ret = %d\n",ret);
942 break;
943 }
944 case 2:
945 {
946 printf("gsw_nw_sdk_deinit\n");
947 ret = gsw_nw_sdk_deinit();
948 printf("gsw_nw_sdk_deinit ret = %d\n",ret);
949 break;
950 }
951 case 3:
952 {
953 GSW_NW_SERVING_INFO* nwinfo;
954 nwinfo = (GSW_NW_SERVING_INFO*)malloc(sizeof(GSW_NW_SERVING_INFO));
955 memset(nwinfo, 0x00, sizeof(GSW_NW_SERVING_INFO));
956 printf("gsw_get_nwinfo start\n");
957 ret = gsw_get_nwinfo(nwinfo);
958 if(ret != 0)
959 {
q.huangc8b93122025-06-17 17:46:05 +0800960 printf("gsw_get_nwinfo failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800961 continue;
962 }
963 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);
964 free(nwinfo);
965 break;
966 }
967 case 4:
968 {
969 int nettype;
970 ret = gsw_get_netype(&nettype);
971 if(ret != 0)
972 {
q.huangc8b93122025-06-17 17:46:05 +0800973 printf("gsw_get_netype failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800974 continue;
975 }
976 printf("nettype = %d\n", nettype);
977 break;
978 }
979
980 case 5:
981 {
982 int opmode;
983 ret = gsw_get_opmode(&opmode);
984 if(ret != 0)
985 {
q.huangc8b93122025-06-17 17:46:05 +0800986 printf("gsw_get_opmode failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +0800987 continue;
988 }
989 printf("opmode = %d\n", opmode);
990 break;
991 }
992
993 case 6:
994 {
995 printf("input the opmode: ");
996 memset(operator,0x00, sizeof(operator));
997 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
998 fflush(stdin);
999 opt = atoi(operator);
1000 ret = gsw_set_opmode(opt);
1001 if(ret != 0)
1002 {
q.huangc8b93122025-06-17 17:46:05 +08001003 printf("gsw_set_opmode failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001004 continue;
1005 }
1006 break;
1007 }
1008
1009 case 7:
1010 {
1011 int mode_pref;
1012 ret = gsw_get_mode_preference(&mode_pref);
1013 if(ret != 0)
1014 {
q.huangc8b93122025-06-17 17:46:05 +08001015 printf("gsw_get_mode_preference failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001016 continue;
1017 }
1018 printf("mode_pref = %d\n", mode_pref);
1019 break;
1020 }
1021
1022 case 8:
1023 {
1024 printf("input the mode_pref: ");
1025 memset(operator,0x00, sizeof(operator));
1026 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
1027 fflush(stdin);
1028 opt = atoi(operator);
1029 ret = gsw_set_mode_preference(opt);
1030 if(ret != 0)
1031 {
q.huangc8b93122025-06-17 17:46:05 +08001032 printf("gsw_set_mode_preference failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001033 continue;
1034 }
1035 break;
1036 }
1037
1038 case 9:
1039 {
1040 int siginfo;
1041 ret = gsw_get_sig_info(&siginfo);
1042 if(ret != 0)
1043 {
q.huangc8b93122025-06-17 17:46:05 +08001044 printf("gsw_get_sig_info failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001045 continue;
1046 }
1047 printf("signal info: siginfo = %d\n", siginfo);
1048 break;
1049 }
1050
1051 case 10:
1052 {
1053 printf("input the power mode: ");
1054 memset(operator,0x00, sizeof(operator));
1055 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
1056 fflush(stdin);
1057 opt = atoi(operator);
1058 ret = gsw_network_set_power_mode(opt);
1059 if(ret != 0)
1060 {
q.huangc8b93122025-06-17 17:46:05 +08001061 printf("gsw_network_set_power_mode failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001062 continue;
1063 }
1064 break;
1065 }
1066
1067 case 11:
1068 {
1069 int nettype;
1070 int sigValue;
1071 printf("please input the netType:");
1072 memset(operator,0x00, sizeof(operator));
1073 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
1074 fflush(stdin);
1075 nettype = atoi(operator);
1076
1077 printf("input the sigValue: ");
1078 memset(operator,0x00, sizeof(operator));
1079 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
1080 fflush(stdin);
1081 sigValue = atoi(operator);
1082
1083 ret = gsw_sigInfo_to_csq(nettype, sigValue);
1084 printf("csq = %d\n", ret);
1085
1086 break;
1087 }
1088
1089 case 12:
1090 {
1091 printf("gsw_get_forbidden_networks start\n");
1092 gsw_nw_plmn_list_t fplmn_list;
1093 fplmn_list.plmn_list_len = 0;
1094 ret = gsw_get_forbidden_networks(&fplmn_list);
1095 if(ret != 0)
1096 {
q.huangc8b93122025-06-17 17:46:05 +08001097 printf("gsw_get_forbidden_networks failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001098 continue;
1099 }
1100
1101 printf("gsw_get_forbidden_networks end\n");
1102 for(int i = 0; i < fplmn_list.plmn_list_len; i++)
1103 {
1104 printf("list[%d] mcc = %s,mnc = %s\n",i, fplmn_list.plmn_list[i].mcc, fplmn_list.plmn_list[i].mnc);
1105 }
1106
1107 break;
1108 }
1109 case 13:
1110 {
1111 printf("gsw_add_forbidden_networks start\n");
1112 gsw_nw_plmn_list_t fplmn_list_set;
1113 fplmn_list_set.plmn_list_len = 1;
1114 strcpy(fplmn_list_set.plmn_list[0].mcc, "460");
1115 strcpy(fplmn_list_set.plmn_list[0].mnc, "09");
1116
1117 ret = gsw_add_forbidden_networks(&fplmn_list_set);
1118 if(ret != 0)
1119 {
q.huangc8b93122025-06-17 17:46:05 +08001120 printf("gsw_add_forbidden_networks failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001121 continue;
1122 }
1123 printf("gsw_add_forbidden_networks end\n");
1124 break;
1125 }
1126 case 14:
1127 {
1128 printf("gsw_add_forbidden_networks start\n");
1129 gsw_nw_plmn_list_t fplmn_list_remove;
1130 fplmn_list_remove.plmn_list_len = 1;
1131 strcpy(fplmn_list_remove.plmn_list[0].mcc, "460");
1132 strcpy(fplmn_list_remove.plmn_list[0].mnc, "02");
1133
1134 ret = gsw_remove_forbidden_networks(&fplmn_list_remove);
1135 if(ret != 0)
1136 {
q.huangc8b93122025-06-17 17:46:05 +08001137 printf("gsw_add_forbidden_networks failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001138 continue;
1139 }
1140 printf("gsw_add_forbidden_networks end\n");
1141 break;
1142 }
1143
1144 case 15:
1145 {
1146 printf("gsw_clear_forbidden_networks start\n");
1147 ret = gsw_clear_forbidden_networks();
1148 if(ret != 0)
1149 {
q.huangc8b93122025-06-17 17:46:05 +08001150 printf("gsw_clear_forbidden_networks failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001151 continue;
1152 }
1153 printf("gsw_clear_forbidden_networks end\n");
1154 break;
1155 }
1156
1157 case 16:
1158 {
1159 gsw_mobile_operator_name opname;
1160
1161 ret = gsw_get_mobile_operator_name(&opname);
1162 if(ret != 0)
1163 {
q.huangc8b93122025-06-17 17:46:05 +08001164 printf("gsw_get_mobile_operator_name failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001165 continue;
1166 }
1167
1168 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);
1169 break;
1170 }
1171
1172 case 17:
1173 {
1174 printf("gsw_reg_set_modem_status_event_callback\n");
1175 ret = gsw_reg_set_modem_status_event_callback(gsw_modem_status_cb);
1176 if(ret != 0)
1177 {
q.huangc8b93122025-06-17 17:46:05 +08001178 printf("gsw_reg_set_modem_status_event_callback failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001179 continue;
1180 }
1181 printf("gsw_reg_set_modem_status_event_callback success\n");
1182 break;
1183 }
1184
1185 case 18:
1186 {
1187 printf("gsw_get_cell_info starts\n");
1188 GSW_NW_CELL_INFO cell_info;
1189 memset(&cell_info, 0x00, sizeof(GSW_NW_CELL_INFO));
1190 ret = gsw_get_cell_info(&cell_info);
1191 if(ret != 0)
1192 {
q.huangc8b93122025-06-17 17:46:05 +08001193 printf("gsw_get_cell_info failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001194 continue;
1195 }
1196
1197 printf("--------------------serving cell info ------------------------------\n");
1198 printf("mcc_valid = %d\n",cell_info.mcc_valid);
1199 printf("mcc = %s\n",cell_info.mcc);
1200 printf("mnc_valid = %d\n",cell_info.mnc_valid);
1201 printf("mnc = %s\n",cell_info.mnc);
1202 printf("cell_id_valid = %d\n",cell_info.cell_id_valid);
1203 printf("cell_id = %u\n",cell_info.cell_id);
1204 printf("pci_valid = %d\n",cell_info.pci_valid);
1205 printf("pci = %d\n",cell_info.pci);
1206 printf("psc_valid = %d\n",cell_info.psc_valid);
1207 printf("psc = %d\n",cell_info.psc);
1208 printf("earfcn_valid = %d\n",cell_info.earfcn_valid);
1209 printf("earfcn = %d\n",cell_info.earfcn);
1210 printf("uarfcn_valid = %d\n",cell_info.uarfcn_valid);
1211 printf("uarfcn = %d\n",cell_info.uarfcn);
1212 printf("arfcn_valid = %d\n",cell_info.arfcn_valid);
1213 printf("arfcn = %d\n",cell_info.arfcn);
1214 printf("tac_valid = %d\n",cell_info.tac_valid);
1215 printf("tac = %u\n",cell_info.tac);
1216 printf("lac_valid = %d\n",cell_info.lac_valid);
1217 printf("lac = %u\n",cell_info.lac);
1218 printf("sid_valid = %d\n",cell_info.sid_valid);
1219 printf("sid = %d\n",cell_info.sid);
1220 printf("nid_valid = %d\n",cell_info.nid_valid);
1221 printf("nid = %d\n",cell_info.nid);
1222 printf("lteMode_valid = %d\n",cell_info.lteMode_valid);
1223 printf("lteMode = %d\n",cell_info.lteMode);
1224 printf("rssi_valid = %d\n",cell_info.rssi_valid);
1225 printf("rssi = %d\n",cell_info.rssi);
1226 printf("rsrq_valid = %d\n",cell_info.rsrq_valid);
1227 printf("rsrq = %d\n",cell_info.rsrq);
1228 printf("ecio_valid = %d\n",cell_info.ecio_valid);
1229 printf("ecio = %d\n",cell_info.ecio);
1230 printf("rsrp_valid = %d\n",cell_info.rsrp_valid);
1231 printf("rsrp = %d\n",cell_info.rsrp);
1232 printf("rsrq_valid = %d\n",cell_info.rsrq_valid);
1233 printf("rsrq = %d\n",cell_info.rsrq);
1234 printf("rssnr_valid = %d\n",cell_info.rssnr_valid);
1235 printf("rssnr = %d\n",cell_info.rssnr);
1236 printf("band_valid = %d\n",cell_info.band_valid);
1237 printf("band = %d\n",cell_info.band);
1238 printf("bler_valid = %d\n",cell_info.bler_valid);
1239 printf("bler = %d\n",cell_info.bler);
1240
1241
1242 printf("-----------------------------------------------------------------------------------\n");
1243
1244 printf("-------------------------------------inter cell info ------------------------------\n");
1245
1246 for(int i = 0; i <MAX_CELL_EXT_INFO ; i++)
1247 {
1248 printf("-----------------------------------------------------------\n");
1249 printf("inter cell info[%d] rat = %d\n",i,cell_info.ext_info[i].rat);
1250
1251 printf("inter cell info[%d] mcc = %s\n",i,cell_info.ext_info[i].mcc);
1252
1253 printf("inter cell info[%d] mnc = %s\n",i,cell_info.ext_info[i].mnc);
1254
1255 printf("inter cell info[%d] pci_valid = %d\n",i,cell_info.ext_info[i].pci_valid);
1256 printf("inter cell info[%d] pci = %d\n",i,cell_info.ext_info[i].pci);
1257
1258 printf("inter cell info[%d] arfcn_valid = %d\n",i,cell_info.ext_info[i].arfcn_valid);
1259 printf("inter cell info[%d] arfcn = %d\n",i,cell_info.ext_info[i].arfcn);
1260
1261 printf("inter cell info[%d] rsrp_valid = %d\n",i,cell_info.ext_info[i].rsrp_valid);
1262 printf("inter cell info[%d] rsrp = %d\n",i,cell_info.ext_info[i].rsrp);
1263
1264 printf("inter cell info[%d] rsrq_valid = %d\n",i,cell_info.ext_info[i].rsrq_valid);
1265 printf("inter cell info[%d] rsrq = %d\n",i,cell_info.ext_info[i].rsrq);
1266
1267 printf("inter cell info[%d] cell_id_valid = %d\n",i,cell_info.ext_info[i].cell_id_valid);
1268 printf("inter cell info[%d] cell_id = %u\n",i,cell_info.ext_info[i].cell_id);
1269
1270 printf("inter cell info[%d] band_valid = %d\n",i,cell_info.ext_info[i].band_valid);
1271 printf("inter cell info[%d] band = %u\n",i,cell_info.ext_info[i].band);
1272
1273 printf("-----------------------------------------------------------\n");
1274 }
1275
1276
1277 break;
1278 }
1279
1280 case 19:
1281 {
1282 printf("gsw_reg_serving_info_callback start\n");
1283 ret = gsw_reg_serving_info_callback(gsw_serving_info_callback);
1284 break;
1285 }
1286
1287 case 20:
1288 {
1289 printf("gsw_reg_sig_info_callback start\n");
1290 ret = gsw_reg_sig_info_callback(gsw_sig_info_callback);
1291 break;
1292 }
1293
1294 case 21:
1295 {
1296 printf("gsw_reg_rej_cause_callback\n");
1297 ret = gsw_reg_rej_cause_callback(gsw_rej_cause_callback);
1298 break;
1299 }
1300
1301 case 22:
1302 {
1303 printf("gsw_oos_config_get\n");
1304 GSW_NW_OOS_CONFIG_INFO_T oos_cfg;
1305 ret = gsw_oos_config_get(&oos_cfg);
1306 if(ret != 0)
1307 {
q.huangc8b93122025-06-17 17:46:05 +08001308 printf("gsw_oos_config_get failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001309 continue;
1310 }
1311
1312 else
1313 {
1314 printf("oos_cfg.t_min = %d\n",oos_cfg.t_min);
1315 printf("oos_cfg.t_max = %d\n",oos_cfg.t_max);
1316 printf("oos_cfg.t_step = %d\n",oos_cfg.t_step);
1317 }
1318 break;
1319 }
1320
1321 case 23:
1322 {
1323 printf("gsw_oos_config_set\n");
1324 GSW_NW_OOS_CONFIG_INFO_T oos_cfg;
1325 oos_cfg.t_min = 5;
1326 oos_cfg.t_step = 5;
1327 oos_cfg.t_max = 5;
1328
1329 ret = gsw_oos_config_set(&oos_cfg);
1330 if(ret != 0)
1331 {
q.huangc8b93122025-06-17 17:46:05 +08001332 printf("gsw_oos_config_set failed, ret is %d\n",ret);
b.liu68a94c92025-05-24 12:53:41 +08001333 continue;
1334 }
1335 else
1336 {
1337 printf("gsw_oos_config_set success\n");
1338 }
1339 break;
1340 }
1341
q.huang238b22a2025-06-10 14:36:59 +08001342
1343 case 24:
1344 {
1345 char imei[GSW_IMEI_LENGTH] = {0};
1346 ret = gsw_get_imei(GSW_IMEI_LENGTH, (int8_t *)imei);
1347 if(ret == 0)
1348 {
1349 printf("gsw_get_imei success, imei = %s\n",imei);
1350 }
1351 else
1352 {
1353 printf("gsw_get_imei fail,ret = %d\n",ret);
1354 }
1355 break;
1356 }
1357 //reset modem
1358 case 25:
1359 {
1360 ret = gsw_reset_modem();
1361 if(ret == 0)
1362 {
1363 printf("gsw_reset_modem success\n");
1364 }
1365 else
1366 {
1367 printf("gsw_reset_modem fail,ret = %d\n",ret);
1368 }
1369 break;
1370 }
q.huangc8b93122025-06-17 17:46:05 +08001371 case 26:
1372 {
1373 printf("gsw_reg_operating_mode_callback\n");
1374 ret = gsw_reg_operating_mode_callback(gsw_operating_state_cb);
1375 if(ret != 0)
1376 {
1377 printf("gsw_reg_operating_mode_callback failed, ret is %d\n",ret);
1378 break;
1379 }
1380 printf("gsw_reg_operating_mode_callback success\n");
1381 break;
1382 }
b.liu68a94c92025-05-24 12:53:41 +08001383 default:
1384 {
1385 continue;
1386 }
1387
1388
1389 }
1390 }
1391
1392
1393}