Add basic change for v1453
Change-Id: I9497a61bbc3717f66413794a4e7dee0347c0bc33
diff --git a/mbtk/test/libql_lib_v2/ql_nw_test.c b/mbtk/test/libql_lib_v2/ql_nw_test.c
new file mode 100755
index 0000000..409a966
--- /dev/null
+++ b/mbtk/test/libql_lib_v2/ql_nw_test.c
@@ -0,0 +1,1747 @@
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @file ql_nw_test.c
+ @brief nw test module
+*/
+/*-----------------------------------------------------------------------------------------------*/
+
+/*-------------------------------------------------------------------------------------------------
+ Copyright (c) 2024 mobiletek Wireless Solution, Co., Ltd. All Rights Reserved.
+ mobiletek Wireless Solution Proprietary and Confidential.
+-------------------------------------------------------------------------------------------------*/
+
+/*-------------------------------------------------------------------------------------------------
+ EDIT HISTORY
+ This section contains comments describing changes made to the file.
+ Notice that changes are listed in reverse chronological order.
+ $Header: $
+ when who what, where, why
+ -------- --------- -----------------------------------------------------------------
+ 20241022 yq.wang Created .
+-------------------------------------------------------------------------------------------------*/
+
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "ql_test_utils.h"
+#include "ql_type.h"
+#include "ql_nw.h"
+
+
+#if 0
+static int internal_nw_get_nas_rat(int radio, char* buf, int buf_len);
+#endif
+static int internal_nw_get_net_status(QL_NW_NETWORK_STATUS_TYPE_E net, char* buf, int buf_len);
+static int internal_nw_get_radio_tech(QL_NW_RADIO_TECH_TYPE_E radio, char* buf, int buf_len);
+static int internal_nw_get_tech_domain(QL_NW_TECH_DOMAIN_TYPE_E domain, char* buf, int buf_len);
+static int internal_nw_get_signal_strength_level(QL_NW_SIGNAL_STRENGTH_LEVEL_E level, char* buf, int buf_len);
+static void internal_nw_get_mcc_mnc_value(char *plmn, int plmn_len, unsigned short *mcc, unsigned short *mnc);
+static void internal_nw_get_service_option(unsigned short so_mask, char *buf, int buf_len);
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief Read a uint32 value from stdin
+ @param[out] val, Return read data
+ @return
+ 0 - successful
+ 1 - read an enter
+ -1 - invalid input
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int t_get_hex(uint32_t *val)
+{
+ int dat;
+ char *ptr_end = NULL;
+ char buf[256] = {0};
+
+ if(fgets(buf, sizeof(buf)-1, stdin) == NULL)
+ {
+ return -1;
+ }
+
+ if(0 == buf[0])
+ {
+ return -1;
+ }
+
+ if(buf[0] == '\n')
+ {
+ return 1;
+ }
+
+ dat = strtol(buf, &ptr_end, 16);
+ if(ptr_end!=NULL && ptr_end[0]!='\n')
+ {
+ return -1;
+ }
+
+ if(val)
+ {
+ val[0] = dat;
+ }
+
+ return 0;
+}
+
+void nw_voice_reg_event_ind_cb(ql_nw_reg_status_info_t *ind)
+{
+ char domain_info[16] = {0};
+ char radio_info[16] = {0};
+ char svc_opt[128] = {0};
+
+ if(ind == NULL)
+ {
+ printf("recv voice reg ind event, param is null\n");
+ return;
+ }
+ printf("recv voice reg ind event, detail info:\n");
+
+ if(internal_nw_get_tech_domain(ind->tech_domain, domain_info, sizeof(domain_info)) == 0)
+ {
+ printf("\ttech_domain is unrecognized:%d, ", ind->tech_domain);
+ }
+ else
+ {
+ printf("\ttech_domain = %s, ", domain_info);
+ }
+
+ if(internal_nw_get_radio_tech(ind->radio_tech, radio_info, sizeof(radio_info)) == 0)
+ {
+ printf("radio_tech is unrecognized:%d, ", ind->radio_tech);
+ }
+ else
+ {
+ printf("radio_tech = %s, ", radio_info);
+ }
+
+ printf("roaming = %d, reg_status = %d, deny_reason = %d\n",
+ ind->roaming, ind->reg_state, ind->deny_reason);
+
+ if(QL_NW_RADIO_TECH_NR5G != ind->radio_tech)
+ {
+ printf("\tmcc=%s, mnc=%s, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d, endc_available=%d\n",
+ ind->mcc,
+ ind->mnc,
+ ind->forbidden,
+ ind->cid,
+ ind->lac,
+ ind->psc,
+ ind->tac,
+ ind->endc_available);
+
+ printf("\tinPRL=%d, css=%d, sid=%d, nid=%d, bsid=%d\n",
+ ind->inPRL,
+ ind->css,
+ ind->sid,
+ ind->nid,
+ ind->bsid);
+ }
+ else
+ {
+ printf("\tmcc=%s, mnc=%s, forbidden=%d, cid=0x%llX, pci=%d, tac=%d\n",
+ ind->mcc,
+ ind->mnc,
+ ind->forbidden,
+ ind->nr5g_cid,
+ ind->nr5g_pci,
+ ind->nr5g_tac);
+
+ internal_nw_get_service_option(ind->nr5g_svc_opt, svc_opt, sizeof(svc_opt));
+ printf("\tsvc_opt(%d)=%s\n", ind->nr5g_svc_opt, svc_opt);
+ }
+}
+
+#if 0
+void nw_data_reg_event_ind_cb(ql_nw_reg_status_info_t *ind)
+{
+ char domain_info[16] = {0};
+ char radio_info[16] = {0};
+ char svc_opt[128] = {0};
+
+ if(ind == NULL)
+ {
+ printf("recv data reg ind event, param is null\n");
+ return;
+ }
+ printf("recv data reg ind event, detail info:\n");
+
+ if(internal_nw_get_tech_domain(ind->tech_domain, domain_info, sizeof(domain_info)) == 0)
+ {
+ printf("\ttech_domain is unrecognized:%d, ", ind->tech_domain);
+ }
+ else
+ {
+ printf("\ttech_domain = %s, ", domain_info);
+ }
+
+ if(internal_nw_get_radio_tech(ind->radio_tech, radio_info, sizeof(radio_info)) == 0)
+ {
+ printf("radio_tech is unrecognized:%d, ", ind->radio_tech);
+ }
+ else
+ {
+ printf("radio_tech = %s, ", radio_info);
+ }
+
+ printf("roaming = %d, reg_status = %d, deny_reason = %d\n",
+ ind->roaming, ind->reg_state, ind->deny_reason);
+
+ if(QL_NW_RADIO_TECH_NR5G != ind->radio_tech)
+ {
+ printf("\tmcc=%s, mnc=%s, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d, endc_available=%d\n",
+ ind->mcc,
+ ind->mnc,
+ ind->forbidden,
+ ind->cid,
+ ind->lac,
+ ind->psc,
+ ind->tac,
+ ind->endc_available);
+
+ printf("\tinPRL=%d, css=%d, sid=%d, nid=%d, bsid=%d\n",
+ ind->inPRL,
+ ind->css,
+ ind->sid,
+ ind->nid,
+ ind->bsid);
+ }
+ else
+ {
+ printf("\tmcc=%s, mnc=%s, forbidden=%d, cid=0x%llX, pci=%d, tac=%d\n",
+ ind->mcc,
+ ind->mnc,
+ ind->forbidden,
+ ind->nr5g_cid,
+ ind->nr5g_pci,
+ ind->nr5g_tac);
+
+ internal_nw_get_service_option(ind->nr5g_svc_opt, svc_opt, sizeof(svc_opt));
+ printf("\tsvc_opt(%d)=%s\n", ind->nr5g_svc_opt, svc_opt);
+ }
+}
+#endif
+
+void nw_signal_strength_event_ind_cb(ql_nw_signal_strength_info_t *ind, QL_NW_SIGNAL_STRENGTH_LEVEL_E level)
+{
+ char level_info[16] = {0};
+
+ if(ind == NULL)
+ {
+ printf("recv signal strength ind event, param is null\n");
+ return;
+ }
+
+ printf("recv event indication : signal strength event\n");
+
+ if(ind->has_gsm)
+ {
+ printf("gsm_sig_info: rssi=%d\n", ind->gsm.rssi);
+ }
+
+ if(ind->has_wcdma)
+ {
+ printf("wcdma_sig_info: rssi=%d, ecio=%d\n",
+ ind->wcdma.rssi,
+ ind->wcdma.ecio);
+ }
+ if(ind->has_tdscdma)
+ {
+ printf("tdscdma_sig_info: rssi=%d, rscp=%d, ecio=%d, sinr=%d\n",
+ ind->tdscdma.rssi,
+ ind->tdscdma.rscp,
+ ind->tdscdma.ecio,
+ ind->tdscdma.sinr);
+ }
+ if(ind->has_lte)
+ {
+ printf("lte_sig_info: rssi=%d, rsrq=%d, rsrp=%d, snr=%d\n",
+ ind->lte.rssi,
+ ind->lte.rsrq,
+ ind->lte.rsrp,
+ ind->lte.snr);
+ }
+ if(ind->has_nr5g)
+ {
+ printf("nr5g_sig_info: rsrp=%hd, rsrq=%hd, snr=%hd\n",
+ ind->nr5g.rsrp,
+ ind->nr5g.rsrq,
+ ind->nr5g.snr);
+ }
+ if(ind->has_cdma)
+ {
+ printf("cdma_sig_info: rssi=%d, ecio=%d\n",
+ ind->cdma.rssi,
+ ind->cdma.ecio);
+ }
+ if(ind->has_hdr)
+ {
+ printf("hdr_sig_info: rssi=%d, ecio=%d, sinr=%d, io=%d\n",
+ ind->hdr.rssi,
+ ind->hdr.ecio,
+ ind->hdr.sinr,
+ ind->hdr.io);
+ }
+
+ if(internal_nw_get_signal_strength_level(level, level_info, sizeof(level_info)) == 0)
+ {
+ printf("signal strength level is %d, unrecognized\n", level);
+ }
+ else
+ {
+ printf("signal strength level is %s\n", level_info);
+ }
+}
+
+#if 0
+void nw_cell_access_status_event_ind_cb(QL_NW_CELL_ACCESS_STATE_TYPE_E status)
+{
+ printf("recv event indication : cell access status event\n");
+ printf("status = %d\n", status);
+}
+
+void nw_nitz_time_update_event_ind_cb(ql_nw_nitz_time_info_t *ind)
+{
+ if(ind == NULL)
+ {
+ printf("recv nitz time update ind event, param is null\n");
+ return;
+ }
+ printf("recv event indication : nitz time update event\n");
+ printf("nitz_time=%s, abs_time=%lld, leap_sec=%d\n",
+ ind->nitz_time, ind->abs_time, ind->leap_sec);
+}
+
+void nw_wea_alert_event_ind_cb(ql_nw_wea_alert_info_t *ind)
+{
+ if(ind == NULL)
+ {
+ printf("recv wea alert ind event, param is null\n");
+ return;
+ }
+
+ printf("recv event indication : wea alert event, wea_alert_info_valid:[%d]\n",
+ ind->wea_alert_info_valid);
+ if(ind->wea_alert_info_valid)
+ {
+ printf("wea alert info:[%s] \n",ind->wea_alert_info);
+ }
+}
+
+void nw_etws_alert_event_ind_cb(ql_nw_etws_alert_info_t *ind)
+{
+ if(ind == NULL)
+ {
+ printf("recv etws alert ind event, param is null\n");
+ return;
+ }
+ printf("recv event indication : etws alert event, etws_primary_info_valid:[%d] etws_secondary_info_valid:[%d]\n",
+ ind->etws_primary_info_valid, ind->etws_secondary_info_valid);
+ if(ind->etws_primary_info_valid)
+ {
+ printf("etws primary alert info:[%s] \n", ind->etws_primary_info);
+ }
+ if(ind->etws_secondary_info_valid)
+ {
+ printf("etws secondary alert info:[%s] \n",
+ ind->etws_secondary_info);
+ }
+}
+
+void nw_network_scan_async_cb(int async_id, ql_nw_scan_result_list_info_t *info)
+{
+ int i = 0;
+ char net_info[16] = {0};
+ char radio_info[16] = {0};
+
+ printf("network scan async callback, async id is %d, list_len=%d, detail info:\n", async_id, info->entry_len);
+ for(i = 0; i < info->entry_len; i++)
+ {
+ memset(net_info, 0, sizeof(net_info));
+ memset(radio_info, 0, sizeof(radio_info));
+ printf("\t[%d]: long_eons=%s, short_eons=%s, mcc=%s, mnc=%s, ",
+ i,
+ info->entry[i].operator_name.long_eons,
+ info->entry[i].operator_name.short_eons,
+ info->entry[i].operator_name.mcc,
+ info->entry[i].operator_name.mnc);
+
+
+ if(internal_nw_get_net_status(info->entry[i].network_status, net_info, sizeof(net_info)) == 0)
+ {
+ printf("unrecognized network_status:%d, ", info->entry[i].network_status);
+ }
+ else
+ {
+ printf("network_status=%s, ", net_info);
+ }
+
+ if(internal_nw_get_radio_tech(info->entry[i].rat, radio_info, sizeof(radio_info)) == 0)
+ {
+ printf("unrecognized rat:%d\n ", info->entry[i].rat);
+ }
+ else
+ {
+ printf("radio_tech=%s\n", radio_info);
+ }
+ }
+}
+#endif
+
+void nw_service_error_cb(int error)
+{
+ printf("===== NW Service Abort =====\n");
+}
+
+void item_ql_nw_init(void)
+{
+ int ret = 0;
+
+ printf("Start to ql_nw_init: ");
+ ret = ql_nw_init();
+ if(ret == QL_ERR_OK)
+ {
+ printf("nw init ok\n");
+ }
+ else
+ {
+ printf("failed, ret=%d\n", ret);
+ }
+}
+
+void item_ql_nw_deinit(void)
+{
+ int ret = 0;
+
+ printf("Start to ql_nw_deinit: ");
+ ret = ql_nw_deinit();
+ if(ret == QL_ERR_OK)
+ {
+ printf("nw deinit ok\n");
+ }
+ else
+ {
+ printf("failed, ret=%d\n", ret);
+ }
+}
+
+#if 0
+void item_ql_nw_network_scan(void)
+{
+ int ret;
+ int async_id = 0;
+
+ ret = ql_nw_network_scan(&async_id, nw_network_scan_async_cb);
+ if(ret == QL_ERR_OK)
+ {
+ printf("async network scan succeed, token id is %d\n", async_id);
+ }
+ else
+ {
+ printf("async network scan failed, token id is %d, ret=%d", async_id, ret);
+ }
+}
+#endif
+
+void item_ql_nw_set_power_mode(void)
+{
+ int ret;
+ uint32_t mode = 0;
+
+ printf("please input power mode mask hex(VOICE | SMS | SIM | NETWORK | NORMAL): ");
+ ret = t_get_hex(&mode);
+ if(ret != 0)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ ret = ql_nw_set_power_mode(mode);
+ printf("ql_nw_set_lower_power_mode ret = %d\n", ret);
+}
+
+#if 0
+void item_ql_nw_set_pref_nwmode_roaming(void)
+{
+ int ret;
+ uint32_t mask = 0;
+ ql_nw_pref_nwmode_roaming_info_t t_info;
+
+ memset(&t_info, 0, sizeof(t_info));
+ printf("please input config mask hex(TDSCDMA | LTE | EVDO | CDMA | WCDMA | GSM): ");
+ ret = t_get_hex(&mask);
+ if(ret != 0)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ t_info.preferred_nw_mode = mask;
+
+#if 0
+ printf("please input roaming pref(0:off 1:on): ");
+ ret = t_get_int((int *)&mask);
+ if(ret != 0)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+
+ t_info.preferred_roaming = mask;
+#endif
+ ret = ql_nw_set_pref_nwmode_roaming(&t_info);
+ printf("ql_nw_set_config ret = %d\n", ret);
+}
+
+void item_ql_nw_get_pref_nwmode_roaming(void)
+{
+ int ret;
+ ql_nw_pref_nwmode_roaming_info_t t_info;
+
+ memset(&t_info, 0, sizeof(t_info));
+ ret = ql_nw_get_pref_nwmode_roaming(&t_info);
+#if 0
+ printf("ql_nw_get_config ret = %d\npreferred_nw_mode=%#llx, preferred_roaming=%d\n",
+ ret, t_info.preferred_nw_mode, t_info.preferred_roaming);
+#else
+ printf("ql_nw_get_config ret = %d\npreferred_nw_mode=%#llx\n",
+ ret, t_info.preferred_nw_mode);
+#endif
+}
+
+void item_ql_nw_get_mobile_operator_name(void)
+{
+ int ret;
+ ql_nw_mobile_operator_name_info_t t_info;
+
+ memset(&t_info, 0, sizeof(t_info));
+ ret = ql_nw_get_mobile_operator_name(&t_info);
+ printf("ql_nw_get_operator_name ret = %d, long_eons=%s, short_eons=%s, mcc=%s, mnc=%s\n",
+ ret,
+ t_info.long_eons,
+ t_info.short_eons,
+ t_info.mcc,
+ t_info.mnc);
+}
+
+void item_ql_nw_get_cell_info(void)
+{
+ int i;
+ int ret;
+ unsigned short mcc;
+ unsigned short mnc;
+ ql_nw_cell_info_t t_info;
+
+ memset(&t_info, 0, sizeof(t_info));
+ ret = ql_nw_get_cell_info(&t_info);
+ printf("ql_nw_get_cell_info ret = %d, detail info:\n", ret);
+
+ if(t_info.gsm_info_valid)
+ {
+ printf("gsm cell information:\n");
+ for(i = 0; i < t_info.gsm_info_len; i++)
+ {
+ printf("\tcid=%d,plmn=0x%02x 0x%02x 0x%02x,lac=%d,arfcn=%d,bsic=%d,rssi=%d,",
+ t_info.gsm_info[i].cid,
+ t_info.gsm_info[i].plmn[0],
+ t_info.gsm_info[i].plmn[1],
+ t_info.gsm_info[i].plmn[2],
+ t_info.gsm_info[i].lac,
+ t_info.gsm_info[i].arfcn,
+ t_info.gsm_info[i].bsic,
+ t_info.gsm_info[i].rssi);
+
+ internal_nw_get_mcc_mnc_value(t_info.gsm_info[i].plmn, 3, &mcc, &mnc);
+ printf("convert plmn to mcc=%d,mnc=%02d\n", mcc, mnc);
+ }
+ }
+
+ if(t_info.umts_info_valid)
+ {
+ printf("umts cell information:\n");
+ for(i = 0; i < t_info.umts_info_len; i++)
+ {
+ printf("\tcid=%d,lcid=%d,plmn=0x%02x 0x%02x 0x%02x,lac=%d,uarfcn=%d,psc=%d,rssi=%d,",
+ t_info.umts_info[i].cid,
+ t_info.umts_info[i].lcid,
+ t_info.umts_info[i].plmn[0],
+ t_info.umts_info[i].plmn[1],
+ t_info.umts_info[i].plmn[2],
+ t_info.umts_info[i].lac,
+ t_info.umts_info[i].uarfcn,
+ t_info.umts_info[i].psc,
+ t_info.umts_info[i].rssi);
+ internal_nw_get_mcc_mnc_value(t_info.umts_info[i].plmn, 3, &mcc, &mnc);
+ printf("convert plmn to mcc=%d,mnc=%02d\n", mcc, mnc);
+ }
+ }
+
+ if(t_info.lte_info_valid)
+ {
+ printf("lte cell information:\n");
+ for(i = 0; i < t_info.lte_info_len; i++)
+ {
+ printf("\tcid=%d,plmn=0x%02x 0x%02x 0x%02x,tac=%d,pci=%d,earfcn=%d,rssi=%d,",
+ t_info.lte_info[i].cid,
+ t_info.lte_info[i].plmn[0],
+ t_info.lte_info[i].plmn[1],
+ t_info.lte_info[i].plmn[2],
+ t_info.lte_info[i].tac,
+ t_info.lte_info[i].pci,
+ t_info.lte_info[i].earfcn,
+ t_info.lte_info[i].rssi);
+ internal_nw_get_mcc_mnc_value(t_info.lte_info[i].plmn, 3, &mcc, &mnc);
+ printf("convert plmn to mcc=%d,mnc=%02d\n", mcc, mnc);
+ }
+ }
+
+ if(t_info.nr5g_info_valid)
+ {
+ printf("nr5g cell information:\n");
+ printf("\tcid=%lld,plmn=0x%02x 0x%02x 0x%02x,tac=%d,pci=%d,arfcn=%d,rsrp=%d,rsrq=%d,snr=%d,",
+ t_info.nr5g_info.cid,
+ t_info.nr5g_info.plmn[0],
+ t_info.nr5g_info.plmn[1],
+ t_info.nr5g_info.plmn[2],
+ t_info.nr5g_info.tac,
+ t_info.nr5g_info.pci,
+ t_info.nr5g_info.arfcn,
+ t_info.nr5g_info.rsrp,
+ t_info.nr5g_info.rsrq,
+ t_info.nr5g_info.snr);
+ internal_nw_get_mcc_mnc_value(t_info.nr5g_info.plmn, 3, &mcc, &mnc);
+ printf("convert plmn to mcc=%d,mnc=%02d\n", mcc, mnc);
+ }
+
+ if(t_info.cdma_info_valid)
+ {
+ printf("cdma cell information:\n");
+ printf("\tsid=%d,nid=%d,bid=%d,refpn=%d,base_lat=%d,base_long=%d,rssi=%d\n",
+ t_info.cdma_info.sid,
+ t_info.cdma_info.nid,
+ t_info.cdma_info.bid,
+ t_info.cdma_info.refpn,
+ t_info.cdma_info.base_lat,
+ t_info.cdma_info.base_long,
+ t_info.cdma_info.rssi);
+ }
+}
+#endif
+
+void item_ql_nw_get_voice_reg_status(void)
+{
+ int ret;
+ char domain_info[16] = {0};
+ char radio_info[16] = {0};
+ char svc_opt[128] = {0};
+ ql_nw_reg_status_info_t t_info;
+
+ memset(&t_info, 0, sizeof(t_info));
+ ret = ql_nw_get_voice_reg_status(&t_info);
+
+ printf("ql_nw_get_voice_reg_status ret = %d, detail info:\n", ret);
+
+ if(internal_nw_get_tech_domain(t_info.tech_domain, domain_info, sizeof(domain_info)) == 0)
+ {
+ printf("\ttech_domain is unrecognized:%d, ", t_info.tech_domain);
+ }
+ else
+ {
+ printf("\ttech_domain = %s, ", domain_info);
+ }
+
+ if(internal_nw_get_radio_tech(t_info.radio_tech, radio_info, sizeof(radio_info)) == 0)
+ {
+ printf("radio_tech is unrecognized:%d, ", t_info.radio_tech);
+ }
+ else
+ {
+ printf("radio_tech = %s, ", radio_info);
+ }
+
+ printf("roaming = %d, reg_status = %d, deny_reason = %d\n",
+ t_info.roaming, t_info.reg_state, t_info.deny_reason);
+
+ if(QL_NW_RADIO_TECH_NR5G != t_info.radio_tech)
+ {
+ printf("\tmcc=%s, mnc=%s, forbidden=%d, cid=0x%X, lac=%d, psc=%d, tac=%d, endc_available=%d\n",
+ t_info.mcc,
+ t_info.mnc,
+ t_info.forbidden,
+ t_info.cid,
+ t_info.lac,
+ t_info.psc,
+ t_info.tac,
+ t_info.endc_available);
+
+ printf("\tinPRL=%d, css=%d, sid=%d, nid=%d, bsid=%d\n",
+ t_info.inPRL,
+ t_info.css,
+ t_info.sid,
+ t_info.nid,
+ t_info.bsid);
+ }
+ else
+ {
+ printf("\tmcc=%s, mnc=%s, forbidden=%d, cid=0x%llX, pci=%d, tac=%d\n",
+ t_info.mcc,
+ t_info.mnc,
+ t_info.forbidden,
+ t_info.nr5g_cid,
+ t_info.nr5g_pci,
+ t_info.nr5g_tac);
+
+ internal_nw_get_service_option(t_info.nr5g_svc_opt, svc_opt, sizeof(svc_opt));
+ printf("\tsvc_opt(%d)=%s\n", t_info.nr5g_svc_opt, svc_opt);
+ }
+}
+
+void item_ql_nw_get_data_reg_status(void)
+{
+ int ret;
+ char domain_info[16] = {0};
+ char radio_info[16] = {0};
+ char svc_opt[128] = {0};
+ ql_nw_reg_status_info_t t_info;
+
+ memset(&t_info, 0, sizeof(t_info));
+ ret = ql_nw_get_data_reg_status(&t_info);
+
+ printf("ql_nw_get_data_reg_status ret = %d, detail info:\n", ret);
+
+ if(internal_nw_get_tech_domain(t_info.tech_domain, domain_info, sizeof(domain_info)) == 0)
+ {
+ printf("\ttech_domain is unrecognized:%d, ", t_info.tech_domain);
+ }
+ else
+ {
+ printf("\ttech_domain = %s, ", domain_info);
+ }
+
+ if(internal_nw_get_radio_tech(t_info.radio_tech, radio_info, sizeof(radio_info)) == 0)
+ {
+ printf("radio_tech is unrecognized:%d, ", t_info.radio_tech);
+ }
+ else
+ {
+ printf("radio_tech = %s, ", radio_info);
+ }
+
+ printf("roaming = %d, reg_status = %d, deny_reason = %d\n",
+ t_info.roaming, t_info.reg_state, t_info.deny_reason);
+
+ if(QL_NW_RADIO_TECH_NR5G != t_info.radio_tech)
+ {
+ printf("\tmcc=%s, mnc=%s, forbidden=%d, cid=0x%X, lac=%d, psc=%d, endc_available=%d\n",
+ t_info.mcc,
+ t_info.mnc,
+ t_info.forbidden,
+ t_info.cid,
+ t_info.lac,
+ t_info.psc,
+ //t_info.tac, // tac not valid in item_ql_nw_get_data_reg_status ,use item_ql_nw_get_cell_info
+ t_info.endc_available);
+
+ printf("\tinPRL=%d, css=%d, sid=%d, nid=%d, bsid=%d\n",
+ t_info.inPRL,
+ t_info.css,
+ t_info.sid,
+ t_info.nid,
+ t_info.bsid);
+ }
+ else
+ {
+ printf("\tmcc=%s, mnc=%s, forbidden=%d, cid=0x%llX, pci=%d, tac=%d\n",
+ t_info.mcc,
+ t_info.mnc,
+ t_info.forbidden,
+ t_info.nr5g_cid,
+ t_info.nr5g_pci,
+ t_info.nr5g_tac);
+
+ internal_nw_get_service_option(t_info.nr5g_svc_opt, svc_opt, sizeof(svc_opt));
+ printf("\tsvc_opt(%d)=%s\n", t_info.nr5g_svc_opt, svc_opt);
+ }
+
+}
+
+void item_ql_nw_get_signal_strength(void)
+{
+ int ret;
+ char level_info[16] = {0};
+ ql_nw_signal_strength_info_t info;
+ QL_NW_SIGNAL_STRENGTH_LEVEL_E level = QL_NW_SIGNAL_STRENGTH_LEVEL_NONE;
+
+ memset(&info, 0, sizeof(info));
+ ret = ql_nw_get_signal_strength(&info, &level);
+ if (QL_ERR_OK != ret)
+ {
+ printf("failed, ret = %d\n", ret);
+ return;
+ }
+
+ if(info.has_gsm)
+ {
+ printf("gsm_sig_info: rssi=%hhd\n", info.gsm.rssi);
+ }
+
+ if(info.has_wcdma)
+ {
+ printf("wcdma_sig_info: rssi=%hhd, ecio=%hd\n",
+ info.wcdma.rssi,
+ info.wcdma.ecio);
+ }
+
+ if(info.has_tdscdma)
+ {
+ printf("tdscdma_sig_info: rssi=%hhd, rscp=%hhd, ecio=%hd, sinr=%hhd\n",
+ info.tdscdma.rssi,
+ info.tdscdma.rscp,
+ info.tdscdma.ecio,
+ info.tdscdma.sinr);
+ }
+
+ if(info.has_lte)
+ {
+ printf("lte_sig_info: rssi=%hhd, rsrq=%hhd, rsrp=%hd, snr=%hd\n",
+ info.lte.rssi,
+ info.lte.rsrq,
+ info.lte.rsrp,
+ info.lte.snr);
+ }
+
+ if(info.has_nr5g)
+ {
+ printf("nr5g_sig_info: rsrp=%hd, rsrq=%hd, snr=%hd\n",
+ info.nr5g.rsrp,
+ info.nr5g.rsrq,
+ info.nr5g.snr);
+ }
+
+ if(info.has_cdma)
+ {
+ printf("cdma_sig_info: rssi=%hhd, ecio=%hd\n",
+ info.cdma.rssi,
+ info.cdma.ecio);
+ }
+
+ if(info.has_hdr)
+ {
+ printf("hdr_sig_info: rssi=%hhd, ecio=%hd, sinr=%hd, io=%d\n",
+ info.hdr.rssi,
+ info.hdr.ecio,
+ info.hdr.sinr,
+ info.hdr.io);
+ }
+
+ if(internal_nw_get_signal_strength_level(level, level_info, sizeof(level_info)) == 0)
+ {
+ printf("signal strength level is %d, unrecognized\n", level);
+ }
+ else
+ {
+ printf("signal strength level is %s\n", level_info);
+ }
+}
+
+#if 0
+void item_ql_nw_get_cell_access_status(void)
+{
+ int ret;
+ QL_NW_CELL_ACCESS_STATE_TYPE_E e_state;
+
+ ret = ql_nw_get_cell_access_status(&e_state);
+ printf("ql_nw_get_cell_access_state ret = %d, e_state=%d\n", ret, e_state);
+}
+
+void item_ql_nw_get_nitz_time_info(void)
+{
+ int ret;
+ ql_nw_nitz_time_info_t t_info;
+
+ memset(&t_info, 0, sizeof(t_info));
+ ret = ql_nw_get_nitz_time_info(&t_info);
+ printf("ql_nw_get_nitz_time_info ret = %d\n nitz_time=%s, abs_time=%lld, leap_sec=%hhd\n",
+ ret,
+ t_info.nitz_time,
+ t_info.abs_time,
+ t_info.leap_sec);
+}
+#endif
+
+void item_ql_nw_set_voice_reg_ind_cb(void)
+{
+ int ret = 0;
+ int reg_flag = 0;
+
+ printf("please input voice reg option: (0: unreg, other: reg): ");
+ ret = t_get_int(®_flag);
+ if(ret != 0)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ if(reg_flag)
+ {
+ ret = ql_nw_set_voice_reg_ind_cb(nw_voice_reg_event_ind_cb);
+ }
+ else
+ {
+ ret = ql_nw_set_voice_reg_ind_cb(NULL);
+ }
+ printf("ql_nw_reg_voice_reg_event ret = %d\n", ret);
+}
+
+#if 0
+void item_ql_nw_set_data_reg_ind_cb(void)
+{
+ int ret = 0;
+ int reg_flag = 0;
+
+ printf("please input data reg option: (0: unreg, other: reg): ");
+ ret = t_get_int(®_flag);
+ if(ret != 0)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ if(reg_flag)
+ {
+ ret = ql_nw_set_data_reg_ind_cb(nw_data_reg_event_ind_cb);
+ }
+ else
+ {
+ ret = ql_nw_set_data_reg_ind_cb(NULL);
+ }
+ printf("ql_nw_reg_data_reg_event ret = %d\n", ret);
+}
+#endif
+
+void item_ql_nw_set_signal_strength_chg_ind_cb(void)
+{
+ int ret = 0;
+ int reg_flag = 0;
+
+ printf("please input signal strength change reg option: (0: unreg, other: reg): ");
+ ret = t_get_int(®_flag);
+ if(ret != 0)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+
+ if(reg_flag)
+ {
+ ret = ql_nw_set_signal_strength_ind_cb(nw_signal_strength_event_ind_cb);
+ }
+ else
+ {
+ ret = ql_nw_set_signal_strength_ind_cb(NULL);
+ }
+ printf("ql_nw_reg_signal_strength_chg_event ret = %d\n", ret);
+}
+
+#if 0
+void item_ql_nw_set_cell_access_status_chg_ind_cb(void)
+{
+ int ret = 0;
+ int reg_flag = 0;
+
+ printf("please input cell access status change reg option: (0: unreg, other: reg): ");
+ ret = t_get_int(®_flag);
+ if(ret != 0)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+
+ if(reg_flag)
+ {
+ ret = ql_nw_set_cell_access_status_ind_cb(nw_cell_access_status_event_ind_cb);
+ }
+ else
+ {
+ ret = ql_nw_set_cell_access_status_ind_cb(NULL);
+ }
+ printf("ql_nw_reg_cell_access_status_event ret = %d\n", ret);
+}
+
+void item_ql_nw_set_nitz_time_update_ind_cb(void)
+{
+ int ret = 0;
+ int reg_flag = 0;
+
+ printf("please input nitz time update reg option: (0: unreg, other: reg): ");
+ ret = t_get_int(®_flag);
+ if(ret != 0)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+
+ if(reg_flag)
+ {
+ ret = ql_nw_set_nitz_time_update_ind_cb(nw_nitz_time_update_event_ind_cb);
+ }
+ else
+ {
+ ret = ql_nw_set_nitz_time_update_ind_cb(NULL);
+ }
+ printf("ql_nw_reg_nitz_time_update_event ret = %d\n", ret);
+}
+
+void item_ql_nw_set_wea_alert_ind_cb(void)
+{
+ int ret = 0;
+ int reg_flag = 0;
+
+ printf("please input wea alert reg option: (0: unreg, other: reg): ");
+ ret = t_get_int(®_flag);
+ if(ret != 0)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+
+ if(reg_flag)
+ {
+ ret = ql_nw_set_wea_alert_ind_cb(nw_wea_alert_event_ind_cb);
+ }
+ else
+ {
+ ret = ql_nw_set_wea_alert_ind_cb(NULL);
+ }
+ printf("ql_nw_set_wea_alert_ind_cb ret = %d\n", ret);
+}
+
+void item_ql_nw_set_etws_alert_ind_cb(void)
+{
+ int ret = 0;
+ int reg_flag = 0;
+
+ printf("please input etws alert reg option: (0: unreg, other: reg): ");
+ ret = t_get_int(®_flag);
+ if(ret != 0)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+
+ if(reg_flag)
+ {
+ ret = ql_nw_set_etws_alert_ind_cb(nw_etws_alert_event_ind_cb);
+ }
+ else
+ {
+ ret = ql_nw_set_etws_alert_ind_cb(NULL);
+ }
+ printf("ql_nw_set_etws_alert_ind_cb ret = %d\n", ret);
+}
+#endif
+
+static void internal_nw_get_mcc_mnc_value(char *plmn, int plmn_len, unsigned short *mcc, unsigned short *mnc)
+{
+ int mcc1 = 0, mcc2 = 0, mcc3 = 0;
+ int mnc1 = 0, mnc2 = 0, mnc3 = 0;
+
+ if(plmn_len < 3 || plmn == NULL) {
+ printf("get mcc mnc from plmn fail, param is invalid\n");
+ return;
+ }
+
+ mcc1 = plmn[0] & 0X0F;
+ mcc2 = plmn[0] >> 4;
+ mcc3 = plmn[1] & 0x0F;
+
+ mnc3 = plmn[1] >> 4;
+ mnc2 = plmn[2] >> 4;
+ mnc1 = plmn[2] & 0x0F;
+
+ *mcc = mcc1 * 100 + mcc2 * 10 + mcc3;
+
+ if(0X0F == mnc3) {
+ *mnc = mnc1 * 10 + mnc2;
+ }
+ else {
+ *mnc = mnc1 * 100 + mnc2 * 10 + mnc3;
+ }
+}
+
+static int internal_nw_get_net_status(QL_NW_NETWORK_STATUS_TYPE_E net, char* buf, int buf_len)
+{
+ int ret_val = 1;
+
+ if(buf == NULL || buf_len < 2)
+ {
+ printf("param is valid\n");
+ return 0;
+ }
+
+ memset(buf, 0, buf_len);
+
+ switch(net)
+ {
+ case QL_NW_NETWORK_STATUS_NONE:
+ strncpy(buf, "NONE", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_NETWORK_STATUS_CURRENT_SERVING:
+ strncpy(buf, "CURRENT_SERVING", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_NETWORK_STATUS_PREFERRED:
+ strncpy(buf, "PREFERED", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_NETWORK_STATUS_NOT_PREFERRED:
+ strncpy(buf, "NOT_PREFERRED", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_NETWORK_STATUS_AVAILABLE:
+ strncpy(buf, "AVAILABLE", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_NETWORK_STATUS_FORBIDDEN:
+ strncpy(buf, "FORBIDDEN", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ default:
+ ret_val = 0;
+ break;
+ }
+ return ret_val;
+}
+
+#if 0
+static int internal_nw_get_nas_rat(int radio, char* buf, int buf_len)
+{
+ int ret_val = 1;
+
+ if(buf == NULL || buf_len < 2)
+ {
+ printf("param is valid\n");
+ return 0;
+ }
+
+ memset(buf, 0, buf_len);
+
+ switch(radio)
+ {
+ case 0:
+ strncpy(buf, "UNKNOWN", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case 1:
+ strncpy(buf, "GSM", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case 2:
+ strncpy(buf, "WCDMA", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case 3:
+ strncpy(buf, "TDSCDMA", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case 4:
+ strncpy(buf, "LTE", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case 5:
+ strncpy(buf, "NR5G", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case 6:
+ strncpy(buf, "CDMA", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case 7:
+ strncpy(buf, "HDR", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ default:
+ ret_val = 0;
+ break;
+ }
+ return ret_val;
+}
+#endif
+
+static int internal_nw_get_radio_tech(QL_NW_RADIO_TECH_TYPE_E radio, char* buf, int buf_len)
+{
+ int ret_val = 1;
+
+ if(buf == NULL || buf_len < 2)
+ {
+ printf("param is valid\n");
+ return 0;
+ }
+
+ memset(buf, 0, buf_len);
+
+ switch(radio)
+ {
+ case QL_NW_RADIO_TECH_TD_SCDMA:
+ strncpy(buf, "TD_SCDMA", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_GSM:
+ strncpy(buf, "GSM", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_HSPAP:
+ strncpy(buf, "HSPAP", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_LTE:
+ strncpy(buf, "LTE", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_EHRPD:
+ strncpy(buf, "EHRPD", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_EVDO_B:
+ strncpy(buf, "EVDO_B", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_HSPA:
+ strncpy(buf, "HSPA", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_HSUPA:
+ strncpy(buf, "HSUPA", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_HSDPA:
+ strncpy(buf, "HSDPA", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_EVDO_A:
+ strncpy(buf, "EVDO_A", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_EVDO_0:
+ strncpy(buf, "EVDO_0", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_1xRTT:
+ strncpy(buf, "1xRTT", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_IS95B:
+ strncpy(buf, "IS95B", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_IS95A:
+ strncpy(buf, "IS95A", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_UMTS:
+ strncpy(buf, "UMTS", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_EDGE:
+ strncpy(buf, "EDGE", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_GPRS:
+ strncpy(buf, "GPRS", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_NR5G:
+ strncpy(buf, "NR5G", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_RADIO_TECH_NONE:
+ strncpy(buf, "NONE", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ default:
+ ret_val = 0;
+ break;
+ }
+ return ret_val;
+}
+
+static int internal_nw_get_tech_domain(QL_NW_TECH_DOMAIN_TYPE_E domain, char* buf, int buf_len)
+{
+ int ret_val = 1;
+
+ if(buf == NULL || buf_len < 2)
+ {
+ printf("param is valid\n");
+ return 0;
+ }
+
+ memset(buf, 0, buf_len);
+
+ switch(domain)
+ {
+ case QL_NW_TECH_DOMAIN_NONE:
+ strncpy(buf, "NONE", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_TECH_DOMAIN_3GPP:
+ strncpy(buf, "3GPP", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_TECH_DOMAIN_3GPP2:
+ strncpy(buf, "3GPP2", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ default:
+ ret_val = 0;
+ break;
+ }
+ return ret_val;
+}
+
+static int internal_nw_get_signal_strength_level(QL_NW_SIGNAL_STRENGTH_LEVEL_E level, char* buf, int buf_len)
+{
+ int ret_val = 1;
+
+ if(buf == NULL || buf_len < 2)
+ {
+ printf("param is valid\n");
+ return 0;
+ }
+
+ memset(buf, 0, buf_len);
+
+ switch(level)
+ {
+ case QL_NW_SIGNAL_STRENGTH_LEVEL_NONE:
+ strncpy(buf, "UNKNOWN", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_SIGNAL_STRENGTH_LEVEL_POOR:
+ strncpy(buf, "POOR", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_SIGNAL_STRENGTH_LEVEL_MODERATE:
+ strncpy(buf, "MODERATE", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_SIGNAL_STRENGTH_LEVEL_GOOD:
+ strncpy(buf, "GOOD", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ case QL_NW_SIGNAL_STRENGTH_LEVEL_GREAT:
+ strncpy(buf, "GREAT", buf_len - 1);
+ buf[buf_len - 1] = '\0';
+ break;
+ default:
+ ret_val = 0;
+ break;
+ }
+ return ret_val;
+}
+
+static void internal_nw_get_service_option(unsigned short so_mask, char *buf, int buf_len)
+{
+ int remain_len = buf_len;
+
+ if(NULL == buf || buf_len < 2)
+ {
+ printf("param is valid\n");
+ return;
+ }
+ memset(buf, 0, buf_len);
+
+ if(so_mask & QL_NW_NR5G_SO_TDD)
+ {
+ if(remain_len > strlen("NR5G_TDD|") + 1)
+ {
+ strcat(buf + (buf_len - remain_len), "NR5G_TDD|");
+ remain_len = buf_len - strlen("NR5G_TDD|");
+ }
+ }
+
+ if(so_mask & QL_NW_NR5G_SO_SUB6)
+ {
+ if(remain_len > strlen("NR5G_SUB6|") + 1)
+ {
+ strcat(buf + (buf_len - remain_len), "NR5G_SUB6|");
+ remain_len = buf_len - strlen("NR5G_SUB6|");
+ }
+ }
+
+ if(so_mask & QL_NW_NR5G_SO_MMWAVE)
+ {
+ if(remain_len > strlen("NR5G_MMWAVE|") + 1)
+ {
+ strcat(buf + (buf_len - remain_len), "NR5G_MMWAVE|");
+ remain_len = buf_len - strlen("NR5G_MMWAVE|");
+ }
+ }
+
+ if(so_mask & QL_NW_NR5G_SO_NSA)
+ {
+ if(remain_len > strlen("NR5G_NSA|") + 1)
+ {
+ strcat(buf + (buf_len - remain_len), "NR5G_NSA|");
+ remain_len = buf_len - strlen("NR5G_NSA|");
+ }
+ }
+
+ if(so_mask & QL_NW_NR5G_SO_SA)
+ {
+ if(remain_len > strlen("NR5G_SA|") + 1)
+ {
+ strcat(buf + (buf_len - remain_len), "NR5G_SA|");
+ remain_len = buf_len - strlen("NR5G_SA|");
+ }
+ }
+
+ if(strlen(buf) > 0)
+ {
+ buf[strlen(buf) - 1] = '\0';
+ }
+ return;
+}
+
+#if 0
+void item_ql_nw_wea_set_config(void)
+{
+ int ret = 0;
+ int choice = 0;
+ int item = 0;
+ ql_nw_wea_config_t config = {0};
+
+ printf("test ql_nw_wea_set_config: \n");
+ printf(" 1)Presidential_alert\n");
+ printf(" 2)Extreme_alert\n");
+ printf(" 3)Severe_alert\n");
+ printf(" 4)Amber_alert\n");
+ printf(" 5)PublicSafety_alert\n");
+ printf(" 6)StateLocalTest_alert\n");
+ printf(" 7)RMT_alert\n");
+ printf(" 8)Exercise_alert\n");
+ printf(" 9)CMSPDefined_alert\n");
+ printf("10)Spanish_alert\n");
+ printf("please enter item to config: ");
+ ret = t_get_int(&choice);
+ if(ret != 0)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ printf("\n");
+
+ switch (choice)
+ {
+ case 1:
+ item |= QL_NW_WEA_CONFIG_PRESIDENTIAL_ALERT;
+ printf("Presidential_alert: 0 - disable, 1 - enable:");
+ if(scanf("%hhu", &config.Presidential_alert) != 1)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ break;
+ case 2:
+ item |= QL_NW_WEA_CONFIG_EXTREME_ALERT;
+ printf("Extreme_alert: 0 - disable, 1 - enable:");
+ if(scanf("%hhu", &config.Extreme_alert) != 1)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ break;
+ case 3:
+ item |= QL_NW_WEA_CONFIG_SEVERE_ALERT;
+ printf("Severe_alert: 0 - disable, 1 - enable:");
+ if(scanf("%hhu", &config.Severe_alert) != 1)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ break;
+ case 4:
+ item |= QL_NW_WEA_CONFIG_AMBER_ALERT;
+ printf("Amber_alert: 0 - disable, 1 - enable:");
+ if(scanf("%hhu", &config.Amber_alert) != 1)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ break;
+ case 5:
+ item |= QL_NW_WEA_CONFIG_PUBLIC_SAFETY_ALERT;
+ printf("PublicSafety_alert: 0 - disable, 1 - enable:");
+ if(scanf("%hhu", &config.PublicSafety_alert) != 1)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ break;
+ case 6:
+ item |= QL_NW_WEA_CONFIG_STATE_LOCAL_TEST_ALERT;
+ printf("StateLocalTest_alert: 0 - disable, 1 - enable:");
+ if(scanf("%hhu", &config.StateLocalTest_alert) != 1)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ break;
+ case 7:
+ item |= QL_NW_WEA_CONFIG_RMT_ALERT;
+ printf("RMT_alert: 0 - disable, 1 - enable:");
+ if(scanf("%hhu", &config.RMT_alert) != 1)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ break;
+ case 8:
+ item |= QL_NW_WEA_CONFIG_EXERCISE_ALERT;
+ printf("Exercise_alert: 0 - disable, 1 - enable:");
+ if(scanf("%hhu", &config.Exercise_alert) != 1)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ break;
+ case 9:
+ item |= QL_NW_WEA_CONFIG_CMSP_DEFINED_ALERT;
+ printf("CMSPDefined_alert: 0 - disable, 1 - enable:");
+ if(scanf("%hhu", &config.CMSPDefined_alert) != 1)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ break;
+ case 10:
+ item |= QL_NW_WEA_CONFIG_SPANISH_ALERT;
+ printf("Spanish_alert: 0 - disable, 1 - enable:");
+ if(scanf("%hhu", &config.Spanish_alert) != 1)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+ break;
+ default:
+ printf("bad choice: %d\n", choice);
+ return;
+ }
+ ret = getchar();
+
+ ret = ql_nw_set_wea_config(item, &config);
+ if (ret == QL_ERR_OK)
+ {
+ printf("ok\n");
+ }
+ else
+ {
+ printf("failed, ret = %d\n", ret);
+ }
+}
+
+void item_ql_nw_wea_get_config(void)
+{
+ int ret = 0;
+ ql_nw_wea_config_t config = {0};
+
+ printf("test ql_nw_get_wea_config: \n");
+ ret = ql_nw_get_wea_config(&config);
+ if (ret == QL_ERR_OK)
+ {
+ printf("****** wea Config ******\n");
+ printf("Presidential_alert: %s\n", config.Presidential_alert ? "true" : "false");
+ printf("Extreme_alert: %s\n", config.Extreme_alert ? "true" : "false");
+ printf("Severe_alert: %s\n", config.Severe_alert ? "true" : "false");
+ printf("Amber_alert: %s\n", config.Amber_alert ? "true" : "false");
+ printf("PublicSafety_alert: %s\n", config.PublicSafety_alert ? "true" : "false");
+ printf("StateLocalTest_alert: %s\n", config.StateLocalTest_alert ? "true" : "false");
+ printf("RMT_alert: %s\n", config.RMT_alert ? "true" : "false");
+ printf("Exercise_alert: %s\n", config.Exercise_alert ? "true" : "false");
+ printf("CMSPDefined_alert: %s\n", config.CMSPDefined_alert ? "true" : "false");
+ printf("Spanish_alert: %s\n", config.Spanish_alert ? "true" : "false");
+ }
+ else
+ {
+ printf("failed, ret = %d\n", ret);
+ }
+}
+
+void item_ql_nw_etws_set_config(void)
+{
+ int ret = 0;
+ int etws_enable = 0;
+
+ printf("please input etws config (0: disable, 1: enable): ");
+ ret = t_get_int(&etws_enable);
+ if(ret != 0)
+ {
+ printf("Invalid input\n");
+ return;
+ }
+
+ ret = ql_nw_set_etws_config((unsigned char)etws_enable);
+ printf("item_ql_nw_etws_set_config ret = %d\n", ret);
+}
+
+void item_ql_nw_etws_get_config(void)
+{
+ int ret = 0;
+ unsigned char etws_enable = 0;
+
+ ret = ql_nw_get_etws_config(&etws_enable);
+ printf("ql_nw_get_etws_config ret = %d \t etws_enable=%d\n",
+ ret, etws_enable);
+}
+#endif
+
+void item_ql_nw_set_service_error_cb(void)
+{
+ int ret = 0;
+
+ ret = ql_nw_set_service_error_cb(nw_service_error_cb);
+ if(ret != QL_ERR_OK)
+ {
+ printf("Failed to ql_nw_set_service_error_cb, ret=%d\n", ret);
+ }
+ else
+ {
+ printf("Sucessful\n");
+ }
+}
+
+
+static t_item_t ql_nw_items[] =
+{
+
+ {"ql_nw_init", item_ql_nw_init},
+// {"ql_nw_network_scan", item_ql_nw_network_scan},
+ {"ql_nw_set_power_mode", item_ql_nw_set_power_mode},
+// {"ql_nw_set_pref_nwmode_roaming", item_ql_nw_set_pref_nwmode_roaming},
+// {"ql_nw_get_pref_nwmode_roaming", item_ql_nw_get_pref_nwmode_roaming},
+// {"ql_nw_get_mobile_operator_name", item_ql_nw_get_mobile_operator_name},
+// {"ql_nw_get_cell_info", item_ql_nw_get_cell_info},
+ {"ql_nw_get_voice_reg_status", item_ql_nw_get_voice_reg_status},
+ {"ql_nw_get_data_reg_status", item_ql_nw_get_data_reg_status},
+ {"ql_nw_get_signal_strength", item_ql_nw_get_signal_strength},
+// {"ql_nw_get_cell_access_status", item_ql_nw_get_cell_access_status},
+// {"ql_nw_get_nitz_time_info", item_ql_nw_get_nitz_time_info},
+ {"ql_nw_set_voice_reg_ind_cb", item_ql_nw_set_voice_reg_ind_cb},
+// {"ql_nw_set_data_reg_ind_cb", item_ql_nw_set_data_reg_ind_cb},
+ {"ql_nw_set_signal_strength_chg_ind_cb", item_ql_nw_set_signal_strength_chg_ind_cb},
+// {"ql_nw_set_cell_access_status_chg_ind_cb", item_ql_nw_set_cell_access_status_chg_ind_cb},
+// {"ql_nw_set_nitz_time_update_ind_cb", item_ql_nw_set_nitz_time_update_ind_cb},
+// {"ql_nw_set_wea_alert_ind_cb", item_ql_nw_set_wea_alert_ind_cb},
+// {"ql_nw_wea_set_config", item_ql_nw_wea_set_config},
+// {"ql_nw_wea_get_config", item_ql_nw_wea_get_config},
+// {"ql_nw_set_etws_alert_ind_cb", item_ql_nw_set_etws_alert_ind_cb},
+// {"ql_nw_etws_set_config", item_ql_nw_etws_set_config},
+// {"ql_nw_etws_get_config", item_ql_nw_etws_get_config},
+ {"ql_nw_set_service_error_cb", item_ql_nw_set_service_error_cb},
+ {"ql_nw_deinit", item_ql_nw_deinit},
+};
+
+t_module_t ql_nw_module =
+{
+ "nw",
+ T_ARRAY_SIZE(ql_nw_items),
+ ql_nw_items
+};
+
+/*-----------------------------------------------------------------------------------------------*/
+/**
+ @brief Read a int value from stdin
+ @param[out] val, Return read data
+ @return
+ 0 - successful
+ 1 - read an enter
+ -1 - invalid input
+ */
+/*-----------------------------------------------------------------------------------------------*/
+int t_get_int(int *val)
+{
+ int dat;
+ char *ptr_end = NULL;
+ char buf[256] = {0};
+
+ if(NULL == fgets(buf, sizeof(buf)-1, stdin))
+ {
+ return -1;
+ }
+#if 0
+ if(0 == buf[0])
+ {
+ return -1;
+ }
+#endif
+ if(buf[0] == '\n')
+ {
+ return 1;
+ }
+
+ dat = strtol(buf, &ptr_end, 10);
+ if(ptr_end!=NULL && ptr_end[0]!='\n')
+ {
+ return -1;
+ }
+
+ if(val)
+ {
+ val[0] = dat;
+ }
+
+ return 0;
+}
+
+void dump_items()
+{
+ int i;
+
+ printf("\n");
+ printf("The current module is: \n");
+
+ for(i=0; i< ql_nw_module.item_len; i++)
+ {
+ printf("%d\t%s\n", i, ql_nw_module.item_list[i].name);
+ }
+ printf("-1\texit\n");
+}
+
+int main(int argc, char *argv[])
+{
+ int ret;
+ int idx;
+
+ dump_items();
+
+ while(1)
+ {
+ printf("Please enter your choice: ");
+ ret = t_get_int(&idx);
+ printf("\n");
+ if(ret < 0)
+ {
+ printf("Invalid input\n");
+ continue;
+ }
+ else if(ret == 1)
+ {
+ dump_items();
+ continue;
+ }
+
+ if(idx == -1)
+ {
+ break;
+ }
+
+ if(idx<0 || idx>=ql_nw_module.item_len)
+ {
+ printf("Not support idx: %d\n", idx);
+ continue;
+ }
+
+ printf("->Item : %s\n", ql_nw_module.item_list[idx].name);
+ ql_nw_module.item_list[idx].handle();
+ }
+
+ return 0;
+}
+