##### Shinobi Library - 構造体/その他のデータ型

# PDS_PERIPHERAL

コントローラデバイスの状態構造体

### 定義

>     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() | ペリフェラルデータの取得(低レイテンシ用)

PDS_PERIPHERAL

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000