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 에 처음으로 등장했습니다.