I'm very pleased to announce the release of our new website and documentation using the new toolchain with Hugo and AsciiDoctor. To get more information about the new toolchain please read the FreeBSD Documentation Project Primer[1], Hugo docs[2] and AsciiDoctor docs[3]. Acknowledgment: Benedict Reuschling <bcr@> Glen Barber <gjb@> Hiroki Sato <hrs@> Li-Wen Hsu <lwhsu@> Sean Chittenden <seanc@> The FreeBSD Foundation [1] https://docs.FreeBSD.org/en/books/fdp-primer/ [2] https://gohugo.io/documentation/ [3] https://docs.asciidoctor.org/home/ Approved by: doceng, core
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
|