SYSMOUSE(4) FreeBSD/i386 カーネルインタフェースマニュアル SYSMOUSE(4)
名称
sysmouse − 仮想化されたマウスドライバ |
書式
#include <machine/mouse.h> |
解説
マウスデーモン moused(8) と一緒に使うことにより、コンソールドライバは、 sysmouse ドライバを通して、ユーザプロセスに標準的な方法でマウスのデータを 提供します。このように整理することで、 ( |
X Window System などのような)ユーザプロセスとコンソールとでマウスを共有することができるようになります。 ユーザプロセスがマウス機能を利用しようとする場合、単に open(2) システムコールで /dev/sysmouse をオープンし、 read(2) システムコールを用いてマウスデータを読み込むだけでよいです。ここで、確実に moused(8) を実行しておいて下さい。さもないと、ユーザプロセスはマウスからデータを一切受け取ることができないでしょう。 機能レベル sysmouse ドライバには 2 つの機能レベルがあります。現在の機能レベルはioctl システムコールにより参照、変更することができます。 レベル 0 は最も低いレベルで、基本的なレベルでもあります。このレベルでは、ドライバは、ユーザプログラムに対して基本的なサービスを提供します。sysmouse ドライバは、マウスの水平垂直の動きと、最大で 3 個までのボタンの状態を、以下に示す MouseSystems 形式で通知します。 Byte 1 bit 7 常に 1 です。 bit 6..3 常に 0 です。 bit 2 左ボタンの状態です。押し下げられている状態でビットクリア、そうでなければビットセットです。 bit 1 中ボタンの状態です。押し下げられている状態でビットクリア、そうでなければビットセット。中ボタンを持たない機器の場合は常に 1 です。 bit 0 右ボタンの状態です。押し下げられている状態でビットクリア、そうでなければビットセットです。 Byte 2 水平の動きのカウントを 2 の補数形式で表した値の先頭半分です。-128 から 127 までの値。 Byte 3 垂直の動きのカウントを 2 の補数形式で表した値の先頭半分です。-128 から 127 までの値。 Byte 4 水平の動きのカウントを 2 の補数形式で表した値の後ろ半分です。-128 から 127 までの値。水平の動きのカウントを得るには、 byte 2と byte 4 を足して下さい。 Byte 5 垂直の動きのカウントを 2 の補数形式で表した値の後ろ半分です。-128 から 127 までの値。垂直の動きのカウントを得るには、 byte 3と byte 5 を足して下さい。 レベル 1 は拡張レベルで、マウスのデータは mouse(4) で定義された標準形式MOUSE_PROTO_SYSMOUSE でコード化されます。
IOCTL
この節では、2 種類の ioctl(2) コマンドについて説明します。 1 つは、 sysmouse ドライバそれ自体に対するコマンドで、もう 1 つは、コンソールとコ ンソール制御ドライバに対するコマンドです。 |
Sysmouse Ioctl |
マウスドライバに対するコマンドがいくつかあります。このコマンド一般の説明 は、 mouse(4) にあります。以下では、 sysmouse ドライバ固有の機能を説明し ます。 |
MOUSE_GETLEVEL int *level
MOUSE_SETLEVEL int *level MOUSE_GETHWINFO mousehw_t *hw typedef struct mousehw { buttons フィールドには、ドライバが検出したボタンの数が保持されてい ます。 iftype は常に MOUSE_IF_SYSMOUSE です。 type は機器の型: MOUSE_MOUSE, MOUSE_TRACKBALL, MOUSE_STICK, MOUSE_PAD, MOUSE_UNKNOWN を表します。 model は、機能レベル 0 では常に MOUSE_MODEL_GENERIC です。これは、 より高いレベルでは、 MOUSE_MODEL_GENERIC または、 MOUSE_MODEL_XXX のうちの 1 つになります。 hwid は常に 0 です。 |
MOUSE_GETMODE mousemode_t *mode
このコマンドは、マウスドライバの現在の機能パラメータを返します。 typedef struct mousemode { protocol フィールドは、ユーザプログラムがマウスデータを読みとる時 に、その機器の状態を返す形式を表します。機能レベル 0 では、 MOUSE_PROTO_MSC であり、機能レベル 1 では、 MOUSE_PROTO_SYSMOUSE です。 rate フィールドは、常に -1 です。 resolution フィールドは、常に -1 です。 accelfactor フィールドは、常に 0 です。 packetsize フィールドは、データパケットの長さを表します。これは機 能レベルによって変わります。 |
レベル 0
5 バイト 配列 syncmask は、データパケットの先頭バイトを検出するための、ビッ トマスクとパターンを保持します。 syncmask[0] はビットマスクで、調 べるバイトと AND を取ります。この結果が syncmask[1] と等しい場合、 そのバイトはデータパケットの先頭バイトらしいと言えます。この方法で 先頭バイトを検出するやり方は 100% 確実とは言えません。よって、これ は参考扱いにするべきと注意をしておきます。 MOUSE_SETMODE mousemode_t *mode MOUSE_READDATA mousedata_t *data MOUSE_GETSTATE mousestatus_t *status コンソールとコンソール制御 Ioctl マウスデーモン moused(8) は、コンソール制御デバイス /dev/consolectl に対 して ioctl() システムコールを用いることにより、マウスの動きとボタンの状態 を含むマウスの動作をコンソールに通知します。 両方のクラスの ioctl() コマンドとも、以下の引数を取る CONS_MOUSECTL とし て定義されています。 struct mouse_info { |
operation
これは以下のどれか 1 つを取ります。 MOUSE_SHOW ここまでの機能は仮想コンソールに対するものです。これ以後に定義 する機能はコンソール制御ドライバに対するもので、 moused(8) が マウスデータをコンソールドライバに渡すために用います。 MOUSE_ACTION MOUSE_MOTIONEVENT と MOUSE_BUTTONEVENT は、新しいインタフェー スで、この 2 つを一緒に使うことを想定して作られています。これ らは MOUSE_ACTION ひとつで行なわれている機能を置き換えるための ものです。 u data struct mouse_data { x, y, z は、それぞれの方向に対するマウスの移動を表しま す。 buttons はボタンの状態を示します。ビット 0 からビッ ト 30 までで最大 31 個のボタンの状態を表すことができま す。ボタンが押されていると、対応するビットがセットされま す。 |
mode
struct mouse_mode { signal フィールドは、プロセスに送るシグナルを指定しま す。この値は 〈 |
signal.h〉 で定義された値のうちのひとつである必要があります。 mode フィールドは現在は使用されていません。 event struct mouse_event { int id; int value; };
id フィールドは、 u.data.buttons と同じように、ボタン番 号を指定します。 1 ビット/ボタンだけを設定できます。 value フィールドは、クリック数を保持しています。これは、 ユーザがボタンを連続して押した回数です。
関連ファイル
/dev/consolectl
コンソールを制御するデバイス 関連項目 |
歴史
sysmouse マニュアルページは、 FreeBSD 2.2 で初めて現れました。 |
作者
このマニュアルは John-Mark Gurney
〈gurney_j@efn.org〉 と FreeBSD December 3, 1997 FreeBSD |