# Shinobi Library

1998/11/1

# 振動ペリフェラル制御関数評価版

## 0. 概要

> 本ライブラリ関数を適切に使用することにより、コントローラに接続されるさまざまな振動デバイスに対応することが可能です。
> 振動デバイスは、連続振動させる場合に、指定時間で自動停止する機能があります。デバイスの初期状態では、この時間は約５秒となっています。
> また、各デバイスには最大で15までの振動源(ユニット)を持つことが可能で、その個々の振動源が固有の特性(振動方向、振動強度の変更、振動周波数範囲、任意振動波形の設定など)を持ち、これらの振動源を個別にコントロールすることが可能ですが、現在発売予定に上がっている「ぷるぷるパック(仮)」は
>   振動源数：1
>   振動周波数範囲：15〜79(予定)
>   振動強度の変更：可能(-7〜7)
>   連続振動：可能
>   任意振動波形：不可
> となっています。
> 「ぷるぷるパック(仮)」のみに対応するのであれば、より簡単な関数インターフェイスが用意されています。
> 「ぷるぷるパック(仮)」については現在(1998/10/30)、ハードウェアの微調整等がなされている最中であり、今後ハードウェアの仕様変更に伴い、関数APIなどの一部が変更される可能性があります。
> したがって、本SDKにおける本関数インターフェイスの公開はあくまで参考レベルのものであるとお考え下さい。
> また、先述のような理由により、「ぷるぷるパック(仮)」のハードウェア本体をお貸し出来る状態ではないことも、合わせてご了承ください。

## 1.データ型

### 1.1構造体

PDS_VIBPARAM構造体

定義

      typedef struct {
        Uint8 unit;
        Uint8 flag;
        Sint8 power;
        Uint8 freq;
        Uint8 inc;
        Uint8 reserved[3];
      } PDS_VIBPARAM;

説明
  振動デバイスへの振動パラメータを格納する構造体です
メンバ

  unit | 振動パラメータを送るユニット番号
  flag | 振動フラグ
  power | 振動強度
  freq | 振動周波数
  inc | 振動勾配周期
  reserved | 予約

参照
  pdVibMxStart()

PDS_VIBINFO構造体

定義

      typedef struct {
        Uint8 units;
        Uint8 se_units;
      } PDS_VIBINFO;

説明
  振動デバイスの情報を格納する構造体です。
メンバ

  units | ユニット数
  se_units | 同時に振動設定の可能なユニット数

参照
  pdVibGetInfo()、PDS_VIBUNITINFO

PDS_VIBUNITINFO構造体

定義

      typedef struct {
        Uint8 position;
        Uint8 axis;
        Uint8 pow_enable;
        Uint8 cont_enable;
        Uint8 dir_enable;
        Uint8 wave_enable;
        Uint8 min_freq;
        Uint8 max_freq;
      } PDS_VIBUNITINFO;

説明
  振動ユニットの情報を格納する構造体です
メンバ

  position | 振動ユニットの位置
  axis | 振動軸
  pow_enable | 強度が可変かどうか
  cont_enable | 連続振動が可能かどうか
  dir_enable | 方向指定が可能かどうか
  wave_enable | 任意波形設定が可能かどうか
  min_freq | 最小振動周波数
  max_freq | 最大振動周波数

参照
  pdVibEnumerateUnit()、PD_VIBENUMUNITCALLBACK

## 2. 関数リファレンス

### 2.1 関数一覧

関数 | 機能
--- | ---
pdVibMxIsReady＜新規＞ | ぷるぷるパック(仮)がつながっているかを調べる
pdVibMxStart＜新規＞ | ぷるぷるパック(仮)を振動させる
pdVibMxStop＜新規＞ | ぷるぷるパック(仮)の振動を止める
pdVibMxSetStopTime＜新規＞ | ぷるぷるパック(仮)の振動時間を設定する
pdVibIsReady＜新規＞ | 振動デバイスがつながっているかを調べる
pdVibGetDirection＜新規＞ | 振動デバイスの接続方向を取得する
pdVibGetInfo＜新規＞ | 振動デバイスの情報を取得する
pdVibEnumerateUnit＜新規＞ | 振動デバイスのユニット情報を取得する
pdVibStart＜新規＞ | 振動デバイスを振動させる
pdVibSetStopTime＜新規＞ | 振動デバイスの振動時間を変更する

### 2.2 関数API

## pdVibMxIsReady

［書式］
  Sint32 pdVibMxIsReady(Uint32 port)
［入力］
  port
    ポート番号(PDD_PORT_A1/A2/B1/B2/C1/C2/D1/D2)
［出力］
  なし
［戻り値］
  TRUE
    ぷるぷるパック(仮)が接続されている
  FALSE
    ぷるぷるパック(仮)が接続されていない
［機能］
  ぷるぷるパック(仮)が接続されているかどうかを調べます
［備考］
  本バージョンでは、振動デバイスが接続されていればTRUEを返します。
