コンピュータを楽しもう!!

今、自分が面白くていろいろやってみたことを書き綴りたいと思います。連絡先はtarosa.yでgmail.comです。

DevkitProで使われているdswifiについて(4)

いつも夜遅くなって、中々進みませんが、書いてみます。
とりあえず、例として、dswifiを使ってインターネット上のサーバからファイルをもらうプログラムを書きました。

//************************************************************************
//  wifiテスト 2010.1.31
//************************************************************************
#include <nds.h>
#include <stdio.h>

//ファイル関係ヘッダ
#include <fat.h>

#include "tarosa_TouchPen03.h"		//自作のペンとパッド入力
#include "tarosa_Graphic1410.h"		//自作のグラフィック
#include "tarosa_Shinofont03.h"		//自作の日本語表示
#include "tarosa_image.h"
#include "tarosa_Wifi20100131.h"

//メインスクリーンとサブスクリーンの設定
extern uint16*	MainScreenA;
extern uint16*	SubScreenA;

//**************************************************
//メイン関数
//**************************************************
int main( void )
{
  VRAM_MODE5_INI();		//グラフィックをMode5に初期化する(自作関数)
  lcdMainOnTop(); 		//メイン画面を上にする

  DS_WifiIni();			//Wifiの初期化(自作関数)

  //ファイル関係の初期化
  if( !fatInitDefault() ){
    ShinoPrintCenter( SubScreenA, 128, 5*12, (u8 *)"FAT Init Error", RGB(31,0,0), RGB(31,31,31), 1 );
    while( true );
  }

  Wifi_EnableWifi();	//wifiを開始

  if( !DS_WifiAutoConnect() ){		//APに自動接続(自作関数)
    ShinoPrintCenter( SubScreenA, 128, 5*12, (u8 *)"Auto Connect Error", RGB(31,0,0), RGB( 31,31,31 ), 1 );
    while( true );
  }
	
  //由杞さん作の「ももいろ」をピアプロサイトから取得します。
  //http取り込み(自作)
  SimpleHttpGet( "c1.piapro.jp", "timg/3p4qcgbyyjshkw1v_20100130031227_0120_0120.jpg", "ruka.jpg" );

  Wifi_DisconnectAP();	//APから切断
  Wifi_DisableWifi(); 	//wifi停止

  //jpeg表示(自作)
  jpgView( "ruka.jpg", MainScreenA, 68, 36, 120, 120, 0, 0 );

  //文字表示(自作)
  ShinoPrintCenter( MainScreenA, 128, 13*12, (u8 *)"ももいろ 由杞さん作", RGB(31,31,31), RGB( 0,0,0 ), 1 );
	
  //キー入力待ち(自作)
  anyNyuryoku();

  //システムの電源を切ります
  powerOn(PM_SYSTEM_PWR);

  while(1){	swiWaitForVBlank();	}
  return( 0 );
}


自作関数が多いですが説明します。ヘッダは置いておいてmain()から説明します。

いろいろな初期化

  VRAM_MODE5_INI();		//グラフィックをMode5に初期化する(自作関数)
  lcdMainOnTop(); 		//メイン画面を上にする

  DS_WifiIni();			//Wifiの初期化(自作関数)

  //ファイル関係の初期化
  if( !fatInitDefault() ){
    ShinoPrintCenter( SubScreenA, 128, 5*12, (u8 *)"FAT Init Error", RGB(31,0,0), RGB(31,31,31), 1 );
    while( true );
  }

これが初期化部です。VRAM_MODE5_INI();は、自作の画面初期化ルーチンです。メイン画面、サブ画面ともに32768色表示モードにします。lcdMainOnTop();メイン画面を上画面に指定するコマンドです。
DS_WifiIni();が自分で使いやすくしたWifiの初期化プログラムです。

//**************************************************
// DSのWifi機能を初期化します。
//**************************************************
void	DS_WifiIni( void )
{
  Wifi_InitDefault( false );  //Wifiの初期化(falseで初期化するのみ)
  Wifi_DisableWifi();         //wifiを停止
}

