SYSMOUSE(4) | Device Drivers Manual | SYSMOUSE(4) |
sysmouse
—
virtualized mouse driver
#include
<sys/mouse.h>
#include <sys/consio.h>
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.
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.
At the level one, the extended level, mouse data is encoded in the
standard format MOUSE_PROTO_SYSMOUSE
as defined in
mouse(4).
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.
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 *levelMOUSE_SETLEVEL
int *levelMOUSE_GETHWINFO
mousehw_t *hwsysmouse
driver.
typedef struct mousehw { int buttons; /* number of buttons */ int iftype; /* I/F type */ int type; /* mouse/track ball/pad... */ int model; /* I/F dependent model ID */ int hwid; /* I/F dependent hardware ID */ } mousehw_t;
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
,
or MOUSE_UNKNOWN
.
The model is always
MOUSE_MODEL_GENERIC
at the operation level 0. It
may be MOUSE_MODEL_GENERIC
or one of
MOUSE_MODEL_XXX
constants at higher operation
levels.
The hwid is always zero.
MOUSE_GETMODE
mousemode_t *modetypedef struct mousemode { int protocol; /* MOUSE_PROTO_XXX */ int rate; /* report rate (per sec) */ int resolution; /* MOUSE_RES_XXX, -1 if unknown */ int accelfactor; /* acceleration factor */ int level; /* driver operation level */ int packetsize; /* the length of the data packet */ unsigned char syncmask[2]; /* sync. bits */ } mousemode_t;
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.
The array syncmask holds a bit mask and pattern to detect the first byte of the data packet. syncmask[0] is the bit mask to be ANDed with a byte. If the result is equal to syncmask[1], the byte is likely to be the first byte of the data packet. Note that this method of detecting the first byte is not 100% reliable; thus, it should be taken only as an advisory measure.
MOUSE_SETMODE
mousemode_t *modeMOUSE_READDATA
mousedata_t *dataMOUSE_READSTATE
mousedata_t *statesysmouse
driver.
MOUSE_GETSTATUS
mousestatus_t *statusThe 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 as CONS_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; };
MOUSE_SHOW
MOUSE_HIDE
MOUSE_MOVEABS
MOUSE_MOVEREL
MOUSE_GETINFO
MOUSE_MODE
The above operations are for virtual consoles. The operations defined below are for the console control device and are used by moused(8) to pass mouse data to the console driver.
MOUSE_ACTION
MOUSE_MOTION_EVENT
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
MOUSE_MOTION_EVENT
and
MOUSE_BUTTON_EVENT
are newer interface and are
designed to be used together. They are intended to replace functions
performed by MOUSE_ACTION
alone.
struct mouse_data { int x; int y; int z; int buttons; };
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.
struct mouse_mode { int mode; int signal; };
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.
struct mouse_event { int id; int value; };
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.
The sysmouse
driver first appeared in
FreeBSD 2.2.
This manual page was written by John-Mark Gurney <jmg@FreeBSD.org> and Kazutaka Yokota <yokota@FreeBSD.org>.
March 25, 2014 | Debian |