#include "init.h" #include "wifi/wifi_connect.h" #include "lwip/sockets.h" #include "lwip/netdb.h" #include "lwip/dns.h" #include "lwip/ip.h" #include "os/os_api.h" #include "lwip.h" #include "server/server_core.h" #include "system/timer.h" #include "asm/debug.h" #include "app_config.h" #include "json_c/json_tokener.h" #include "server/net_server.h" #include "streaming_media_server/fenice_config.h" #include "event/net_event.h" #include "syscfg/syscfg_id.h" #include "sock_api/sock_api.h" #include "asm/rf_coexistence_config.h" #ifdef CONFIG_NET_ENABLE #ifdef CONFIG_ASSIGN_MACADDR_ENABLE #include "net/assign_macaddr.h" #include "net/config_network.h" #endif #ifdef CONFIG_WIFIBOX_ENABLE #include "client.h" #endif #define CONNECT_TIMEOUT_SEC 60 enum { RF_TEST_CLOSE = 0, WIFI_MP_TEST_MODE, WIFI_STA_TEST_MODE, WIFI_AP_TEST_MODE, BT_DUT_TEST_MODE, BT_FCC_TEST_MODE, BT_BQB_TEST_MODE, RF_MULTI_TEST_MODE, }; static struct { int udp_recv_pid; u32 use_static_ipaddr_flag : 1; u32 net_app_init_flag : 1; u32 request_connect_flag : 1; u32 save_ssid_flag : 1; u32 mac_addr_succ_flag : 1; u32 udp_recv_test_exit_flag : 1; u32 rf_test_mode : 3; u32 reserved : 23; } wifi_app_hdl; #define __this (&wifi_app_hdl) extern void airkiss_ssid_check(void); int __attribute__((weak)) wifi_force_set_lan_setting_info(void) { return 0; } static void soft_ap_set_lan_setting_info(void) { struct lan_setting lan_setting_info = { .WIRELESS_IP_ADDR0 = 192, .WIRELESS_IP_ADDR1 = 168, .WIRELESS_IP_ADDR2 = 0, .WIRELESS_IP_ADDR3 = 1, .WIRELESS_NETMASK0 = 255, .WIRELESS_NETMASK1 = 255, .WIRELESS_NETMASK2 = 255, .WIRELESS_NETMASK3 = 0, .WIRELESS_GATEWAY0 = 192, .WIRELESS_GATEWAY1 = 168, .WIRELESS_GATEWAY2 = 0, .WIRELESS_GATEWAY3 = 1, .SERVER_IPADDR1 = 192, .SERVER_IPADDR2 = 168, .SERVER_IPADDR3 = 0, .SERVER_IPADDR4 = 1, .CLIENT_IPADDR1 = 192, .CLIENT_IPADDR2 = 168, .CLIENT_IPADDR3 = 0, .CLIENT_IPADDR4 = 2, .SUB_NET_MASK1 = 255, .SUB_NET_MASK2 = 255, .SUB_NET_MASK3 = 255, .SUB_NET_MASK4 = 0, }; net_set_lan_info_ext(&lan_setting_info, WIFI_NETIF); } #ifdef CONFIG_STATIC_IPADDR_ENABLE struct sta_ip_info { char ssid[33]; u32 ip; u32 gw; u32 netmask; u32 dns; u8 gw_mac[6]; u8 local_mac[6]; u8 chanel; }; static void wifi_set_lan_setting_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) { __this->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*/ ) { __this->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 (__this->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 #if defined CONFIG_MP_TEST_ENABLE static void udp_recv_handler(void *socket_fd) { static u32 sock_rcv_cnt; struct sockaddr_in remote_addr; socklen_t len = sizeof(remote_addr); int recv_len; u8 recv_buf[4]; u32 start_time = 0; u32 debug_flag = 0; while (1) { if (__this->udp_recv_test_exit_flag) { return; } recv_len = sock_recvfrom(socket_fd, recv_buf, sizeof(recv_buf), 0, (struct sockaddr *)&remote_addr, &len); if (recv_len > 0) { if (start_time == 0) { start_time = timer_get_ms(); } ++sock_rcv_cnt; } if (timer_get_ms() - start_time >= 30 * 1000) { if (debug_flag == 0) { debug_flag = 1; printf("\r\n\r\n STA MODE UDP RECV PKG CNT = %d\r\n\r\n", sock_rcv_cnt); } } } } static int udp_server_init(int port) { static void *socket_fd; struct sockaddr_in local_addr = {0}; local_addr.sin_family = AF_INET; local_addr.sin_addr.s_addr = htonl(INADDR_ANY); local_addr.sin_port = htons(port); socket_fd = sock_reg(AF_INET, SOCK_DGRAM, 0, NULL, NULL); if (socket_fd == NULL) { return -1; } if (sock_bind(socket_fd, (struct sockaddr *)&local_addr, sizeof(struct sockaddr))) { return -1; } sock_set_recv_timeout(socket_fd, 1000); if (thread_fork("udp_recv_handler", 6, 512, 0, &__this->udp_recv_pid, udp_recv_handler, socket_fd) != OS_NO_ERR) { return -1; } return 0; } #endif #if IP_NAPT_EXT /* #define INIT_MODE STA_MODE */ #define INIT_MODE AP_MODE #define FORCE_DEFAULT_MODE 1 #define INIT_SSID "GJ0" #define INIT_PWD "" #else #define INIT_MODE SMP_CFG_MODE #define FORCE_DEFAULT_MODE 0 //配置wifi_on之后的模式,0为使用最后记忆的模式, 1为强制默认模式, 3-200为连接超时时间多少秒,如果超时都连接不上就连接最后记忆的或者最优网络 #define INIT_SSID "GJ1" #define INIT_PWD "8888888899" #endif #define INIT_STORED_SSID (INIT_MODE==STA_MODE)//配置STA模式情况下,把默认配置SSID也存储起来, 以后即使保存过其他SSID,也不会覆盖丢失,使用连接最优信号SSID策略的情况下可以匹配连接 #define INIT_CONNECT_BEST_SSID 1 //配置如果啟動WIFI后在STA模式下, 是否挑选连接记忆过的信号最优WIFI #define WIFI_FORCE_DEFAULT_MODE FORCE_DEFAULT_MODE #define WIFI_INIT_MODE INIT_MODE #define WIFI_INIT_SSID INIT_SSID #define WIFI_INIT_PWD INIT_PWD #define WIFI_INIT_CONNECT_BEST_SSID INIT_CONNECT_BEST_SSID #define WIFI_INIT_STORED_SSID INIT_STORED_SSID 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 = WIFI_INIT_SSID; info.pwd = WIFI_INIT_PWD; } wifi_clear_scan_result(); //根据扫描结果连接信号最优ssid之前先清除之前结果,防止之前最优信号的ssid已下线 wifi_set_sta_connect_best_ssid(1); __this->save_ssid_flag = 0; wifi_enter_sta_mode(info.ssid, info.pwd); } static int wifi_is_in_smp_cfg_mode(void) { struct wifi_mode_info info; info.mode = NONE_MODE; wifi_get_mode_cur_info(&info); return info.mode == SMP_CFG_MODE; } static void wifi_sta_save_ssid(void) { if (__this->save_ssid_flag) { __this->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); } } #ifdef CONFIG_ELINK_QLINK_NET_CFG extern u8 elink_qlink_is_start(void); extern u8 elink_qlink_is_start_reset(void); static u8 elink_find_hide_ssid = 0; u8 is_elink_find_hid_ssid(void) { return elink_find_hide_ssid; } u8 is_elink_find_hid_ssid_reset(void) { elink_find_hide_ssid = 0; return elink_find_hide_ssid; } void elink_qlink_timeout(void) { struct sys_event net; net.arg = "net"; net.event = NET_EVENT_SMP_CFG_TIMEOUT; net_event_notify(NET_EVENT_FROM_USER, &net); } int is_chinaNet_qlink(void) { struct cfg_info info = {0}; if (elink_qlink_is_start()) { struct wifi_mode_info info; info.mode = STA_MODE; wifi_get_mode_cur_info(&info); if (0 == strcmp("ChinaNet-QLINK", info.ssid)) { elink_find_hide_ssid = 1; elink_qlink_is_start_reset(); extern int elink_qlink_task(void); elink_qlink_task(); return 0; } } return -1; } #endif static int wifi_event_callback(void *network_ctx, enum WIFI_EVENT event) { int ret = 0; struct net_event net = {0}; switch (event) { case WIFI_EVENT_MODULE_INIT: struct wifi_store_info wifi_default_mode_parm; memset(&wifi_default_mode_parm, 0, sizeof(struct wifi_store_info)); #if defined CONFIG_READ_RF_PARAM_FROM_CFGTOOL_ENABLE && defined CONFIG_MP_TEST_ENABLE u8 tmp[5] = {0}; int err = syscfg_read(CFG_WIFI_TEST_CFG_ID, tmp, sizeof(tmp)); if (err == sizeof(tmp) && tmp[0] > RF_TEST_CLOSE && tmp[0] <= WIFI_AP_TEST_MODE) { char ssid[33] = {0}; char pwd[65] = {0}; syscfg_read(CFG_WIFI_SSID_ID, ssid, sizeof(ssid) - 1); syscfg_read(CFG_WIFI_PWD_ID, pwd, sizeof(pwd) - 1); __this->rf_test_mode = tmp[0]; if (tmp[0] == WIFI_MP_TEST_MODE) { wifi_default_mode_parm.mode = MP_TEST_MODE; } else if (tmp[0] == WIFI_STA_TEST_MODE) { wifi_default_mode_parm.mode = STA_MODE; } else if (tmp[0] == WIFI_AP_TEST_MODE) { wifi_default_mode_parm.mode = AP_MODE; } if (wifi_default_mode_parm.mode <= AP_MODE) { strncpy((char *)wifi_default_mode_parm.ssid[wifi_default_mode_parm.mode - STA_MODE], 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], pwd, sizeof(wifi_default_mode_parm.pwd[wifi_default_mode_parm.mode - STA_MODE]) - 1); } wifi_set_default_mode(&wifi_default_mode_parm, 1, 0); break; } #endif #if WIFI_INIT_MODE == AP_MODE soft_ap_set_lan_setting_info(); #endif __this->rf_test_mode = RF_TEST_CLOSE; wifi_default_mode_parm.mode = WIFI_INIT_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 *)WIFI_INIT_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 *)WIFI_INIT_PWD, sizeof(wifi_default_mode_parm.pwd[wifi_default_mode_parm.mode - STA_MODE]) - 1); } wifi_default_mode_parm.connect_best_network = WIFI_INIT_CONNECT_BEST_SSID; wifi_set_default_mode(&wifi_default_mode_parm, WIFI_FORCE_DEFAULT_MODE, WIFI_INIT_STORED_SSID); #ifdef CONFIG_WIFIBOX_ENABLE wifi_freq_adjust(); #endif break; case WIFI_EVENT_MODULE_START: puts("|network_user_callback->WIFI_EVENT_MODULE_START\n"); #if defined CONFIG_READ_RF_PARAM_FROM_CFGTOOL_ENABLE extern u8 get_rf_analog_gain(void); extern void wifi_set_pwr(unsigned char pwr_sel); wifi_set_pwr(get_rf_analog_gain()); #endif #if (defined(CONFIG_WIFI_ENABLE) && defined(WB_ASSIST_ENABLE)) int wifibox_client_init(void); wifibox_client_init(); #endif #ifndef CONFIG_MASS_PRODUCTION_ENABLE struct wifi_mode_info info; info.mode = NONE_MODE; wifi_get_mode_cur_info(&info); if (info.mode == SMP_CFG_MODE) { net.arg = "net"; net.event = NET_EVENT_SMP_CFG_FIRST; net_event_notify(NET_EVENT_FROM_USER, &net); } #endif #if 1 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); #endif break; case WIFI_EVENT_MODULE_STOP: puts("|network_user_callback->WIFI_EVENT_MODULE_STOP\n"); break; case WIFI_EVENT_AP_START: puts("|network_user_callback->WIFI_EVENT_AP_START\n"); #if defined CONFIG_MP_TEST_ENABLE __this->udp_recv_test_exit_flag = 0; if (__this->rf_test_mode == WIFI_AP_TEST_MODE) { udp_server_init(30136); } #endif break; case WIFI_EVENT_AP_STOP: puts("|network_user_callback->WIFI_EVENT_AP_STOP\n"); #if defined CONFIG_MP_TEST_ENABLE __this->udp_recv_test_exit_flag = 1; thread_kill(&__this->udp_recv_pid, KILL_WAIT); #endif break; case WIFI_EVENT_STA_START: puts("|network_user_callback->WIFI_EVENT_STA_START\n"); #if defined CONFIG_MP_TEST_ENABLE __this->udp_recv_test_exit_flag = 0; if (__this->rf_test_mode == WIFI_STA_TEST_MODE) { udp_server_init(30136); } #endif 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"); #if defined CONFIG_MP_TEST_ENABLE __this->udp_recv_test_exit_flag = 1; thread_kill(&__this->udp_recv_pid, KILL_WAIT); #endif break; case WIFI_EVENT_STA_SCAN_COMPLETED: puts("|network_user_callback->WIFI_STA_SCAN_COMPLETED\n"); #ifdef CONFIG_AIRKISS_NET_CFG airkiss_ssid_check(); #endif break; case WIFI_EVENT_STA_CONNECT_SUCC: printf("|network_user_callback->WIFI_STA_CONNECT_SUCC,CH=%d\r\n", wifi_get_channel()); /*wifi_rxfilter_cfg(3); //过滤not_my_bssid,如果需要使用扫描空中SSID就不要过滤*/ if (wifi_force_set_lan_setting_info()) { ret = 1; } else { #ifdef CONFIG_STATIC_IPADDR_ENABLE if (0 == compare_dhcp_ipaddr()) { wifi_set_lan_setting_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"); net.arg = "net"; net.event = NET_CONNECT_TIMEOUT_NOT_FOUND_SSID; net_event_notify(NET_EVENT_FROM_USER, &net); break; case WIFI_EVENT_STA_CONNECT_ASSOCIAT_FAIL: puts("|network_user_callback->WIFI_STA_CONNECT_ASSOCIAT_FAIL\n"); net.arg = "net"; net.event = NET_CONNECT_ASSOCIAT_FAIL; net_event_notify(NET_EVENT_FROM_USER, &net); 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"); #if defined CONFIG_MP_TEST_ENABLE if (__this->rf_test_mode == WIFI_STA_TEST_MODE) { __this->request_connect_flag = 0; break; } #endif wifi_sta_save_ssid(); config_network_broadcast(); #ifdef CONFIG_ASSIGN_MACADDR_ENABLE if (!is_server_assign_macaddr_ok()) { //如果使用服务器分配MAC地址的情况,需要确认MAC地址有效才发送连接成功事件到APP层,否则先访问服务器分配mac地址 server_assign_macaddr(wifi_return_sta_mode); break; } __this->mac_addr_succ_flag = 1; #endif #ifdef CONFIG_MASS_PRODUCTION_ENABLE void network_mssdp_init(void); network_mssdp_init(); #endif #ifdef CONFIG_FTP_SERVER_ENABLE void ftpd_server_init(const char *user, const char *pass, const char *ota_name, int fifo_size); ftpd_server_init("FTPX", "12345678", "update-ota.ufw", 4096); #endif #ifdef CONFIG_HTTP_SERVER_ENABLE int http_get_server_init(unsigned short port); http_get_server_init(80); #endif #ifdef CONFIG_STATIC_IPADDR_ENABLE store_dhcp_ipaddr(); #endif #ifdef CONFIG_ELINK_QLINK_NET_CFG int ret = is_chinaNet_qlink(); if (ret == 0) { break; } #endif wifi_set_sta_connect_best_ssid(0); __this->request_connect_flag = 0; net.arg = "net"; net.event = NET_EVENT_CONNECTED; net_event_notify(NET_EVENT_FROM_USER, &net); break; case WIFI_EVENT_STA_DISCONNECT: puts("|network_user_callback->WIFI_STA_DISCONNECT\n"); /*wifi_rxfilter_cfg(0);*/ #ifdef CONFIG_ASSIGN_MACADDR_ENABLE if (!__this->mac_addr_succ_flag) { break; } #endif net.arg = "net"; net.event = NET_EVENT_DISCONNECTED; net_event_notify(NET_EVENT_FROM_USER, &net); if (!wifi_is_in_smp_cfg_mode() && !__this->request_connect_flag) { memset(&net, 0, sizeof(net)); net.arg = "net"; net.event = NET_EVENT_DISCONNECTED_AND_REQ_CONNECT; net_event_notify(NET_EVENT_FROM_USER, &net); } #ifdef CONFIG_HTTP_SERVER_ENABLE void http_get_server_uninit(void); http_get_server_uninit(); #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"); net.arg = "net"; net.event = NET_EVENT_SMP_CFG_TIMEOUT; net_event_notify(NET_EVENT_FROM_USER, &net); break; case WIFI_EVENT_SMP_CFG_COMPLETED: puts("|network_user_callback->WIFI_EVENT_SMP_CFG_COMPLETED\n"); net.arg = "net"; net.event = NET_SMP_CFG_COMPLETED; net_event_notify(NET_EVENT_FROM_USER, &net); 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]); #if IP_NAPT_EXT extern void check_dhcps_client_ipaddr(u8 * hwaddr); check_dhcps_client_ipaddr(hwaddr->addr); #endif break; case WIFI_EVENT_AP_ON_DISCONNECTED: hwaddr = (struct eth_addr *)network_ctx; printf("WIFI_EVENT_AP_ON_DISCONNECTED 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; default: break; } return ret; } static void net_app_init(void) { if (__this->net_app_init_flag) { return; } __this->net_app_init_flag = 1; #ifdef CONFIG_VIDEO_ENABLE #ifdef CONFIG_MASS_PRODUCTION_ENABLE extern char get_MassProduction(void); if (get_MassProduction()) { wifi_enter_sta_mode(STA_WIFI_SSID, STA_WIFI_PWD); /* **代码段功能:修改RTSP的URL **默认配置 :URL为rtsp://192.168.1.1/avi_pcm_rt/front.sd,//(avi_pcma_rt 传G7111音频)传JPEG实时流 ** **/ const char *user_custom_name = "avi_pcma_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); 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); printf("network mssdp init\n"); /*void network_mssdp_init(void);*/ /*network_mssdp_init();*/ } #endif #endif #ifdef CONFIG_IPERF_ENABLE //网络测试工具,使用iperf extern void iperf_test(void); iperf_test(); #endif #if defined CONFIG_ALI_SDK_ENABLE && defined CONFIG_ALL_ADC_CHANNEL_OPEN_ENABLE extern void set_ag_rec_sample_source(const char *sample_source); extern void set_ag_rec_channel_bit_map(u8 channel_bit_map); set_ag_rec_sample_source(CONFIG_AUDIO_ENC_SAMPLE_SOURCE == AUDIO_ENC_SAMPLE_SOURCE_PLNK0 ? "plnk0" : "mic"); set_ag_rec_channel_bit_map(BIT(CONFIG_AISP_MIC0_ADC_CHANNEL)); #endif #if defined CONFIG_TVS_SDK_ENABLE && defined CONFIG_ALL_ADC_CHANNEL_OPEN_ENABLE extern void set_tvs_rec_sample_source(const char *sample_source); extern void set_tvs_rec_channel_bit_map(u8 channel_bit_map); set_tvs_rec_sample_source(CONFIG_AUDIO_ENC_SAMPLE_SOURCE == AUDIO_ENC_SAMPLE_SOURCE_PLNK0 ? "plnk0" : "mic"); set_tvs_rec_channel_bit_map(BIT(CONFIG_AISP_MIC0_ADC_CHANNEL)); #endif } static void net_app_uninit(void) { } void wifi_and_network_on(void) { if (wifi_is_on()) { return; } wifi_on(); net_app_init(); } void wifi_and_network_off(void) { if (wifi_is_on() == 0) { return; } net_app_uninit(); wifi_off(); } void wifi_sta_connect(char *ssid, char *pwd, char save) { 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); #if defined CONFIG_BT_ENABLE //卸载wifi驱动后需要重新设置一下共存参数才能生效 void switch_rf_coexistence_config_table(u8 index); switch_rf_coexistence_config_table(get_rf_coexistence_config_index()); #endif } int get_wifi_scan_ssid_info(struct wifi_scan_ssid_info **ssid_info) { struct wifi_scan_ssid_info *sta_ssid_info; u32 sta_ssid_num = 0; sta_ssid_info = wifi_get_scan_result(&sta_ssid_num); wifi_clear_scan_result(); for (u32 i = 0; i < sta_ssid_num; i++) { printf("find scan ssid = [%s]\r\n", sta_ssid_info[i].ssid); } *ssid_info = sta_ssid_info; return sta_ssid_num; } static void wifi_app_task(void *priv) //主要是create wifi 线程的 { wifi_set_store_ssid_cnt(NETWORK_SSID_INFO_CNT); #ifdef CONFIG_DUER_SDK_ENABLE u8 airkiss_aes_key[16] = { 0x65, 0x31, 0x63, 0x33, 0x36, 0x31, 0x63, 0x63, 0x32, 0x39, 0x65, 0x34, 0x33, 0x66, 0x62, 0x38 }; wifi_set_airkiss_key(airkiss_aes_key); #endif #if 0 wifi_set_smp_cfg_scan_all_channel(1); wifi_set_smp_cfg_airkiss_recv_ssid(1); #endif #ifdef CONFIG_WIFIBOX_ENABLE set_wbcp_mode(WB_CLIENT_MODE); wifi_set_frame_cb(wbcp_rx_frame_cb, NULL); #endif wifi_set_sta_connect_timeout(CONNECT_TIMEOUT_SEC); wifi_set_event_callback(wifi_event_callback); #if !IP_NAPT_EXT wifi_and_network_on(); #endif #if defined CONFIG_BT_ENABLE extern void bt_ble_module_init(void); bt_ble_module_init(); #endif #if defined CONFIG_WIFI_IDLE_RESUME_BASEBAND_ENABLE && CONFIG_BLE_MESH_ENABLE void wf_low_power_set_sleep_window(u32 ms); wf_low_power_set_sleep_window(500); #endif } #ifdef CONFIG_WIFI_ENABLE static int wireless_net_init(void) //主要是create wifi 线程的 { puts("wireless_net_init \n\n"); return thread_fork("wifi_app_task", 10, 1792, 0, 0, wifi_app_task, NULL); } late_initcall(wireless_net_init); #endif #include "asm/power_interface.h" #if !defined CONFIG_WIFI_IDLE_RESUME_BASEBAND_ENABLE && TCFG_LOWPOWER_LOWPOWER_SEL == 0 void wf_low_power_request(void *priv, u32 usec) { } #endif const char *get_root_path(void) { return CONFIG_ROOT_PATH; } #endif