.\" .\" %Id: joy.4,v 1.9 1998/03/12 07:30:33 charnier Exp % .\" $FreeBSD$ .\" .\" WORD: potentiometer 分圧器 .\" .Dd January 23, 1995 .Dt JOY 4 i386 .Sh 名称 .Nm joy .Nd ジョイスティックのデバイスドライバ .Sh 書式 .Cd device joy0 at isa? port "IO_GAME" .Fd #include .Sh 解説 ジョイスティックデバイスドライバは、アプリケーションが PC ジョイスティック の状態を読み出せるようにします。 .Pp ある時点でこのデバイスをオープンできるプロセスは 1 つだけです。 .Pp ジョイスティックの状態は、read() システムコールによって、 joystick 構造体に入れられます。 この構造体はヘッダファイルで次のように定義されています。 .Pp .Bd -literal -offset indent struct joystick { int x; /* x 位置 */ int y; /* y 位置 */ int b1; /* ボタン 1 の状態 */ int b2; /* ボタン 2 の状態 */ }; .Ed .Pp 位置は一般に 0-2000 の値をとります。 .Ss perl の 1 行実行例: perl -e 'open(JOY,"/dev/joy0")||die;while(1) .br {sysread(JOY,$x,16);@j=unpack("iiii",$x);print "@j\\n";sleep(1);}' .Ss ioctl 呼び出し いくつかの ioctl() 呼び出しも利用できます。 これらは int * 型の引数を 1 つ取ります。 .Bl -tag -width JOY_SET_X_OFFSET .It Dv JOY_SETTIMEOUT Fa int *limit ジョイスティックの状態を読み出す際の時間制限 (マイクロ秒単位) を設定します。 あまり小さな値を設定すると正しい位置の値を得ることができなくなります (その場合は -2147483648 になります) が、 それでもボタンの状態だけに注目している場合には役に立つかもしれません。 .It Dv JOY_GETTIMEOUT Fa int *limit ジョイスティックの状態を読み出す際の時間制限 (マイクロ秒単位) を得ます。 .It Dv JOY_SET_X_OFFSET Fa int *offset ジョイスティックの状態を読み出す際に X 位置に加算する値を設定します。 .It Dv JOY_SET_Y_OFFSET Fa int *offset ジョイスティックの状態を読み出す際に Y 位置に加算する値を設定します。 .It Dv JOY_GET_X_OFFSET Fa int *offset ジョイスティックの状態を読み出す際に X 位置に加算する値を得ます。 .It Dv JOY_GET_Y_OFFSET Fa int *offset ジョイスティックの状態を読み出す際に Y 位置に加算する値を得ます。 .Sh 技術的仕様 DB-15 コネクタのピン配置は次の通りです: .Pp 1 XY1 (+5v) 2 スイッチ 1 3 X1 (分圧器 #1) 4 スイッチ 1 (GND) 5 スイッチ 2 (GND) 6 Y1 (分圧器 #2) 7 スイッチ 2 8 N.C. 9 XY2 (+5v) 10 スイッチ 4 11 X2 (分圧器 #3) 12 スイッチ 3&4 (GND) 13 Y2 (分圧器 #4) 14 スイッチ 3 15 N.C. .Pp 分圧器は通常 0-150k (まれに 0-100k) の可変抵抗で、 IBM の技術文書によれば、時間は次の式で表されます: Time = 24.2e-6s + 0.011e-6s * R/Ohms .Sh 関連ファイル .Bl -tag -width /dev/joy? .It Pa /dev/joy? ジョイスティックのデバイスファイル .Sh 作者 .An Jean-Marc Zucconi Aq jmz@cabri.obs-besancon.fr .Sh 歴史 joystick ドライバは .Fx 2.0.5 に初めて登場しました。