121 lines
2.7 KiB
C
121 lines
2.7 KiB
C
#include "system/init.h"
|
||
#include "lwip.h"
|
||
#include "app_config.h"
|
||
#include "event/event.h"
|
||
#include "event/device_event.h"
|
||
#include "lte_module.h"
|
||
#include "log.h"
|
||
|
||
#define __LOG_LEVEL __LOG_DEBUG
|
||
|
||
/*
|
||
*
|
||
*******************************************多网卡使用说明*******************************************
|
||
*
|
||
* 1.需要配置:
|
||
* a)使能LwIP.c文件中的宏,HAVE_LTE_NETIF;
|
||
* b)使能LWIP配置文件(lwipopts_sfc.h/lwipopts.h)中的宏,LWIP_HOOK_IP4_ROUTE_SRC;
|
||
*
|
||
* 2.IP层根据目标IP地址在网卡列表中选择一个网卡。匹配条件:目标IP地址与网卡在同一个
|
||
* 网段内,即匹配;否则将使用默认网卡;
|
||
*
|
||
* 3.可通过 lwip_set_default_netif函数切换默认网卡。
|
||
*
|
||
****************************************************************************************************
|
||
*
|
||
* */
|
||
|
||
|
||
static char ip_addr[32];
|
||
static char gw_addr[32];
|
||
static void *dev = NULL;
|
||
static int lte_app_task_pid;
|
||
|
||
|
||
int lte_lwip_event_cb(void *lwip_ctx, enum LWIP_EVENT event)
|
||
{
|
||
switch (event) {
|
||
case LWIP_LTE_DHCP_BOUND_TIMEOUT:
|
||
break;
|
||
|
||
case LWIP_LTE_DHCP_BOUND_SUCC:
|
||
Get_IPAddress(LTE_NETIF, ip_addr);
|
||
get_gateway(LTE_NETIF, gw_addr);
|
||
log_i("LTE DHCP SUCC, IP:[%s] \r\n, GW:[%s]", ip_addr, gw_addr);
|
||
|
||
//此处4G网络已连通
|
||
|
||
lwip_set_default_netif(LTE_NETIF); //设置4G网卡为默认模块
|
||
void lte_network_test(void); //4G网络测试
|
||
lte_network_test();
|
||
break;
|
||
|
||
default:
|
||
break;
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
|
||
char *get_lte_ip(void)
|
||
{
|
||
return &ip_addr[0];
|
||
}
|
||
|
||
|
||
static void at_cmd_test(void *priv)
|
||
{
|
||
usbnet_host_at_data_send("AT\r\n", strlen("AT\r\n"));
|
||
}
|
||
|
||
|
||
static void at_port_rx_handler(u8 *buf, u32 len)
|
||
{
|
||
printf("%s, %s\n", __func__, buf);
|
||
}
|
||
|
||
|
||
static int lte_state_cb(void *priv, int on)
|
||
{
|
||
if (!strncmp((u8 *)priv, "wireless", strlen("wireless"))) {
|
||
if (on) {
|
||
log_i("lte on\r\n");
|
||
dev_ioctl(dev, LTE_NETWORK_START, NULL);
|
||
} else {
|
||
log_i("lte off\r\n");
|
||
dev_ioctl(dev, LTE_NETWORK_STOP, NULL);
|
||
}
|
||
} else if (!strncmp((u8 *)priv, "at_port", strlen("at_port"))) {
|
||
if (on) {
|
||
log_i("lte at_port on\r\n");
|
||
usbnet_at_port_rx_handler_register(at_port_rx_handler);
|
||
} else {
|
||
log_i("lte at_port off\r\n");
|
||
}
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
|
||
static int lte_net_init(void)
|
||
{
|
||
dev = dev_open("lte", NULL);
|
||
dev_ioctl(dev, LTE_DEV_SET_CB, (u32)lte_state_cb);
|
||
|
||
if (dev) {
|
||
log_i("lte early init succ\n\n\n\n\n\n");
|
||
} else {
|
||
log_e("lte early init fail\n\n\n\n\n\n");
|
||
}
|
||
|
||
return 0;
|
||
}
|
||
|
||
#ifdef CONFIG_LTE_PHY_ENABLE
|
||
late_initcall(lte_net_init);
|
||
#endif
|
||
|
||
|