［用例］

      if (pdVibMxIsReady(PDD_PORT_A2)) return TRUE;

［参照］

## pdVibMxStart

［書式］
  Sint32 pdVibMxStart(Uint32 port, const PDS_VIBPARAM* param)
［入力］
  port
    ポート番号(PDD_PORT_A1/A2/B1/B2/C1/C2/D1/D2)
  param
    振動パラメータ構造体のアドレス
［出力］
  なし
［戻り値］
  PDD_VIBERR_OK
    正常終了
  PDD_VIBERR_NO_VIBRATOR
    ぷるぷるパック(仮)は接続されていない
  PDD_VIBERR_BUSY
    ぷるぷるパック(仮)はBUSY状態
［機能］
  ぷるぷるパック(仮)に、振動を開始させます。
［備考］
［用例］

      PDS_VIBPARAM param;
      param.unit = 1;
      param.flag = PDD_VIB_FLAG_CONTINUOUS;
      param.power = -7;
      param.freq = 15;
      param.inc = 0;

      if (pdVibMxStart(PDD_PORT_A2, ¶m) == PDD_VIBERR_OK) {
        /* 成功 */
      }

［参照］
  PDS_VIBPARAM

## pdVibMxStop

［書式］
  Sint32 pdVibMxStop(Uint32 port)
［入力］
  port
    ポート番号(PDD_PORT_A1/A2/B1/B2/C1/C2/D1/D2)
［出力］
  なし
［戻り値］
  PDD_VIBERR_OK
    正常終了
  PDD_VIBERR_NO_VIBRATOR
    ぷるぷるパック(仮)は接続されていない
  PDD_VIBERR_BUSY
    ぷるぷるパック(仮)はBUSY状態
［機能］
  ぷるぷるパック(仮)に、振動を停止させます。
［備考］
［用例］

      if (pdVibMxStop(PDD_PORT_A2) == PDD_VIBERR_OK) {
        /* 成功 */
      }

［参照］
  pdVibMxStart()

## pdVibMxSetStopTime

［書式］
  Sint32 pdVibMxSetStopTime(Uint32 port, Uint32 time)
［入力］
  port
    ポート番号(PDD_PORT_A1/A2/B1/B2/C1/C2/D1/D2)
  time
    自動停止時間：00H〜FFH(1H当たり約0.25秒)
［出力］
  なし
［戻り値］
  ぷるぷるパック(仮)の振動自動停止時間を設定します。
  PDD_VIBERR_OK
    正常終了
  PDD_VIBERR_NO_VIBRATOR
    ぷるぷるパック(仮)は接続されていない
  PDD_VIBERR_BUSY
    ぷるぷるパック(仮)はBUSY状態
［機能］
［備考］
［用例］

      if (pdVibMxSetStopTime(PDD_PORT_A2, 0x10) == PDD_VIBERR_OK) {
        /* 成功 */
      }

［参照］

## pdVibIsReady

［書式］
  pdVibIsReady(Uint32 port)
［入力］
  port
    ポート番号(PDD_PORT_A1/A2/B1/B2/C1/C2/D1/D2)
［出力］
  なし
［戻り値］
  TRUE
    振動デバイスが接続されている
  FALSE
    振動デバイスが接続されていない
［機能］
  振動デバイスが接続されているかどうかを調べます
［備考］
［用例］

      if (pdVibIsReady(PDD_PORT_A2)) return TRUE;

［参照］

## pdVibGetDirection

［書式］
  Sint32 pdVibGetDirection(Uint32 port)
［入力］
  port
    ポート番号(PDD_PORT_A1/A2/B1/B2/C1/C2/D1/D2)
［出力］
  なし
［戻り値］
  PDD_VIB_DIRECTION_NORMAL
    通常
  PDD_VIB_DIRECTION_FLIP
    逆さま
  PDD_VIB_DIRECTION_LEFT
    左向き
  PDD_VIB_DIRECTION_RIGHT
    右向き
［機能］
  振動デバイスの接続されている向きを取得します。
［備考］
  接続されている向きにより、振動軸そのものの向きが変化します。
［用例］
［参照］
  なし

## pdVibGetInfo

［書式］
  Sint32 pdVibGetInfo(Uint32 port, PDS_VIBINFO* vibinfo)
［入力］
  port
    ポート番号(PDD_PORT_A1/A2/B1/B2/C1/C2/D1/D2)
  vibinfo
    振動デバイス情報を格納するアドレス
［出力］
  なし
［戻り値］
  PDD_VIBERR_OK
    正常終了
  PDD_VIBERR_NO_VIBRATOR
    振動デバイスは接続されていない
［機能］
  振動デバイスの情報を取得します。
［備考］
  なし
［用例］

      PDD_VIBINFO info;
      if (pdVibGetInfo(PDD_PORT_A2, &info) == PDD_VIBERR_OK) {
        /* 成功 */
      }

