Files

201 lines
4.4 KiB
C

#include <stdarg.h>
#include "ql_type.h"
#include "ql_data_call.h"
#include "ql_rtos.h"
#include "ql_application.h"
#include <stdio.h>
#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;
}