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_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 | 予約 |
メンバ 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 | デバイス自体が持つ製品名 |