which has some variation of writing in Japanese, as well as some typos. Submitted by: kano@na.rim.or.jp Approved by: kuriyama (mentor/implicitly)
456 lines
12 KiB
Groff
456 lines
12 KiB
Groff
.\" Copyright (c) 1997
|
|
.\" John-Mark Gurney. All rights reserved.
|
|
.\"
|
|
.\" Redistribution and use in source and binary forms, with or without
|
|
.\" modification, are permitted provided that the following conditions
|
|
.\" are met:
|
|
.\" 1. Redistributions of source code must retain the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer.
|
|
.\" 2. Redistributions in binary form must reproduce the above copyright
|
|
.\" notice, this list of conditions and the following disclaimer in the
|
|
.\" documentation and/or other materials provided with the distribution.
|
|
.\" 3. Neither the name of the author nor the names of any co-contributors
|
|
.\" may be used to endorse or promote products derived from this software
|
|
.\" without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY John-Mark Gurney AND CONTRIBUTORS ``AS IS'' AND
|
|
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
.\" SUCH DAMAGE.
|
|
.\"
|
|
.\" %Id: sysmouse.4,v 1.7 1998/03/12 07:30:38 charnier Exp %
|
|
.\" $FreeBSD$
|
|
.\"
|
|
.\" word: movement (マウスの)動き[sysmouse.4]
|
|
.\"
|
|
.Dd December 3, 1997
|
|
.Dt SYSMOUSE 4 i386
|
|
.Os FreeBSD
|
|
.Sh 名称
|
|
.Nm sysmouse
|
|
.Nd 仮想化されたマウスドライバ
|
|
.Sh 書式
|
|
.Fd #include <machine/mouse.h>
|
|
.Fd #include <machine/console.h>
|
|
.Sh 解説
|
|
マウスデーモン
|
|
.Xr moused 8
|
|
と一緒に使うことにより、コンソールドライバは、
|
|
.Nm
|
|
ドライバを通して、ユーザプロセスに標準的な方法でマウスのデータを提供します。
|
|
このように整理することで、
|
|
.Po
|
|
.Tn X\ Window System
|
|
などのような
|
|
.Pc
|
|
ユーザプロセスとコンソールとでマウスを共有することができるようになります。
|
|
.Pp
|
|
ユーザプロセスがマウス機能を利用しようとする場合、単に
|
|
.Xr open 2
|
|
システムコールで
|
|
.Pa /dev/sysmouse
|
|
をオープンし、
|
|
.Xr read 2
|
|
システムコールを用いてマウスデータを読み込むだけでよいです。
|
|
ここで、確実に
|
|
.Xr moused 8
|
|
を実行しておいて下さい。さもないと、ユーザプロセスはマウスからデータを
|
|
一切受け取ることができないでしょう。
|
|
.Pp
|
|
.Ss 機能レベル
|
|
.Nm
|
|
ドライバには 2 つの機能レベルがあります。現在の機能レベルは ioctl
|
|
システムコールにより参照、変更することができます。
|
|
.Pp
|
|
レベル 0 は最も低いレベルで、基本的なレベルでもあります。このレベルでは、
|
|
ドライバは、ユーザプログラムに対して基本的なサービスを提供します。
|
|
.Nm
|
|
ドライバは、マウスの水平垂直の動きと、最大で 3 個までのボタンの状態を、
|
|
以下に示す
|
|
.Tn MouseSystems
|
|
形式で通知します。
|
|
.Pp
|
|
.Bl -tag -width Byte_1 -compact
|
|
.It Byte 1
|
|
.Bl -tag -width bit_7 -compact
|
|
.It bit 7
|
|
常に 1 です。
|
|
.It bit 6..3
|
|
常に 0 です。
|
|
.It bit 2
|
|
左ボタンの状態です。押し下げられている状態でビットクリア、そうでなければ
|
|
ビットセットです。
|
|
.It bit 1
|
|
中ボタンの状態です。押し下げられている状態でビットクリア、そうでなければ
|
|
ビットセット。中ボタンを持たない機器の場合は常に 1 です。
|
|
.It bit 0
|
|
右ボタンの状態です。押し下げられている状態でビットクリア、そうでなければ
|
|
ビットセットです。
|
|
.El
|
|
.It Byte 2
|
|
水平の動きのカウントを 2 の補数形式で表した値の先頭半分です。
|
|
-128 から 127 までの値。
|
|
.It Byte 3
|
|
垂直の動きのカウントを 2 の補数形式で表した値の先頭半分です。
|
|
-128 から 127 までの値。
|
|
.It Byte 4
|
|
水平の動きのカウントを 2 の補数形式で表した値の後ろ半分です。
|
|
-128 から 127 までの値。水平の動きのカウントを得るには、
|
|
byte 2 と byte 4 を足して下さい。
|
|
.It Byte 5
|
|
垂直の動きのカウントを 2 の補数形式で表した値の後ろ半分です。
|
|
-128 から 127 までの値。垂直の動きのカウントを得るには、
|
|
byte 3 と byte 5 を足して下さい。
|
|
.El
|
|
.Pp
|
|
レベル 1 は拡張レベルで、マウスのデータは
|
|
.Xr mouse 4
|
|
で定義された標準形式
|
|
.Dv MOUSE_PROTO_SYSMOUSE
|
|
でコード化されます。
|
|
.\" .Ss Acceleration
|
|
.\" The
|
|
.\" .Nm
|
|
.\" driver can somewhat `accelerate' the movement of the pointing device.
|
|
.\" The faster you move the device, the further the pointer
|
|
.\" travels on the screen.
|
|
.\" The driver has an internal variable which governs the effect of
|
|
.\" the acceleration. Its value can be modified via the driver flag
|
|
.\" or via an ioctl call.
|
|
.Sh IOCTL
|
|
この節では、2 種類の
|
|
.Xr ioctl 2
|
|
コマンドについて説明します。
|
|
1 つは、
|
|
.Nm
|
|
ドライバそれ自体に対するコマンドで、もう 1 つは、コンソールと
|
|
コンソール制御ドライバに対するコマンドです。
|
|
.Ss Sysmouse Ioctl
|
|
マウスドライバに対するコマンドがいくつかあります。このコマンド一般の説明は、
|
|
.Xr mouse 4
|
|
にあります。
|
|
以下では、
|
|
.Nm
|
|
ドライバ固有の機能を説明します。
|
|
.Pp
|
|
.Bl -tag -width MOUSE -compact
|
|
.It Dv MOUSE_GETLEVEL Ar int *level
|
|
.It Dv MOUSE_SETLEVEL Ar int *level
|
|
これらのコマンドは、マウスドライバの機能レベルを操作します。
|
|
.Pp
|
|
.It Dv MOUSE_GETHWINFO Ar mousehw_t *hw
|
|
以下の構造体で、接続された機器のハードウェア情報を返します。現在の
|
|
バージョンの
|
|
.Nm
|
|
ドライバでは、
|
|
.Dv iftype
|
|
フィールドだけが正しい値が詰まっていることが保証されています。
|
|
.Bd -literal
|
|
typedef struct mousehw {
|
|
int buttons; /* ボタンの数 */
|
|
int iftype; /* I/F タイプ */
|
|
int type; /* マウス/トラックボール/パッド... */
|
|
int model; /* I/F 依存のモデル ID */
|
|
int hwid; /* I/F 依存のハードウェア ID */
|
|
} mousehw_t;
|
|
.Ed
|
|
.Pp
|
|
.Dv buttons
|
|
フィールドには、ドライバが検出したボタンの数が保持されています。
|
|
.Pp
|
|
.Dv iftype
|
|
は常に
|
|
.Dv MOUSE_IF_SYSMOUSE
|
|
です。
|
|
.Pp
|
|
.Dv type
|
|
は機器の型:
|
|
.Dv MOUSE_MOUSE ,
|
|
.Dv MOUSE_TRACKBALL ,
|
|
.Dv MOUSE_STICK ,
|
|
.Dv MOUSE_PAD ,
|
|
.Dv MOUSE_UNKNOWN
|
|
を表します。
|
|
.Pp
|
|
.Dv model
|
|
は、機能レベル 0 では常に
|
|
.Dv MOUSE_MODEL_GENERIC
|
|
です。
|
|
これは、より高いレベルでは、
|
|
.Dv MOUSE_MODEL_GENERIC
|
|
または、
|
|
.Dv MOUSE_MODEL_XXX
|
|
のうちの 1 つになります。
|
|
.Pp
|
|
.Dv hwid
|
|
は常に 0 です。
|
|
.Pp
|
|
.It Dv MOUSE_GETMODE Ar mousemode_t *mode
|
|
このコマンドは、マウスドライバの現在の機能パラメータを返します。
|
|
.Bd -literal
|
|
typedef struct mousemode {
|
|
int protocol; /* MOUSE_PROTO_XXX */
|
|
int rate; /* 通知レート (秒単位) */
|
|
int resolution; /* MOUSE_RES_XXX, 不明の場合は -1 */
|
|
int accelfactor; /* 加速率 */
|
|
int level; /* ドライバの機能レベル */
|
|
int packetsize; /* データパケットの長さ */
|
|
unsigned char syncmask[2]; /* 同期ビット */
|
|
} mousemode_t;
|
|
.Ed
|
|
.Pp
|
|
.Dv protocol
|
|
フィールドは、ユーザプログラムがマウスデータを読みとる時に、
|
|
その機器の状態を返す形式を表します。
|
|
機能レベル 0 では、
|
|
.Dv MOUSE_PROTO_MSC
|
|
であり、機能レベル 1 では、
|
|
.Dv MOUSE_PROTO_SYSMOUSE
|
|
です。
|
|
.Pp
|
|
.Dv rate
|
|
フィールドは、常に -1 です。
|
|
.Pp
|
|
.Dv resolution
|
|
フィールドは、常に -1 です。
|
|
.Pp
|
|
.Dv accelfactor
|
|
フィールドは、常に 0 です。
|
|
.Pp
|
|
.Dv packetsize
|
|
フィールドは、データパケットの長さを表します。これは機能レベルに
|
|
よって変わります。
|
|
.Pp
|
|
.Bl -tag -width level_0__ -compact
|
|
.It Em レベル 0
|
|
5 バイト
|
|
.It Em レベル 1
|
|
8 バイト
|
|
.El
|
|
.Pp
|
|
配列
|
|
.Dv syncmask
|
|
は、データパケットの先頭バイトを検出するための、ビットマスクとパターンを
|
|
保持します。
|
|
.Dv syncmask[0]
|
|
はビットマスクで、調べるバイトと AND を取ります。この結果が
|
|
.Dv syncmask[1]
|
|
と等しい場合、そのバイトはデータパケットの先頭バイトらしいと言えます。
|
|
この方法で先頭バイトを検出するやり方は 100% 確実とは言えません。
|
|
よって、これは参考扱いにするべきと注意をしておきます。
|
|
.Pp
|
|
.It Dv MOUSE_SETMODE Ar mousemode_t *mode
|
|
このコマンドは、マウスドライバの現在の機能パラメータを
|
|
.Ar mode
|
|
で指定した値に変更します。
|
|
.Dv level
|
|
だけが変更可能です。他のフィールドに値を設定してもエラーは出ませんが、
|
|
何の効果も及ぼしません。
|
|
.\" .Pp
|
|
.\" .It Dv MOUSE_GETVARS Ar mousevar_t *vars
|
|
.\" .It Dv MOUSE_SETVARS Ar mousevar_t *vars
|
|
.\" These commands are not supported by the
|
|
.\" .Nm
|
|
.\" driver.
|
|
.Pp
|
|
.It Dv MOUSE_READDATA Ar mousedata_t *data
|
|
.It Dv MOUSE_READSTATE Ar mousedata_t *state
|
|
これらのコマンドは
|
|
.Nm
|
|
ドライバではサポートされません。
|
|
.Pp
|
|
.It Dv MOUSE_GETSTATE Ar mousestatus_t *status
|
|
このコマンドはボタンの現在の状態と動きのカウントを
|
|
.Xr mouse 4
|
|
で定義された構造体で返します。
|
|
.El
|
|
.Ss コンソールとコンソール制御 Ioctl
|
|
ユーザプログラムは、現在の仮想コンソールに対してコンソール
|
|
.Fn ioctl
|
|
システムコールを発行し、マウスポインタを制御します。コンソール
|
|
.Fn ioctl
|
|
はまた、ボタンが押された時に
|
|
.Xr signal 3
|
|
を受け取る手段をユーザプロセスに提供します。
|
|
.Pp
|
|
マウスデーモン
|
|
.Xr moused 8
|
|
は、
|
|
コンソール制御デバイス
|
|
.Pa /dev/consolectl
|
|
に対して
|
|
.Fn ioctl
|
|
システムコールを用いることにより、
|
|
マウスの動きとボタンの状態を含むマウスの動作をコンソールに通知します。
|
|
.Pp
|
|
両方のクラスの
|
|
.Fn ioctl
|
|
コマンドとも、以下の引数を取る
|
|
.Dv CONS_MOUSECTL
|
|
として定義されています。
|
|
.Bd -literal
|
|
struct mouse_info {
|
|
int operation;
|
|
union {
|
|
struct mouse_data data;
|
|
struct mouse_mode mode;
|
|
struct mouse_event event;
|
|
} u;
|
|
};
|
|
.Ed
|
|
.Pp
|
|
.Bl -tag -width operation -compact
|
|
.It Dv operation
|
|
これは以下のどれか 1 つを取ります。
|
|
.Pp
|
|
.Bl -tag -width MOUSE_MOVEABS -compact
|
|
.It Dv MOUSE_SHOW
|
|
マウスカーソルを有効にして表示します。
|
|
.It Dv MOUSE_HIDE
|
|
マウスカーソルを無効にして隠します。
|
|
.It Dv MOUSE_MOVEABS
|
|
マウスカーソルを
|
|
.Dv u.data
|
|
で与えた位置に移動させます。
|
|
.It Dv MOUSE_MOVEREL
|
|
現在の位置に、
|
|
.Dv u.data
|
|
で与えた値を加えた位置に移動させます。
|
|
.It Dv MOUSE_GETINFO
|
|
現在の仮想コンソールにおけるマウスの現在の位置と、ボタンの状態を
|
|
.Dv u.data
|
|
に収めて返します。
|
|
.It Dv MOUSE_MODE
|
|
これは、
|
|
.Xr signal 3
|
|
を設定し、現在のプロセスにボタンが押されたことを通知します。
|
|
シグナルは
|
|
.Dv u.mode
|
|
に収められて通知されます。
|
|
.El
|
|
.Pp
|
|
ここまでの機能は仮想コンソールに対するものです。これ以後に定義する機能は
|
|
コンソール制御ドライバに対するもので、
|
|
.Xr moused 8
|
|
がマウスデータをコンソールドライバに渡すために用います。
|
|
.Pp
|
|
.Bl -tag -width MOUSE_MOVEABS -compact
|
|
.It Dv MOUSE_ACTION
|
|
.It Dv MOUSE_MOTIONEVENT
|
|
これらの機能は
|
|
.Dv u.data
|
|
に情報を取り、その上で動作します。
|
|
.Nm
|
|
ドライバがオープンされている場合、マウスデータは
|
|
.Nm
|
|
ドライバに送られます。
|
|
.Dv MOUSE_ACTION
|
|
はボタン押し下げ動作を一緒に行ない、要求がある場合はシグナルを送ります。
|
|
現在のコンソールがテキストインタフェースを持つ場合、カットアンドペースト
|
|
処理を行ないます。
|
|
.It Dv MOUSE_BUTTONEVENT
|
|
.Dv u.data
|
|
で、ボタンの種類とそのクリックカウント数を指定します。コンソールドライバは
|
|
その情報を用い、要求がある場合はシグナルを送り、コンソールが
|
|
テキストインタフェースを持つ場合は、カットアンドペースト処理を行ないます。
|
|
.El
|
|
.Pp
|
|
.Dv MOUSE_MOTIONEVENT
|
|
と
|
|
.Dv MOUSE_BUTTONEVENT
|
|
は、新しいインタフェースで、この 2 つを一緒に使うことを想定して
|
|
作られています。これらは
|
|
.Dv MOUSE_ACTION
|
|
ひとつで行なわれている機能を置き換えるためのものです。
|
|
.Pp
|
|
.It Dv u
|
|
この共用体は、以下のいずれかです。
|
|
.Pp
|
|
.Bl -tag -width data -compact
|
|
.It Dv data
|
|
.Bd -literal
|
|
struct mouse_data {
|
|
int x;
|
|
int y;
|
|
int z;
|
|
int buttons;
|
|
};
|
|
.Ed
|
|
.Pp
|
|
.Dv x ,
|
|
.Dv y ,
|
|
.Dv z
|
|
は、それぞれの方向に対するマウスの移動を表します。
|
|
.Dv buttons
|
|
はボタンの状態を示します。ビット 0 からビット 30 までで最大 31 個の
|
|
ボタンの状態を表すことができます。ボタンが押されていると、対応する
|
|
ビットがセットされます。
|
|
.Pp
|
|
.It Dv mode
|
|
.Bd -literal
|
|
struct mouse_mode {
|
|
int mode;
|
|
int signal;
|
|
};
|
|
.Ed
|
|
.Pp
|
|
.Dv signal
|
|
フィールドは、プロセスに送るシグナルを指定します。この値は
|
|
.Ao Pa signal.h Ac
|
|
で定義された値のうちのひとつである必要があります。
|
|
.Dv mode
|
|
フィールドは現在は使用されていません。
|
|
.Pp
|
|
.It Dv event
|
|
.Bd -literal
|
|
struct mouse_event {
|
|
int id;
|
|
int value;
|
|
};
|
|
.Ed
|
|
.Pp
|
|
.Dv id
|
|
フィールドは、
|
|
.Dv u.data.buttons
|
|
と同じように、ボタン番号を指定します。
|
|
1 ビット/ボタンだけを設定できます。
|
|
.Dv value
|
|
フィールドは、クリック数を保持しています。これは、ユーザがボタンを
|
|
連続して押した回数です。
|
|
.Pp
|
|
.El
|
|
.El
|
|
.Sh 関連ファイル
|
|
.Bl -tag -width /dev/consolectl -compact
|
|
.It Pa /dev/consolectl
|
|
コンソールを制御するデバイス
|
|
.It Pa /dev/sysmouse
|
|
仮想化されたマウスドライバ
|
|
.It Pa /dev/ttyv%d
|
|
仮想コンソール
|
|
.El
|
|
.Sh 関連項目
|
|
.Xr vidcontrol 1 ,
|
|
.Xr ioctl 2 ,
|
|
.Xr signal 3 ,
|
|
.Xr mouse 4 ,
|
|
.Xr moused 8
|
|
.Sh 歴史
|
|
.Nm
|
|
マニュアルページは、
|
|
.Fx 2.2
|
|
で初めて現れました。
|
|
.Sh 作者
|
|
このマニュアルは
|
|
.An John-Mark Gurney Aq gurney_j@efn.org
|
|
と
|
|
.An Kazutaka Yokota Aq yokota@FreeBSD.org
|
|
が書きました。
|
|
.\" translated by Norihiro Kumagai kuma@nk.rim.or.jp 99-7-18
|