月別アーカイブ: 2009年3月

DirectX SDK March 2009

2009年初の新しい SDK です。

DirectX SDK (March 2009)

大きなトピックは Direct2D/DirectWrite の Technical Preview が含まれたこと。
Windows7 beta + Windows7 SDK beta でないと試すことが出来なかった
Direct2D / DirectWrite が Vista でも使えるようになりました。
ドキュメント類は以前から MSDN に上がっているのでそちらを参照することになります。
インストールによって d2d1_beta.dll, dwrite_beta.dll が入りました。

これでおそらく D2D/DWrite だけなら Windows7 SDK が無くてもテストできると思います。
ヘッダ類もこちらの方が新しいようです。コメントが増えて新しい定義もあります。

その他 DXGI1.1 も入りました。元々ヘッダは含まれてましたが、dxgi_beta.dll / lib が
追加されてドキュメントも統合されたようです。

Direct3D11 TechPreview の方はあまり大きな変化があったようには見えませんが、
細かく変更が入っています。
たとえばヘッダには CD3D11_RECT, CD3D11_DEPTH_STENCIL_DESC,
CD3D11_BLEND_DESC 等のヘルパークラスが多数追加されているようです。
Direct2D と同じようにデフォルト値による初期化がサポートされています。
デフォルト値を示すオーバーロード用の type は CD3D11_DEFAULT です。

マニュアルでは Shader Model 5 の Attributes に attrib, maxtessfactor,
earlydepthstencil が追加。Intrinsic Functions には
countbits, EvaluateAttributeAtControid, EvaluateAttributeAtSample
が増えています。
またヘッダを見ないと使い方が分からなかった D3DCompiler のマニュアルも入りました。

Shader の項目には Reflection 関連のインターフェースが追加されています。
このあたりヘッダを見てもかなり手が入っていることが分かります。
まだ Effect (fx) はありませんが進展は見られます。

その他マニュアルには載ってませんが D3D11_CREATE_DEVICE_BGRA_SUPPORT
も目新しいところです。

関連エントリ
Direct2D (7) Tessellate の 2
Direct2D と Direct3D10.1 の下位互換
Windows7 リモートデスクトップと Direct3D
Direct3D11/DirectX11 (18) GPU を使ったアウトラインフォントの描画の(6)
Direct3D11 Technical Preview D3D11の互換性、WARP Driver

SSD OCZ Vertex

先週末、運良く店頭で入手できたので OS を入れ替えて一週間ほど使いました。

・OCZSSD2-1VTX60G

60GB の 2.5inch SSD です。22800円
RAM 8GB + Win7 beta x64 なので、ページングファイル無しにして休止状態ファイル
クリーナーで消して OS のみ 10GB くらい。

特に速度を実感できるのはソフトウエアのインストールで、残り時間が正確に
表示されないくらい。Windows の起動や終了も速いし、重いアプリケーションの
立ち上げも違いが分かるほどに短縮しています。

プログラミング作業はどうかというと、元々そんなに編集もコンパイル時間も
困ってなかったのであんまり速い感じはしていません。
その代わり作業中、非常に静かなのが心地よいです。

ファンの一定の音はありますが不定期に鳴り出す音が消えました。
ファイルに書き込んでるな、とか裏で何か動き出したな、とか無いので結構違います。
HDD が寝ていて、いざアクセスしようとしたらスピンアップ待ちで起動まで待たされる
こともないわけです。動作中の配置換えなんかも気にせず出来そう。

プロセッサは年々速くなっていくのでストレージとの速度差は離れる一方でしたが
ここに来て急に差が縮まり出したようです。
OS やアプリケーションも HDD のシークが遅いという前提で作られていますが、
そのうち全く気にしなくても良くなるかもしれません。
ファイルアクセスを速くするためのいくつかの工夫も、きっと古い技術となって
忘れていくのでしょう。

机の奥から古いレシートが出てきました。
1999年7月9日に 13GB の HDD を 21480円で買ってました。

タカラトミー Q-TRAIN 赤外線コマンドの 解析

PC-OP-RS1 (KURO-RS) を使って ROBO-Q と同じように調べてみました。
Q-TRAIN のコントローラの赤外線信号です。

TAKARA TOMY Q-TRAIN

