typedef struct { Uint32 id; Uint32 support; Uint32 on; Uint32 off; Uint32 press; Uint32 release; Uint16 r; Uint16 l; Sint16 x1; Sint16 y1; Sint16 x2; Sint16 y2; Sint8* name; void* extend; Uint32 old; PDS_PERIPHERALINFO *info; } PDS_PERIPHERAL;
id デバイスID support ボタン・トリガーなどのサポート状態 on デジタルボタン状態 off デジタルボタン状態(反転) press デジタルボタンダウンエッジ状態 release デジタルボタンアップエッジ状態 r Rトリガーの値(0〜255) l Lトリガーの値(0〜255) x1 アナログ方向キー1のX値(-128〜127) y1 アナログ方向キー1のY値(-128〜127) x2 アナログ方向キー2のX値(-128〜127) y2 アナログ方向キー2のY値(-128〜127) name デバイス名文字列へのポインタ extend 拡張データアドレス(未使用) old 予約 info ペリフェラル情報へのポインタ
コントローラデバイスの状態を格納する構造体です。メンバ supportは、以下のビットアサインになっています。 デバイスがビット指定位置定数のボタン・トリガーを保持している場合は1、そうでない場合は0が格納されています。
ビット位置指定用定数 ボタン・トリガーなど PDD_DEV_SUPPORT_KU 方向ボタンA上 PDD_DEV_SUPPORT_KD 方向ボタンA下 PDD_DEV_SUPPORT_KL 方向ボタンA左 PDD_DEV_SUPPORT_KR 方向ボタンA右 PDD_DEV_SUPPORT_KUB 方向ボタンB上 PDD_DEV_SUPPORT_KDB 方向ボタンB下 PDD_DEV_SUPPORT_KLB 方向ボタンB左 PDD_DEV_SUPPORT_KRB 方向ボタンB右 PDD_DEV_SUPPORT_ST スタートボタン PDD_DEV_SUPPORT_TA Aボタン PDD_DEV_SUPPORT_TB Bボタン PDD_DEV_SUPPORT_TC Cボタン PDD_DEV_SUPPORT_TD Dボタン PDD_DEV_SUPPORT_TX Xボタン PDD_DEV_SUPPORT_TY Yボタン PDD_DEV_SUPPORT_TZ Zボタン PDD_DEV_SUPPORT_AR Rトリガー PDD_DEV_SUPPORT_AL Lトリガー PDD_DEV_SUPPORT_AX1 アナログ方向キー1X PDD_DEV_SUPPORT_AY1 アナログ方向キー1Y PDD_DEV_SUPPORT_AX2 アナログ方向キー2X PDD_DEV_SUPPORT_AY2 アナログ方向キー2Y
メンバ on、off、press、releaseの4つのメンバには、デジタルボタンの情報が格納されています。
それぞれのメンバの各ビットにはボタンが割り振られています。 ボタンが押されていれば1、押されていなければ0となります(正論理)。 また、論理状態は初期化関数 pdInitPeripheral()の呼び出し時に負論理に設定することもできます。
以下は、各ビットを指定する定数とその意味です。
ビット位置指定定数 デジタルボタン PDD_DGT_KU 方向ボタンA上 PDD_DGT_KD 方向ボタンA下 PDD_DGT_KL 方向ボタンA左 PDD_DGT_KR 方向ボタンA右 PDD_DGT_KUB 方向ボタンB上 PDD_DGT_KDB 方向ボタンB下 PDD_DGT_KLB 方向ボタンB左 PDD_DGT_KRB 方向ボタンB右 PDD_DGT_ST スタートボタン PDD_DGT_TA Aボタン PDD_DGT_TB Bボタン PDD_DGT_TC Cボタン PDD_DGT_TD Dボタン PDD_DGT_TX Xボタン PDD_DGT_TY Yボタン PDD_DGT_TZ Zボタン PDD_DGT_TL Lボタン PDD_DGT_TR Rボタン
メンバ on は、ボタンが押されているとき(ボタンダウン)、対応するビットが1になります。 押されていないボタンのビットは0になります。
メンバ off は、onメンバをビット反転したものです。 ボタンが押されていないとき(ボタンアップ)、対応するビットが1になります。
メンバ press は、 ボタンが押されていない状態から押された状態に変化したとき(ボタンダウンエッジ)対応するビットが1になります。 そうでないビットは0になります。
メンバ release は、 ボタンが押されている状態から押されていない状態に変化したとき(ボタンアップエッジ)対応するビットが1になります。 そうでないビットは0になります。
負論理に設定した場合、button、on、off、press、releaseのすべてのビットは反転して格納されます。
デジタルLRボタン情報は、LRトリガー情報からソフトウェアで擬似的に生成しています。
LRトリガーをもたないデバイスの場合、ビットは変化しませんので注意してください。 デジタルLRボタンを物理的にもつデバイスはありません。
メンバ r、l、x1、y1、x2、y2には、アナログデータが格納されます。 これらのセンター位置の値は0です。
取得した構造体には、デバイスの種別を表すIDとその名称が格納されています。
Maple Bus仕様では取得できるデバイスIDは複雑なフォーマットになっているため、 アプリケーションが取り扱うには不向きです。
Shinobiライブラリではそれを簡略化し、以下のように定義します。
デバイス デバイスID(id) デバイス名称文字列(name) コントローラデバイス PDD_DEV_CONTROLLER デバイス自体がもつ製品名
コントローラデバイスでは、方向ボタンA、スタートボタン、Aボタン、Bボタンをもつことが必須となっているため、 これらのボタンのみを使用したアプリケーションを作成すれば高い互換性を持つことができます。
pdGetPeripheral() コントローラのボタン状態の取得 pdGetPeripheralDirect() ペリフェラルデータの取得(低レイテンシ用)