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; }
int SC_connect_to_AP(void) { int ret = SC_ERROR; u8 scan_channel; u8 pscan_config; int retry = 3; rtw_security_t security_mode; rtw_network_info_t wifi = {0}; if(!(fixed_channel_num == 0)){ scan_channel = fixed_channel_num; } pscan_config = PSCAN_ENABLE; switch(g_security_mode){ case RTW_ENCRYPTION_OPEN: security_mode = RTW_SECURITY_OPEN; break; case RTW_ENCRYPTION_WEP40: case RTW_ENCRYPTION_WEP104: security_mode = RTW_SECURITY_WEP_PSK; break; case RTW_ENCRYPTION_WPA_TKIP: case RTW_ENCRYPTION_WPA_AES: case RTW_ENCRYPTION_WPA2_TKIP: case RTW_ENCRYPTION_WPA2_AES: case RTW_ENCRYPTION_WPA2_MIXED: security_mode = RTW_SECURITY_WPA2_AES_PSK; break; case RTW_ENCRYPTION_UNKNOWN: case RTW_ENCRYPTION_UNDEF: default: printf("\r\n unknow security mode,connect fail!"); return ret; } g_security_mode = 0xff;//clear it if (-1 == get_connection_info_from_profile(security_mode, &wifi)) { ret = SC_CONTROLLER_INFO_PARSE_FAIL; return ret; } while (1) { if(wifi_set_pscan_chan(&scan_channel, &pscan_config, 1) < 0){ printf("\n\rERROR: wifi set partial scan channel fail"); ret = SC_TARGET_CHANNEL_SCAN_FAIL; return ret; } #if 0 ret = wifi_connect((char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, wifi.ssid.len, wifi.password_len, wifi.key_id, NULL); #else ret = wifi_connect_bssid(g_bssid, (char*)wifi.ssid.val, wifi.security_type, (char*)wifi.password, 6, wifi.ssid.len, wifi.password_len, wifi.key_id, NULL); #endif if (ret == RTW_SUCCESS) { ret = SC_check_and_show_connection_info(); break; } if (retry == 0) { ret = SC_JOIN_BSS_FAIL; break; } retry --; } return ret; }
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( ); }