［参照］
  pdVibEnumerateUnit()、PDS_VIBINFO、PDS_VIBUNITINFO

## pdVibEnumerateUnit

［書式］
  Sint32 pdVibEnumerateUnit(Sint32 port, PD_VIBENUMUNITCALLBACK func, Uint32 param)
［入力］
  port
    ポート番号(PDD_PORT_A1/A2/B1/B2/C1/C2/D1/D2)
  func
    コールバック関数アドレス
  param
    コールバック関数パラメータ
［出力］
［戻り値］
  PDD_VIBERR_OK
    正常終了
  PDD_VIBERR_NO_VIBRATOR
    振動デバイスは接続されていない
［機能］
  振動デバイスの持つユニットの情報をすべて取得します。
［備考］
［用例］

      Sint32 enumfunc(Uint32 unit, Sint32 stat, const PDS_VIBUNITINFO* info, Uint32 param)
      {
        return PDD_VIBRET_OK;
      }
      ------
      if (pdVibEnumerateUnit(PDD_PORT_A2, enumfunc, 0) == PDD_VIBERR_OK) {
        /* 成功 */
      }

［参照］
  pdVibGetInfo()、PD_VIBENUMUNITCALLBACK、PDS_VIBINFO、PDS_VIBUNITINFO

## PD_VIBENUMUNITCALLBACK

［書式］
  typedef Sint32 (*PD_VIBENUMUNITCALLBACK)(Uint32 unit, Sint32 stat, const PDS_VIBUNITINFO* info, Uint32 param)
［入力］
  unit
    情報を取得したユニット番号
  stat
    コールバックステータス
    PDD_VIBERR_OK
      成功
    PDD_VIBERR_NO_VIBRATOR
      振動デバイスは接続されていない
  info
    ユニット情報を格納したアドレス
  param
    コールバックパラメータ
［出力］
  なし
［戻り値］
  PDD_VIBRET_OKを返してください。
［機能］
  pdVibEnumerateUnit()関数を使用した際に、１ユニットの情報取得完了毎に呼び出されます。
  振動デバイスの持つユニット数と同じ回数コールバックが発生します。
  ユニット情報の取得に成功した場合、コールバックステータスはPDD_VIBERR_OKとなります。
  途中で振動デバイスが取り外された場合、コールバックステータスはPDD_VIBERR_NO_VIBRATORとなります。それ以降コールバックは発生しません。
［備考］
［用例］

      Sint32 enumfunc(Uint32 unit, Sint32 stat, const PDS_VIBUNITINFO* info, Uint32 param) {
        if (stat == PDD_VIBERR_OK) {
        printf("ユニット%dの情報\n" unit);
                        :
        }
        return PDD_VIBRET_OK;
      }

［参照］
  pdVibEnumerateUnit()、PDS_VIBUNITINFO

## pdVibStart

［書式］
  Sint32 pdVibStart(Uint32 port, const PDS_VIBPARAM* param, Uint32 num)
［入力］
  port
    ポート番号(PDD_PORT_A1/A2/B1/B2/C1/C2/D1/D2)
  param
    振動パラメータ構造体配列のアドレス
  num
    ユニット数
［出力］
［戻り値］
  PDD_VIBERR_OK
    正常終了
  PDD_VIBERR_NO_VIBRATOR
    振動デバイスは接続されていない
  PDD_VIBERR_BUSY
    振動デバイスはBUSY状態
［機能］
  振動デバイスに、振動を開始させます。
［備考］
［用例］

      PDS_VIBPARAM param;

      param.unit = 1;
      param.flag = PDD_VIB_FLAG_CONTINUOUS;
      param.power = -7;
      param.freq = 15;
      param.inc = 0;

      if (pdVibMxStart(PDD_PORT_A2, ¶m) == PDD_VIBERR_OK) {
        /* 成功 */
      }

［参照］
  PDS_VIBPARAM

## pdVibSetStopTime

［書式］
  Sint32 pdVibSetStopTime(Uint32 port, Uint8* unit, Uint8* time, Uint32 num)
［入力］
  port
    ポート番号(PDD_PORT_A1/A2/B1/B2/C1/C2/D1/D2)
  unit
    ユニット番号を格納した配列
  time
    自動停止時間を格納した配列
  num
    ユニット数
［出力］
  なし
［戻り値］
  PDD_VIBERR_OK
    正常終了
  PDD_VIBERR_NO_VIBRATOR
    振動デバイスは接続されていない
    振動デバイスはBUSY状態
［機能］
  振動デバイスの振動自動停止時間を設定します。
［備考］
［用例］

      Uint8 units[] = {1, 3, 5};
      Uint8 times[] = {10, 20, 30};
      if (pdVibSetStopTime(PDD_PORT_A2, units, times, 3) == PDD_VIBERR_OK) {
        /* 成功 */
      }

［参照］

オーバービューに戻る
TOPに戻る