doubao_chat/apps/wifi_ipc/wifi/wifi_app_task.c

731 lines
24 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "wifi/wifi_connect.h"
#include "lwip/sockets.h"
#include "lwip/netdb.h"
#include "os/os_api.h"
#include "system/init.h"
#include "lwip.h"
#include "dhcp_srv/dhcp_srv.h"
#include "lwip/dns.h"
#include "device/device.h"
#include "system/app_core.h"
#include "server/server_core.h"
#include "action.h"
#include "system/timer.h"
#include "asm/debug.h"
#include "app_config.h"
#include "http/http_cli.h"
#include "system/timer.h"
#include "database.h"
#include "dev_desc.h"
#include "http/http_server.h"
#include "server/ctp_server.h"
#include "server/net_server.h"
#include "video_rt_tcp.h"
#include "ftpserver/stupid-ftpd.h"
#include "streaming_media_server/fenice_config.h"
#include "syscfg/syscfg_id.h"
#include "btcontroller_config.h"
#include "btctrler/btctrler_task.h"
#include "btstack/btstack_task.h"
#include "btstack/le/att.h"
#include "btstack/le/le_user.h"
#include "btstack/avctp_user.h"
#include "event/bt_event.h"
#define WIFI_APP_TASK_NAME "wifi_app_task"
static char save_ssid_flag;
#ifdef CONFIG_STATIC_IPADDR_ENABLE
static u8 use_static_ipaddr_flag;
#endif
#define STA_SSID "配置需要连接的路由器SSID" //配置 STA模式的SSID
#define STA_PWD "配置需要连接的路由器密码" //配置 STA模式的密码
extern char get_MassProduction(void);
static void wifi_set_lan_setting_info(void);
void (*lmp_ch_update_resume_hdl)(void *priv) = NULL;
void bt_ble_module_init(void)
{
void lmp_set_sniff_disable(void);
lmp_set_sniff_disable();
#if TCFG_USER_BLE_ENABLE
u8 tmp_ble_addr[6];
extern const u8 *bt_get_mac_addr(void);
extern void lib_make_ble_address(u8 * ble_address, u8 * edr_address);
extern int le_controller_set_mac(void *addr);
lib_make_ble_address(tmp_ble_addr, (u8 *)bt_get_mac_addr());
le_controller_set_mac((void *)tmp_ble_addr);
printf("\n-----edr + ble 's address-----");
put_buf((void *)bt_get_mac_addr(), 6);
put_buf((void *)tmp_ble_addr, 6);
#if BT_NET_CENTRAL_EN || TRANS_MULTI_BLE_MASTER_NUMS
extern void ble_client_config_init(void);
ble_client_config_init();
#endif
#endif
btstack_init();
}
static int bt_connction_status_event_handler(struct bt_event *bt)
{
switch (bt->event) {
case BT_STATUS_INIT_OK:
bt_ble_init();
}
return 0;
}
int ble_demo_bt_event_handler(struct sys_event *event)
{
if (event->from == BT_EVENT_FROM_CON) {
return bt_connction_status_event_handler((struct bt_event *)event->payload);
}
return 0;
}
static struct server *ctp = NULL;
static struct ctp_server_info server_info = {
.ctp_vaild = true,
.ctp_port = CTP_CTRL_PORT,
.cdp_vaild = true,
.cdp_port = CDP_CTRL_PORT,
.k_alive_type = CTP_ALIVE,
/*.k_alive_type = CDP_ALIVE,*/
};
static void wifi_app_timer_func(void *p)
{
if (wifi_is_on()) {
// stats_display(); //LWIP stats
// printf("WIFI U= %d KB/s, D= %d KB/s\r\n", wifi_get_upload_rate() / 1024, wifi_get_download_rate() / 1024);
extern void tutk_debug_info() ;
tutk_debug_info();
#if 0
for (int i = 0; i < 8; i++) {
char *rssi;
u8 *evm, *mac;
if (wifi_get_sta_entry_rssi(i, &rssi, &evm, &mac)) {
break;
}
if (*rssi) {
printf("MAC[%x:%x:%x:%x:%x:%x],RSSI=%d,EVM=%d \r\n", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], *rssi, *evm);
}
}
#endif
malloc_stats();
}
}
static void wifi_sta_to_ap_mode_change(void)//用在STA模式密码不对或者找不到SSID,自动切换AP模式
{
u8 mac_addr[6];
char ssid[64];
struct wifi_mode_info info;
info.mode = AP_MODE;
wifi_get_mode_cur_info(&info);
if (!strcmp("", info.ssid)) {
wifi_get_mac(mac_addr);
sprintf((char *)ssid, AP_WIFI_CAM_PREFIX"%02x%02x%02x%02x%02x%02x", mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
info.ssid = ssid;
info.pwd = AP_WIFI_CAM_WIFI_PWD;
}
wifi_set_lan_setting_info(); //STA转AP模式,需要重新配置一下IP信息和DHCP池起始分配地址
wifi_enter_ap_mode(info.ssid, info.pwd);
wifi_store_mode_info(AP_MODE, info.ssid, info.pwd);
}
#ifdef CONFIG_STATIC_IPADDR_ENABLE
struct sta_ip_info {
u8 ssid[33];
u32 ip;
u32 gw;
u32 netmask;
u32 dns;
u8 gw_mac[6];
u8 local_mac[6];
u8 chanel;
};
static void wifi_set_sta_ip_info(void)
{
struct sta_ip_info sta_ip_info;
syscfg_read(VM_STA_IPADDR_INDEX, (char *) &sta_ip_info, sizeof(struct sta_ip_info));
struct lan_setting lan_setting_info = {
.WIRELESS_IP_ADDR0 = (u8)(sta_ip_info.ip >> 0),
.WIRELESS_IP_ADDR1 = (u8)(sta_ip_info.ip >> 8),
.WIRELESS_IP_ADDR2 = (u8)(sta_ip_info.ip >> 16),
.WIRELESS_IP_ADDR3 = (u8)(sta_ip_info.ip >> 24),
.WIRELESS_NETMASK0 = (u8)(sta_ip_info.netmask >> 0),
.WIRELESS_NETMASK1 = (u8)(sta_ip_info.netmask >> 8),
.WIRELESS_NETMASK2 = (u8)(sta_ip_info.netmask >> 16),
.WIRELESS_NETMASK3 = (u8)(sta_ip_info.netmask >> 24),
.WIRELESS_GATEWAY0 = (u8)(sta_ip_info.gw >> 0),
.WIRELESS_GATEWAY1 = (u8)(sta_ip_info.gw >> 8),
.WIRELESS_GATEWAY2 = (u8)(sta_ip_info.gw >> 16),
.WIRELESS_GATEWAY3 = (u8)(sta_ip_info.gw >> 24),
};
net_set_lan_info(&lan_setting_info);
}
static int compare_dhcp_ipaddr(void)
{
use_static_ipaddr_flag = 0;
int ret;
u8 local_mac[6];
u8 gw_mac[6];
u8 sta_channel;
struct sta_ip_info sta_ip_info;
struct netif_info netif_info;
ret = syscfg_read(VM_STA_IPADDR_INDEX, (char *) &sta_ip_info, sizeof(struct sta_ip_info));
if (ret < 0) {
puts("compare_dhcp_ipaddr NO VM_STA_IPADDR_INDEX\r\n");
return -1;
}
lwip_get_netif_info(1, &netif_info);
struct wifi_mode_info info;
info.mode = STA_MODE;
wifi_get_mode_cur_info(&info);
sta_channel = wifi_get_channel();
wifi_get_bssid(gw_mac);
wifi_get_mac(local_mac);
if (!strcmp(info.ssid, sta_ip_info.ssid)
&& !memcmp(local_mac, sta_ip_info.local_mac, 6)
&& !memcmp(gw_mac, sta_ip_info.gw_mac, 6)
/*&& sta_ip_info.gw==sta_ip_info.dns//如果路由器没接网线/没联网,每次连接都去重新获取DHCP*/
) {
use_static_ipaddr_flag = 1;
puts("compare_dhcp_ipaddr Match\r\n");
return 0;
}
printf("compare_dhcp_ipaddr not Match!!! [%s][%s],[0x%x,0x%x][0x%x,0x%x],[0x%x] \r\n", info.ssid, sta_ip_info.ssid, local_mac[0], local_mac[5], sta_ip_info.local_mac[0], sta_ip_info.local_mac[5], sta_ip_info.dns);
return -1;
}
static void store_dhcp_ipaddr(void)
{
struct sta_ip_info sta_ip_info = {0};
u8 sta_channel;
u8 local_mac[6];
u8 gw_mac[6];
if (use_static_ipaddr_flag) { //记忆IP匹配成功,不需要重新保存
return;
}
struct netif_info netif_info;
lwip_get_netif_info(1, &netif_info);
struct wifi_mode_info info;
info.mode = STA_MODE;
wifi_get_mode_cur_info(&info);
sta_channel = wifi_get_channel();
wifi_get_mac(local_mac);
wifi_get_bssid(gw_mac);
strcpy(sta_ip_info.ssid, info.ssid);
memcpy(sta_ip_info.gw_mac, gw_mac, 6);
memcpy(sta_ip_info.local_mac, local_mac, 6);
sta_ip_info.ip = netif_info.ip;
sta_ip_info.netmask = netif_info.netmask;
sta_ip_info.gw = netif_info.gw;
sta_ip_info.chanel = sta_channel;
sta_ip_info.dns = *(u32 *)dns_getserver(0);
syscfg_write(VM_STA_IPADDR_INDEX, (char *) &sta_ip_info, sizeof(struct sta_ip_info));
puts("store_dhcp_ipaddr\r\n");
}
void dns_set_server(u32 *dnsserver)
{
struct sta_ip_info sta_ip_info;
if (syscfg_read(VM_STA_IPADDR_INDEX, (char *) &sta_ip_info, sizeof(struct sta_ip_info)) < 0) {
*dnsserver = 0;
} else {
*dnsserver = sta_ip_info.dns;
}
}
#endif
static void wifi_set_lan_setting_info(void)
{
struct lan_setting lan_setting_info = {
.WIRELESS_IP_ADDR0 = 192,
.WIRELESS_IP_ADDR1 = 168,
.WIRELESS_IP_ADDR2 = 1,
.WIRELESS_IP_ADDR3 = 1,
.WIRELESS_NETMASK0 = 255,
.WIRELESS_NETMASK1 = 255,
.WIRELESS_NETMASK2 = 255,
.WIRELESS_NETMASK3 = 0,
.WIRELESS_GATEWAY0 = 192,
.WIRELESS_GATEWAY1 = 168,
.WIRELESS_GATEWAY2 = 1,
.WIRELESS_GATEWAY3 = 1,
.SERVER_IPADDR1 = 192,
.SERVER_IPADDR2 = 168,
.SERVER_IPADDR3 = 1,
.SERVER_IPADDR4 = 1,
.CLIENT_IPADDR1 = 192,
.CLIENT_IPADDR2 = 168,
.CLIENT_IPADDR3 = 1,
.CLIENT_IPADDR4 = 2,
.SUB_NET_MASK1 = 255,
.SUB_NET_MASK2 = 255,
.SUB_NET_MASK3 = 255,
.SUB_NET_MASK4 = 0,
};
net_set_lan_info(&lan_setting_info);
}
static void wifi_sta_save_ssid(void)
{
if (save_ssid_flag) {
save_ssid_flag = 0;
struct wifi_mode_info info;
info.mode = STA_MODE;
wifi_get_mode_cur_info(&info);
wifi_store_mode_info(STA_MODE, info.ssid, info.pwd);
}
}
void wifi_return_sta_mode(void)
{
if (!wifi_is_on()) {
return;
}
int ret;
struct wifi_mode_info info;
info.mode = STA_MODE;
ret = wifi_get_mode_stored_info(&info);
if (ret) {//如果没保存过SSID
info.ssid = STA_SSID;
info.pwd = STA_PWD;
}
wifi_clear_scan_result(); //根据扫描结果连接信号最优ssid之前先清除之前结果,防止之前最优信号的ssid已下线
wifi_set_sta_connect_best_ssid(1); //自动连接保存过的最佳WIFI
save_ssid_flag = 0;
wifi_enter_sta_mode(info.ssid, info.pwd);
}
static int wifi_event_callback(void *network_ctx, enum WIFI_EVENT event)
{
int ret = 0;
switch (event) {
case WIFI_EVENT_MODULE_INIT:
wifi_set_smp_cfg_timeout(30); //配置MONITOR模式超时后事件回调通知时间
struct wifi_store_info wifi_default_mode_parm;
memset(&wifi_default_mode_parm, 0, sizeof(struct wifi_store_info));
#if (defined CONFIG_WIFI_STA_MODE)
wifi_set_sta_connect_timeout(30); //配置STA模式连接超时后事件回调通知时间
wifi_default_mode_parm.mode = STA_MODE;
if (wifi_default_mode_parm.mode == AP_MODE || wifi_default_mode_parm.mode == STA_MODE) {
strncpy((char *)wifi_default_mode_parm.ssid[wifi_default_mode_parm.mode - STA_MODE],
(const char *)STA_WIFI_SSID,
sizeof(wifi_default_mode_parm.ssid[wifi_default_mode_parm.mode - STA_MODE]) - 1);
strncpy((char *)wifi_default_mode_parm.pwd[wifi_default_mode_parm.mode - STA_MODE],
(const char *)STA_WIFI_PWD,
sizeof(wifi_default_mode_parm.pwd[wifi_default_mode_parm.mode - STA_MODE]) - 1);
}
wifi_default_mode_parm.connect_best_network = 0;
#else
u8 mac_addr[6];
char ssid[64];
int init_net_device_mac_addr(char *macaddr, char ap_mode); //如果AP模式需要配置SSID和MAC地址相关,需要在这里先产生MAC地址,否则就不用
wifi_set_lan_setting_info();
init_net_device_mac_addr((char *)mac_addr, 1);
sprintf((char *)ssid, AP_WIFI_CAM_PREFIX"%02x%02x%02x%02x%02x%02x",
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
wifi_default_mode_parm.mode = AP_MODE;
if (wifi_default_mode_parm.mode == AP_MODE || wifi_default_mode_parm.mode == STA_MODE) {
strncpy((char *)wifi_default_mode_parm.ssid[wifi_default_mode_parm.mode - STA_MODE],
(const char *)ssid,
sizeof(wifi_default_mode_parm.ssid[wifi_default_mode_parm.mode - STA_MODE]) - 1);
strncpy((char *)wifi_default_mode_parm.pwd[wifi_default_mode_parm.mode - STA_MODE],
(const char *)AP_WIFI_CAM_WIFI_PWD,
sizeof(wifi_default_mode_parm.pwd[wifi_default_mode_parm.mode - STA_MODE]) - 1);
}
#endif
wifi_set_default_mode(&wifi_default_mode_parm, 0, wifi_default_mode_parm.mode == STA_MODE); //配置STA模式情况下,把默> 认配置SSID也存储起来,以后即使保存过其他SSID,也不会覆盖丢失,使用连接最优信号SSID策略的情况下可以匹配连接
break;
case WIFI_EVENT_MODULE_START:
if (!get_MassProduction()) {
u32 tx_rate_control_tab = // 不需要哪个速率就删除掉,可以动态设定
0
/*|BIT(0) //0:CCK 1M*/
/*|BIT(1) //1:CCK 2M*/
/*| BIT(2) //2:CCK 5.5M*/
/*| BIT(3) //3:OFDM 6M*/
/*| BIT(4) //4:MCS0/7.2M*/
/*| BIT(5) //5:OFDM 9M*/
| BIT(6) //6:CCK 11M
| BIT(7) //7:OFDM 12M
| BIT(8) //8:MCS1/14.4M
| BIT(9) //9:OFDM 18M
| BIT(10) //10:MCS2/21.7M
| BIT(11) //11:OFDM 24M
| BIT(12) //12:MCS3/28.9M
| BIT(13) //13:OFDM 36M
| BIT(14) //14:MCS4/43.3M
/*| BIT(15) //15:OFDM 48M*/
/*| BIT(16) //16:OFDM 54M*/
/*|BIT(17) //17:MCS5/57.8M */
/*|BIT(18) //18:MCS6/65.0M */
/*|BIT(19) //19:MCS7/72.2M */
;
wifi_set_tx_rate_control_tab(tx_rate_control_tab);
}
#if 0
wifi_set_pwr(0);
#endif
break;
case WIFI_EVENT_MODULE_STOP:
puts("|network_user_callback->WIFI_EVENT_MODULE_STOP\n");
break;
case WIFI_EVENT_AP_START:
printf("|network_user_callback->WIFI_EVENT_AP_START,CH=%d\n", wifi_get_channel());
//wifi_rxfilter_cfg(7); //过滤广播+多播+not_my_bssid
break;
case WIFI_EVENT_AP_STOP:
puts("|network_user_callback->WIFI_EVENT_AP_STOP\n");
break;
case WIFI_EVENT_STA_START:
puts("|network_user_callback->WIFI_EVENT_STA_START\n");
break;
case WIFI_EVENT_MODULE_START_ERR:
puts("|network_user_callback->WIFI_EVENT_MODULE_START_ERR\n");
break;
case WIFI_EVENT_STA_STOP:
puts("|network_user_callback->WIFI_EVENT_STA_STOP\n");
break;
case WIFI_EVENT_STA_DISCONNECT:
puts("|network_user_callback->WIFI_STA_DISCONNECT\n");
break;
case WIFI_EVENT_STA_SCAN_COMPLETED:
puts("|network_user_callback->WIFI_STA_SCAN_COMPLETED\n");
break;
case WIFI_EVENT_STA_CONNECT_SUCC:
printf("|network_user_callback->WIFI_STA_CONNECT_SUCC,CH=%d\r\n", wifi_get_channel());
#ifdef CONFIG_STATIC_IPADDR_ENABLE
if (0 == compare_dhcp_ipaddr()) {
wifi_set_sta_ip_info();
ret = 1;
}
#endif
break;
case WIFI_EVENT_MP_TEST_START:
puts("|network_user_callback->WIFI_EVENT_MP_TEST_START\n");
break;
case WIFI_EVENT_MP_TEST_STOP:
puts("|network_user_callback->WIFI_EVENT_MP_TEST_STOP\n");
break;
case WIFI_EVENT_STA_CONNECT_TIMEOUT_NOT_FOUND_SSID:
puts("|network_user_callback->WIFI_STA_CONNECT_TIMEOUT_NOT_FOUND_SSID\n");
#if 0 //打开STA模式扫描连接扫描不到wifi名称,自动切回AP模式,防止死循环扫描无法回AP模式
static u8 cnt = 0;
cnt++;
if (cnt >= 2) {
sys_timeout_add(NULL, wifi_sta_to_ap_mode_change, 100);//回调不能直接切换,此处放在app_core切换
}
#endif
break;
case WIFI_EVENT_STA_CONNECT_ASSOCIAT_FAIL:
puts("|network_user_callback->WIFI_STA_CONNECT_ASSOCIAT_FAIL .....\n");
#if 0 //打开STA模式连接路由器密码错误,自动切回AP模式,防止死循环连接路由器
sys_timeout_add(NULL, wifi_sta_to_ap_mode_change, 100);//回调不能直接切换,此处放在app_core切换
#endif
break;
case WIFI_EVENT_STA_CONNECT_ASSOCIAT_TIMEOUT:
puts("|network_user_callback->WIFI_STA_CONNECT_ASSOCIAT_TIMEOUT .....\n");
break;
case WIFI_EVENT_STA_NETWORK_STACK_DHCP_SUCC:
puts("|network_user_callback->WIFI_EVENT_STA_NETWPRK_STACK_DHCP_SUCC\n");
//有些使用了加密的路由器刚获取IP地址后前几个包都会没响应,怀疑路由器没转发成功
void connect_broadcast(void);
connect_broadcast();
wifi_sta_save_ssid();
#ifdef CONFIG_STATIC_IPADDR_ENABLE
store_dhcp_ipaddr();
#endif
#ifdef CONFIG_MASS_PRODUCTION_ENABLE
void network_mssdp_init(void);
network_mssdp_init();
#endif
break;
case WIFI_EVENT_STA_NETWORK_STACK_DHCP_TIMEOUT:
puts("|network_user_callback->WIFI_EVENT_STA_NETWPRK_STACK_DHCP_TIMEOUT\n");
break;
case WIFI_EVENT_P2P_START:
puts("|network_user_callback->WIFI_EVENT_P2P_START\n");
break;
case WIFI_EVENT_P2P_STOP:
puts("|network_user_callback->WIFI_EVENT_P2P_STOP\n");
break;
case WIFI_EVENT_P2P_GC_DISCONNECTED:
puts("|network_user_callback->WIFI_EVENT_P2P_GC_DISCONNECTED\n");
break;
case WIFI_EVENT_P2P_GC_NETWORK_STACK_DHCP_SUCC:
puts("|network_user_callback->WIFI_EVENT_P2P_GC_NETWORK_STACK_DHCP_SUCC\n");
break;
case WIFI_EVENT_P2P_GC_NETWORK_STACK_DHCP_TIMEOUT:
puts("|network_user_callback->WIFI_EVENT_P2P_GC_NETWORK_STACK_DHCP_TIMEOUT\n");
break;
case WIFI_EVENT_SMP_CFG_START:
puts("|network_user_callback->WIFI_EVENT_SMP_CFG_START\n");
break;
case WIFI_EVENT_SMP_CFG_STOP:
puts("|network_user_callback->WIFI_EVENT_SMP_CFG_STOP\n");
break;
case WIFI_EVENT_SMP_CFG_TIMEOUT:
puts("|network_user_callback->WIFI_EVENT_SMP_CFG_TIMEOUT\n");
break;
case WIFI_EVENT_SMP_CFG_COMPLETED:
puts("|network_user_callback->WIFI_EVENT_SMP_CFG_COMPLETED\n");
break;
case WIFI_EVENT_PM_SUSPEND:
puts("|network_user_callback->WIFI_EVENT_PM_SUSPEND\n");
break;
case WIFI_EVENT_PM_RESUME:
puts("|network_user_callback->WIFI_EVENT_PM_RESUME\n");
break;
case WIFI_EVENT_AP_ON_ASSOC:
;
struct eth_addr *hwaddr = (struct eth_addr *)network_ctx;
printf("WIFI_EVENT_AP_ON_ASSOC hwaddr = %02x:%02x:%02x:%02x:%02x:%02x \r\n\r\n",
hwaddr->addr[0], hwaddr->addr[1], hwaddr->addr[2], hwaddr->addr[3], hwaddr->addr[4], hwaddr->addr[5]);
break;
case WIFI_EVENT_AP_ON_DISCONNECTED:
hwaddr = (struct eth_addr *)network_ctx;
struct ip4_addr ipaddr;
dhcps_get_ipaddr(hwaddr->addr, &ipaddr);
printf("WIFI_EVENT_AP_ON_DISCONNECTED hwaddr = %02x:%02x:%02x:%02x:%02x:%02x, ipaddr = [%d.%d.%d.%d] \r\n\r\n",
hwaddr->addr[0], hwaddr->addr[1], hwaddr->addr[2], hwaddr->addr[3], hwaddr->addr[4], hwaddr->addr[5],
ip4_addr1(&ipaddr), ip4_addr2(&ipaddr), ip4_addr3(&ipaddr), ip4_addr4(&ipaddr));
ctp_keep_alive_find_dhwaddr_disconnect((struct eth_addr *)hwaddr->addr);
cdp_keep_alive_find_dhwaddr_disconnect((struct eth_addr *)hwaddr->addr);
break;
default:
break;
}
return ret;
}
void net_app_init(void)
{
#ifdef CONFIG_MASS_PRODUCTION_ENABLE
if (get_MassProduction()) {
wifi_enter_sta_mode(STA_WIFI_SSID, STA_WIFI_PWD);
#if 0
/* **代码段功能:修改RTSP的URL */
/* **默认配置 :URL为rtsp://192.168.1.1/avi_pcm_rt/front.sd,//(avi_pcma_rt 传G7111音频)传JPEG实时流 */
/* ** */
/* * */
const char *user_custom_name = "avi_pcm_rt";
const char *user_custom_content =
"stream\r\n"\
"file_ext_name avi\r\n"\
"media_source live\r\n"\
"priority 1\r\n"\
"payload_type 26\r\n"\
"clock_rate 90000\r\n"\
"encoding_name JPEG\r\n"\
"coding_type frame\r\n"\
"byte_per_pckt 1458\r\n"\
"stream_end\r\n"\
"stream\r\n"\
"file_ext_name pcm\r\n"\
"media_source live\r\n"\
"priority 1\r\n"\
"payload_type 8\r\n"\
"encoding_name PCMA\r\n"\
"clock_rate 8000\r\n"\
"stream_end";
extern void rtsp_modify_url(const char *user_custom_name, const char *user_custom_content);
rtsp_modify_url(user_custom_name, user_custom_content);
#endif
extern int stream_media_server_init(struct fenice_config * conf);
extern int fenice_get_video_info(struct fenice_source_info * info);
extern int fenice_get_audio_info(struct fenice_source_info * info);
extern int fenice_set_media_info(struct fenice_source_info * info);
extern int fenice_video_rec_setup(void);
extern int fenice_video_rec_exit(void);
struct fenice_config conf = {0};
strncpy(conf.protocol, "UDP", 3);
conf.exit = fenice_video_rec_exit;
conf.setup = fenice_video_rec_setup;
conf.get_video_info = fenice_get_video_info;
conf.get_audio_info = fenice_get_audio_info;
conf.set_media_info = fenice_set_media_info;
conf.port = RTSP_PORT; // 当为0时,用默认端口554
stream_media_server_init(&conf);
} else
#endif
{
ctp = server_open("ctp_server", (void *)&server_info);
if (!ctp) {
printf("ctp server fail\n");
}
puts("http server init\n");
extern int http_virfile_reg(const char *path, const char *contents, unsigned long len);
http_virfile_reg(DEV_DESC_PATH, DEV_DESC_CONTENT, strlen(DEV_DESC_CONTENT)); //注册虚拟文件描述文档,可在dev_desc.h修改
http_get_server_init(HTTP_PORT); //8080
video_rt_tcp_server_init(2229);
printf("ftpd server init \n");
extern void ftpd_vfs_interface_cfg(void);
ftpd_vfs_interface_cfg();
stupid_ftpd_init("MAXUSERS=2\nUSER=FTPX 12345678 0:/ 2 A\n", NULL);
extern dhcps_offer_dns();
dhcps_offer_dns();
extern time_t time(time_t *timer);
time(0);
extern int tutk_platform_init(const char *username, const char *password);
tutk_platform_init("aaaa", "12345678");
}
#ifdef CONFIG_IPERF_ENABLE
//网络测试工具,使用iperf
extern void iperf_test(void);
iperf_test();
#endif
}
void net_app_uninit(void)
{
puts("ctp server uninit\n");
server_close(ctp);
puts("http server uninit\n");
http_get_server_uninit(); //8080
stupid_ftpd_uninit();
video_rt_tcp_server_uninit();
#ifdef CONFIG_MASS_PRODUCTION_ENABLE
extern void stream_media_server_uninit(void);
stream_media_server_uninit();
#endif
}
static void wifi_app_task(void *priv)
{
int msg[32];
int res;
wifi_set_event_callback(wifi_event_callback);
wifi_on();
#if 1
//设置WIFI模式和名称密码,注意:不同AP和STA模式需要对应的库
/*wifi_enter_ap_mode("test_321", "88888888");//设置wifi进入AP模式以及AP名称和密码*/
/*wifi_store_mode_info(AP_MODE, "test_321", "88888888");//保存默认模式*/
/*wifi_enter_sta_mode("GJ1", "8888888899");//设置wifi进入AP模式以及AP名称和密码*/
/*wifi_store_mode_info(STA_MODE, "GJ1", "8888888899");//保存默认模式*/
/* config_network_start(); */
#endif
//net_app_init();
sys_timer_add_to_task("sys_timer", NULL, wifi_app_timer_func, 3 * 1000);
}
void wifi_sta_connect(char *ssid, char *pwd, char save, void *priv)
{
if (save) {
struct wifi_mode_info info;
info.mode = STA_MODE;
wifi_get_mode_cur_info(&info);
if (strcmp(info.ssid, ssid) || strcmp(info.pwd, pwd)) {
/*__this->save_ssid_flag = 1; //防止输错密码还保存ssid, 等待确保连接上路由器再保存*/
}
}
/*__this->request_connect_flag = 1;*/
if (save) {
/* wifi_store_mode_info(STA_MODE,ssid,pwd); */
}
wifi_enter_sta_mode(ssid, pwd);
}
#ifdef CONFIG_WIFI_ENABLE
int wireless_net_init(void)//主要是create wifi 线程的
{
return thread_fork(WIFI_APP_TASK_NAME, 10, 1500, 64, 0, wifi_app_task, NULL);
}
late_initcall(wireless_net_init);
#endif
const char *get_root_path(void)
{
return CONFIG_ROOT_PATH;
}