これだけです。dswifiのもともとの初期化プログラムは、初期化すると直ぐWifiが動作するように作られていたので、必要なときまではwifiが動作しないように、初期化して直ぐに停止させるようにしました。こうしないと、電池がもったいないです。
次は、ファイルの初期化です。DLDIからメモリカードのファイルに読み書きできるようになります。

wifiの起動

初期化が終了したので、wifiを作動させます。

  Wifi_EnableWifi();	//wifiを開始

  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_EnableWifi();がwifiを動作させるコマンドです。この後、アクセスポインタ(AP)に自動接続します。DS_WifiAutoConnect()がそうです。自作です。

//**************************************************
// DSのWifiアクセスポイントに自動接続に行きます
// true:無事繋がった。flase:接続できなかった
//**************************************************
bool	DS_WifiAutoConnect( void )
{
bool	ret = true;
int i;
  //自動接続する
  Wifi_AutoConnect();

  int status = ASSOCSTATUS_DISCONNECTED;
  //最大10秒待って、結果を返す
  for( i=0; i<600; i++ ){
    if( status==ASSOCSTATUS_ASSOCIATED ){
      break;
    }
    else if( status==ASSOCSTATUS_CANNOTCONNECT ){
      ret = false;
      break;
    }
    status = Wifi_AssocStatus();
    swiWaitForVBlank();
  }
  return( ret );
}

Wifi_AutoConnect();コマンドで自動接続を動作させた後、10秒程度、接続に成功したか、失敗したかを待つプログラムになっています。Wifi_AssocStatus();でステータスが返ってきます。
これが成功したら、インターネットに通信に行けます。

webサーバとおしゃべりする

次に、サーバにアクセスします。

  //由杞さん作の「ももいろ」をピアプロサイトから取得します。
  //http取り込み(自作)
  SimpleHttpGet( "c1.piapro.jp", "timg/3p4qcgbyyjshkw1v_20100130031227_0120_0120.jpg", "ruka.jpg" );

試しに、ピアプロのサーバにアクセスして、サムネイル化してサーバに置かれているjpeg画像を取得してみます。由杞さん作の「ももいろ」という絵を取得させていただきました。SimpleHttpGet()というコマンドで、DSにhttpをしゃべらせてファイルを取得します。SimpleHttpGet()は、次回に説明したいと思います。

wifiの切断と停止

ファイルの取得が終われば、電池がもったいないので、wifiを止めます。

  Wifi_DisconnectAP();	//APから切断
  Wifi_DisableWifi(); 	//wifi停止

見ての通り、切断と停止を行います。dswifiのコマンドそのままです。

jpeg画像と文字の表示

取得したjpegファイルを画面に表示します。

  //jpeg表示(自作)
  jpgView( "ruka.jpg", MainScreenA, 68, 36, 120, 120, 0, 0 );

  //文字表示(自作)
  ShinoPrintCenter( MainScreenA, 128, 13*12, (u8 *)"ももいろ 由杞さん作", RGB(31,31,31), RGB( 0,0,0 ), 1 );
	
  //キー入力待ち(自作)
  anyNyuryoku();

自作のjpeg表示と文字表示プログラムです。説明は割愛します。ソース見てね・・・。

電源オフ

  //システムの電源を切ります
  powerOn(PM_SYSTEM_PWR);

  while(1){	swiWaitForVBlank();	}
  return( 0 );
}

powerOn( PM_SYSTEM_PWR );でシステムの電源が切れます。これはFifoSystemを使っています。powerOn()で電源が切れるというのは、無しですよね。ソース見てヒドイと思いました。電源切れるので、後ろのwhile(1)は何も意味を成しません。

こんな感じで、dswifiが使えます。最後にjpegを表示した画面を上げておきます。

明日の仕事にさしつかえるので寝ます。

本当にやりたいことリスト

(ブログの終わりにやりたいことを書いておきたいと思います)

  • 求職活動・・・このブログで興味を持った人一声かけてください。m(_ _)m
  • Androidプログラム
  • Web系のプログラム