Files
banban/ql-application/threadx/interface/network/nw/example_nw.c
T

725 lines
27 KiB
C

/*============================================================================
Copyright (c) 2017 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
Quectel Wireless Solution Proprietary and Confidential.
=============================================================================*/
/*===========================================================================
EDIT HISTORY FOR MODULE
This section contains comments describing changes made to the module.
Notice that changes are listed in reverse chronological order.
WHEN WHO WHAT, WHERE, WHY
---------- ------------ ----------------------------------------------------
24/07/2019 Nebula.li create
13/06/2022 Sharon.li 增加设置网络模式后,立刻查询注册状态的example
24/11/2023 Sharon.li 增加获取RRC状态的API,开机通过MAIN串口发送QUEC_GET_QCELLINFO
=============================================================================*/
#include <stdio.h>
#include "ql_nw.h"
#include "ql_rtos.h"
#include "ql_application.h"
#include <stdarg.h>
#include "ql_uart.h"
//#define QL_DUAL_SIM_SUPPORT
//#define QL_WIFISCAN_SUPPORT
//#define QL_BLACK_CELL_SUPPORT
#if 1
#define MSG_MAX_NUM 10
#define APP_DEBUG printf
typedef enum
{
QUEC_START_DATACALL,
QUEC_START_DATACALL_APN_CHANGE,
QUEC_STOP_DATACALL,
QUEC_START_DATACALL_V6,//发起ipV6数据拨号
QUEC_GET_RRC_STATE,//获取RRC的状态
QUEC_GET_GDCNT,//流量统计
QUEC_GET_QCELLINFO,//流量统计
}QUECAPP_ACTION_E;
typedef struct
{
int flag;
QUECAPP_ACTION_E msg;
}QUECAPP_ACTION_T;
static ql_queue_t rtos_test_queue = NULL;
#define SERIAL_RX_BUFFER_LEN 2048
static u8 m_RxBuf_Uart1[SERIAL_RX_BUFFER_LEN];
static void quec_control_uart_callback(QL_UART_PORT_NUMBER_E port, void *para)
{
int ret1 = 0,ret2=0;
char buf[50] = {0};
unsigned int totalBytes = ql_uart_read(port, m_RxBuf_Uart1, sizeof(m_RxBuf_Uart1));
if (totalBytes <= 0)
{
printf("<-- No data in UART buffer! -->\r\n");
return;
}
if(0 == memcmp(m_RxBuf_Uart1,"QUEC_GET_RRC_STATE",18))
{
APP_DEBUG("<-%s -->\r\n",m_RxBuf_Uart1);
QUECAPP_ACTION_T quecdatacall_msg = {0};
quecdatacall_msg.msg = QUEC_GET_RRC_STATE;
ql_rtos_queue_release(rtos_test_queue, sizeof(QUECAPP_ACTION_T), (u8*)(&quecdatacall_msg), 0);
goto end;
}
if(0 == memcmp(m_RxBuf_Uart1,"QUEC_GET_QCELLINFO",18))
{
APP_DEBUG("<-%s -->\r\n",m_RxBuf_Uart1);
QUECAPP_ACTION_T quecdatacall_msg = {0};
quecdatacall_msg.msg = QUEC_GET_RRC_STATE;
ql_rtos_queue_release(rtos_test_queue, sizeof(QUECAPP_ACTION_T), (u8*)(&quecdatacall_msg), 0);
goto end;
}
end:
ql_uart_write(port,m_RxBuf_Uart1,totalBytes);
memset(m_RxBuf_Uart1,0,SERIAL_RX_BUFFER_LEN);
return;
}
static unsigned char ControlPortInitFlag = 0;
static unsigned char Ql_Control_Port_Open(QL_UART_PORT_NUMBER_E port)
{
int ires;
ires = ql_uart_open(port, QL_UART_BAUD_115200, QL_FC_NONE);
if (ires)
{
printf("ql_open cdc fail\r\n");
return 0xff;
}
ql_uart_register_cb(port, quec_control_uart_callback); //use callback to read uart data
ControlPortInitFlag = 1;
ql_uart_write(port,"\r\nQUECTEL RDY\r\n", 15);
return 0;
}
static void myprintk(const char *str, ...)
{
va_list varg;
int retv;
static char sbuffer[2200];
int i,j,len;
int port_no = QL_MAIN_UART_PORT;
unsigned char ret;
if(!ControlPortInitFlag)
Ql_Control_Port_Open(QL_MAIN_UART_PORT);
memset(sbuffer, 0, sizeof(sbuffer));
va_start( varg, str );
retv=vsprintf(sbuffer, str, varg);
va_end( varg );
len = strlen(sbuffer);
ql_uart_write(port_no,sbuffer, len);
}
#endif
ql_task_t ql_test_task_ref;
void ql_nw_notify_cb(unsigned int ind_flag, void *ind_msg_buf, unsigned int ind_msg_len, void *contextPtr)
{
switch(ind_flag)
{
case QL_NW_IND_VOICE_REG_EVENT_FLAG:
{
QL_NW_COMMON_REG_STATUS_INFO_T *voice_reg_status=(QL_NW_COMMON_REG_STATUS_INFO_T *)ind_msg_buf;
printf("QL_NW_IND_VOICE_REG_EVENT:\n\
state:%d; lac:0x%x; cid:0x%x; rat:%d; rejectCause:%d; psc:0x%x;\n",
voice_reg_status->state,
voice_reg_status->lac,
voice_reg_status->cid,
voice_reg_status->rat,
voice_reg_status->rejectCause,
voice_reg_status->psc);
}
break;
case QL_NW_IND_DATA_REG_EVENT_FLAG:
{
QL_NW_COMMON_REG_STATUS_INFO_T *data_reg_status=(QL_NW_COMMON_REG_STATUS_INFO_T *)ind_msg_buf;
printf("QL_NW_IND_DATA_REG_EVENT:\n\
state:%d; lac:0x%x; cid:0x%x; rat:%d; rejectCause:%d;\n",
data_reg_status->state,
data_reg_status->lac,
data_reg_status->cid,
data_reg_status->rat,
data_reg_status->rejectCause);
}
break;
case QL_NW_IND_SIGNAL_STRENGTH_EVENT_FLAG:
{
QL_NW_SIGNAL_STRENGTH_INFO_T *signal=(QL_NW_SIGNAL_STRENGTH_INFO_T *)ind_msg_buf;
printf("QL_NW_IND_SIGNAL_STRENGTH_EVENT:\n");
printf("GW: rssi:%d; bitErrorRate:%d; rscp:%d; ecno:%d;\n",
signal->GW_SignalStrength.rssi,
signal->GW_SignalStrength.bitErrorRate,
signal->GW_SignalStrength.rscp,
signal->GW_SignalStrength.ecno);
printf("LTE: rssi:%d; rsrp:%d; rsrq:%d; cqi:%d;\n",
signal->LTE_SignalStrength.rssi,
signal->LTE_SignalStrength.rsrp,
signal->LTE_SignalStrength.rsrq,
signal->LTE_SignalStrength.cqi);
}
break;
case QL_NW_IND_NITZ_TIME_UPDATE_EVENT_FLAG:
{
QL_NW_NITZ_TIME_INFO_T *time_info=(QL_NW_NITZ_TIME_INFO_T *)ind_msg_buf;
printf("QL_NW_IND_NITZ_TIME_UPDATE_EVENT:\nnitz_time:%s; abs_time:%ld; leap_sec:%d\n",time_info->nitz_time,time_info->abs_time,time_info->leap_sec);
printf("now time:%ld\n",time(NULL));
}
break;
}
}
void ql_nw_dsds_notify_cb(unsigned int ind_flag, void *ind_msg_buf, unsigned int ind_msg_len, void *contextPtr, unsigned simid)
{
printf ("\n\n====================ql_nw_dsds_notify_cb:[%d]===================\r\n", simid);
switch(ind_flag)
{
case QL_NW_IND_VOICE_REG_EVENT_FLAG:
{
QL_NW_COMMON_REG_STATUS_INFO_T *voice_reg_status=(QL_NW_COMMON_REG_STATUS_INFO_T *)ind_msg_buf;
printf("QL_NW_DSDS_IND_VOICE_REG_EVENT:\n\
state:%d; lac:0x%x; cid:0x%x; rat:%d; rejectCause:%d; psc:0x%x;\n",
voice_reg_status->state,
voice_reg_status->lac,
voice_reg_status->cid,
voice_reg_status->rat,
voice_reg_status->rejectCause,
voice_reg_status->psc);
}
break;
case QL_NW_IND_DATA_REG_EVENT_FLAG:
{
QL_NW_COMMON_REG_STATUS_INFO_T *data_reg_status=(QL_NW_COMMON_REG_STATUS_INFO_T *)ind_msg_buf;
printf("QL_NW_DSDS_IND_DATA_REG_EVENT:\n\
state:%d; lac:0x%x; cid:0x%x; rat:%d; rejectCause:%d;\n",
data_reg_status->state,
data_reg_status->lac,
data_reg_status->cid,
data_reg_status->rat,
data_reg_status->rejectCause);
}
break;
case QL_NW_IND_SIGNAL_STRENGTH_EVENT_FLAG:
{
QL_NW_SIGNAL_STRENGTH_INFO_T *signal=(QL_NW_SIGNAL_STRENGTH_INFO_T *)ind_msg_buf;
printf("QL_NW_DSDS_IND_SIGNAL_STRENGTH_EVENT:\n");
printf("GW: rssi:%d; bitErrorRate:%d; rscp:%d; ecno:%d;\n",
signal->GW_SignalStrength.rssi,
signal->GW_SignalStrength.bitErrorRate,
signal->GW_SignalStrength.rscp,
signal->GW_SignalStrength.ecno);
printf("LTE: rssi:%d; rsrp:%d; rsrq:%d; cqi:%d;\n",
signal->LTE_SignalStrength.rssi,
signal->LTE_SignalStrength.rsrp,
signal->LTE_SignalStrength.rsrq,
signal->LTE_SignalStrength.cqi);
}
break;
case QL_NW_IND_NITZ_TIME_UPDATE_EVENT_FLAG:
{
QL_NW_NITZ_TIME_INFO_T *time_info=(QL_NW_NITZ_TIME_INFO_T *)ind_msg_buf;
printf("QL_NW_DSDS_IND_NITZ_TIME_UPDATE_EVENT:\nnitz_time:%s; abs_time:%ld; leap_sec:%d\n",time_info->nitz_time,time_info->abs_time,time_info->leap_sec);
printf("now time:%ld\n",time(NULL));
}
break;
}
}
#ifdef QL_WIFISCAN_SUPPORT
void ql_wifiscan_callback ( unsigned char scan_count, const char *scan_info)
{
printf ("=[APP]==wiifscan:%d\n %s===\r\n", scan_count, scan_info);
}
void ql_nw_test_wifiscan_task()
{
ql_rtos_task_sleep_s(20);
QL_NW_ERROR_CODE ret = 0;
printf("\n\n============ql nw wifiscan start============\n");
while(1)
{
ql_nw_set_wifiscan_callback(ql_wifiscan_callback);
ret = ql_nw_get_wifiscan_info(15000,2,10,5,0,0);//超时时间15s,搜索10个
printf("Start wifiscan ret(%d), wait 结果\r\n",ret);
ql_rtos_task_sleep_s(20);
}
}
//application_init(ql_nw_test_wifiscan_task, "ql_nw_test_wifiscan_task", 10, 0);
#endif
#ifdef QL_BLACK_CELL_SUPPORT
void ql_nw_test_blackcell_task()
{
ql_rtos_task_sleep_s(5);
QL_NW_ERROR_CODE ret = 1;
int blackcellCfg=0;
int blackcellCfg_num=0;
//blackcfg_ex
int blackcellCfg_ex=0;
UINT32 delete_timer_size=0;
int prevention_mode=0;
UINT32 prevention_timer_size=0;
int reject_judge_mode=0;
int reject_judge_count=0;
int black_loop_num=0;
UINT32 black_loop_cycle=0;
//black_weight
int event_index=0;
int blackeventweight=0;
//black_lwip
int blacklwipcfg_vaild=0;
int blacklwip_fencenum=0;
int blacklwip_fencecycle=0;
int blacklwip_retrynum=0;
char blackping_host[256];
int blackcell_vaild=0;
printf("\n\n============ql nw blackcell start============\n");
#if 0
ret = ql_set_black_cell_cfg(1,3);
printf("\n\n============ql nw ql_set_black_cell_cfg %d %d============%d\n",blackcellCfg,blackcellCfg_num,ret);
ret = ql_get_black_cell_cfg(&blackcellCfg,&blackcellCfg_num);
printf("\n\n============ql nw ql_get_black_cell_cfg %d %d============%d\n",blackcellCfg,blackcellCfg_num,ret);
ql_rtos_task_sleep_s(300);
#endif
#if 1
ret = ql_get_black_cell_cfg_ex(&blackcellCfg_ex,&delete_timer_size,&prevention_mode,&prevention_timer_size,&reject_judge_mode,
&reject_judge_count,&black_loop_num,&black_loop_cycle);
printf("\n\n============ql nw ql_get_black_cell_cfg_ex %d %d %d %d %d %d %d %d ==========%d\n",
blackcellCfg_ex,delete_timer_size,prevention_mode,prevention_timer_size,reject_judge_mode,reject_judge_count,black_loop_num,black_loop_cycle,ret);
ret = ql_set_black_cell_cfg_ex(1,1800,1,1200,0,3,3,600);
printf("\n\n============ql nw ql_set_black_cell_cfg_ex ============%d\n",ret);
ret = ql_get_black_cell_cfg_ex(&blackcellCfg_ex,&delete_timer_size,&prevention_mode,&prevention_timer_size,&reject_judge_mode,
&reject_judge_count,&black_loop_num,&black_loop_cycle);
printf("\n\n============ql nw ql_get_black_cell_cfg_ex %d %d %d %d %d %d %d %d ==========%d\n",
blackcellCfg_ex,delete_timer_size,prevention_mode,prevention_timer_size,reject_judge_mode,reject_judge_count,black_loop_num,black_loop_cycle,ret);
ql_rtos_task_sleep_s(300);
ret = ql_get_black_event_weight_ex(0,&blackeventweight);
printf("\n\n============ql nw ql_get_black_event_weight_ex %d %d==========%d\n",0,blackeventweight,ret);
ret = ql_set_black_event_weight_ex(0,5);
printf("\n\n============ql nw ql_set_black_event_weight_ex ============%d\n",ret);
ret = ql_get_black_event_weight_ex(0,&blackeventweight);
printf("\n\n============ql nw ql_get_black_event_weight_ex %d %d==========%d\n",0,blackeventweight,ret);
ret = ql_set_black_cell_cfg_ex(1,1800,1,300,1,5,3,600);
printf("\n\n============ql nw ql_set_black_cell_cfg_ex ============%d\n",ret);
ret = ql_get_black_cell_cfg_ex(&blackcellCfg_ex,&delete_timer_size,&prevention_mode,&prevention_timer_size,&reject_judge_mode,
&reject_judge_count,&black_loop_num,&black_loop_cycle);
printf("\n\n============ql nw ql_set_black_cell_cfg %d %d %d %d %d %d %d %d ==========%d\n",
blackcellCfg_ex,delete_timer_size,prevention_mode,prevention_timer_size,reject_judge_mode,reject_judge_count,black_loop_num,black_loop_cycle,ret);
ql_rtos_task_sleep_s(300);
ret = ql_get_black_lwip_cfg_ex(&blacklwipcfg_vaild,&blacklwip_fencenum,&blacklwip_fencecycle,&blacklwip_retrynum,
&blackping_host,&blackcell_vaild);
printf("\n\n============ql nw ql_get_black_lwip_cfg_ex %d %d %d %d %s %d ==========%d\n",
blacklwipcfg_vaild,blacklwip_fencenum,blacklwip_fencecycle,blacklwip_retrynum,blackping_host,blackcell_vaild,ret);
ret = ql_set_black_lwip_cfg_ex(1,10,600,3,"www.baidu.com",1);
printf("\n\n============ql nw ql_set_black_lwip_cfg_ex==========%d\n",ret);
ret = ql_get_black_lwip_cfg_ex(&blacklwipcfg_vaild,&blacklwip_fencenum,&blacklwip_fencecycle,&blacklwip_retrynum,
&blackping_host,&blackcell_vaild);
printf("\n\n============ql nw ql_get_black_lwip_cfg_ex %d %d %d %d %s %d ==========%d\n",
blacklwipcfg_vaild,blacklwip_fencenum,blacklwip_fencecycle,blacklwip_retrynum,blackping_host,blackcell_vaild,ret);
#endif
ret = ql_delete_all_blackcell();
printf("\n\n============ql nw ql_delete_all_blackcell %d============\n",ret);
}
//application_init(ql_nw_test_blackcell_task, "ql_nw_test_blackcell_task", 10, 0);
#endif
void ql_nw_test_task(void *arg)
{
int i=0,j=0,ret=0,mode=0,csq=0;
int recv_cnt=0,send_cnt=0;
int k =10;
while(k--)
{
printf("send_cnt:%d,recv_cnt:%d\n", send_cnt, recv_cnt);
ql_rtos_task_sleep_s(5);
ql_nw_set_gdcnt(1);
ql_nw_get_gdcnt( &send_cnt,&recv_cnt);
}
#ifdef QL_DUAL_SIM_SUPPORT
unsigned short simid = 0;
QL_NW_GET_INFO_T* ql_nw_get_s = malloc(sizeof(QL_NW_GET_INFO_T));
if (ql_nw_get_s == NULL)
{
printf ("++++ql_nw_get memory malloc failure!");
return;
}
unsigned long ql_nw_cmd = 0;
//ql_nw_cmd |= QNW_CMD_GET_CELL;
ql_nw_cmd |= QNW_CMD_GET_CONFIG;
ql_nw_cmd |= QNW_CMD_GET_CSQ;
ql_nw_cmd |= QNW_CMD_GET_OPERATOR;
ql_nw_cmd |= QNW_CMD_GET_REG_STATUS;
ql_nw_cmd |= QNW_CMD_GET_SELECTION;
ql_nw_cmd |= QNW_CMD_GET_SIGNAL_STRENGTH;
ql_nw_cmd |= QNW_CMD_GET_CELL;
ql_nw_cmd |= QNW_CMD_GET_MNC_MCC;
ql_nw_cmd |= QNW_CMD_GET_NITZ_TIME;
ql_nw_event_register(0x0f);
ql_nw_add_dsds_event_handler(ql_nw_dsds_notify_cb, NULL);
while(j<2)
{
printf("\n\n====================ql nw test[%d] start===================\n", j);
ql_rtos_task_sleep_s(30);
memset (ql_nw_get_s, 0, sizeof(QL_NW_GET_INFO_T));
ret = ql_nw_get_info (ql_nw_cmd, ql_nw_get_s,simid);
printf("++++nql_nw_get_config ret=%d preferred_nw_mode:%d; roaming_pref:%d\n",ret,ql_nw_get_s->get_config_info.preferred_nw_mode,ql_nw_get_s->get_config_info.roaming_pref);
printf("++++get_reg_status data: state:%d; lac:0x%x; cid:0x%x; rat:%d; rejectCause:%d;\n",
ql_nw_get_s->get_reg_status.data_reg.state,
ql_nw_get_s->get_reg_status.data_reg.lac,
ql_nw_get_s->get_reg_status.data_reg.cid,
ql_nw_get_s->get_reg_status.data_reg.rat,
ql_nw_get_s->get_reg_status.data_reg.rejectCause);
printf("++++ql_nw_get_csq ret=%d csq:%d\n",ret,ql_nw_get_s->csq);
printf("++++get_signal_strength LTE: rssi:%d; rsrp:%d; rsrq:%d; cqi:%d;\n",
ql_nw_get_s->get_signal_strength.LTE_SignalStrength.rssi,
ql_nw_get_s->get_signal_strength.LTE_SignalStrength.rsrp,
ql_nw_get_s->get_signal_strength.LTE_SignalStrength.rsrq,
ql_nw_get_s->get_signal_strength.LTE_SignalStrength.cqi);
printf("++++get_operator_name ret = %d long_eons:%s; short_eons:%s; mcc:%s; mnc:%s\n",
ret,ql_nw_get_s->get_operator_name.long_eons,ql_nw_get_s->get_operator_name.short_eons,
ql_nw_get_s->get_operator_name.mcc,ql_nw_get_s->get_operator_name.mnc);
printf("++++get_selection ret = %d nw_selection_mode:%d; mcc:%s; mnc:%s; act:%d\n",
ret,
ql_nw_get_s->get_selection.nw_selection_mode,
ql_nw_get_s->get_selection.mcc,
ql_nw_get_s->get_selection.mnc,
ql_nw_get_s->get_selection.act);
printf("++++get_nitz_info ret = %d nitz_time:%s; abs_time:%ld; leap_sec:%d\n",
ret,ql_nw_get_s->get_nitz_info.nitz_time,ql_nw_get_s->get_nitz_info.abs_time,
ql_nw_get_s->get_nitz_info.leap_sec);
printf("++++lte_info_valid:%d lte_info_num:%d\r\n", ql_nw_get_s->get_cell_info.lte_info_valid, ql_nw_get_s->get_cell_info.lte_info_num);
if(ql_nw_get_s->get_cell_info.lte_info_valid)
{
for(i=0;i<ql_nw_get_s->get_cell_info.lte_info_num;i++)
{
printf("++++get_cell_info %d [LTE] cid:%d, mcc:%d, mnc:%d, tac:%d, pci:%d, earfcn:%d, rssi:%d\n",
i,
ql_nw_get_s->get_cell_info.lte_info[i].cid,
ql_nw_get_s->get_cell_info.lte_info[i].mcc,
ql_nw_get_s->get_cell_info.lte_info[i].mnc,
ql_nw_get_s->get_cell_info.lte_info[i].tac,
ql_nw_get_s->get_cell_info.lte_info[i].pci,
ql_nw_get_s->get_cell_info.lte_info[i].earfcn,
ql_nw_get_s->get_cell_info.lte_info[i].rssi);
}
}
j++;
simid++;
}
//free(ql_nw_get_s);
#else
QL_NW_CONFIG_INFO_T *ql_nw_config_info=calloc(1,sizeof(QL_NW_CONFIG_INFO_T));
QL_NW_NITZ_TIME_INFO_T *ql_nw_nitz_time_info=calloc(1,sizeof(QL_NW_NITZ_TIME_INFO_T));
QL_NW_OPERATOR_INFO_T *ql_nw_operator_name_info=calloc(1,sizeof(QL_NW_OPERATOR_INFO_T));
QL_NW_REG_STATUS_INFO_T *ql_nw_reg_status=calloc(1,sizeof(QL_NW_REG_STATUS_INFO_T));
QL_NW_SIGNAL_STRENGTH_INFO_T *ql_nw_signal_strength=calloc(1,sizeof(QL_NW_SIGNAL_STRENGTH_INFO_T));
QL_NW_SELECTION_INFO_T *ql_nw_selection_info=calloc(1,sizeof(QL_NW_SELECTION_INFO_T));
QL_NW_CELL_INFO_T *ql_nw_cell_info=calloc(1,sizeof(QL_NW_CELL_INFO_T));
ql_nw_event_register(0x0f);
ql_nw_add_event_handler(ql_nw_notify_cb, NULL);
ql_rtos_task_sleep_s(5);
while(j<10000)
{
j++;
ql_rtos_task_sleep_s(10);
printf("\n\n====================ql nw test[%d] start===================\n", j);
ret=ql_nw_get_config(ql_nw_config_info);
printf("\nql_nw_get_config ret=%d\n preferred_nw_mode:%d; roaming_pref:%d\n",ret,ql_nw_config_info->preferred_nw_mode,ql_nw_config_info->roaming_pref);
ret=ql_nw_get_reg_status(ql_nw_reg_status);
printf("\nql_nw_get_reg_status ret = %d\n",ret);
printf("voice: state:%d; lac:0x%x; cid:0x%x; rat:%d; rejectCause:%d; psc:0x%x;\n",
ql_nw_reg_status->voice_reg.state,
ql_nw_reg_status->voice_reg.lac,
ql_nw_reg_status->voice_reg.cid,
ql_nw_reg_status->voice_reg.rat,
ql_nw_reg_status->voice_reg.rejectCause,
ql_nw_reg_status->voice_reg.psc);
printf("data: state:%d; lac:0x%x; cid:0x%x; rat:%d; rejectCause:%d;\n",
ql_nw_reg_status->data_reg.state,
ql_nw_reg_status->data_reg.lac,
ql_nw_reg_status->data_reg.cid,
ql_nw_reg_status->data_reg.rat,
ql_nw_reg_status->data_reg.rejectCause);
ret=ql_nw_get_csq(&csq);
printf("\nql_nw_get_csq ret=%d\n csq:%d\n",ret,csq);
ret=ql_nw_get_signal_strength(ql_nw_signal_strength);
printf("\nql_nw_get_signal_strength ret = %d\n", ret);
printf("GW: rssi:%d; bitErrorRate:%d; rscp:%d; ecno:%d;\n",
ql_nw_signal_strength->GW_SignalStrength.rssi,
ql_nw_signal_strength->GW_SignalStrength.bitErrorRate,
ql_nw_signal_strength->GW_SignalStrength.rscp,
ql_nw_signal_strength->GW_SignalStrength.ecno);
printf("LTE: rssi:%d; rsrp:%d; rsrq:%d; cqi:%d; sinr:%d\n",
ql_nw_signal_strength->LTE_SignalStrength.rssi,
ql_nw_signal_strength->LTE_SignalStrength.rsrp,
ql_nw_signal_strength->LTE_SignalStrength.rsrq,
ql_nw_signal_strength->LTE_SignalStrength.cqi/*,
ql_nw_signal_strength->LTE_SignalStrength.sinr*/
);
ret=ql_nw_get_operator_name(ql_nw_operator_name_info);
printf("\nql_nw_get_operator_name ret = %d\n long_eons:%s; short_eons:%s; mcc:%s; mnc:%s\n", ret,ql_nw_operator_name_info->long_eons,ql_nw_operator_name_info->short_eons,ql_nw_operator_name_info->mcc,ql_nw_operator_name_info->mnc);
ret=ql_nw_get_selection(ql_nw_selection_info);
printf("\nql_nw_get_selection ret = %d\n nw_selection_mode:%d; mcc:%s; mnc:%s; act:%d\n",
ret,
ql_nw_selection_info->nw_selection_mode,
ql_nw_selection_info->mcc,
ql_nw_selection_info->mnc,
ql_nw_selection_info->act);
ret=ql_nw_get_nitz_time_info(ql_nw_nitz_time_info);
printf("\nql_nw_get_nitz_time_info ret = %d\n nitz_time:%s; abs_time:%ld; leap_sec:%d\n", ret,ql_nw_nitz_time_info->nitz_time,ql_nw_nitz_time_info->abs_time,ql_nw_nitz_time_info->leap_sec);
ret=ql_nw_get_cell_info(ql_nw_cell_info);
printf("\nql_nw_get_ql_nw_cell_info ret = %d\n", ret);
if(ql_nw_cell_info->gsm_info_valid)
{
for(i=0;i<ql_nw_cell_info->gsm_info_num;i++)
{
printf("Cell_%d [GSM] cid:%d, mcc:%d, mnc:%d, lac:%d, arfcn:%d, bsic:%d, rssi:%d\n",
i,
ql_nw_cell_info->gsm_info[i].cid,
ql_nw_cell_info->gsm_info[i].mcc,
ql_nw_cell_info->gsm_info[i].mnc,
ql_nw_cell_info->gsm_info[i].lac,
ql_nw_cell_info->gsm_info[i].arfcn,
ql_nw_cell_info->gsm_info[i].bsic,
ql_nw_cell_info->gsm_info[i].rssi);
}
}
if(ql_nw_cell_info->umts_info_valid)
{
for(i=0;i<ql_nw_cell_info->umts_info_num;i++)
{
printf("Cell_%d [UMTS] cid:%d, lcid:%d, mcc:%d, mnc:%d, lac:%d, uarfcn:%d, psc:%d, rssi:%d\n",
i,
ql_nw_cell_info->umts_info[i].cid,
ql_nw_cell_info->umts_info[i].lcid,
ql_nw_cell_info->umts_info[i].mcc,
ql_nw_cell_info->umts_info[i].mnc,
ql_nw_cell_info->umts_info[i].lac,
ql_nw_cell_info->umts_info[i].uarfcn,
ql_nw_cell_info->umts_info[i].psc,
ql_nw_cell_info->umts_info[i].rssi);
}
}
if(ql_nw_cell_info->lte_info_valid)
{
for(i=0;i<ql_nw_cell_info->lte_info_num;i++)
{
printf("Cell_%d [LTE] cid:%d, mcc:%d, mnc:%d, tac:%d, pci:%d, earfcn:%d, rssi:%d\n",
i,
ql_nw_cell_info->lte_info[i].cid,
ql_nw_cell_info->lte_info[i].mcc,
ql_nw_cell_info->lte_info[i].mnc,
ql_nw_cell_info->lte_info[i].tac,
ql_nw_cell_info->lte_info[i].pci,
ql_nw_cell_info->lte_info[i].earfcn,
ql_nw_cell_info->lte_info[i].rssi);
}
}
printf("====================ql nw test[%d] end===================\n\n", j);
}
#endif
}
void ql_nw_set_test_task()
{
QL_NW_CONFIG_INFO_T info;
int drx = 0;
int sendbyte = 0,recvbyte = 0;
int ret = 0,i=0;
QL_NW_CELL_INFO_T *ql_nw_cell_info =NULL;
printf("<-----------------example_nw.c---------------------->\r\n");
ql_nw_auto_apn_enable(0);//close auto apn
printf("auto apn=%d\r\n",ql_nw_auto_apn_is_enable());
info.preferred_nw_mode = QL_NW_PREF_NET_TYPE_LTE;//仅搜索LTE制式
info.roaming_pref = 1;
ql_rtos_task_sleep_s(3);
ql_nw_set_config(&info);
Ql_Control_Port_Open(QL_MAIN_UART_PORT);
ql_rtos_queue_create(&rtos_test_queue, sizeof(QUECAPP_ACTION_T), MSG_MAX_NUM);
QUECAPP_ACTION_T msg;
ret = ql_network_register_wait(10);
while(1)
{
ql_rtos_queue_wait(rtos_test_queue, (u8*)(&msg), sizeof(msg), 0xFFFFFFFF); // wait for the message from main task
switch(msg.msg)
{
case QUEC_START_DATACALL:
case QUEC_GET_GDCNT:
drx = 0;
if(0 == ret)//说明注册成功
{
ql_nw_get_drxtm(&drx);
ql_nw_get_gdcnt(&sendbyte,&recvbyte);//流量统计
}
printf("%s@%d,ql_nw_wait_register ret(%d),drx(%d),sendbyte(%d),recvbyte(%d)\r\n",__func__,__LINE__,ret,drx,sendbyte,recvbyte);
break;
case QUEC_GET_RRC_STATE:
case QUEC_GET_QCELLINFO:
ql_nw_cell_info=malloc(sizeof(QL_NW_CELL_INFO_T));
#if 0
while (ql_nw_get_rrc_state())
{ //等待RRC IDLE 状态
ql_rtos_task_sleep_s(5);
printf("APP:NOW RRC STATE %d\r\n",ql_nw_get_rrc_state());
}
#endif
/**获取当前服务和邻区的信息**/
ret=ql_nw_get_cell_info(ql_nw_cell_info);
if(ql_nw_cell_info->lte_info_valid)
{
for(i=0;i<ql_nw_cell_info->lte_info_num;i++)
{
if(ql_nw_cell_info->lte_info[i].flag == 0)//服务小区
{
printf("\nServingcell Cell_%d [LTE] cid:%d, mcc:%d, mnc:%d, tac:%d, pci:%d, earfcn:%d, rssi:%d, sinr:%d, CQI:%d\n",
i,
ql_nw_cell_info->lte_info[i].cid,
ql_nw_cell_info->lte_info[i].mcc,
ql_nw_cell_info->lte_info[i].mnc,
ql_nw_cell_info->lte_info[i].tac,
ql_nw_cell_info->lte_info[i].pci,
ql_nw_cell_info->lte_info[i].earfcn,
ql_nw_cell_info->lte_info[i].rssi,
ql_nw_cell_info->lte_info[i].sinr, //add for testing
ql_nw_cell_info->lte_info[i].cqi //add for testing
);
}
else//邻区
{
printf("\nNeighbourcell Cell_%d [LTE] cid:%d, mcc:%d, mnc:%d, tac:%d, pci:%d, earfcn:%d, rssi:%d, sinr:%d, CQI:%d\n",
i,
ql_nw_cell_info->lte_info[i].cid,
ql_nw_cell_info->lte_info[i].mcc,
ql_nw_cell_info->lte_info[i].mnc,
ql_nw_cell_info->lte_info[i].tac,
ql_nw_cell_info->lte_info[i].pci,
ql_nw_cell_info->lte_info[i].earfcn,
ql_nw_cell_info->lte_info[i].rssi,
ql_nw_cell_info->lte_info[i].sinr, //add for testing
ql_nw_cell_info->lte_info[i].cqi //add for testing
);
}
}
}
free(ql_nw_cell_info);
break;
}
}
}
int ql_nw_test_init(void *arg)
{
QlOSStatus status;
status =ql_rtos_task_create(&ql_test_task_ref, 4096, 100, "ql_nw_test_task", ql_nw_set_test_task, NULL);
return 0;
}
application_init(ql_nw_test_init, "ql_nw_test_init", 2, 0);