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

FreeBSD Manual Pages

  
 
  

home | help
SYSMOUSE(4)		     Kernel Interfaces Manual		     SYSMOUSE(4)

NAME
     sysmouse -- virtualized mouse driver

SYNOPSIS
     #include <sys/mouse.h>
     #include <sys/consio.h>

DESCRIPTION
     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 but-
     tons 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 complement;
	     -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 standard
     format 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  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 fol-
	    lowing structure.  Only the iftype field is guaranteed to be  filled
	    with  the  correct value in the current version of the sysmouse dri-
	    ver.

	    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  dri-
	    ver.

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

	    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.  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  con-
     sole  in order to control the mouse pointer.  The console ioctl() also pro-
     vides 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;
     };

     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 posi-
			       tion.
		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.

		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
			       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  and  MOUSE_BUTTON_EVENT  are newer interface
		and are designed to be used together.  They are intended to  re-
		place functions performed by MOUSE_ACTION alone.

     u		This union is one of

		data

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

		mode

		      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.

		event

		      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.

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 <jmg@FreeBSD.org> and
     Kazutaka Yokota <yokota@FreeBSD.org>.

FreeBSD ports 15.quarterly	 March 25, 2014 		     SYSMOUSE(4)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=sysmouse&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help