void wifi_enter_promisc_mode(){ int mode = 0; unsigned char ssid[33]; if(wifi_mode == RTW_MODE_STA_AP){ wifi_off(); vTaskDelay(20); wifi_on(RTW_MODE_PROMISC); }else{ wext_get_mode(WLAN0_NAME, &mode); switch(mode) { case IW_MODE_MASTER: //In AP mode //rltk_wlan_deinit(); wifi_off();//modified by Chris Yang for iNIC vTaskDelay(20); //rltk_wlan_init(0, RTW_MODE_PROMISC); //rltk_wlan_start(0); wifi_on(RTW_MODE_PROMISC); break; case IW_MODE_INFRA: //In STA mode if(wext_get_ssid(WLAN0_NAME, ssid) > 0) wifi_disconnect(); } } }
void init_thread(void *param) { #if CONFIG_INIT_NET #if CONFIG_LWIP_LAYER /* Initilaize the LwIP stack */ LwIP_Init(); #endif #endif #if CONFIG_WLAN wifi_on(RTW_MODE_STA); #if CONFIG_AUTO_RECONNECT //setup reconnection flag wifi_set_autoreconnect(1); #endif printf("\n\r%s(%d), Available heap 0x%x\n\r", __FUNCTION__, __LINE__, xPortGetFreeHeapSize()); #endif #if CONFIG_INTERACTIVE_MODE /* Initial uart rx swmaphore*/ vSemaphoreCreateBinary(uart_rx_interrupt_sema); xSemaphoreTake(uart_rx_interrupt_sema, 1/portTICK_RATE_MS); start_interactive_mode(); #endif /* Kill init thread after all init tasks done */ vTaskDelete(NULL); }
bool RTW_EMAC::power_up() { wifi_on(RTW_MODE_STA); wait_ms(1000); wlan_emac_link_change(true); return true; }
int rthw_wifi_start(rthw_mode_t mode) { if(wifi_on(mode) < 0) { rt_kprintf("ERROR: wifi_on failed\n"); return -1; } return 0; }
void fATWP(void *arg){ unsigned int parm = atoi((const char *)(arg)); printf("[ATWP]: _AT_WLAN_POWER_[%s]\n\r", parm?"ON":"OFF"); if(parm == 1){ if(wifi_on(RTW_MODE_STA)<0){ printf("\n\rERROR: Wifi on failed!\n"); } } else if(parm == 0) { #if CONFIG_WEBSERVER stop_web_server(); #endif wifi_off(); } else printf("[ATWP]Usage: ATWP=0/1\n\r"); }
static bool wlan_power_up(emac_interface_t *emac) { wifi_on(RTW_MODE_STA); wait_ms(1000); return true; }
int wifi_restart_ap( unsigned char *ssid, rtw_security_t security_type, unsigned char *password, int ssid_len, int password_len, int channel) { unsigned char idx = 0; struct ip_addr ipaddr; struct ip_addr netmask; struct ip_addr gw; struct netif * pnetif = &xnetif[0]; #ifdef CONFIG_CONCURRENT_MODE rtw_wifi_setting_t setting; int sta_linked = 0; #endif if(rltk_wlan_running(WLAN1_IDX)){ idx = 1; } // stop dhcp server dhcps_deinit(); #ifdef CONFIG_CONCURRENT_MODE if(idx > 0){ sta_linked = wifi_get_setting(WLAN0_NAME, &setting); wifi_off(); vTaskDelay(20); wifi_on(RTW_MODE_STA_AP); } else #endif { IP4_ADDR(&ipaddr, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1 , NETMASK_ADDR2, NETMASK_ADDR3); IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); netif_set_addr(pnetif, &ipaddr, &netmask,&gw); wifi_off(); vTaskDelay(20); wifi_on(RTW_MODE_AP); } // start ap if(wifi_start_ap((char*)ssid, security_type, (char*)password, ssid_len, password_len, channel) < 0) { printf("\n\rERROR: Operation failed!"); return -1; } #if (INCLUDE_uxTaskGetStackHighWaterMark == 1) printf("\r\nWebServer Thread: High Water Mark is %ld\n", uxTaskGetStackHighWaterMark(NULL)); #endif #ifdef CONFIG_CONCURRENT_MODE // connect to ap if wlan0 was linked with ap if(idx > 0 && sta_linked == 0){ int ret; printf("\r\nAP: ssid=%s", (char*)setting.ssid); printf("\r\nAP: security_type=%d", setting.security_type); printf("\r\nAP: password=%s", (char*)setting.password); printf("\r\nAP: key_idx =%d\n", setting.key_idx); ret = wifi_connect((char*)setting.ssid, setting.security_type, (char*)setting.password, strlen((char*)setting.ssid), strlen((char*)setting.password), setting.key_idx, NULL); #if CONFIG_DHCP_CLIENT if(ret == RTW_SUCCESS) { /* Start DHCPClient */ LwIP_DHCP(0, DHCP_START); } #endif } #endif #if (INCLUDE_uxTaskGetStackHighWaterMark == 1) printf("\r\nWebServer Thread: High Water Mark is %ld\n", uxTaskGetStackHighWaterMark(NULL)); #endif // start dhcp server dhcps_init(&xnetif[idx]); return 0; }
void fATWB(void *arg) { int timeout = 20;//, mode; #if CONFIG_LWIP_LAYER struct netif * pnetiff = (struct netif *)&xnetif[1]; #endif printf("[ATWB](_AT_WLAN_AP_STA_ACTIVATE_)\n\r"); if(ap.ssid.val[0] == 0){ printf("[ATWB]Error: SSID can't be empty\n\r"); return; } if(ap.channel > 14){ printf("[ATWB]Error:bad channel! channel is from 1 to 14\n\r"); return; } if(ap.password == NULL){ ap.security_type = RTW_SECURITY_OPEN; } else{ ap.security_type = RTW_SECURITY_WPA2_AES_PSK; } #if CONFIG_LWIP_LAYER dhcps_deinit(); #endif wifi_off(); vTaskDelay(20); if (wifi_on(RTW_MODE_STA_AP) < 0){ printf("\n\rERROR: Wifi on failed!"); return; } printf("\n\rStarting AP ..."); if(wifi_start_ap((char*)ap.ssid.val, ap.security_type, (char*)ap.password, ap.ssid.len, ap.password_len, ap.channel) < 0) { printf("\n\rERROR: Operation failed!"); return; } while(1) { char essid[33]; if(wext_get_ssid(WLAN1_NAME, (unsigned char *) essid) > 0) { if(strcmp((const char *) essid, (const char *)ap.ssid.val) == 0) { printf("\n\r%s started\n", ap.ssid.val); break; } } if(timeout == 0) { printf("\n\rERROR: Start AP timeout!"); break; } vTaskDelay(1 * configTICK_RATE_HZ); timeout --; } #if CONFIG_LWIP_LAYER LwIP_UseStaticIP(&xnetif[1]); #ifdef CONFIG_DONT_CARE_TP pnetiff->flags |= NETIF_FLAG_IPSWITCH; #endif dhcps_init(pnetiff); #endif }
void fATWC(void *arg){ int mode, ret; unsigned long tick1 = xTaskGetTickCount(); unsigned long tick2, tick3; char empty_bssid[6] = {0}, assoc_by_bssid = 0; printf("[ATWC]: _AT_WLAN_JOIN_NET_\n\r"); if(memcmp (wifi.bssid.octet, empty_bssid, 6)) assoc_by_bssid = 1; else if(wifi.ssid.val[0] == 0){ printf("[ATWC]Error: SSID can't be empty\n\r"); goto EXIT; } if(wifi.password != NULL){ if((wifi.key_id >= 0)&&(wifi.key_id <= 3)) { wifi.security_type = RTW_SECURITY_WEP_PSK; } else{ wifi.security_type = RTW_SECURITY_WPA2_AES_PSK; } } else{ wifi.security_type = RTW_SECURITY_OPEN; } //Check if in AP mode wext_get_mode(WLAN0_NAME, &mode); if(mode == IW_MODE_MASTER) { #if CONFIG_LWIP_LAYER dhcps_deinit(); #endif wifi_off(); vTaskDelay(20); if (wifi_on(RTW_MODE_STA) < 0){ printf("\n\rERROR: Wifi on failed!"); goto EXIT; } } if(assoc_by_bssid){ printf("\n\rJoining BSS by BSSID "MAC_FMT" ...\n\r", MAC_ARG(wifi.bssid.octet)); ret = wifi_connect_bssid(wifi.bssid.octet, (char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, ETH_ALEN, wifi.ssid.len, wifi.password_len, wifi.key_id, NULL); } else { printf("\n\rJoining BSS by SSID %s...\n\r", (char*)wifi.ssid.val); ret = wifi_connect((char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, wifi.ssid.len, wifi.password_len, wifi.key_id, NULL); } if(ret!= RTW_SUCCESS){ printf("\n\rERROR: Operation failed!"); goto EXIT; } tick2 = xTaskGetTickCount(); printf("\r\nConnected after %dms.\n", (tick2-tick1)); #if CONFIG_LWIP_LAYER /* Start DHCPClient */ LwIP_DHCP(0, DHCP_START); tick3 = xTaskGetTickCount(); printf("\r\n\nGot IP after %dms.\n", (tick3-tick1)); #endif printf("\n\r"); EXIT: init_wifi_struct( ); }
void fATWA(void *arg){ #if CONFIG_LWIP_LAYER struct ip_addr ipaddr; struct ip_addr netmask; struct ip_addr gw; struct netif * pnetif = &xnetif[0]; #endif int timeout = 20; printf("[ATWA]: _AT_WLAN_AP_ACTIVATE_\n\r"); if(ap.ssid.val[0] == 0){ printf("[ATWA]Error: SSID can't be empty\n\r"); return; } if(ap.password == NULL){ ap.security_type = RTW_SECURITY_OPEN; } else{ ap.security_type = RTW_SECURITY_WPA2_AES_PSK; } #if CONFIG_WEBSERVER //store into flash memset(wifi_setting.ssid, 0, sizeof(wifi_setting.ssid));; memcpy(wifi_setting.ssid, ap.ssid.val, strlen((char*)ap.ssid.val)); wifi_setting.ssid[ap.ssid.len] = '\0'; wifi_setting.security_type = ap.security_type; if(ap.security_type !=0) wifi_setting.security_type = 1; else wifi_setting.security_type = 0; if (ap.password) memcpy(wifi_setting.password, ap.password, strlen((char*)ap.password)); else memset(wifi_setting.password, 0, sizeof(wifi_setting.password));; wifi_setting.channel = ap.channel; #if CONFIG_READ_FLASH StoreApInfo(); #endif #endif #if CONFIG_LWIP_LAYER dhcps_deinit(); IP4_ADDR(&ipaddr, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); IP4_ADDR(&netmask, NETMASK_ADDR0, NETMASK_ADDR1 , NETMASK_ADDR2, NETMASK_ADDR3); IP4_ADDR(&gw, GW_ADDR0, GW_ADDR1, GW_ADDR2, GW_ADDR3); netif_set_addr(pnetif, &ipaddr, &netmask,&gw); #ifdef CONFIG_DONT_CARE_TP pnetif->flags |= NETIF_FLAG_IPSWITCH; #endif #endif wifi_off(); vTaskDelay(20); if (wifi_on(RTW_MODE_AP) < 0){ printf("\n\rERROR: Wifi on failed!"); return; } printf("\n\rStarting AP ..."); #ifdef CONFIG_WPS_AP wpas_wps_dev_config(pnetif->hwaddr, 1); #endif if(wifi_start_ap((char*)ap.ssid.val, ap.security_type, (char*)ap.password, ap.ssid.len, ap.password_len, ap.channel) < 0) { printf("\n\rERROR: Operation failed!"); return; } while(1) { char essid[33]; if(wext_get_ssid(WLAN0_NAME, (unsigned char *) essid) > 0) { if(strcmp((const char *) essid, (const char *)ap.ssid.val) == 0) { printf("\n\r%s started\n", ap.ssid.val); break; } } if(timeout == 0) { printf("\n\rERROR: Start AP timeout!"); break; } vTaskDelay(1 * configTICK_RATE_HZ); timeout --; } #if CONFIG_LWIP_LAYER //LwIP_UseStaticIP(pnetif); dhcps_init(pnetif); #endif init_wifi_struct( ); }