blob: 9cfb040a67078542bc33745936a6f7f82059152e [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
294#define GSW_NW_OPERATION_NAME_LEN 128
295#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);
612
613int (*gsw_reg_serving_info_callback)(GSW_NW_ServingInfoHandlePtr handle_ptr);
614int (*gsw_reg_sig_info_callback)(GSW_NW_SigInfoHandlePtr handle_ptr);
615int (*gsw_reg_rej_cause_callback)(GSW_NW_RejectCauseHandlePtr handle_ptr);
616int (*gsw_nw_sdk_init)(int token);
617int (*gsw_nw_sdk_deinit)(void);
618int (*gsw_get_nwinfo)(GSW_NW_SERVING_INFO *serving_info);
619int (*gsw_get_netype)(int32_t *netype);
620int (*gsw_get_opmode)(int *op_mode);
621int (*gsw_set_opmode)(int32_t op_mode);
622int (*gsw_get_mode_preference)(int32_t *mode_pref);
623int (*gsw_set_mode_preference)(int32_t mode_pref);
624int (*gsw_get_sig_info)(int32_t *csq_value);
625int (*gsw_network_set_power_mode)(int8_t mode);
626int (*gsw_sigInfo_to_csq)(int32_t netType, int32_t sigValue);
627int (*gsw_get_forbidden_networks)(gsw_nw_plmn_list_t *plmn_list);
628int (*gsw_add_forbidden_networks)(gsw_nw_plmn_list_t *plmn_list);
629int (*gsw_remove_forbidden_networks)(gsw_nw_plmn_list_t *plmn_list);
630int (*gsw_clear_forbidden_networks)(void);
631int (*gsw_get_mobile_operator_name)(gsw_mobile_operator_name *nw_operator_name_infos);
632int (*gsw_reg_set_modem_status_event_callback)(GSW_NW_ModemStateHandlePtr handle_ptr);
633int (*gsw_get_cell_info)(GSW_NW_CELL_INFO *cell_info);
634int (*gsw_oos_config_get)(GSW_NW_OOS_CONFIG_INFO_T *pt_info);
635int (*gsw_oos_config_set)(GSW_NW_OOS_CONFIG_INFO_T *pt_info);
q.huang238b22a2025-06-10 14:36:59 +0800636int (*gsw_get_imei)(int32_t len, int8_t *imei);
637int (*gsw_reset_modem)(void);
b.liu68a94c92025-05-24 12:53:41 +0800638
639static int gsw_nw_api_import()
640{
641 dlHandle_nw = dlopen(lib_gsw_nw_path, RTLD_NOW);
642 if (dlHandle_nw == NULL) {
643 printf("error: %s\n", dlerror());
644 return -1;
645 }
646
647 gsw_nw_sdk_init = (int(*)(int token))dlsym(dlHandle_nw, "gsw_nw_sdk_init");
648 if (gsw_nw_sdk_init == NULL) {
649 printf("gsw_nw_sdk_init dlysm failed \n");
650 return -1;
651 }
652
653 gsw_nw_sdk_deinit = (int(*)(void))dlsym(dlHandle_nw, "gsw_nw_sdk_deinit");
654 if (gsw_nw_sdk_deinit == NULL) {
655 printf("gsw_nw_sdk_deinit dlysm failed \n");
656 return -1;
657 }
658
659 gsw_get_nwinfo = (int(*)(GSW_NW_SERVING_INFO *serving_info))dlsym(dlHandle_nw, "gsw_get_nwinfo");
660 if (gsw_get_nwinfo == NULL) {
661 printf("gsw_get_nwinfo dlysm failed \n");
662 return -1;
663 }
664
665 gsw_get_netype = (int(*)(int32_t *netype))dlsym(dlHandle_nw, "gsw_get_netype");
666 if (gsw_get_netype == NULL) {
667 printf("gsw_get_netype dlysm failed \n");
668 return -1;
669 }
670
671 gsw_get_opmode = (int(*)(int *op_mode))dlsym(dlHandle_nw, "gsw_get_opmode");
672 if (gsw_get_opmode == NULL) {
673 printf("gsw_get_opmode dlysm failed \n");
674 return -1;
675 }
676
677 gsw_set_opmode = (int(*)(int32_t op_mode))dlsym(dlHandle_nw, "gsw_set_opmode");
678 if (gsw_set_opmode == NULL) {
679 printf("gsw_set_opmode dlysm failed \n");
680 return -1;
681 }
682
683 gsw_get_mode_preference = (int(*)(int32_t *mode_pref))dlsym(dlHandle_nw, "gsw_get_mode_preference");
684 if (gsw_get_mode_preference == NULL) {
685 printf("gsw_get_mode_preference dlysm failed \n");
686 return -1;
687 }
688
689 gsw_set_mode_preference = (int(*)(int32_t mode_pref))dlsym(dlHandle_nw, "gsw_set_mode_preference");
690 if (gsw_set_mode_preference == NULL) {
691 printf("gsw_set_mode_preference dlysm failed \n");
692 return -1;
693 }
694
695 gsw_get_sig_info = (int(*)(int32_t *csq_value))dlsym(dlHandle_nw, "gsw_get_sig_info");
696 if (gsw_get_sig_info == NULL) {
697 printf("gsw_get_sig_info dlysm failed \n");
698 return -1;
699 }
700
701 gsw_network_set_power_mode = (int(*)(int8_t mode))dlsym(dlHandle_nw, "gsw_network_set_power_mode");
702 if (gsw_network_set_power_mode == NULL) {
703 printf("gsw_network_set_power_mode dlysm failed \n");
704 return -1;
705 }
706
707 gsw_sigInfo_to_csq = (int(*)(int32_t netType, int32_t sigValue))dlsym(dlHandle_nw, "gsw_sigInfo_to_csq");
708 if (gsw_sigInfo_to_csq == NULL) {
709 printf("gsw_sigInfo_to_csq dlysm failed \n");
710 return -1;
711 }
712
713 gsw_get_forbidden_networks = (int(*)(gsw_nw_plmn_list_t *plmn_list))dlsym(dlHandle_nw, "gsw_get_forbidden_networks");
714 if (gsw_get_forbidden_networks == NULL) {
715 printf("gsw_get_forbidden_networks dlysm failed \n");
716 return -1;
717 }
718
719 gsw_add_forbidden_networks = (int(*)(gsw_nw_plmn_list_t *plmn_list))dlsym(dlHandle_nw, "gsw_add_forbidden_networks");
720 if (gsw_add_forbidden_networks == NULL) {
721 printf("gsw_add_forbidden_networks dlysm failed \n");
722 return -1;
723 }
724
725 gsw_remove_forbidden_networks = (int(*)(gsw_nw_plmn_list_t *plmn_list))dlsym(dlHandle_nw, "gsw_remove_forbidden_networks");
726 if (gsw_remove_forbidden_networks == NULL) {
727 printf("gsw_remove_forbidden_networks dlysm failed \n");
728 return -1;
729 }
730
731 gsw_clear_forbidden_networks = (int(*)(void))dlsym(dlHandle_nw, "gsw_clear_forbidden_networks");
732 if (gsw_clear_forbidden_networks == NULL) {
733 printf("gsw_clear_forbidden_networks dlysm failed \n");
734 return -1;
735 }
736
737 gsw_get_mobile_operator_name = (int(*)(gsw_mobile_operator_name *nw_operator_name_infos))dlsym(dlHandle_nw, "gsw_get_mobile_operator_name");
738 if (gsw_get_mobile_operator_name == NULL) {
739 printf("gsw_get_mobile_operator_name dlysm failed \n");
740 return -1;
741 }
742
743 gsw_reg_set_modem_status_event_callback = (int(*)(GSW_NW_ModemStateHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_set_modem_status_event_callback");
744 if (gsw_reg_set_modem_status_event_callback == NULL) {
745 printf("gsw_reg_set_modem_status_event_callback dlysm failed \n");
746 return -1;
747 }
748
749 gsw_get_cell_info = (int(*)(GSW_NW_CELL_INFO *cell_info))dlsym(dlHandle_nw, "gsw_get_cell_info");
750 if (gsw_get_cell_info == NULL) {
751 printf("gsw_get_cell_info dlysm failed \n");
752 return -1;
753 }
754
755 gsw_reg_serving_info_callback = (int(*)(GSW_NW_ServingInfoHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_serving_info_callback");
756 if (gsw_reg_serving_info_callback == NULL) {
757 printf("gsw_reg_serving_info_callback dlysm failed \n");
758 return -1;
759 }
760
761 gsw_reg_sig_info_callback = (int(*)(GSW_NW_SigInfoHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_sig_info_callback");
762 if (gsw_reg_sig_info_callback == NULL) {
763 printf("gsw_reg_sig_info_callback dlysm failed \n");
764 return -1;
765 }
766
767 gsw_reg_rej_cause_callback = (int(*)(GSW_NW_RejectCauseHandlePtr handle_ptr))dlsym(dlHandle_nw, "gsw_reg_rej_cause_callback");
768 if (gsw_reg_rej_cause_callback == NULL) {
769 printf("gsw_reg_rej_cause_callback dlysm failed \n");
770 return -1;
771 }
772
773 gsw_oos_config_get = (int(*)(GSW_NW_OOS_CONFIG_INFO_T *oos_config))dlsym(dlHandle_nw, "gsw_oos_config_get");
774 if (gsw_oos_config_get == NULL) {
775 printf("gsw_oos_config_get dlysm failed \n");
776 return -1;
777 }
778
779 gsw_oos_config_set = (int(*)(GSW_NW_OOS_CONFIG_INFO_T *oos_config))dlsym(dlHandle_nw, "gsw_oos_config_set");
780 if (gsw_oos_config_set == NULL) {
781 printf("gsw_oos_config_set dlysm failed \n");
782 return -1;
783 }
784
q.huang238b22a2025-06-10 14:36:59 +0800785 gsw_get_imei = (int(*)(int32_t len, int8_t *imei))dlsym(dlHandle_nw,"gsw_get_imei");
786 if (gsw_get_imei == NULL) {
787 printf("dlsym gsw_get_imei fail\n");
788 return GSW_HAL_FAIL;
789 }
790
791 gsw_reset_modem = (int(*)(void))dlsym(dlHandle_nw,"gsw_reset_modem");
792 if (gsw_reset_modem == NULL) {
793 printf("dlsym gsw_reset_modem fail\n");
794 return GSW_HAL_FAIL;
795 }
796
b.liu68a94c92025-05-24 12:53:41 +0800797 return 0;
798
799}
800
801static void gsw_serving_info_callback(GSW_NW_SERVING_INFO serving_info)
802{
803 printf("gsw_serving_info_callback: \n");
804 printf("reg_state = %d\n", serving_info.reg_state);
805 printf("ps_state = %d\n", serving_info.ps_state);
806 printf("reg_rat = %d\n", serving_info.reg_rat);
807 printf("srv_domain = %d\n", serving_info.srv_domain);
808 printf("roaming_ind = %d\n", serving_info.roaming_ind);
809 printf("reg_plmn = %s\n", serving_info.reg_plmn);
810 printf("operator_name = %s\n", serving_info.operator_name);
811 printf("cell_id = %s\n", serving_info.cell_id);
812 printf("tac = %s\n", serving_info.tac);
813 printf("lac = %s\n", serving_info.lac);
814 printf("sid = %d\n", serving_info.sid);
815 printf("nid = %d\n", serving_info.nid);
816}
817
818static void gsw_sig_info_callback(signalStrength_t sig_info)
819{
820 printf("gsw_sig_info_callback: \n");
821 printf("gw_sig_valid = %d\n", sig_info.gw_sig_valid);
822 printf("rssi = %d\n", sig_info.rssi);
823 printf("wcdma_sig_valid = %d\n", sig_info.wcdma_sig_valid);
824 printf("rscp = %d\n", sig_info.rscp);
825 printf("ecno = %d\n", sig_info.ecno);
826 printf("lte_sig_valid = %d\n", sig_info.lte_sig_valid);
827 printf("rsrp = %d\n", sig_info.rsrp);
828 printf("rsrq = %d\n", sig_info.rsrq);
829 printf("rssnr = %d\n", sig_info.rssnr);
830 printf("nr_sig_valid = %d\n", sig_info.nr_sig_valid);
831 printf("ssRsrp = %d\n", sig_info.ssRsrp);
832 printf("ssRsrq = %d\n", sig_info.ssRsrq);
833 printf("ssSinr = %d\n", sig_info.ssSinr);
834 printf("csiRsrp = %d\n", sig_info.csiRsrp);
835 printf("csiRsrq = %d\n", sig_info.csiRsrq);
836 printf("csiSinr = %d\n", sig_info.csiSinr);
837}
838
839static void gsw_rej_cause_callback(GSW_NW_REJ_CAUSE_E *rej_cause)
840{
841 printf("gsw_rej_cause_callback: \n");
842 printf("rej_rat = %d\n", rej_cause->rej_rat);
843 printf("rej_domain = %d\n", rej_cause->rej_domain);
844 printf("rej_cause = %d\n", rej_cause->rej_cause);
845}
846
847static void gsw_modem_status_cb(gsw_mode_state_e state)
848{
849 printf("gsw_modem_status_cb: \n");
850 printf("state = %d\n", state);
851}
852
853
854void dump_items()
855{
856 printf("\n");
857 printf("The current module is: network \n");
858
859 printf("-------------------------------------------------------------------------\n");
860 printf("| index | function name |\n");
861 printf("| -1 exit\n");
862 printf(" 1 gsw_nw_sdk_init\n");
863 printf(" 2 gsw_nw_sdk_deinit\n");
864 printf(" 3 gsw_get_nwinfo\n");
865 printf(" 4 gsw_get_netype\n");
866 printf(" 5 gsw_get_opmode\n");
867 printf(" 6 gsw_set_opmode\n");
868 printf(" 7 gsw_get_mode_preference\n");
869 printf(" 8 gsw_set_mode_preference\n");
870 printf(" 9 gsw_get_sig_info\n");
871 printf(" 10 gsw_network_set_power_mode\n");
872 printf(" 11 gsw_sigInfo_to_csq\n");
873 printf(" 12 gsw_get_forbidden_networks\n");
874 printf(" 13 gsw_add_forbidden_networks\n");
875 printf(" 14 gsw_remove_forbidden_networks\n");
876 printf(" 15 gsw_clear_forbidden_networks\n");
877 printf(" 16 gsw_get_mobile_operator_name\n");
878 printf(" 17 gsw_reg_set_modem_status_event_callback\n");
879 printf(" 18 gsw_get_cell_info\n");
880 printf(" 19 gsw_reg_serving_info_callback\n");
881 printf(" 20 gsw_reg_sig_info_callback\n");
882 printf(" 21 gsw_reg_rej_cause_callback\n");
883 printf(" 22 gsw_oos_config_get\n");
884 printf(" 23 gsw_oos_config_set\n");
q.huang238b22a2025-06-10 14:36:59 +0800885 printf(" 24 gsw_get_imei\n");
886 printf(" 25 gsw_reset modem\n");
b.liu68a94c92025-05-24 12:53:41 +0800887 printf("-------------------------------------------------------------------------\n");
888}
889
890int main(int argc, char *argv[])
891{
892 int ret;
893 char operator[10];
894 int opt;
895
896 ret = gsw_nw_api_import();
897 if (ret != 0) {
898 printf("gsw_nw_api_import failed \n");
899 return -1;
900 }
901
902
903 while(1)
904 {
905 dump_items();
906 printf("input the index of module: ");
907
908 opt = -1;
909 printf("%s",fgets(operator, sizeof(operator), stdin));
910 fflush(stdin);
911
912 opt = atoi(operator);
913 switch (opt) {
914 case -1:
915 {
916 printf("main exit\n");
917 return 0;
918 }
919 case 1:
920 {
921 printf("gsw_nw_sdk_init\n");
922 ret = gsw_nw_sdk_init(1024);
923 printf("gsw_nw_sdk_init ret = %d\n",ret);
924 break;
925 }
926 case 2:
927 {
928 printf("gsw_nw_sdk_deinit\n");
929 ret = gsw_nw_sdk_deinit();
930 printf("gsw_nw_sdk_deinit ret = %d\n",ret);
931 break;
932 }
933 case 3:
934 {
935 GSW_NW_SERVING_INFO* nwinfo;
936 nwinfo = (GSW_NW_SERVING_INFO*)malloc(sizeof(GSW_NW_SERVING_INFO));
937 memset(nwinfo, 0x00, sizeof(GSW_NW_SERVING_INFO));
938 printf("gsw_get_nwinfo start\n");
939 ret = gsw_get_nwinfo(nwinfo);
940 if(ret != 0)
941 {
942 printf("gsw_get_nwinfo failed \n");
943 continue;
944 }
945 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);
946 free(nwinfo);
947 break;
948 }
949 case 4:
950 {
951 int nettype;
952 ret = gsw_get_netype(&nettype);
953 if(ret != 0)
954 {
955 printf("gsw_get_netype failed \n");
956 continue;
957 }
958 printf("nettype = %d\n", nettype);
959 break;
960 }
961
962 case 5:
963 {
964 int opmode;
965 ret = gsw_get_opmode(&opmode);
966 if(ret != 0)
967 {
968 printf("gsw_get_opmode failed \n");
969 continue;
970 }
971 printf("opmode = %d\n", opmode);
972 break;
973 }
974
975 case 6:
976 {
977 printf("input the opmode: ");
978 memset(operator,0x00, sizeof(operator));
979 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
980 fflush(stdin);
981 opt = atoi(operator);
982 ret = gsw_set_opmode(opt);
983 if(ret != 0)
984 {
985 printf("gsw_set_opmode failed \n");
986 continue;
987 }
988 break;
989 }
990
991 case 7:
992 {
993 int mode_pref;
994 ret = gsw_get_mode_preference(&mode_pref);
995 if(ret != 0)
996 {
997 printf("gsw_get_mode_preference failed \n");
998 continue;
999 }
1000 printf("mode_pref = %d\n", mode_pref);
1001 break;
1002 }
1003
1004 case 8:
1005 {
1006 printf("input the mode_pref: ");
1007 memset(operator,0x00, sizeof(operator));
1008 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
1009 fflush(stdin);
1010 opt = atoi(operator);
1011 ret = gsw_set_mode_preference(opt);
1012 if(ret != 0)
1013 {
1014 printf("gsw_set_mode_preference failed \n");
1015 continue;
1016 }
1017 break;
1018 }
1019
1020 case 9:
1021 {
1022 int siginfo;
1023 ret = gsw_get_sig_info(&siginfo);
1024 if(ret != 0)
1025 {
1026 printf("gsw_get_sig_info failed \n");
1027 continue;
1028 }
1029 printf("signal info: siginfo = %d\n", siginfo);
1030 break;
1031 }
1032
1033 case 10:
1034 {
1035 printf("input the power mode: ");
1036 memset(operator,0x00, sizeof(operator));
1037 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
1038 fflush(stdin);
1039 opt = atoi(operator);
1040 ret = gsw_network_set_power_mode(opt);
1041 if(ret != 0)
1042 {
1043 printf("gsw_network_set_power_mode failed \n");
1044 continue;
1045 }
1046 break;
1047 }
1048
1049 case 11:
1050 {
1051 int nettype;
1052 int sigValue;
1053 printf("please input the netType:");
1054 memset(operator,0x00, sizeof(operator));
1055 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
1056 fflush(stdin);
1057 nettype = atoi(operator);
1058
1059 printf("input the sigValue: ");
1060 memset(operator,0x00, sizeof(operator));
1061 printf("%s\n",fgets(operator, sizeof(operator)-1, stdin));
1062 fflush(stdin);
1063 sigValue = atoi(operator);
1064
1065 ret = gsw_sigInfo_to_csq(nettype, sigValue);
1066 printf("csq = %d\n", ret);
1067
1068 break;
1069 }
1070
1071 case 12:
1072 {
1073 printf("gsw_get_forbidden_networks start\n");
1074 gsw_nw_plmn_list_t fplmn_list;
1075 fplmn_list.plmn_list_len = 0;
1076 ret = gsw_get_forbidden_networks(&fplmn_list);
1077 if(ret != 0)
1078 {
1079 printf("gsw_get_forbidden_networks failed \n");
1080 continue;
1081 }
1082
1083 printf("gsw_get_forbidden_networks end\n");
1084 for(int i = 0; i < fplmn_list.plmn_list_len; i++)
1085 {
1086 printf("list[%d] mcc = %s,mnc = %s\n",i, fplmn_list.plmn_list[i].mcc, fplmn_list.plmn_list[i].mnc);
1087 }
1088
1089 break;
1090 }
1091 case 13:
1092 {
1093 printf("gsw_add_forbidden_networks start\n");
1094 gsw_nw_plmn_list_t fplmn_list_set;
1095 fplmn_list_set.plmn_list_len = 1;
1096 strcpy(fplmn_list_set.plmn_list[0].mcc, "460");
1097 strcpy(fplmn_list_set.plmn_list[0].mnc, "09");
1098
1099 ret = gsw_add_forbidden_networks(&fplmn_list_set);
1100 if(ret != 0)
1101 {
1102 printf("gsw_add_forbidden_networks failed \n");
1103 continue;
1104 }
1105 printf("gsw_add_forbidden_networks end\n");
1106 break;
1107 }
1108 case 14:
1109 {
1110 printf("gsw_add_forbidden_networks start\n");
1111 gsw_nw_plmn_list_t fplmn_list_remove;
1112 fplmn_list_remove.plmn_list_len = 1;
1113 strcpy(fplmn_list_remove.plmn_list[0].mcc, "460");
1114 strcpy(fplmn_list_remove.plmn_list[0].mnc, "02");
1115
1116 ret = gsw_remove_forbidden_networks(&fplmn_list_remove);
1117 if(ret != 0)
1118 {
1119 printf("gsw_add_forbidden_networks failed \n");
1120 continue;
1121 }
1122 printf("gsw_add_forbidden_networks end\n");
1123 break;
1124 }
1125
1126 case 15:
1127 {
1128 printf("gsw_clear_forbidden_networks start\n");
1129 ret = gsw_clear_forbidden_networks();
1130 if(ret != 0)
1131 {
1132 printf("gsw_clear_forbidden_networks failed \n");
1133 continue;
1134 }
1135 printf("gsw_clear_forbidden_networks end\n");
1136 break;
1137 }
1138
1139 case 16:
1140 {
1141 gsw_mobile_operator_name opname;
1142
1143 ret = gsw_get_mobile_operator_name(&opname);
1144 if(ret != 0)
1145 {
1146 printf("gsw_get_mobile_operator_name failed \n");
1147 continue;
1148 }
1149
1150 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);
1151 break;
1152 }
1153
1154 case 17:
1155 {
1156 printf("gsw_reg_set_modem_status_event_callback\n");
1157 ret = gsw_reg_set_modem_status_event_callback(gsw_modem_status_cb);
1158 if(ret != 0)
1159 {
1160 printf("gsw_reg_set_modem_status_event_callback failed \n");
1161 continue;
1162 }
1163 printf("gsw_reg_set_modem_status_event_callback success\n");
1164 break;
1165 }
1166
1167 case 18:
1168 {
1169 printf("gsw_get_cell_info starts\n");
1170 GSW_NW_CELL_INFO cell_info;
1171 memset(&cell_info, 0x00, sizeof(GSW_NW_CELL_INFO));
1172 ret = gsw_get_cell_info(&cell_info);
1173 if(ret != 0)
1174 {
1175 printf("gsw_get_cell_info failed \n");
1176 continue;
1177 }
1178
1179 printf("--------------------serving cell info ------------------------------\n");
1180 printf("mcc_valid = %d\n",cell_info.mcc_valid);
1181 printf("mcc = %s\n",cell_info.mcc);
1182 printf("mnc_valid = %d\n",cell_info.mnc_valid);
1183 printf("mnc = %s\n",cell_info.mnc);
1184 printf("cell_id_valid = %d\n",cell_info.cell_id_valid);
1185 printf("cell_id = %u\n",cell_info.cell_id);
1186 printf("pci_valid = %d\n",cell_info.pci_valid);
1187 printf("pci = %d\n",cell_info.pci);
1188 printf("psc_valid = %d\n",cell_info.psc_valid);
1189 printf("psc = %d\n",cell_info.psc);
1190 printf("earfcn_valid = %d\n",cell_info.earfcn_valid);
1191 printf("earfcn = %d\n",cell_info.earfcn);
1192 printf("uarfcn_valid = %d\n",cell_info.uarfcn_valid);
1193 printf("uarfcn = %d\n",cell_info.uarfcn);
1194 printf("arfcn_valid = %d\n",cell_info.arfcn_valid);
1195 printf("arfcn = %d\n",cell_info.arfcn);
1196 printf("tac_valid = %d\n",cell_info.tac_valid);
1197 printf("tac = %u\n",cell_info.tac);
1198 printf("lac_valid = %d\n",cell_info.lac_valid);
1199 printf("lac = %u\n",cell_info.lac);
1200 printf("sid_valid = %d\n",cell_info.sid_valid);
1201 printf("sid = %d\n",cell_info.sid);
1202 printf("nid_valid = %d\n",cell_info.nid_valid);
1203 printf("nid = %d\n",cell_info.nid);
1204 printf("lteMode_valid = %d\n",cell_info.lteMode_valid);
1205 printf("lteMode = %d\n",cell_info.lteMode);
1206 printf("rssi_valid = %d\n",cell_info.rssi_valid);
1207 printf("rssi = %d\n",cell_info.rssi);
1208 printf("rsrq_valid = %d\n",cell_info.rsrq_valid);
1209 printf("rsrq = %d\n",cell_info.rsrq);
1210 printf("ecio_valid = %d\n",cell_info.ecio_valid);
1211 printf("ecio = %d\n",cell_info.ecio);
1212 printf("rsrp_valid = %d\n",cell_info.rsrp_valid);
1213 printf("rsrp = %d\n",cell_info.rsrp);
1214 printf("rsrq_valid = %d\n",cell_info.rsrq_valid);
1215 printf("rsrq = %d\n",cell_info.rsrq);
1216 printf("rssnr_valid = %d\n",cell_info.rssnr_valid);
1217 printf("rssnr = %d\n",cell_info.rssnr);
1218 printf("band_valid = %d\n",cell_info.band_valid);
1219 printf("band = %d\n",cell_info.band);
1220 printf("bler_valid = %d\n",cell_info.bler_valid);
1221 printf("bler = %d\n",cell_info.bler);
1222
1223
1224 printf("-----------------------------------------------------------------------------------\n");
1225
1226 printf("-------------------------------------inter cell info ------------------------------\n");
1227
1228 for(int i = 0; i <MAX_CELL_EXT_INFO ; i++)
1229 {
1230 printf("-----------------------------------------------------------\n");
1231 printf("inter cell info[%d] rat = %d\n",i,cell_info.ext_info[i].rat);
1232
1233 printf("inter cell info[%d] mcc = %s\n",i,cell_info.ext_info[i].mcc);
1234
1235 printf("inter cell info[%d] mnc = %s\n",i,cell_info.ext_info[i].mnc);
1236
1237 printf("inter cell info[%d] pci_valid = %d\n",i,cell_info.ext_info[i].pci_valid);
1238 printf("inter cell info[%d] pci = %d\n",i,cell_info.ext_info[i].pci);
1239
1240 printf("inter cell info[%d] arfcn_valid = %d\n",i,cell_info.ext_info[i].arfcn_valid);
1241 printf("inter cell info[%d] arfcn = %d\n",i,cell_info.ext_info[i].arfcn);
1242
1243 printf("inter cell info[%d] rsrp_valid = %d\n",i,cell_info.ext_info[i].rsrp_valid);
1244 printf("inter cell info[%d] rsrp = %d\n",i,cell_info.ext_info[i].rsrp);
1245
1246 printf("inter cell info[%d] rsrq_valid = %d\n",i,cell_info.ext_info[i].rsrq_valid);
1247 printf("inter cell info[%d] rsrq = %d\n",i,cell_info.ext_info[i].rsrq);
1248
1249 printf("inter cell info[%d] cell_id_valid = %d\n",i,cell_info.ext_info[i].cell_id_valid);
1250 printf("inter cell info[%d] cell_id = %u\n",i,cell_info.ext_info[i].cell_id);
1251
1252 printf("inter cell info[%d] band_valid = %d\n",i,cell_info.ext_info[i].band_valid);
1253 printf("inter cell info[%d] band = %u\n",i,cell_info.ext_info[i].band);
1254
1255 printf("-----------------------------------------------------------\n");
1256 }
1257
1258
1259 break;
1260 }
1261
1262 case 19:
1263 {
1264 printf("gsw_reg_serving_info_callback start\n");
1265 ret = gsw_reg_serving_info_callback(gsw_serving_info_callback);
1266 break;
1267 }
1268
1269 case 20:
1270 {
1271 printf("gsw_reg_sig_info_callback start\n");
1272 ret = gsw_reg_sig_info_callback(gsw_sig_info_callback);
1273 break;
1274 }
1275
1276 case 21:
1277 {
1278 printf("gsw_reg_rej_cause_callback\n");
1279 ret = gsw_reg_rej_cause_callback(gsw_rej_cause_callback);
1280 break;
1281 }
1282
1283 case 22:
1284 {
1285 printf("gsw_oos_config_get\n");
1286 GSW_NW_OOS_CONFIG_INFO_T oos_cfg;
1287 ret = gsw_oos_config_get(&oos_cfg);
1288 if(ret != 0)
1289 {
1290 printf("gsw_oos_config_get failed \n");
1291 continue;
1292 }
1293
1294 else
1295 {
1296 printf("oos_cfg.t_min = %d\n",oos_cfg.t_min);
1297 printf("oos_cfg.t_max = %d\n",oos_cfg.t_max);
1298 printf("oos_cfg.t_step = %d\n",oos_cfg.t_step);
1299 }
1300 break;
1301 }
1302
1303 case 23:
1304 {
1305 printf("gsw_oos_config_set\n");
1306 GSW_NW_OOS_CONFIG_INFO_T oos_cfg;
1307 oos_cfg.t_min = 5;
1308 oos_cfg.t_step = 5;
1309 oos_cfg.t_max = 5;
1310
1311 ret = gsw_oos_config_set(&oos_cfg);
1312 if(ret != 0)
1313 {
1314 printf("gsw_oos_config_set failed \n");
1315 continue;
1316 }
1317 else
1318 {
1319 printf("gsw_oos_config_set success\n");
1320 }
1321 break;
1322 }
1323
q.huang238b22a2025-06-10 14:36:59 +08001324
1325 case 24:
1326 {
1327 char imei[GSW_IMEI_LENGTH] = {0};
1328 ret = gsw_get_imei(GSW_IMEI_LENGTH, (int8_t *)imei);
1329 if(ret == 0)
1330 {
1331 printf("gsw_get_imei success, imei = %s\n",imei);
1332 }
1333 else
1334 {
1335 printf("gsw_get_imei fail,ret = %d\n",ret);
1336 }
1337 break;
1338 }
1339 //reset modem
1340 case 25:
1341 {
1342 ret = gsw_reset_modem();
1343 if(ret == 0)
1344 {
1345 printf("gsw_reset_modem success\n");
1346 }
1347 else
1348 {
1349 printf("gsw_reset_modem fail,ret = %d\n",ret);
1350 }
1351 break;
1352 }
b.liu68a94c92025-05-24 12:53:41 +08001353 default:
1354 {
1355 continue;
1356 }
1357
1358
1359 }
1360 }
1361
1362
1363}