2006年06月09日

SRB_ExecSCSICmd


最も多用するASPIコマンドが、MMCコマンドパケットを送信する
SRB_ExecSCSICmd です。
その構造体は、次のとおりです。

typedef struct SRB_ExecSCSICmd
{
BYTE SRB_Cmd; // (入力)コマンドコード = SC_EXEC_SCSI_CMD = 0x02
BYTE SRB_Status;
BYTE SRB_Ha; // (入力)ホストアダプタ番号
BYTE SRB_Flags; // (入力)データの入出力方向、SRB_PostProcの種類
DWORD Reserved1;
BYTE SRB_Tgt; // (入力)ターゲット番号
BYTE SRB_Lun; // (入力)論理ユニット番号
WORD Reserved2;
DWORD SRB_BufLen; // (入力)バッファの大きさ
BYTE *SRB_BufPointer; // (入力)バッファへのポインタ
// (コマンドによって、バッファ内のデータが入出力されます。)
BYTE SRB_SenseLen; // (入力)エラーコードの長さ = 14
BYTE SRB_CDBLen; // (入力)コマンドの長さ
BYTE SRB_HaStat;
BYTE SRB_TgtStat;
VOID *SRB_PostProc; //イベントハンドルなど
// (コマンドの処理は、大抵時間がかかるので、
// OSやアプリケーションとの通信のためにあります。)
BYTE Reserved3[20];
BYTE CDBByte[16]; // (入力)コマンドの内容
BYTE SenseArea[32+2]; // (出力)エラーコード
} SRB_ExecSCSICmd;

フラグ SRB_Flags は、以下の値をORで組み合わせます。
SRB_POSTING 0x01 ASPIコマンド実行終了検知に、
コールバック関数を使います
SRB_ENABLE_RESIDUAL_COUNT 0x04 転送経過モニタ機能を有効にします。
SRB_DIR_IN 0x08 CDのデータを読むときなど、
ターゲットからデータを受け取る場合に指定します
SRB_DIR_OUT 0x10 CD-Rに書き込むときなど、
ターゲットにデータを送る場合に指定します
SRB_EVENT_NOTIFY 0x40 ASPIコマンド実行終了検知に、
イベントカーネルオブジェクトを使用します。

CDから読み取ったデータや、CD-Rに書き込むデータは、
SRB_BufPointer で指定した先のバッファに保存されたり、
用意しておいたりします。
そのデータの並び方もまた、コマンドによって異なります。

CDBByte に、MMCの個々のコマンドを入力します。
これからは、延々とそれらのコマンドについて、
だらだらと書いてゆければと思います。

まあ、大雑把に言って、
ドライブの指定 SRB_Ha, SRB_Tgt, SRB_Lun
コマンドの内容 CDBByte, SRB_CDBLen
コマンドで使用するバッファ SRB_BufPointer, SRB_BufLen
同期、終了処置関系 SRB_PostProc
エラー関係 SenseArea
その他のフラグ SRB_Flags
と考えれば、SPTIとかでも通用すると思います。


posted by 七癖 at 17:07| Comment(0) | TrackBack(0) | Multimedia Commands | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。