MSE(4) | FreeBSD Kernel Interfaces Manual (i386) | MSE(4) |
名称
mse — バスおよび InPort マウスドライバ書式
device mse /boot/device.hints 中で:
hint.mse.0.at="isa"
hint.mse.0.port="0x23c"
hint.mse.0.irq="5"
解説
mse ドライバは、バスマウスと InPort マウス (それらはしばしばまとめて ``バス'' マウスと呼ばれる) のサポートを行ないます。これらのマウスは、拡張バススロットにインストールされる必要があるインタフェースカードとともに売られています。インタフェース回路は、統合 I/O カードまたはビデオカードのオプションとして見かけるかもしれません。バスマウスと InPort マウスは、2 つまたは 3 つのボタン、D-sub 9 ピンオスコネクタまたは円形の DIN 9 ピンオスコネクタを持っています。
バスマウスと InPort マウスインタフェースカードの第 1 のポートアドレスは、通常 0x23c です。また、いくつかのカードでは、0x238 の第 2 のポートアドレスを使用するための設定ができます。インタフェースカードは、2、3、4 または 5 の 1 つの IRQ を要求します。いくつかのカードは、追加の IRQ を提供できます。ポート番号と IRQ 番号は、カード上のジャンパによって、またはカードと共に提供されるソフトウェアによって設定されます。
また、デバイスがホストシステムに移動とボタンの状態報告を送る周波数や報告速度は、いくつかのインタフェースカード上で設定をすることもできます。それは、15、30、60 または 120Hz かもしれません。
2 つのタイプのマウスの間の違いは、マウスデバイス (実際、それらは、正確に同じです) にはありません。しかしインタフェースカード上の回路の中は違っています。もしそれらのコネクタが一致すれば、デバイスがバスマウスパッケージからインタフェースカードに接続できる、逆に InPort マウスパッケージから接続できることを意味します。
操作レベル
mse ドライバは、2 つレベルの操作を持っています。現在の操作レベルは、ioctl 呼び出しによって設定することができます。レベル 0 では、基本的なサポートが提供されます。デバイスドライバは、取り付けれらたデバイスの水平と垂直の移動と下に記述されたフォーマットで 3 つボタンの状態を報告します。それは、MouseSystems プロトコルのサブセットです。
- バイト 1
-
- ビット 7
- 常に 1。
- ビット 6..3
- 常に 0。
- ビット 2
- 左のボタンの状態。もし押されればクリア (0)、そうでなければセット (1)。
- ビット 1
- 中央のボタンの状態。もし押されればクリア (0)、そうでなければセット (1)。デバイスが中央のボタンを持っていない場合、常に 1。
- ビット 0
- 右のボタンの状態。もし押されればクリア (0)、そうでなければセット (1)。
- バイト 2
- 2の補足で水平の移動カウント。 -128 から 127。
- バイト 3
- 2の補足で垂直の移動カウント。 -128 から 127。
- バイト 4
- 常に 0。
- バイト 5
- 常に 0。
これは、操作デフォルトレベルで、ユーザプログラムによってオープンされた時、ドライバは、最初にこのレベルです。
操作レベル 1 (拡張レベル) では、データパケットは、 mouse(4) に定義されるような標準のフォーマット MOUSE_PROTO_SYSMOUSE でエンコード (コード化) されます。
アクセラレイション (加速)
mse ドライバは、ポインティングデバイスの移動を多少 `アクセラレイト (加速)' することができる。利用者が速くデバイスを移動させるほど、スクリーン上のポインタは、遠く移動します。ドライバは、アクセラレイション (加速) の影響を管理する内部変数を持っています。その値は、ドライバフラグによって、または ioctl 呼び出しによって修正することができます。デバイス番号
mse のマイナデバイス番号は、次のものから構成されます:
minor = (`unit' << 1) | `non-blocking'
ここで、`unit' は、デバイス番号 (通常 0) で、そして `non-blocking' ビットは、 ``マウス入力を待つことをブロックしないで直ちに返る'' を示すように設定されます。 `non-blocking' ビットは、 XFree86 のために設定されるべきです。そのため、 XFree86 のために通常使用されるマイナデバイス番号は、1 です。デバイスノード名については、 関連ファイル を参照してください。
ドライバの設定
IOCTL
マウスドライバのための少しの ioctl(2) コマンドがあります。これらのコマンドと関連する構造体と定数は、 < sys/mouse.h> に定義されています。コマンドの一般的な説明は、 mouse(4) の中で与えられます。このセクションは、 mse ドライバに特有の特徴について説明します。
- MOUSE_GETLEVEL int *level
- MOUSE_SETLEVEL int *level
-
これらのコマンドは、
mse ドライバの操作レベルを操作します。
- MOUSE_GETHWINFO mousehw_t *hw
-
次の構造体中の取り付けられたデバイスのハードウェア情報を返します。
iftype フィールドだけが
mse ドライバの現在のバージョンによって正確な値で満たされることを保証されます。
typedef struct mousehw { int buttons; /* ボタンの数 */ int iftype; /* I/F タイプ */ int type; /* マウス/トラックボール/パッド... */ int model; /* I/F 依存モデル ID */ int hwid; /* I/F 依存ハードウェア ID */ } mousehw_t;
buttons フィールドは、デバイスのボタンの数を保持します。
iftype は、 MOUSE_IF_BUS または MOUSE_IF_INPORT のいずれかです。
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 { int protocol; /* MOUSE_PROTO_XXX */ int rate; /* 報告レート(毎秒), 未知の場合 -1 */ int resolution; /* MOUSE_RES_XXX, 未知の場合 -1 */ int accelfactor; /* アクセラレイションファクタ */ int level; /* ドライバ操作レベル */ int packetsize; /* データパケットの長さ */ unsigned char syncmask[2]; /* sync. ビット */ } mousemode_t;
protocol は、操作レベル 0 では、 MOUSE_PROTO_BUS または MOUSE_PROTO_INPORT のいずれかです。操作レベル 1 では、 MOUSE_PROTO_SYSMOUSE です。
rate は、デバイスがホストコンピュータへ移動報告を送る状態報告速度 (報告/秒) です。現在の設定を検出する標準がないので、このフィールドは、常に -1 に設定されます。
resolution 常に-1 に設定されます。
accelfactor フィールドは、アクセラレイション (加速) 機能を制御するために値を保持します ( アクセラレイション (加速) を参照)。それは、0 以上です。それが 0 である場合、アクセラレイション (加速) は、使用不可能になります。
packetsize フィールドは、データパケットの長さを指定します。それは、操作レベルに依存します。
- レベル 0
- 5 バイト
- レベル 1
- 8 バイト
配列 syncmask は、データパケットの第 1 のバイトを検出するためにビットマスクとパターンを保持します。 syncmask[0] は、1 つのバイトで論理積 (AND) されるビットマスクです。結果が syncmask[1] に等しい場合、バイトは、データパケットの最初のバイトです。この検出方法が 100% このように信頼できないことに注意してください。したがって勧告手段としてのみ得られるべきです。
level と accelfactor だけが MOUSE_SETMODE コマンドによって修正可能です。別のフィールドの変更は、エラーを引き起こしませんが効果がありません。
- MOUSE_SETMODE mousemode_t *mode
-
コマンドは、
mode で指定されるようなマウスドライバの現在の操作パラメータを変更します。
level と
accelfactor だけが修正可能です。別のフィールドで値を設定することは、エラーを生成せず効果がありません。
- MOUSE_READDATA mousedata_t *data
- MOUSE_READSTATE mousedata_t *state
-
これらのコマンドは、
mse ドライバでサポートされません。
- MOUSE_GETSTATUS mousestatus_t *status
- コマンドは、 mouse(4) で説明されるようにボタンの現在の状態と移動数を返します。
関連ファイル
- /dev/mse0
- devfs のないシステムで `非ブロッキング' デバイスノード、 devfs の下で `ブロッキング'。
- /dev/nmse0
- devfs の下で `非ブロッキング' デバイスノード。
使用例
device mse
/boot/device.hints 中で:
hint.mse.0.at="isa"
hint.mse.0.port="0x23c"
hint.mse.0.irq="5"
IRQ 5 を使って第 1 ポートアドレスで mse ドライバを追加します。
device mse
hint.mse.1.at="isa"
hint.mse.1.port="0x238"
hint.mse.1.irq="4"
hint.mse.1.flags="0x30"
IRQ 4 とアクセラレイション (加速) 因数 3 で第 2 のポートアドレスで mse ドライバを定義します。
警告
マウスの状態が変わっていても変わっていなくても、利用可能になった時、いくつかのバスマウスインタフェースカードは、固定報告速度で割り込みを生成します。状態が変わっている場合に限り、他は、割り込みを生成します。December 3, 1997 | FreeBSD |