201 lines
4.4 KiB
C
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;
|
|
}
|
|
|
|
|