int rthw_wifi_connect_bssid(char *bssid, char *ssid, int ssid_len, char *password, int pass_len, rthw_security_t security_type) { int mode; rtw_wifi_setting_t setting; mode = rthw_wifi_mode_get(); if ((mode != RTHW_MODE_STA) && (mode != RTHW_MODE_STA_AP)) { return -1; } if(wext_get_mode(WLAN0_NAME, &mode) < 0) { rt_kprintf("L:%d wifi get mode err\n", __LINE__); return -1; } if(wifi_connect_bssid(bssid, ssid, security_type, password, 6, ssid_len, pass_len, -1, NULL) != RTW_SUCCESS) { rt_kprintf("wifi connect fail\n"); return -1; } rt_kprintf("wifi connect success\n"); rt_kprintf("Show Wi-Fi information\n"); wifi_get_setting(WLAN0_NAME,&setting); wifi_show_setting(WLAN0_NAME,&setting); return 0; }
void wps_check_and_show_connection_info(void) { rtw_wifi_setting_t setting; #if CONFIG_LWIP_LAYER /* Start DHCP Client */ LwIP_DHCP(0, DHCP_START); #endif wifi_get_setting(WLAN0_NAME, &setting); wifi_show_setting(WLAN0_NAME, &setting); }
static void LoadWifiSetting() { const char *ifname = WLAN0_NAME; if(rltk_wlan_running(WLAN1_IDX)) {//STA_AP_MODE ifname = WLAN1_NAME; } wifi_get_setting(ifname, &wifi_setting); //printf("\r\nLoadWifiSetting(): wifi_setting.ssid=%s\n", wifi_setting.ssid); //printf("\r\nLoadWifiSetting(): wifi_setting.channel=%d\n", wifi_setting.channel); //printf("\r\nLoadWifiSetting(): wifi_setting.security_type=%d\n", wifi_setting.security_type); //printf("\r\nLoadWifiSetting(): wifi_setting.password=%s\n", wifi_setting.password); }
static int SC_check_and_show_connection_info(void) { rtw_wifi_setting_t setting; int ret = -1; /* If not rise priority, LwIP DHCP may timeout */ vTaskPrioritySet(NULL, tskIDLE_PRIORITY + 3); /* Start DHCP Client */ ret = LwIP_DHCP(0, DHCP_START); vTaskPrioritySet(NULL, tskIDLE_PRIORITY + 1); wifi_get_setting(WLAN0_NAME, &setting); wifi_show_setting(WLAN0_NAME, &setting); if (ret == DHCP_ADDRESS_ASSIGNED) return SC_SUCCESS; else return SC_DHCP_FAIL; }
int uartadapter_connect_wifi(rtw_network_info_t *p_wifi, uint32_t channel, uint8_t pscan_config) { int retry = 3; rtw_wifi_setting_t setting; int ret; while (1) { if(wifi_set_pscan_chan((uint8_t *)&channel, &pscan_config, 1) < 0){ printf("\n\rERROR: wifi set partial scan channel fail"); ret = SC_TARGET_CHANNEL_SCAN_FAIL; return ret; } ret = wifi_connect((char*)p_wifi->ssid.val, p_wifi->security_type, (char*)p_wifi->password, p_wifi->ssid.len, p_wifi->password_len, p_wifi->key_id, NULL); if (ret == RTW_SUCCESS) { ret = LwIP_DHCP(0, DHCP_START); wifi_get_setting(WLAN0_NAME, &setting); wifi_show_setting(WLAN0_NAME, &setting); if (ret == DHCP_ADDRESS_ASSIGNED) return SC_SUCCESS; else return SC_DHCP_FAIL; } if (retry == 0) { ret = SC_JOIN_BSS_FAIL; break; } retry --; } return ret; }
void restore_wifi_info_to_flash() { struct wlan_fast_reconnect * data_to_flash; u32 channel = 0; u8 index = 0; u8 *ifname[1] = {WLAN0_NAME}; rtw_wifi_setting_t setting; //struct security_priv *psecuritypriv = &padapter->securitypriv; //WLAN_BSSID_EX *pcur_bss = pmlmepriv->cur_network.network; data_to_flash = (struct wlan_fast_reconnect *)rtw_zmalloc(sizeof(struct wlan_fast_reconnect)); if(data_to_flash && p_write_reconnect_ptr){ if(wifi_get_setting((const char*)ifname[0],&setting) || setting.mode == RTW_MODE_AP){ printf("\r\n %s():wifi_get_setting fail or ap mode", __func__); return; } channel = setting.channel; rtw_memset(psk_essid[index], 0, sizeof(psk_essid[index])); strncpy(psk_essid[index], setting.ssid, strlen(setting.ssid)); switch(setting.security_type){ case RTW_SECURITY_OPEN: rtw_memset(psk_passphrase[index], 0, sizeof(psk_passphrase[index])); rtw_memset(wpa_global_PSK[index], 0, sizeof(wpa_global_PSK[index])); data_to_flash->security_type = RTW_SECURITY_OPEN; break; case RTW_SECURITY_WEP_PSK: channel |= (setting.key_idx) << 28; rtw_memset(psk_passphrase[index], 0, sizeof(psk_passphrase[index])); rtw_memset(wpa_global_PSK[index], 0, sizeof(wpa_global_PSK[index])); rtw_memcpy(psk_passphrase[index], setting.password, sizeof(psk_passphrase[index])); data_to_flash->security_type = RTW_SECURITY_WEP_PSK; break; case RTW_SECURITY_WPA_TKIP_PSK: data_to_flash->security_type = RTW_SECURITY_WPA_TKIP_PSK; break; case RTW_SECURITY_WPA2_AES_PSK: data_to_flash->security_type = RTW_SECURITY_WPA2_AES_PSK; break; default: break; } memcpy(data_to_flash->psk_essid, psk_essid[index], sizeof(data_to_flash->psk_essid)); if (strlen(psk_passphrase64) == 64) { memcpy(data_to_flash->psk_passphrase, psk_passphrase64, sizeof(data_to_flash->psk_passphrase)); } else { memcpy(data_to_flash->psk_passphrase, psk_passphrase[index], sizeof(data_to_flash->psk_passphrase)); } memcpy(data_to_flash->wpa_global_PSK, wpa_global_PSK[index], sizeof(data_to_flash->wpa_global_PSK)); memcpy(&(data_to_flash->channel), &channel, 4); //call callback function in user program p_write_reconnect_ptr((u8 *)data_to_flash, sizeof(struct wlan_fast_reconnect)); } if(data_to_flash) rtw_free(data_to_flash); }
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 fATWx(void *arg){ int i = 0; #if CONFIG_LWIP_LAYER u8 *mac = LwIP_GetMAC(&xnetif[0]); u8 *ip = LwIP_GetIP(&xnetif[0]); u8 *gw = LwIP_GetGW(&xnetif[0]); #endif u8 *ifname[2] = {WLAN0_NAME,WLAN1_NAME}; rtw_wifi_setting_t setting; printf("[ATW?]: _AT_WLAN_INFO_\n\r"); for(i=0;i<NET_IF_NUM;i++){ if(rltk_wlan_running(i)){ #if CONFIG_LWIP_LAYER mac = LwIP_GetMAC(&xnetif[i]); ip = LwIP_GetIP(&xnetif[i]); gw = LwIP_GetGW(&xnetif[i]); #endif printf("\n\r\nWIFI %s Status: Running", ifname[i]); printf("\n\r=============================="); rltk_wlan_statistic(i); wifi_get_setting((const char*)ifname[i],&setting); wifi_show_setting((const char*)ifname[i],&setting); #if CONFIG_LWIP_LAYER printf("\n\rInterface (%s)", ifname[i]); printf("\n\r=============================="); printf("\n\r\tMAC => %02x:%02x:%02x:%02x:%02x:%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]) ; printf("\n\r\tIP => %d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); printf("\n\r\tGW => %d.%d.%d.%d\n\r", gw[0], gw[1], gw[2], gw[3]); #endif if(setting.mode == RTW_MODE_AP || i == 1) { int client_number; struct { int count; rtw_mac_t mac_list[3]; } client_info; client_info.count = 3; wifi_get_associated_client_list(&client_info, sizeof(client_info)); printf("\n\rAssociated Client List:"); printf("\n\r=============================="); if(client_info.count == 0) printf("\n\rClient Num: 0\n\r", client_info.count); else { printf("\n\rClient Num: %d", client_info.count); for( client_number=0; client_number < client_info.count; client_number++ ) { printf("\n\rClient %d:", client_number + 1); printf("\n\r\tMAC => "MAC_FMT"", MAC_ARG(client_info.mac_list[client_number].octet)); } printf("\n\r"); } } } } #if defined(configUSE_TRACE_FACILITY) && (configUSE_TRACE_FACILITY == 1) && (configUSE_STATS_FORMATTING_FUNCTIONS == 1) { signed char pcWriteBuffer[1024]; vTaskList((char*)pcWriteBuffer); printf("\n\rTask List: \n\r%s", pcWriteBuffer); } #endif }