●コマンドフォーマット

コマンドは 8bit 分
下記の順番で送信されています

先頭
  C C A 0 R L B F


 CC = BAND A~D (00,01,10,11)
 A = 自動移動の指定かどうか (左サイドのスイッチが on なら 1)
 0 = 常にゼロ
 R = 右ボタン (→)
 L = 左ボタン (←)
 B = 後退ボタン (↓)
 F = 前進ボタン (↑)

R L B F の各ボタンは同時押しが出来ます。
例えば前進+右旋回だと F + R が同時に ON になります。


コマンド組み合わせの例

BAND A 前進	00000001
BAND B 前進	01000001
BAND C 前進	10000001
BAND D 前進	11000001

BAND A 前進自動	00100001
BAND A 後退	00000010
BAND A 左	00000100
BAND A 右	00001000
BAND A 前進+左	00000101

●コマンドエンコード

ヘッダや 1bit 分の波形も長く取られており ROBO-Q とは異なっています。

ヘッダ常に H 6.3msec

bit
 0 = L 0.5msec + H 1.7msec
 1 = L 1.5msec + H 0.7msec

エンコードされた bit データは ROBO-Q と違い、0 でも 1 でも同じ長さになります。
よって 1コマンドはだいたい 23.9msec


例 BAND D 前進 + 左 で受け取った波形 (0.1msec 単位のサンプリング)

// ヘッダ
11111111111111111111111111111111111111111111111111111111111111
// 1
000000000000000 1111111
// 1
000000000000000 111111
// 0
00000 11111111111111111
// 0
00000 11111111111111111
// 0
00000 11111111111111111
// 1 (左ボタン)
000000000000000 1111111
// 0
00000 11111111111111111
// 1 (前進ボタン)
0000000000000000 111111

使用したツールは ROBO-Q 同様「スーの道具箱/分解してみよう/PC-OP-RS1」の
IrReceiver です。

関連エントリ
タカラトミー ROBO-Q (3) PC から操作する実験
タカラトミー ROBO-Q (2) 赤外線コマンドの解析
タカラトミー ROBO-Q

Windows7 とマルチタッチ / HP TouchSmart PC IQ800

Windows7 beta でも下記のハードでタッチ操作を試すことが出来るそうです。

 ・Windows 7で”マルチタッチ”を楽しむには? MSが利用方法やTIPSを紹介

HP TouchSmart PC IQ827jp に Windows7 beta を入れてみました。

 ・HP TouchSmart PC IQ800

IQ800 は液晶モニタ一体型のオールインワン PC で光学式のタッチパネルを搭載しています。
パネルに触れるぎりぎりの位置で反応するので、パネルに指を押しつける必要もなく
非常に軽い操作ができます。
iPhone 等の静電容量タイプと違うのは指でなくても反応すること。
つめでもいいしペンでも良いし、画面に近づく物は何でもタッチ扱いです。

付属するキーボードもマウスも最初からワイヤレスタイプで、無線LAN 11b/g/n も
Bluetooth も内蔵しています。ケーブルは電源のみ、AC アダプタは巨大だけど
すっきりとした見た目です。

キーボードも非常に薄く、ちょうど本体下の足の間に入ります。
タッチやマウスを使っていても邪魔になりません。

標準搭載の Vista だと、マルチタッチらしい操作ができたのは TouchSmart
画面のアイコン拡縮だけでした。

Windows7 beta x64 を install し、WindowsUpdate でタッチパネルドライバが
入ることを確認しました。でも予想外のところでトラブルが。
タッチは使えるものの GeForce 9600M GS のドライバが入らず Aero にできません。

Notebook 向け M 系は Windows7 ドライバがまだ無く Vista ドライバ 179.48 も
エラーが出ます。
「NVIDIA Setup プログラムは、現在のハードウエアと互換性のあるドライバを見つけることができませんでした」

アップグレードは出来るはずなので試しに Vista をクリーンインストールしても
Vista 向けドライバなのに同じエラーです。
その後 acryl さんに下記のページを教えてもらいました。

価格.com 『XPのインストール』のクチコミ掲示板

同じように LaptopVideo2Go から 182.06 Vista 64bit の inf を置き換えてインストール
したところうまくいきました。WDDM 1.0

