DS2DSTest2をアップしました
dsをWiFi経由で遊ぶテストプログラムをアップロードしました。アップ先はNDS Program Roomです。
このプログラムでキー待ちしていて、押したキーを通信しあう関数を作ったので。ソースを書いておきます。
int WiFi_SelectKey( int sockNum, int *keyCd, int keyCdNum, u8 *sendData, bool keyOff )
キー入力をチェックしたいキーコードをkeyCdに入れて、セットしたキーコードの数(keyCdNum)と入力があった場合に相手に送信したい値の配列(dendData)、それと、キーから指が離れるまで待つかどうかのフラグ(keyOff)を引数に渡します。
戻り値は、押されて送信された送信値です。
//************************************************** // キー選択待ちループ // sockNum:ソケット番号, keyCd[]: 選択するキーコード配列 // keyCdNum: 選択キーの数, sendData[]:送るデータ配列 // keyOff:キーを離すまで待つときはtrue // 戻り値: keyCdNum //************************************************** int WiFi_SelectKey( int sockNum, int *keyCd, int keyCdNum, u8 *sendData, bool keyOff ) { int key; u8 sendText[1]; u8 recvText[1]; int recvd_len; int i; int ret = -1; while( ret==-1 ){ scanKeys(); key = keysHeld(); //押されたキー取得 if( key!=0 ){ for( i=0; i<keyCdNum; i++ ){ //指定キーコードに合うかどうかスキャン if( (key&keyCd[i])!=0 ){ //キーコードにあったなら、sendData[i]を送信 sendText[0] = sendData[i]; send( sockNum, sendText, 1, 0 ); while( true ){ //sendText[0]を受信するまでループ recvd_len = getRecvData( sockNum, recvText, 1, 0, 20000L ); swiWaitForVBlank(); if( recvd_len==1 && recvText[0]==sendText[0] ){ break; } } ret = i; //retにキーコード番号セット break; } } if( ret>=0 ){ break; } //キーコード番号がセットされていればwhileループを抜ける } //sendData[]を受信したらそれを送信してブレイク recvd_len = getRecvData( sockNum, recvText, 1, 0, 20000L ); swiWaitForVBlank(); if( recvd_len==1 ){ for( i=0; i<keyCdNum; i++ ){ //sendData[]に合うかどうかスキャン //sendData[]にあったなら、それを送信 if( recvText[0]==sendData[i] ){ send( sockNum, recvText, 1, 0 ); //recvText[0]を送信 ret = i; //retにキーコード番号セット break; } } if( ret>=0 ){ break; } //キーコード番号がセットされていればwhileループを抜ける } } if( keyOff==true ){ nkeywait(-1); } //キーが離されるまで待つ return( ret ); }
画面を描く
drow()という関数も作っていました。これはキャラ1とキャラ2を指定座標に描く関数です。スプライトを理解していないので、単純に毎回画面に描画しています。スプライトについてどなたか教えて欲しいです。
//************************************************** // 画面を描く //************************************************** void drow( int xa, int xb ) { swiWaitForVBlank(); DC_FlushAll(); //メモリのキャッシュのフラッシュ dmaCopy( (uint16*)back_bin, SubScreenA, 0x18000 ); //背景描画 GcopyL( SubScreenA, xa, 4, 82, 74, (uint16*)c1_bin, 0, 0, 82,74 ); //キャラ1描画 GcopyL( SubScreenA, xb, 92, 82, 74, (uint16*)c2_bin, 0, 0, 82,74 ); //キャラ2描画 }
それと、main()の中で、ポケットWiFiにつなぎに行くところはコメントアウトして、自動接続のプログラムにしています。コメントを変えれば、SSIDとWEPキーのわかっているAPにつなぐことができると思います。
/* if( DS_ConnectAP( (char*)"ポケットWiFiのSSID", WEPMODE_40BIT, (u8*)"ポケットWiFiのWEPキー" )==false ){ ShinoUpPrint( MainScreenA, (u8 *)"AP Connect Error", RGB(31,0,0),RGB(0,0,0), 1 ,RGB(0,0,0) ); while( true ); } */ if( !DS_WifiAutoConnect() ){ //APに自動接続(自作関数) ShinoPrintCenter( SubScreenA, 128, 5*12, (u8 *)"Auto Connect Error", RGB(31,0,0), RGB( 31,31,31 ), 1 ); while( true ); }
WiFiを使ったDS-DS通信は、この辺で一区切りにしようと思っています。
いろいろ更新目標の最後の月に入りました。
本当にやりたいことリスト
(ブログの終わりにやりたいことを書いておきたいと思います)
- 求職活動・・・このブログで興味を持った人一声かけてください。m(_ _)m
- Androidプログラム
- Web系のプログラム