NAME
sysmouse — virtualized mouse driverSYNOPSIS
#include <sys/mouse.h>#include <sys/consio.h>
DESCRIPTION
The console driver, in conjunction with the mouse daemon moused(8), supplies mouse data to the user process in the standardized way via the sysmouse driver. This arrangement makes it possible for the console and the user process (such as the X Window System) to share the mouse. The user process which wants to utilize mouse operation simply opens /dev/sysmouse with a open(2) call and reads mouse data from the device via read(2). Make sure that moused(8) is running, otherwise the user process will not see any data coming from the mouse.Operation Levels
The sysmouse driver has two levels of operation. The current operation level can be referred to and changed via ioctl calls. The level zero, the basic level, is the lowest level at which the driver offers the basic service to user programs. The sysmouse driver provides horizontal and vertical movement of the mouse and state of up to three buttons in the MouseSystems format as follows.- Byte 1
-
- bit 7
- Always one.
- bit 6..3
- Always zero.
- bit 2
- Left button status; cleared if pressed, otherwise set.
- bit 1
- Middle button status; cleared if pressed, otherwise set. Always one, if the device does not have the middle button.
- bit 0
- Right button status; cleared if pressed, otherwise set.
- Byte 2
- The first half of horizontal movement count in two's complement; -128 through 127.
- Byte 3
- The first half of vertical movement count in two's complement; -128 through 127.
- Byte 4
- The second half of the horizontal movement count in two's complement; -128 through 127. To obtain the full horizontal movement count, add the byte 2 and 4.
- Byte 5
- The second half of the vertical movement count in two's complement; -128 through 127. To obtain the full vertical movement count, add the byte 3 and 5.
MOUSE_PROTO_SYSMOUSE
as defined in
mouse(4).
IOCTLS
This section describes two classes of ioctl(2) commands: commands for the sysmouse driver itself, and commands for the console and the console control drivers.Sysmouse Ioctls
There are a few commands for mouse drivers. General description of the commands is given in mouse(4). Following are the features specific to the sysmouse driver.-
MOUSE_GETLEVEL
int *level -
MOUSE_SETLEVEL
int *level - These commands manipulate the operation level of the mouse driver.
-
MOUSE_GETHWINFO
mousehw_t *hw - Returns the hardware information of the attached device in
the following structure. Only the iftype
field is guaranteed to be filled with the correct value in the current
version of the sysmouse driver.
The buttons field holds the number of
buttons detected by the driver.
The iftype is always
MOUSE_IF_SYSMOUSE
. The type tells the device type:MOUSE_MOUSE
,MOUSE_TRACKBALL
,MOUSE_STICK
,MOUSE_PAD
, orMOUSE_UNKNOWN
. The model is alwaysMOUSE_MODEL_GENERIC
at the operation level 0. It may beMOUSE_MODEL_GENERIC
or one ofMOUSE_MODEL_XXX
constants at higher operation levels. The hwid is always zero. -
MOUSE_GETMODE
mousemode_t *mode - The command gets the current operation parameters of the
mouse driver.
The protocol field tells the format in
which the device status is returned when the mouse data is read by the
user program. It is
MOUSE_PROTO_MSC
at the operation level zero.MOUSE_PROTO_SYSMOUSE
at the operation level one. The rate is always set to -1. The resolution is always set to -1. The accelfactor is always 0. The packetsize field specifies the length of the data packet. It depends on the operation level.- level 0
- 5 bytes
- level 1
- 8 bytes
-
MOUSE_SETMODE
mousemode_t *mode - The command changes the current operation parameters of the mouse driver as specified in mode. Only level may be modifiable. Setting values in the other field does not generate error and has no effect.
-
MOUSE_READDATA
mousedata_t *data -
MOUSE_READSTATE
mousedata_t *state - These commands are not supported by the sysmouse driver.
-
MOUSE_GETSTATUS
mousestatus_t *status - The command returns the current state of buttons and movement counts in the structure as defined in mouse(4).
Console and Consolectl Ioctls
The user process issues console ioctl() calls to the current virtual console in order to control the mouse pointer. The console ioctl() also provides a method for the user process to receive a signal(3) when a button is pressed. The mouse daemon moused(8) uses ioctl() calls to the console control device /dev/consolectl to inform the console of mouse actions including mouse movement and button status. Both classes of ioctl() commands are defined asCONS_MOUSECTL
which takes the following
argument.
struct mouse_info { int operation; union { struct mouse_data data; struct mouse_mode mode; struct mouse_event event; } u; };
- operation
- This can be one of
MOUSE_SHOW
- Enables and displays mouse cursor.
MOUSE_HIDE
- Disables and hides mouse cursor.
MOUSE_MOVEABS
- Moves mouse cursor to position supplied in u.data.
MOUSE_MOVEREL
- Adds position supplied in u.data to current position.
MOUSE_GETINFO
- Returns current mouse position in the current virtual console and button status in u.data.
MOUSE_MODE
- This sets the signal(3) to be delivered to the current process when a button is pressed. The signal to be delivered is set in u.mode.
MOUSE_ACTION
MOUSE_MOTION_EVENT
- These operations take the information in
u.data and act upon it. Mouse data
will be sent to the sysmouse driver if it
is open.
MOUSE_ACTION
also processes button press actions and sends signal to the process if requested or performs cut and paste operations if the current console is a text interface. MOUSE_BUTTON_EVENT
- u.data specifies a button and its click count. The console driver will use this information for signal delivery if requested or for cut and paste operations if the console is in text mode.
MOUSE_MOTION_EVENT
andMOUSE_BUTTON_EVENT
are newer interface and are designed to be used together. They are intended to replace functions performed byMOUSE_ACTION
alone. - u
- This union is one of
- data
- x, y and z represent movement of the mouse along respective directions. buttons tells the state of buttons. It encodes up to 31 buttons in the bit 0 though the bit 30. If a button is held down, the corresponding bit is set.
- mode
- The signal field specifies the signal to be delivered to the process. It must be one of the values defined in <signal.h>. The mode field is currently unused.
- event
- The id field specifies a button number as in u.data.buttons. Only one bit/button is set. The value field holds the click count: the number of times the user has clicked the button successively.
FILES
- /dev/consolectl
- device to control the console
- /dev/sysmouse
- virtualized mouse driver
- /dev/ttyv%d
- virtual consoles
SEE ALSO
vidcontrol(1), ioctl(2), signal(3), mouse(4), moused(8)HISTORY
The sysmouse driver first appeared in FreeBSD 2.2.AUTHORS
This manual page was written by John-Mark Gurney <[email protected]> and Kazutaka Yokota <[email protected]>.March 25, 2014 | Debian |