]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - share/man/man4/man4.i386/sysmouse.4
This commit was generated by cvs2svn to compensate for changes in r51292,
[FreeBSD/FreeBSD.git] / share / man / man4 / man4.i386 / sysmouse.4
1 .\" Copyright (c) 1997
2 .\"     John-Mark Gurney.  All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\" 3. Neither the name of the author nor the names of any co-contributors
13 .\"    may be used to endorse or promote products derived from this software
14 .\"    without specific prior written permission.
15 .\"
16 .\" THIS SOFTWARE IS PROVIDED BY John-Mark Gurney AND CONTRIBUTORS ``AS IS'' AND
17 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 .\" SUCH DAMAGE.
27 .\"
28 .\" $FreeBSD$
29 .\"
30 .Dd December 3, 1997
31 .Dt SYSMOUSE 4 i386
32 .Os FreeBSD
33 .Sh NAME
34 .Nm sysmouse
35 .\" .Nd supplies mouse data from syscons for other applications
36 .Nd virtualized mouse driver
37 .Sh SYNOPSIS
38 .Fd #include <machine/mouse.h>
39 .Fd #include <machine/console.h>
40 .Sh DESCRIPTION
41 The console driver, in conjunction with the mouse daemon
42 .Xr moused 8 ,
43 supplies mouse data to the user process in the standardized way via the
44 .Nm
45 driver.
46 This arrangement makes it possible for the console and the user process
47 .Pq such as the Tn X\ Window System
48 to share the mouse.
49 .Pp
50 The user process which wants to utilize mouse operation simply opens 
51 .Pa /dev/sysmouse
52 with a
53 .Xr open 2
54 call and reads
55 mouse data from the device via
56 .Xr read 2 .
57 Make sure that
58 .Xr moused 8
59 is running, otherwise the user process won't see any data coming from
60 the mouse.
61 .Pp
62 .Ss Operation Levels
63 The
64 .Nm
65 driver has two levels of operation. 
66 The current operation level can be referred to and changed via ioctl calls.
67 .Pp
68 The level zero, the basic level, is the lowest level at which the driver 
69 offers the basic service to user programs. 
70 The
71 .Nm
72 driver
73 provides horizontal and vertical movement of the mouse
74 and state of up to three buttons in the 
75 .Tn MouseSystems 
76 format as follows.
77 .Pp
78 .Bl -tag -width Byte_1 -compact
79 .It Byte 1 
80 .Bl -tag -width bit_7 -compact
81 .It bit 7
82 Always one.
83 .It bit 6..3
84 Always zero.
85 .It bit 2
86 Left button status; cleared if pressed, otherwise set.
87 .It bit 1
88 Middle button status; cleared if pressed, otherwise set. Always one,
89 if the device does not have the middle button.
90 .It bit 0
91 Right button status; cleared if pressed, otherwise set.
92 .El
93 .It Byte 2
94 The first half of horizontal movement count in two's complement; 
95 -128 through 127.
96 .It Byte 3
97 The first half of vertical movement count in two's complement; 
98 -128 through 127.
99 .It Byte 4
100 The second half of the horizontal movement count in two's complement; 
101 -128 through 127. To obtain the full horizontal movement count, add
102 the byte 2 and 4.
103 .It Byte 5
104 The second half of the vertical movement count in two's complement; 
105 -128 through 127. To obtain the full vertical movement count, add
106 the byte 3 and 5.
107 .El
108 .Pp
109 At the level one, the extended level, mouse data is encoded
110 in the standard format
111 .Dv MOUSE_PROTO_SYSMOUSE
112 as defined in 
113 .Xr mouse 4 .
114 .\" .Ss Acceleration
115 .\" The
116 .\" .Nm
117 .\" driver can somewhat `accelerate' the movement of the pointing device.
118 .\" The faster you move the device, the further the pointer 
119 .\" travels on the screen. 
120 .\" The driver has an internal variable which governs the effect of 
121 .\" the acceleration. Its value can be modified via the driver flag 
122 .\" or via an ioctl call.
123 .Sh IOCTLS
124 This section describes two classes of 
125 .Xr ioctl 2
126 commands: 
127 commands for the
128 .Nm
129 driver itself, and commands for the console and the console control drivers.
130 .Ss Sysmouse Ioctls
131 There are a few commands for mouse drivers.
132 General description of the commands is given in
133 .Xr mouse 4 .
134 Followings are the features specific to the
135 .Nm
136 driver.
137 .Pp
138 .Bl -tag -width MOUSE -compact
139 .It Dv MOUSE_GETLEVEL Ar int *level
140 .It Dv MOUSE_SETLEVEL Ar int *level
141 These commands manipulate the operation level of the mouse driver.
142 .Pp
143 .It Dv MOUSE_GETHWINFO Ar mousehw_t *hw
144 Returns the hardware information of the attached device in the following 
145 structure.  Only the
146 .Dv iftype
147 field is guaranteed to be filled with the correct value in the current
148 version of the
149 .Nm
150 driver.
151 .Bd -literal
152 typedef struct mousehw {
153     int buttons;    /* number of buttons */
154     int iftype;     /* I/F type */
155     int type;       /* mouse/track ball/pad... */
156     int model;      /* I/F dependent model ID */
157     int hwid;       /* I/F dependent hardware ID */
158 } mousehw_t;
159 .Ed
160 .Pp
161 The
162 .Dv buttons
163 field holds the number of buttons detected by the driver.
164 .Pp
165 The
166 .Dv iftype
167 is always
168 .Dv MOUSE_IF_SYSMOUSE.
169 .Pp
170 The
171 .Dv type
172 tells the device type:
173 .Dv MOUSE_MOUSE ,
174 .Dv MOUSE_TRACKBALL ,
175 .Dv MOUSE_STICK ,
176 .Dv MOUSE_PAD ,
177 or
178 .Dv MOUSE_UNKNOWN .
179 .Pp
180 The
181 .Dv model
182 is always 
183 .Dv MOUSE_MODEL_GENERIC
184 at the operation level 0.
185 It may be 
186 .Dv MOUSE_MODEL_GENERIC
187 or one of 
188 .Dv MOUSE_MODEL_XXX
189 constants at higher operation levels.
190 .Pp
191 The
192 .Dv hwid
193 is always zero.
194 .Pp
195 .It Dv MOUSE_GETMODE Ar mousemode_t *mode
196 The command gets the current operation parameters of the mouse
197 driver.
198 .Bd -literal
199 typedef struct mousemode {
200     int protocol;    /* MOUSE_PROTO_XXX */
201     int rate;        /* report rate (per sec) */
202     int resolution;  /* MOUSE_RES_XXX, -1 if unknown */
203     int accelfactor; /* acceleration factor */
204     int level;       /* driver operation level */
205     int packetsize;  /* the length of the data packet */
206     unsigned char syncmask[2]; /* sync. bits */
207 } mousemode_t;
208 .Ed
209 .Pp
210 The
211 .Dv protocol
212 field tells the format in which the device status is returned 
213 when the mouse data is read by the user program.
214 It is
215 .Dv MOUSE_PROTO_MSC
216 at the operation level zero.
217 .Dv MOUSE_PROTO_SYSMOUSE
218 at the operation level one.
219 .Pp
220 The
221 .Dv rate
222 is always set to -1.
223 .Pp
224 The
225 .Dv resolution
226 is always set to -1.
227 .Pp
228 The
229 .Dv accelfactor
230 is always 0.
231 .Pp
232 The
233 .Dv packetsize
234 field specifies the length of the data packet. It depends on the
235 operation level.
236 .Pp
237 .Bl -tag -width level_0__ -compact
238 .It Em level 0
239 5 bytes
240 .It Em level 1
241 8 bytes
242 .El
243 .Pp
244 The array
245 .Dv syncmask
246 holds a bit mask and pattern to detect the first byte of the
247 data packet.
248 .Dv syncmask[0]
249 is the bit mask to be ANDed with a byte. If the result is equal to
250 .Dv syncmask[1] ,
251 the byte is likely to be the first byte of the data packet.
252 Note that this method of detecting the first byte is not 100% reliable,
253 thus, should be taken only as an advisory measure.
254 .Pp
255 .It Dv MOUSE_SETMODE Ar mousemode_t *mode
256 The command changes the current operation parameters of the mouse driver
257 as specified in
258 .Ar mode .
259 Only
260 .Dv level 
261 may be modifiable. Setting values in the other field does not generate
262 error and has no effect.
263 .\" .Pp
264 .\" .It Dv MOUSE_GETVARS Ar mousevar_t *vars
265 .\" .It Dv MOUSE_SETVARS Ar mousevar_t *vars
266 .\" These commands are not supported by the
267 .\" .Nm
268 .\" driver.
269 .Pp
270 .It Dv MOUSE_READDATA Ar mousedata_t *data
271 .It Dv MOUSE_READSTATE Ar mousedata_t *state
272 These commands are not supported by the
273 .Nm
274 driver.
275 .Pp
276 .It Dv MOUSE_GETSTATE Ar mousestatus_t *status
277 The command returns the current state of buttons and 
278 movement counts in the structure as defined in
279 .Xr mouse 4 .
280 .El
281 .Ss Console and Consolectl Ioctls
282 The user process issues console 
283 .Fn ioctl
284 calls to the current virtual console in order to control
285 the mouse pointer.
286 The console
287 .Fn ioctl 
288 also provides a method for the user process to receive a
289 .Xr signal 3
290 when a button is pressed.
291 .Pp
292 The mouse daemon
293 .Xr moused 8
294 uses 
295 .Fn ioctl
296 calls to the console control device
297 .Pa /dev/consolectl
298 to inform the console of mouse actions including mouse movement
299 and button status.
300 .Pp
301 Both classes
302 .Fn ioctl
303 commands are defined as
304 .Dv CONS_MOUSECTL
305 which takes the following argument.
306 .Bd -literal
307 struct mouse_info {
308     int operation;
309     union {
310         struct mouse_data data;
311         struct mouse_mode mode;
312         struct mouse_event event;
313     } u;
314 };
315 .Ed
316 .Pp
317 .Bl -tag -width operation -compact
318 .It Dv operation
319 This can be one of
320 .Pp
321 .Bl -tag -width MOUSE_MOVEABS -compact
322 .It Dv MOUSE_SHOW
323 Enables and displays mouse cursor.
324 .It Dv MOUSE_HIDE
325 Disables and hides mouse cursor.
326 .It Dv MOUSE_MOVEABS
327 Moves mouse cursor to position supplied in
328 .Dv u.data .
329 .It Dv MOUSE_MOVEREL
330 Adds position supplied in
331 .Dv u.data
332 to current position.
333 .It Dv MOUSE_GETINFO
334 Returns current mouse position in the current virtual console 
335 and button status in
336 .Dv u.data .
337 .It Dv MOUSE_MODE
338 This sets the
339 .Xr signal 3
340 to be delivered to the current process when a button is pressed.
341 The signal to be delivered is set in
342 .Dv u.mode .
343 .El
344 .Pp
345 The above operations are for virtual consoles. The operations defined 
346 below are for the console control device and used by 
347 .Xr moused 8
348 to pass mouse data to the console driver.
349 .Pp
350 .Bl -tag -width MOUSE_MOVEABS -compact
351 .It Dv MOUSE_ACTION
352 .It Dv MOUSE_MOTIONEVENT
353 These operations take the information in
354 .Dv u.data
355 and act upon it.  Mouse data will be sent to the
356 .Nm
357 driver if it is open.
358 .Dv MOUSE_ACTION
359 also processes button press actions and sends signal to the process if
360 requested or performs cut and paste operations
361 if the current console is a text interface. 
362 .It Dv MOUSE_BUTTONEVENT
363 .Dv u.data
364 specifies a button and its click count. The console driver will
365 use this information for signal delivery if requested or 
366 for cut and paste operations if the console is in text mode.
367 .El
368 .Pp
369 .Dv MOUSE_MOTIONEVENT
370 and 
371 .Dv MOUSE_BUTTONEVENT
372 are newer interface and are designed to be used together.
373 They are intended to replace functions performed by
374 .Dv MOUSE_ACTION
375 alone.
376 .Pp
377 .It Dv u
378 This union is one of
379 .Pp
380 .Bl -tag -width data -compact
381 .It Dv data
382 .Bd -literal
383 struct mouse_data {
384     int x;
385     int y;
386     int z;
387     int buttons;
388 };
389 .Ed
390 .Pp
391 .Dv x ,
392 .Dv y 
393 and
394 .Dv z
395 represent movement of the mouse along respective directions.
396 .Dv buttons
397 tells the state of buttons. It encodes up to 31 buttons in the bit 0 though
398 the bit 30.  If a button is held down, the corresponding bit is set. 
399 .Pp
400 .It Dv mode
401 .Bd -literal
402 struct mouse_mode {
403     int mode;
404     int signal;
405 };
406 .Ed
407 .Pp
408 The
409 .Dv signal
410 field specifies the signal to be delivered to the process. It must be 
411 one of the values defined in
412 .Ao Pa signal.h Ac .
413 The
414 .Dv mode
415 field is currently unused.
416 .Pp
417 .It Dv event
418 .Bd -literal
419 struct mouse_event {
420     int id;
421     int value;
422 };
423 .Ed
424 .Pp
425 The
426 .Dv id
427 field specifies a button number as in 
428 .Dv u.data.buttons .
429 Only one bit/button is set.
430 The
431 .Dv value
432 field
433 holds the click count: the number of times the user has clicked the button
434 successively.
435 .Pp
436 .El
437 .El
438 .Sh FILES
439 .Bl -tag -width /dev/consolectl -compact
440 .It Pa /dev/consolectl
441 device to control the console
442 .It Pa /dev/sysmouse
443 virtualized mouse driver
444 .It Pa /dev/ttyv%d
445 virtual consoles
446 .El
447 .Sh SEE ALSO
448 .Xr vidcontrol 1 ,
449 .Xr ioctl 2 ,
450 .Xr signal 3 ,
451 .Xr mouse 4 ,
452 .Xr moused 8
453 .Sh HISTORY
454 The
455 .Nm
456 manual page example first appeared in
457 .Fx 2.2 .
458 .Sh AUTHORS
459 This
460 manual page was written by
461 .An John-Mark Gurney Aq gurney_j@efn.org 
462 and 
463 .An Kazutaka Yokota Aq yokota@FreeBSD.org .