CPU: 5.9
RAM: 5.9
AERO: 6.2
GAME: 5.2
HDD: 5.9

AC アダプタがついていたりモバイル向け GPU が入っていたりと比較的ノート PC に
近い構造です。画面の明るさ調整ボタンもモニタ側についておらず、ノートのように
キーボードで操作します。
Windows7 ではこれらのショートカットが使えなくなりましたが、
ちょうど type P + Windows7 用に作っていた backlightwin がそのまま動きました。

肝心のタッチは一応 2点まで取れています。
こんなに Windows の ペイント ソフトの稼働率が高いのは初めてです。

関連エントリ
VAIO type P Windows7 beta とバックライト調整など

タカラトミー ROBO-Q (3) PC から操作する実験

少々時間が無かったので昨日の解析結果が正しいかどうか確認するだけ。
BAND A/D の ROBO-Q も調達できたので 4バンド分の信号を確認できました。

実際にコマンド送信プログラムを作ってみます。
スーの道具箱/分解してみよう/PC-OP-RS1
のページを参考にさせていただきました。そのままです。

初期化

hPort= CreateFile(
		"COM4",
		GENERIC_WRITE|GENERIC_READ,
		FILE_SHARE_READ|FILE_SHARE_WRITE,
		NULL,
		OPEN_EXISTING,
		0,
		NULL
	);
if( hPort == INVALID_HANDLE_VALUE ){
	// ERROR
	return;
}
DCB	dcb;
dcb.DCBlength= sizeof(DCB);
dcb.BaudRate= CBR_115200;
dcb.fBinary= TRUE;
dcb.fParity= FALSE;
dcb.fOutxCtsFlow= FALSE;
dcb.fOutxDsrFlow= FALSE;
dcb.fDtrControl= DTR_CONTROL_DISABLE;
dcb.fDsrSensitivity= FALSE;
dcb.fTXContinueOnXoff= FALSE;
dcb.fOutX= FALSE;
dcb.fInX= FALSE;
dcb.fErrorChar= FALSE;
dcb.fNull= FALSE;
dcb.fRtsControl= RTS_CONTROL_DISABLE;
dcb.fAbortOnError= FALSE;
dcb.fDummy2= 0;
dcb.wReserved= 0;
dcb.XonLim= 0;
dcb.XoffLim= 0;
dcb.ByteSize= 8;
dcb.Parity= NOPARITY;
dcb.StopBits= ONESTOPBIT;
dcb.XonChar= 0;
dcb.XoffChar= 0;
dcb.ErrorChar= 0;
dcb.EofChar= 0;
dcb.EvtChar= 0;
dcb.wReserved1= 0;
SetCommState( hPort, &dcb );

送受信は WriteFile()/ReadFile() です。

PC-OP-RS1 用の送信データを組み立てます。
赤外線の On/Off 情報をビット列で指定。あくまで動作確認用なのでべたで。

int pushbit( char* ptr, int index, int flag, int length )
{
	if( flag ){
		for( int i= 0 ; i< length ; i++ ){
			int	byteoffset= index >> 3;
			int	bitoffset= index & 7;
			ptr[byteoffset] |=  (1<

データ送信

void SendIR( const char* command )
{
    iPort->Send( "t", 1 );
    iPort->Recv( rdata, 1 );	// 'Y'
    iPort->Send( "1", 1 );		// ch1
    iPort->Recv( rdata, 1 );	// 'Y'
    iPort->Send( command, 240 );
    iPort->Recv( rdata, 1 );	// 'E'
}

昨日のデータ通りです。すんなり動作しました。
PC で ROBO-Q を操作できます。

SendCommand( 1, 2, 0 ); // BAND B で中速(M)前進
SendCommand( 1, 1, 1 ); // BAND B で低速(L)右回転

でもデータ送信まで思ったより時間がかかるので、細かい制御をリアルタイムに
行うには少々厳しいです。要検討。

修正 2009/3/5 4:27 勘違いでした。十分な速度で操作できます。

きちんと使うなら 192ms 分複数のコマンドをパックして送る必要あります。

関連エントリ
タカラトミー ROBO-Q (2) 赤外線コマンドの解析
タカラトミー ROBO-Q