static void wifi_cleanup(void) { if (listen_socket >= 0) closesocket(listen_socket); #ifdef _WIN32 // if any, do something after close socket // WSA Cleanup #else Wifi_DisconnectAP(); Wifi_DisableWifi(); #endif }
void Menu::ConnectWifi() { consoleClear(); CONFIG config; if(!Config::Load(&config)) { printf("No configuration set\n\n"); Menu::Continue(); return; } printf("Connecting wifi\n"); Wifi_AutoConnect(); while(1) { int n = Wifi_AssocStatus(); int ln = -1; switch(n) { case ASSOCSTATUS_AUTHENTICATING: if(ln != ASSOCSTATUS_AUTHENTICATING) printf("Authenticating\n"); break; case ASSOCSTATUS_ASSOCIATING: if(ln != ASSOCSTATUS_ASSOCIATING) printf("Associating\n"); break; case ASSOCSTATUS_ACQUIRINGDHCP: if(ln != ASSOCSTATUS_ACQUIRINGDHCP) printf("Acquiring IP address from DHCP\n"); break; case ASSOCSTATUS_ASSOCIATED: in_addr a; a.s_addr = Wifi_GetIP(); printf("Connected: %s\n", inet_ntoa(a)); Menu::ConnectNX(config); Wifi_DisconnectAP(); return; case ASSOCSTATUS_CANNOTCONNECT: printf("Connection failed\n\n"); Menu::Continue(); return; } ln = n; } }
void postGame() { PA_PauseMod(1); bool submitted = false; while(!Pad.Newpress.Start && !Stylus.DblClick && !submitted) { PA_ClearTextBg(SCREEN_TOP); PA_OutputSimpleText(SCREEN_TOP,0,0,"GAME OVER"); PA_OutputText(SCREEN_TOP,0,1,"YOUR SCORE: %d", game.score); if(game.score<highscore.points) { PA_OutputText(SCREEN_TOP,0,2,"%s's High Score: %d", highscore.name, highscore.points); PA_OutputSimpleText(SCREEN_TOP,0,4,"Press Start to Play Again"); }else{ PA_OutputText(SCREEN_TOP,0,2,"NEW HIGH SCORE!!!"); highscore.points=game.score; highscore.name=(char*)PA_UserInfo.Name; PA_OutputSimpleText(SCREEN_TOP,0,3,"Press Y To submit score online."); PA_OutputSimpleText(SCREEN_TOP,0,4,"Press Start to Play Again"); if(Pad.Newpress.Y) { PA_OutputSimpleText(SCREEN_TOP,0,5,"Ranking globally..."); // Init Network PA_InitWifi(); if(PA_ConnectWifiWFC()) { submitScore(); getHighScores(); submitted=true; Wifi_DisconnectAP(); }else{ PA_OutputSimpleText(SCREEN_TOP,0,6,"Wifi Connection Failed."); } Wifi_DisableWifi(); } } // Sleep PA_CheckLid(); PA_WaitForVBL(); } }
// note: int execv(const char *path, char *const argv[]); // - where the array of strings is terminated with a null string // - i.e. this is a bit different for now int execz(const char* filename, int argc, const char** argv) { struct stat st; char filePath[MAXPATHLEN * 2]; int pathLen; const char* args[1]; int i; if (stat (filename, &st) < 0) { return 1; } if (argc <= 0 || !argv) { // Construct a command line if we weren't supplied with one if (!getcwd (filePath, MAXPATHLEN)) { return 2; } pathLen = strlen (filePath); strcpy (filePath + pathLen, filename); args[0] = filePath; argv = args; } // shutdown sound subsystem // note: EffectCancelAll seems to fail to stop // the current sample mmEffectCancelAll(); mmStop(); while (mmActive()) { swiWaitForVBlank(); } // shutdown network subsystem Wifi_DisconnectAP(); Wifi_DisableWifi(); // wait a bit: race condition?? for (i = 0 ; i < 42 ; i++) { swiWaitForVBlank(); } return runNds (load_bin, load_bin_size, st.st_ino, false, true, argc, argv); }
int main(int argc, char *argv[]) { int rc; defaultExceptionHandler(); consoleDemoInit(); irqInit(); irqEnable(IRQ_VBLANK); if(fatInitDefault() != 1) { return -1; } arm9_wifiConnect(); rc = test_main(); Wifi_DisconnectAP(); Wifi_DisableWifi(); return rc; }
int Wifi_ConnectAP(Wifi_AccessPoint * apdata, int wepmode, int wepkeyid, u8 * wepkey) { int i; Wifi_AccessPoint ap; wifi_connect_state=-1; if(!apdata) return -1; if(((signed char)apdata->ssid_len)<0 || apdata->ssid_len>32) return -1; Wifi_DisconnectAP(); wifi_connect_state=0; WifiData->wepmode9=wepmode; // copy data WifiData->wepkeyid9=wepkeyid; for(i=0;i<20;i++) { WifiData->wepkey9[i]=wepkey[i]; } i=Wifi_FindMatchingAP(1,apdata,&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; } else { WifiData->reqMode=WIFIMODE_SCAN; wifi_connect_point = *apdata; } 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; }