1998/11/1
本ライブラリ関数を適切に使用することにより、コントローラに接続されるさまざまな振動デバイスに対応することが可能です。
振動デバイスは、連続振動させる場合に、指定時間で自動停止する機能があります。デバイスの初期状態では、この時間は約5秒となっています。
また、各デバイスには最大で15までの振動源(ユニット)を持つことが可能で、その個々の振動源が固有の特性(振動方向、振動強度の変更、振動周波数範囲、任意振動波形の設定など)を持ち、これらの振動源を個別にコントロールすることが可能ですが、現在発売予定に上がっている「ぷるぷるパック(仮)」は
となっています。
- 振動源数:1
- 振動周波数範囲:15〜79(予定)
- 振動強度の変更:可能(-7〜7)
- 連続振動:可能
- 任意振動波形:不可
「ぷるぷるパック(仮)」のみに対応するのであれば、より簡単な関数インターフェイスが用意されています。
「ぷるぷるパック(仮)」については現在(1998/10/30)、ハードウェアの微調整等がなされている最中であり、今後ハードウェアの仕様変更に伴い、関数APIなどの一部が変更される可能性があります。
したがって、本SDKにおける本関数インターフェイスの公開はあくまで参考レベルのものであるとお考え下さい。
また、先述のような理由により、「ぷるぷるパック(仮)」のハードウェア本体をお貸し出来る状態ではないことも、合わせてご了承ください。
typedef struct { Uint8 unit; Uint8 flag; Sint8 power; Uint8 freq; Uint8 inc; Uint8 reserved[3]; } PDS_VIBPARAM;
unit | 振動パラメータを送るユニット番号 |
flag | 振動フラグ |
power | 振動強度 |
freq | 振動周波数 |
inc | 振動勾配周期 |
reserved | 予約 |
typedef struct { Uint8 units; Uint8 se_units; } PDS_VIBINFO;
units | ユニット数 |
se_units | 同時に振動設定の可能なユニット数 |
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 | 最大振動周波数 |
関数 | 機能 |
---|---|
pdVibMxIsReady<新規> | ぷるぷるパック(仮)がつながっているかを調べる |
pdVibMxStart<新規> | ぷるぷるパック(仮)を振動させる |
pdVibMxStop<新規> | ぷるぷるパック(仮)の振動を止める |
pdVibMxSetStopTime<新規> | ぷるぷるパック(仮)の振動時間を設定する |
pdVibIsReady<新規> | 振動デバイスがつながっているかを調べる |
pdVibGetDirection<新規> | 振動デバイスの接続方向を取得する |
pdVibGetInfo<新規> | 振動デバイスの情報を取得する |
pdVibEnumerateUnit<新規> | 振動デバイスのユニット情報を取得する |
pdVibStart<新規> | 振動デバイスを振動させる |
pdVibSetStopTime<新規> | 振動デバイスの振動時間を変更する |
if (pdVibMxIsReady(PDD_PORT_A2)) return TRUE;
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) { /* 成功 */ }
if (pdVibMxStop(PDD_PORT_A2) == PDD_VIBERR_OK) { /* 成功 */ }
if (pdVibMxSetStopTime(PDD_PORT_A2, 0x10) == PDD_VIBERR_OK) { /* 成功 */ }
if (pdVibIsReady(PDD_PORT_A2)) return TRUE;
PDD_VIBINFO info; if (pdVibGetInfo(PDD_PORT_A2, &info) == PDD_VIBERR_OK) { /* 成功 */ }
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) { /* 成功 */ }
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; }
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) { /* 成功 */ }
Uint8 units[] = {1, 3, 5}; Uint8 times[] = {10, 20, 30}; if (pdVibSetStopTime(PDD_PORT_A2, units, times, 3) == PDD_VIBERR_OK) { /* 成功 */ }