/* Try to connect to given AP and get an IP via DHCP */ int connect_ap(Wifi_AccessPoint * ap) { int ret; int status = ASSOCSTATUS_DISCONNECTED; clear_main(); /* Ask for DHCP */ Wifi_SetIP(0, 0, 0, 0, 0); ret = Wifi_ConnectAP(ap, WEPMODE_NONE, 0, NULL); if (ret) { print_to_debug("error connecting"); return ASSOCSTATUS_CANNOTCONNECT; } while (status != ASSOCSTATUS_ASSOCIATED && status != ASSOCSTATUS_CANNOTCONNECT) { int oldStatus = status; status = Wifi_AssocStatus(); if (oldStatus != status) printf_to_main("\n%s", (char *)ASSOCSTATUS_STRINGS[status]); else printf_to_main("."); scanKeys(); if (keysDown() & KEY_B) break; swiWaitForVBlank(); } return status; }
//--------------------------------------------------------------------------------- int main(void) { //--------------------------------------------------------------------------------- Wifi_InitDefault(false); consoleDemoInit(); Keyboard* kb = keyboardDemoInit(); kb->OnKeyPressed = keyPressed; while(1) { int status = ASSOCSTATUS_DISCONNECTED; consoleClear(); consoleSetWindow(NULL, 0,0,32,24); Wifi_AccessPoint* ap = findAP(); consoleClear(); consoleSetWindow(NULL, 0,0,32,10); iprintf("Connecting to %s\n", ap->ssid); //this tells the wifi lib to use dhcp for everything Wifi_SetIP(0,0,0,0,0); char wepkey[64]; int wepmode = WEPMODE_NONE; if (ap->flags & WFLAG_APDATA_WEP) { iprintf("Enter Wep Key\n"); while (wepmode == WEPMODE_NONE) { scanf("%s",wepkey); if (strlen(wepkey)==13) { wepmode = WEPMODE_128BIT; } else if (strlen(wepkey) == 5) { wepmode = WEPMODE_40BIT; } else { iprintf("Invalid key!\n"); } } Wifi_ConnectAP(ap, wepmode, 0, (u8*)wepkey); } else { Wifi_ConnectAP(ap, WEPMODE_NONE, 0, 0); } consoleClear(); while(status != ASSOCSTATUS_ASSOCIATED && status != ASSOCSTATUS_CANNOTCONNECT) { status = Wifi_AssocStatus(); int len = strlen(ASSOCSTATUS_STRINGS[status]); iprintf("\x1b[0;0H\x1b[K"); iprintf("\x1b[0;%dH%s", (32-len)/2,ASSOCSTATUS_STRINGS[status]); scanKeys(); if(keysDown() & KEY_B) break; swiWaitForVBlank(); } char url[256]; if(status == ASSOCSTATUS_ASSOCIATED) { u32 ip = Wifi_GetIP(); iprintf("\nip: [%i.%i.%i.%i]\n", (ip ) & 0xFF, (ip >> 8) & 0xFF, (ip >> 16) & 0xFF, (ip >> 24) & 0xFF); while(1) { scanf("%s", url); if ( 0 == strcmp(url,"quit")) break; struct hostent *host = gethostbyname(url); if(host) iprintf("IP (%s) : %s\n", url, inet_ntoa(*(struct in_addr *)host->h_addr_list[0])); else iprintf("Could not resolve\n"); swiWaitForVBlank(); } } else {
//--------------------------------------------------------------------------------- int main(void) { //--------------------------------------------------------------------------------- Wifi_InitDefault(false); consoleDemoInit(); //Keyboard* kb = keyboardDemoInit(); //kb->OnKeyPressed = keyPressed; while(1); { int status = ASSOCSTATUS_DISCONNECTED; consoleClear(); Wifi_AccessPoint* ap = findAP(); iprintf("Connecting to %s\n", ap->ssid); //this tells the wifi lib to use dhcp for everything Wifi_SetIP(0,0,0,0,0); Wifi_ConnectAP(ap, WEPMODE_NONE, 0, 0); while(status != ASSOCSTATUS_ASSOCIATED && status != ASSOCSTATUS_CANNOTCONNECT) { int oldStatus = status; status = Wifi_AssocStatus(); iprintf("%s", oldStatus != status ? ASSOCSTATUS_STRINGS[status] : "."); scanKeys(); if(keysDown() & KEY_B) break; swiWaitForVBlank(); } consoleClear(); consoleSetWindow(NULL, 0,0,32,10); char url[256]; if(status == ASSOCSTATUS_ASSOCIATED) { while(1) { u32 ip = Wifi_GetIP(); iprintf("ip: [%i.%i.%i.%i]", (ip ) & 0xFF, (ip >> 8) & 0xFF, (ip >> 16) & 0xFF, (ip >> 24) & 0xFF); scanf("%s", url); struct hostent *host = gethostbyname(url); if(host) iprintf("IP (%s) : %s\n", url, inet_ntoa(*(struct in_addr *)host->h_addr_list[0])); else iprintf("Could not resolve\n"); scanKeys(); if(keysDown() & KEY_B) break; swiWaitForVBlank(); } } } return 0; }
int Wifi_AssocStatus(void) { switch(wifi_connect_state) { case -1: // error return ASSOCSTATUS_CANNOTCONNECT; case 0: // searching { int i; Wifi_AccessPoint ap; i=Wifi_FindMatchingAP(1,&wifi_connect_point,&ap); if(i==0) { Wifi_CopyMacAddr(WifiData->bssid9, ap.bssid); Wifi_CopyMacAddr(WifiData->apmac9, ap.bssid); WifiData->ssid9[0]=ap.ssid_len; for(i=0;i<32;i++) { WifiData->ssid9[i+1]=ap.ssid[i]; } WifiData->apchannel9=ap.channel; for(i=0;i<16;i++) WifiData->baserates9[i]=ap.base_rates[i]; WifiData->reqMode=WIFIMODE_NORMAL; WifiData->reqReqFlags |= WFLAG_REQ_APCONNECT | WFLAG_REQ_APCOPYVALUES; wifi_connect_state=1; } } return ASSOCSTATUS_SEARCHING; case 1: // associating switch(WifiData->curMode) { case WIFIMODE_DISABLED: case WIFIMODE_NORMAL: case WIFIMODE_DISASSOCIATE: return ASSOCSTATUS_DISCONNECTED; case WIFIMODE_SCAN: if(WifiData->reqReqFlags&WFLAG_REQ_APCONNECT) return ASSOCSTATUS_AUTHENTICATING; return ASSOCSTATUS_DISCONNECTED; case WIFIMODE_ASSOCIATE: switch(WifiData->authlevel) { case WIFI_AUTHLEVEL_DISCONNECTED: return ASSOCSTATUS_AUTHENTICATING; case WIFI_AUTHLEVEL_AUTHENTICATED: case WIFI_AUTHLEVEL_DEASSOCIATED: return ASSOCSTATUS_ASSOCIATING; case WIFI_AUTHLEVEL_ASSOCIATED: #ifdef WIFI_USE_TCP_SGIP if(wifi_hw) { if(!(wifi_hw->ipaddr)) { sgIP_DHCP_Start(wifi_hw,wifi_hw->dns[0]==0); wifi_connect_state=2; return ASSOCSTATUS_ACQUIRINGDHCP; } } sgIP_ARP_SendGratARP(wifi_hw); #endif wifi_connect_state=3; WifiData->flags9|=WFLAG_ARM9_NETREADY; return ASSOCSTATUS_ASSOCIATED; } break; case WIFIMODE_ASSOCIATED: #ifdef WIFI_USE_TCP_SGIP if(wifi_hw) { if(!(wifi_hw->ipaddr)) { sgIP_DHCP_Start(wifi_hw,wifi_hw->dns[0]==0); wifi_connect_state=2; return ASSOCSTATUS_ACQUIRINGDHCP; } } sgIP_ARP_SendGratARP(wifi_hw); #endif wifi_connect_state=3; WifiData->flags9|=WFLAG_ARM9_NETREADY; return ASSOCSTATUS_ASSOCIATED; case WIFIMODE_CANNOTASSOCIATE: return ASSOCSTATUS_CANNOTCONNECT; } return ASSOCSTATUS_DISCONNECTED; case 2: // dhcp'ing #ifdef WIFI_USE_TCP_SGIP { int i; i=sgIP_DHCP_Update(); if(i!=SGIP_DHCP_STATUS_WORKING) { switch(i) { case SGIP_DHCP_STATUS_SUCCESS: wifi_connect_state=3; WifiData->flags9|=WFLAG_ARM9_NETREADY; sgIP_ARP_SendGratARP(wifi_hw); sgIP_DNS_Record_Localhost(); return ASSOCSTATUS_ASSOCIATED; default: case SGIP_DHCP_STATUS_IDLE: case SGIP_DHCP_STATUS_FAILED: Wifi_DisconnectAP(); wifi_connect_state=-1; return ASSOCSTATUS_CANNOTCONNECT; } } } #else // should never get here (dhcp state) without sgIP! Wifi_DisconnectAP(); wifi_connect_state=-1; return ASSOCSTATUS_CANNOTCONNECT; #endif return ASSOCSTATUS_ACQUIRINGDHCP; case 3: // connected! return ASSOCSTATUS_ASSOCIATED; case 4: // search nintendo WFC data for a suitable AP { int n,i; for(n=0;n<3;n++) if(!(WifiData->wfc_enable[n]&0x80)) break; Wifi_AccessPoint ap; n=Wifi_FindMatchingAP(n,WifiData->wfc_ap,&ap); if(n!=-1) { #ifdef WIFI_USE_TCP_SGIP Wifi_SetIP(WifiData->wfc_config[n][0],WifiData->wfc_config[n][1],WifiData->wfc_config[n][2],WifiData->wfc_config[n][3],WifiData->wfc_config[n][4]); #endif WifiData->wepmode9=WifiData->wfc_enable[n]&0x03; // copy data WifiData->wepkeyid9=(WifiData->wfc_enable[n]>>4)&7; for(i=0;i<16;i++) { WifiData->wepkey9[i]=WifiData->wfc_wepkey[n][i]; } Wifi_CopyMacAddr(WifiData->bssid9, ap.bssid); Wifi_CopyMacAddr(WifiData->apmac9, ap.bssid); WifiData->ssid9[0]=ap.ssid_len; for(i=0;i<32;i++) { WifiData->ssid9[i+1]=ap.ssid[i]; } WifiData->apchannel9=ap.channel; for(i=0;i<16;i++) WifiData->baserates9[i]=ap.base_rates[i]; WifiData->reqMode=WIFIMODE_NORMAL; WifiData->reqReqFlags |= WFLAG_REQ_APCONNECT | WFLAG_REQ_APCOPYVALUES; wifi_connect_state=1; return ASSOCSTATUS_SEARCHING; } } return ASSOCSTATUS_SEARCHING; }
int wifi_init(void) { struct links *channel = CHANNELS + CHANNEL_WIFI; #ifdef _WIN32 WSADATA wsaData; if (WSAStartup(MAKEWORD(2,2), &wsaData) != NO_ERROR) { confirm_error("WIFI: Error at WSAStartup()\n", 0); return DSH_CONNECTION_FAILED; } #else char readtext[33]; char iptext[33]; // ip address ONLY int ret, i, j, oldstatus; FILE *fp; unsigned char BUF[6]; iprintf("WIFI: Finding AP...\n"); fp = fopen("DallShell_Conf.txt","rb"); if(fp == NULL) { ret = Wifi_InitDefault(WFC_CONNECT); } else { Wifi_InitDefault(INIT_ONLY); Wifi_EnableWifi(); for(i=0;i<8;i++) { // DallShell Conf ���α����� txt���� ���, // �ԷµǴ� ���ڿ� �迭�� ũ�⸦ �÷��� (11.08.29) fgets(readtext,33,fp); memset(iptext,0,33); // iptext�� memory�ʱ�ȭ (11.08.29) switch(i){ case 0 : strcpy(ap.ssid,readtext); break; case 1 : ap.ssid_len = atoi(readtext); break; case 2 : ap.channel = atoi(readtext); break; case 3 : memcpy(iptext, readtext, strlen(readtext)-1); MyIP.s_addr = inet_addr(iptext); break; case 4 : memcpy(iptext, readtext, strlen(readtext)-1); gateway.s_addr = inet_addr(iptext); break; case 5 : memcpy(iptext, readtext, strlen(readtext)-1); mask.s_addr = inet_addr(iptext); break; case 6 : memcpy(iptext, readtext, strlen(readtext)-1); dns1.s_addr = inet_addr(iptext); break; case 7 : memcpy(iptext, readtext, strlen(readtext)-1); dns2.s_addr = inet_addr(iptext); break; } } ret = Wifi_ConnectAP(&ap,WEPMODE_NONE,0,0); } iprintf("MAC : "); Wifi_GetData(WIFIGETDATA_MACADDRESS, 6, BUF); for (i = 0; i < 6; i++) { iprintf("%02X", BUF[i]); if (i < 5) iprintf(":"); } iprintf("\n\n"); if(fp == NULL) { if(ret == 0) { confirm_error("WIFI:Failed to connect AP!\n", 0); return DSH_CONNECTION_FAILED; } iprintf("NULL"); MyIP = Wifi_GetIPInfo(&gateway, &mask, &dns1, &dns2); } else { if(ret != -1) { iprintf("AP Connecting...\n"); while(j != ASSOCSTATUS_ASSOCIATED && j!= ASSOCSTATUS_CANNOTCONNECT) { oldstatus = j; j = Wifi_AssocStatus(); if(oldstatus != j) { iprintf("%s\n",ASSOCSTATUS_STRINGS[j]); if(j == ASSOCSTATUS_ASSOCIATED ) { Wifi_SetIP(MyIP.s_addr,gateway.s_addr,mask.s_addr,dns1.s_addr,dns2.s_addr); } } } } } iprintf("WIFI: Connected to AP\n"); // Mark that WIFI is available iprintf("IP : %s\n", inet_ntoa(MyIP)); iprintf("SVIP: %s\n", DOWNLOAD_IP); #endif channel->name = channel_name(CHANNEL_WIFI); channel->number =number_connect; // number connect channel->connect = wifi_connect; channel->read = wifi_read; channel->write = wifi_write; channel->disconnect = wifi_disconnect; channel->cleanup = wifi_cleanup; return 0; }