Shinobi Library

1998/11/1


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

0. 概要

本ライブラリ関数を適切に使用することにより、コントローラに接続されるさまざまな振動デバイスに対応することが可能です。
振動デバイスは、連続振動させる場合に、指定時間で自動停止する機能があります。デバイスの初期状態では、この時間は約5秒となっています。
また、各デバイスには最大で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_VIBINFOPDS_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_VIBENUMUNITCALLBACKPDS_VIBINFOPDS_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()関数を使用した際に、1ユニットの情報取得完了毎に呼び出されます。
振動デバイスの持つユニット数と同じ回数コールバックが発生します。
ユニット情報の取得に成功した場合、コールバックステータスは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に戻る