月別アーカイブ: 2007年12月

Windows Bluetooth API

Bluetooth 関連の API は BluetoothAPIs.h

ヘッダにも詳しく使い方や説明が書かれているため、ヘッダ見た方が
わかりやすいようです。(XP SP2 以降)

//Bluetooth インターフェース検索

#include	
#include	
#include	 // 必要
#include	

BLUETOOTH_FIND_RADIO_PARAMS	param;
memset( ¶m, 0, sizeof(BLUETOOTH_FIND_RADIO_PARAMS) );
param.dwSize= sizeof(BLUETOOTH_FIND_RADIO_PARAMS);

HANDLE	hradio= NULL;
HBLUETOOTH_RADIO_FIND	hfind= NULL;

if( hfind= BluetoothFindFirstRadio( ¶m, &hradio ) ){
	do{
		BLUETOOTH_RADIO_INFO	rinfo;
		memset( &rinfo, 0, sizeof(BLUETOOTH_RADIO_INFO) );
		rinfo.dwSize= sizeof(BLUETOOTH_RADIO_INFO);
		BluetoothGetRadioInfo( hradio, &rinfo );

		// rinfo.szName  Local Hostname
		// rinfo.address Local Address

		~

		CloseHandle( hradio );
	}while( BluetoothFindNextRadio( hfind, &hradio ) );
	BluetoothFindRadioClose( hfind );
}

これで hRadio や Local の Address が得られます。

ただ Device 関連の API で hRadio が必要な部分はほぼ全部 NULL を
渡すことができるため、あまり必要ないかもしれません。
NULL だと全部の Bluetooth interface が対象。

//Device の検索
BLUETOOTH_DEVICE_SEARCH_PARAMS	searchparam;
memset( &searchparam, 0, sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS) );
searchparam.dwSize= sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS);
searchparam.fReturnAuthenticated= TRUE;
searchparam.fReturnRemembered= TRUE;
searchparam.fReturnConnected= TRUE;
searchparam.fReturnUnknown= TRUE;
searchparam.fIssueInquiry= FALSE;
searchparam.cTimeoutMultiplier= 0;
searchparam.hRadio= NULL; // all

HBLUETOOTH_DEVICE_FIND	hfind= NULL;
BLUETOOTH_DEVICE_INFO	devinfo;
memset( &devinfo, 0, sizeof(BLUETOOTH_DEVICE_INFO) );
devinfo.dwSize= sizeof(BLUETOOTH_DEVICE_INFO);
if( hfind= BluetoothFindFirstDevice( &searchparam, &devinfo ) ){
	do{
		// devinfo.szName        デバイス名
		// devinfo.Address       アドレス
		// devinfo.fConnected
		// devinfo.fRemembered
		// devinfo.fAuthenticated
	}while( BluetoothFindNextDevice( hfind, &devinfo ) );
	BluetoothFindDeviceClose( hfind );
}

これで Wiiリモコン/バランスWiiボード 等も列挙できます。
新しいデバイスの検出も行う場合は searchparam.fIssueInquiry= TRUE、
searchparam.cTimeoutMultiplier= 10 くらいに。

パスキーは
wchar_t* passkey= ~;
unsigned long passlen= wcslen(passkey)*sizeof(wchar_t);
BluetoothAuthenticateDevice( NULL, NULL, &devinfo, passkey, passlen );

または
BluetoothRegisterForAuthentication() → Callback →
BluetoothSendAuthenticationResponse()
BluetoothUnregisterAuthentication()
の手順で行うようです。Dialog を表示させて手入力も可能。

サービス一覧(enable のものだけ)
BluetoothEnumerateInstalledServices( NULL, &devinfo, &numofbuf, _guidbuf );

サービスの切り替え
BluetoothSetServiceState( hradio, &devinfo, &_guid,
BLUETOOTH_SERVICE_ENABLE or BLUETOOTH_SERVICE_DISABLE );

BluetoothEnumerateInstalledServices() は Enable のものだけ列挙する
ので、EnumerateInstalledServices で取得した GUID に対して
SetServiceState( ~ENABLE ) すると必ずエラーになります。
既に ENABLE なため。DISABLE には使える。

pass key 無しで Device を追加登録する方法がまだわかりません。

参考ページ
MSDN BluetoothFindFirstRadio Function
・VS2008 \Microsoft SDKs\Windows\v6.0A\Include\BluetoothAPIs.h

バランスWiiボード をPCで使う wiibalancepc v0.07

100m (100歩) スプリントモードを追加しました。
100m (100歩) の時間を競います。[Enter] キーでスタート
バランスボードを複数台接続すれば、同時に対戦可能です。

ダウンロード
wiibalancepc v0.07 バランスWiiボードを使った PC版体重計

Bluetooth の限界まで接続できますが、画面表示の都合で
取りあえず最大 4台までとなっています。

また複数台接続した場合でも、歩数や速度などを独立して
保持できるようにしました。
小さい字ですがそれぞれ個別に表示されています。

動作テストやデバッグで、かなり走った(あしぶみした)気がします。
同時につけていた万歩計は今日 2万歩。

バランスWiiボード をPCで使う wiibalance v0.06

ルームランナー機能を追加してみました。
WiiFit のバランスボード上で足踏みすると歩数をカウントします。

wiibalance v0.06

カーソルキー左右で歩幅を設定しておけば

 ○歩数
 ○速度 (km/h)
 ○ペース (time/km)
 ○距離

の表示が可能です。

BMI 表示にも対応しました。あらかじめ身長の設定が必要です。
身長の設定はカーソルキー上下で行います。

ダウンロード
wiibalance v0.06 バランスWiiボードを使った PC版体重計

あくまで足踏みなので バランスWiiボード の制限とか注意事項を
良く読んで、安全に使ってください。

※キャプチャ画像の身長体重は架空のものです

追記 (2020/09/30): GitHub: WBHealthMeter

関連エントリ
PCでバランスWiiボードの体重計

参考ページ
Wikipedia BMI

VisualStudio 2008 コンパイル速度の比較

Quad の PC が一瞬だけ空いたので比較してみました。
最初 10分かかっていたコンパイルが
わずか 1分に

・Pentium4 3.6GHz×2 RAM 2GB
10'25 (セキュリティソフトあり)
05'30 (/MP4 セキュリティソフトあり)
05'40 (セキュリティソフト無し)
02'30 (/MP4 セキュリティソフト無し)

・Core2 Duo 2.4GHz RAM 4GB
01'50 (/MP4 セキュリティソフト無し)

・Core2 Quad 2.4GHz RAM 8GB
01'04 (/MP6 セキュリティソフト無し)

関連エントリ
Visual Studio 2008 IDE で MP を使う
Visual Studio 2008 MP オプション実験
Visual Studio 2008
コンパイル速度の実験

バランスWiiボードの解析メモ 5

センサーの順番を間違えていました。

 左上, 右上, 左下, 右下

と書いていましたが、正しくは

 左上, 左下, 右上, 右下

の順番でした。訂正します。記事も修正しました。

体重計ソフトの表示を安定させて数値を読みやすくしてみました。

wiibalance v0.05 バランスWiiボードを使った PC版体重計

○その他の変更点
・前後左右のバランス表示の追加

・体重計によるマウス機能の挙動を改良、加速つき。
 Wiiリモコン を併用してマウスクリックもできます。

・体重表示の数値だけ消せるようにしました。[H]キー。
 人前でマウス操作だけ試したい場合などにも使えます。