#include #include "ql_type.h" #include "ql_data_call.h" #include "ql_rtos.h" #include "ql_application.h" #include #include "sockets.h" #include "ql_uart.h" #include "ql_func.h" #include "netdb.h" #include "ql_sim.h" #include "ql_dev.h" #include "ql_wtd.h" #include "ql_fs.h" #include "ql_fota.h" #include "ql_sim.h" #include "ql_ping.h" #include "ql_nw.h" #include "ql_atcmd.h" //#define NTP_SERVER_DOMAIN "ntp.aliyun.com" static ql_sem_t net_mgt_datacall_sem = NULL; static int data_call_net_status = 0; static int recall_status = 0; int g_file_valid = 0; //static ql_sem_t g_ql_ntp_sem = NULL; //static char g_ql_ntp_flag = -1; struct in_addr ip4_addr = {0}; extern int fisrt_net_start; float g_lon = 0; float g_lat = 0; int app_get_data_call_net_status(void) { return data_call_net_status; } #if 0 static void get_ntp_callback(int ntp_status) { printf("========== get ntp status:%d ...", ntp_status); g_ql_ntp_flag = ntp_status; ql_rtos_semaphore_release(g_ql_ntp_sem); } int app_net_mgt_ntp() { int ret; //if(!app_net_get_data_call_status())return -1; char *temp_ntp_server = NTP_SERVER_DOMAIN; ret = ql_ntp_set_server(temp_ntp_server); printf("========ql_ntp_client set:%d==server %s======== !", ret, temp_ntp_server); ret = ql_ntp_set_cid(1); if(ret != 0){ printf("ql_ntp_init failed!!"); return -1; } printf("========ql_ntp_sync!!===== !"); g_ql_ntp_flag = -1; //这个超时callback为20s ql_ntp_sync_ex(get_ntp_callback); ret = ql_rtos_semaphore_wait(g_ql_ntp_sem,25000); if(ret==0 && g_ql_ntp_flag==0){ printf("*** ntp ok ***"); }else{ printf("*** ntp timeout ***"); ret = -1; } return ret; } #endif void app_data_recall(void) { data_call_net_status = 0; if(recall_status==0){ recall_status = 1; ql_rtos_semaphore_release(net_mgt_datacall_sem); } } static void ql_data_call_cb(int profile_idx, int nw_status) { printf("[APP]ql_data_call_cb: profile(%d) status(%d)\r\n", profile_idx, nw_status); if(nw_status==0){ ql_rtos_semaphore_release(net_mgt_datacall_sem); } } void ql_datacall_demo_thread(void *arvg) { int ret = 0; int file_valid = 0; char ip4_addr_str[16] = {0}; struct ql_data_call_info info; static u8 gps_init = 0; ql_set_auto_connect(1, 1); ql_set_data_call_asyn_mode(0, ql_data_call_cb); ql_rtos_semaphore_create(&net_mgt_datacall_sem, 0); ql_rtos_semaphore_release(net_mgt_datacall_sem); while(1) { ql_rtos_semaphore_wait(net_mgt_datacall_sem, 0xFFFFFFFF); //file_valid = app_play_tips_file(1); if(ql_network_register_wait(120) != 0) { printf("ql_network_register_wait error\r\n"); recall_status = 0; ql_rtos_semaphore_release(net_mgt_datacall_sem); continue; } ret = ql_start_data_call(1, 0, NULL, NULL,NULL, 0); recall_status = 0; if(ret == 0) { ql_get_data_call_info(1, 0, &info); printf("info.profile_idx: %d\r\n", info.profile_idx); printf("info.ip_version: %d\r\n", info.ip_version); printf("info.v4.state: %d\r\n", info.v4.state); printf("info.v4.reconnect: %d\r\n", info.v4.reconnect); inet_ntop(AF_INET, &info.v4.addr.ip, ip4_addr_str, sizeof(ip4_addr_str)); printf("info.v4.addr.ip: %s\r\n", ip4_addr_str); inet_ntop(AF_INET, &info.v4.addr.pri_dns, ip4_addr_str, sizeof(ip4_addr_str)); printf("info.v4.addr.pri_dns: %s\r\n", ip4_addr_str); inet_ntop(AF_INET, &info.v4.addr.sec_dns, ip4_addr_str, sizeof(ip4_addr_str)); printf("info.v4.addr.sec_dns: %s\r\n", ip4_addr_str); ql_set_lwip_dns(1, "223.5.5.5","114.114.114.144"); ip4_addr = info.v4.addr.ip; app_file_check_download(); if(g_file_valid==0){ app_play_tips_file(1); } app_mqtt_connect_sem(0); fisrt_net_start = 0; data_call_net_status = 1; if(gps_init==0){ gps_init = 1; // hal_os_get_locator(&g_lon,&g_lat); app_gnss_init(); } //app_net_mgt_ntp(); } else //激活不了,重新发送拨号激活 { ql_trace("default PDP not activeed succeed"); ql_rtos_task_sleep_ms(5000); ql_rtos_semaphore_release(net_mgt_datacall_sem); } } } int app_net_mgt_init() { // ql_rtos_semaphore_create(&g_ql_ntp_sem,0); ql_rtc_set_nitz_mode(1); ql_task_t appTaskRef = NULL; ql_rtos_task_create(&appTaskRef, 1024*4, 100, "app_net_mgt", ql_datacall_demo_thread, NULL); return 0; }