MOUSE(4) FreeBSD/i386 カーネルインタフェースマニュアル MOUSE(4)
名称
mouse − マウス、ポインティングデバイス用ドライバ |
書式
#include <machine/mouse.h> |
解説
マウスドライバ mse(4), psm(4), sysmouse(4) はユーザプログラムにマウスの動 きやボタン状態の情報を提供します。現在のところ、バスマウス用、InPort マウ ス用、PS/2 マウス用の特有のデバイスドライバがあります。シリアルマウスは、 専用のドライバでは直接サポートされてはいませんが、シリアルデバイスドライ バを介して、あるいは moused(8) や sysmouse(4) を経由してアクセスできま す。 ユーザプログラムでは、単純に open(2) 呼び出しでマウスデバイスをオープン し、 read(2) でデバイスからマウスのデータを読み取ります。動きとボタン状態 は通常、固定長のデータパケットにエンコードされます。マウスデバイスによっ ては、可変長のパケットでデータを送るかもしれません。それぞれのドライバが 実際に用いるプロトコル (データ形式) は大きく異なります。 マウスドライバは ‘‘非ブロッキング’’ 属性を持つことができます。その場合、 マウスデータが取得できなければドライバはすぐに戻ります。 マウスデバイスドライバは大抵いくつかのレベルの操作を提供します。現在の操 作レベルは ioctl(2) コマンドで調査、変更することができます。レベル 0 が最 も低いレベルであり、このときドライバはユーザプログラムに基本的なサービス を提供します。このレベルでは、ほとんどのドライバがマウスの水平移動と垂直 移動、および 3 つまでのボタンの状態を提供します。レベル 1 では、ドライバ がサポートしている場合、マウスデータは標準的な形式の MOUSE_PROTO_SYSMOUSE にエンコードされます。その形式は次の通りです: |
バイト 1
ビット 7 この形式の最初の 5 バイトは MouseSystems 形式と互換になっています。残りの 3 バイトは、最上位ビットが常に 0 にセットされています。そのため、ユーザプ ログラムが MouseSystems データ形式を解釈できて、ビットパターン 10000xxxb を検出することでこのデータ形式の 1 バイト目を見つけ出そうとしている場合、 追加分のバイトを棄てることによって、 x, y および 3 つのボタンの状態を正し くデコードできます。 デバイスドライバが 2 以上の操作レベルを提供することもあります。詳しくは個 々のドライバのマニュアルページを参照してください。 IOCTL |
次の ioctl(2) コマンドがマウスドライバ用に定義されています。サポートの状 況はドライバによって変わります。本セクションではコマンドの一般的な解説を 記します。特定のドライバの詳細については、個々のドライバのマニュアルペー ジを参照してください。 |
MOUSE_GETLEVEL int *level
MOUSE_SETLEVEL int *level MOUSE_GETHWINFO mousehw_t *hw typedef struct mousehw { buttons フィールドはドライバが検出したボタン数を保持します。ドライ バが正確な数を検出できなければ、 2 などの適当な値がこのフィールド に代入されることもあります。 iftype はインタフェースの型で、 MOUSE_IF_SERIAL, MOUSE_IF_BUS, MOUSE_IF_INPORT, MOUSE_IF_PS2, MOUSE_IF_SYSMOUSE, MOUSE_IF_UNKNOWN のいずれかです。 type はデバイスの型を示し、 MOUSE_MOUSE, MOUSE_TRACKBALL, MOUSE_STICK, MOUSE_PAD, MOUSE_UNKNOWN のいずれかです。 model は MOUSE_MODEL_GENERIC か、あるいは定数 MOUSE_MODEL_XXX のう ちの 1 つです。 hwid はそのポインティングデバイスが返す ID 値です。これはインタ フェースの型に依ります。取りうる値については特定のマウスドライバの マニュアルページを参照してください。 |
MOUSE_GETMODE mousemode_t *mode
本コマンドはマウスドライバの現在の操作パラメータを報告します。 typedef struct mousemode { protocol フィールドは、ユーザプログラムがマウスデータを読み取る際 に、デバイスの状態が返される形式を示します。これは定数 MOUSE_PROTO_XXX のうちのひとつです。 rate フィールドは状態報告の頻度 (回/秒) であり、デバイスはこの頻度 でホストコンピュータに移動報告を送ります。不明かまたは適用できなけ れば -1 です。 resolution フィールドはポインティングデバイスの解像度を示す値を保 持します。正の値か、定数 MOUSE_RES_XXX のうちの 1 つです。 accelfactor フィールドは、アクセラレーション機能を制御するための値 を保持します。この値は 0 以上でなければなりません。 0 であればアク セラレーション機能は無効です。 packetsize フィールドは、固定サイズのデータパケットの長さまたは可 変長パケットの固定部の長さを示します。このサイズは、インタフェース の型、デバイスの型やモデル、ドライバのプロトコルや操作レベルに依存 します。 配列 syncmask は、データパケットの 1 バイト目を検出するためのビッ トマスクとビットパターンを保持します。 syncmask[0] はビットマスク で、データのバイトとの積 (AND) を取るためのものです。その結果が syncmask[1] に等しければ、おそらくそのバイトはデータパケットの 1 バイト目でしょう。但しこの 1 バイト目の検出法は 100% 信頼性がある とは言えません。ですので、単に補助的な手段だととらえてください。 |
MOUSE_SETMODE mousemode_t *mode
本コマンドは、マウスドライバの現在の操作パラメータを mode で指定さ れる通りに変更します。変更可能なのは、 rate, resolution, level, accelfactor だけです。他のフィールドに値を代入しても、エラーは発生 しませんし、効果もありません。 あるフィールドの現在の設定を変更したくないときは、そのフィールドに -1 を入れてください。また resolution と rate には 0 を入れることも できます。そうすると、そのフィールドのデフォルト値が選択されます。 MOUSE_READDATA mousedata_t *data typedef struct mousedata { 呼び出し元プロセスは、バッファに読み込まれるバイト数を len フィー ルドに入れておかなくてはなりません。本コマンドはすべてのドライバが サポートしているとは限りません。 |
MOUSE_READSTATE mousedata_t *state
本コマンドはデバイスから生の状態データを読み取ります。上記と同じ構 造体を使用します。本コマンドはすべてのドライバがサポートしていると は限りません。 MOUSE_GETSTATE mousestatus_t *status typedef struct mousestatus { button フィールドと obutton フィールドは、マウスボタンの現在の状態 と以前の状態を保持します。ボタンが押されたとき、対応するビットが セットされます。マウスドライバは 0 から 31 までのビットを使って 31 個までのボタンをサポートできます。いくつかのボタンビットが MOUSE_BUTTON1DOWN から MOUSE_BUTTON8DOWN として定義されています。 最初の 3 つのボタンは、左ボタン、中ボタン、右ボタンに対応します。 前回の MOUSE_GETSTATE 呼び出しからボタンの状態が変わっていれば、 flags フィールドの対応するビットがセットされます。前回の呼び出しか らマウスが移動していれば、 flags フィールド中の MOUSE_POSCHANGED ビットもセットされます。 その他のフィールドは、前回の MOUSE_GETSTATE 呼び出しからの移動量を 保持します。本コマンドが呼び出された後に、毎回内部カウンタがリセッ トされます。 |
関連ファイル
/dev/cuaa%d
シリアルポート 関連項目 |
ioctl(2), mse(4), psm(4), sysmouse(4), moused(8) |
作者
本マニュアルページは Kazutaka Yokota 〈yokota@FreeBSD.org〉 が書きました。 FreeBSD December 3, 1997 FreeBSD |