Skip site navigation (1)Skip section navigation (2)

FreeBSD Man Pages

Man Page or Keyword Search:
Man Architecture
Apropos Keyword Search (all sections) Output format
home | help
SYSMOUSE(4)	       FreeBSD Kernel Interfaces 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), sup-
     plies 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 comple-
	     ment; -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 comple-
	     ment; -128	through	127.  To obtain	the full vertical movement
	     count, add	the byte 3 and 5.

     At	the level one, the extended level, mouse data is encoded in the	stan-
     dard 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 con-
     trol 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.

	    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

	    The	iftype is always MOUSE_IF_SYSMOUSE.

	    The	type tells the device type: MOUSE_MOUSE, MOUSE_TRACKBALL,

	    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 *mode
	    The	command	gets the current operation parameters of the mouse

	    typedef 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.

	    level 0    5 bytes
	    level 1    8 bytes

	    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 *mode
	    The	command	changes	the current operation parameters of the	mouse
	    driver as specified	in mode.  Only level may be modifiable.	 Set-
	    ting values	in the other field does	not generate error and has no

     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 con-
     sole 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 but-
     ton 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;

     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

		MOUSE_MOVEREL  Adds position supplied in	to current
		MOUSE_GETINFO  Returns current mouse position in the current
			       virtual console and button status in
		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.

		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.

			       These operations	take the information in
			       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.
 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

		and are	designed to be used together.  They are	intended to
		replace	functions performed by MOUSE_ACTION alone.

     u		This union is one of


		      struct mouse_data	{
			  int x;
			  int y;
			  int z;
			  int buttons;

		      x, y and z represent movement of the mouse along respec-
		      tive 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


		      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  Only one	bit/button is set.  The	value
		      field holds the click count: the number of times the
		      user has clicked the button successively.

     /dev/consolectl  device to	control	the console
     /dev/sysmouse    virtualized mouse	driver
     /dev/ttyv%d      virtual consoles

     vidcontrol(1), ioctl(2), signal(3), mouse(4), moused(8)

     The sysmouse driver first appeared	in FreeBSD 2.2.

     This manual page was written by John-Mark Gurney <>	and
     Kazutaka Yokota <>.

FreeBSD	11.0			March 25, 2014			  FreeBSD 11.0


Want to link to this manual page? Use this URL:

home | help