JOY(4)

名称
joy - ジョイスティックのデバイスドライバ

書式
device joy0 at isa? port IO_GAME #include <machine/joystick.h>

解説
ジョイスティックデバイスドライバは、アプリケーションが PC ジョイスティック の状態を読み出せるようにします。

ある時点でこのデバイスをオープンできるプロセスは 1 つだけです。

ジョイスティックの状態は、read() システムコールによって、 joystick 構造体に入れられます。 この構造体はヘッダファイルで次のように定義されています。

    	struct joystick {
    		int x;         /* x 位置 */
    		int y;         /* y 位置 */
    		int b1;	       /* ボタン 1 の状態 */
    		int b2;	       /* ボタン 2 の状態 */
    	};

位置は一般に 0-2000 の値をとります。

  perl の 1 行実行例:
perl -e 'open(JOY,"/dev/joy0")||die;while(1)
{sysread(JOY,$x,16);@j=unpack("iiii",$x);print "@j\n";sleep(1);}'

  ioctl 呼び出し
いくつかの ioctl() 呼び出しも利用できます。 これらは int * 型の引数を 1 つ取ります。

JOY_SETTIMEOUT int *limit
    ジョイスティックの状態を読み出す際の時間制限 (マイクロ秒単位) を設定します。 あまり小さな値を設定すると正しい位置の値を得ることができなくなります (その場合は -2147483648 になります) が、 それでもボタンの状態だけに注目している場合には役に立つかもしれません。

JOY_GETTIMEOUT int *limit
    ジョイスティックの状態を読み出す際の時間制限 (マイクロ秒単位) を得ます。

JOY_SET_X_OFFSET int *offset
    ジョイスティックの状態を読み出す際に X 位置に加算する値を設定します。

JOY_SET_Y_OFFSET int *offset
    ジョイスティックの状態を読み出す際に Y 位置に加算する値を設定します。

JOY_GET_X_OFFSET int *offset
    ジョイスティックの状態を読み出す際に X 位置に加算する値を得ます。

JOY_GET_Y_OFFSET int *offset
    ジョイスティックの状態を読み出す際に Y 位置に加算する値を得ます。

技術的仕様
DB-15 コネクタのピン配置は次の通りです:

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.

分圧器は通常 0-150k (まれに 0-100k) の可変抵抗で、 IBM の技術文書によれば、時間は次の式で表されます: Time = 24.2e-6s + 0.011e-6s * R/Ohms

関連ファイル

/dev/joy?
    ジョイスティックのデバイスファイル

作者
Jean-Marc Zucconi <jmz@cabri.obs-besancon.fr>

歴史
joystick ドライバは FreeBSD 2.0.5 に初めて登場しました。