summaryrefslogtreecommitdiff
path: root/static/freebsd/man4/mouse.4 3.html
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:55:43 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:55:43 -0400
commitac5e55f5f2af5b92794c2aded46c6bae85b5f5ed (patch)
tree9367490586c84cba28652e443e3166d66c33b0d9 /static/freebsd/man4/mouse.4 3.html
parent253e67c8b3a72b3a4757fdbc5845297628db0a4a (diff)
docs: Added All FreeBSD Manuals
Diffstat (limited to 'static/freebsd/man4/mouse.4 3.html')
-rw-r--r--static/freebsd/man4/mouse.4 3.html292
1 files changed, 292 insertions, 0 deletions
diff --git a/static/freebsd/man4/mouse.4 3.html b/static/freebsd/man4/mouse.4 3.html
new file mode 100644
index 00000000..e1da5124
--- /dev/null
+++ b/static/freebsd/man4/mouse.4 3.html
@@ -0,0 +1,292 @@
+<table class="head">
+ <tr>
+ <td class="head-ltitle">MOUSE(4)</td>
+ <td class="head-vol">Device Drivers Manual</td>
+ <td class="head-rtitle">MOUSE(4)</td>
+ </tr>
+</table>
+<div class="manual-text">
+<section class="Sh">
+<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
+<p class="Pp"><code class="Nm">mouse</code> &#x2014; <span class="Nd">mouse and
+ pointing device drivers</span></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
+<p class="Pp"><code class="In">#include
+ &lt;<a class="In">sys/mouse.h</a>&gt;</code></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
+<p class="Pp">The mouse drivers <a class="Xr">psm(4)</a>,
+ <a class="Xr">ums(4)</a> and <a class="Xr">sysmouse(4)</a> provide user
+ programs with movement and button state information of the mouse. Currently
+ there are specific device drivers for bus, InPort, PS/2, and USB mice. The
+ serial mouse is not directly supported by a dedicated driver, but it is
+ accessible via the serial device driver or via <a class="Xr">moused(8)</a>
+ and <a class="Xr">sysmouse(4)</a>.</p>
+<p class="Pp">The user program simply opens a mouse device with a
+ <a class="Xr">open(2)</a> call and reads mouse data from the device via
+ <a class="Xr">read(2)</a>. Movement and button states are usually encoded in
+ fixed-length data packets. Some mouse devices may send data in variable
+ length of packets. Actual protocol (data format) used by each driver differs
+ widely.</p>
+<p class="Pp">The mouse drivers may have ``non-blocking'' attribute which will
+ make the driver return immediately if mouse data is not available.</p>
+<p class="Pp">Mouse device drivers often offer several levels of operation. The
+ current operation level can be examined and changed via
+ <a class="Xr">ioctl(2)</a> commands. The level zero is the lowest level at
+ which the driver offers the basic service to user programs. Most drivers
+ provide horizontal and vertical movement of the mouse and state of up to
+ three buttons at this level. At the level one, if supported by the driver,
+ mouse data is encoded in the standard format
+ <code class="Dv">MOUSE_PROTO_SYSMOUSE</code> as follows:</p>
+<p class="Pp"></p>
+<dl class="Bl-tag Bl-compact">
+ <dt>Byte 1</dt>
+ <dd>
+ <dl class="Bl-tag Bl-compact">
+ <dt>bit 7</dt>
+ <dd>Always one.</dd>
+ <dt>bit 6..3</dt>
+ <dd>Always zero.</dd>
+ <dt>bit 2</dt>
+ <dd>Left button status; cleared if pressed, otherwise set.</dd>
+ <dt>bit 1</dt>
+ <dd>Middle button status; cleared if pressed, otherwise set. Always one,
+ if the device does not have the middle button.</dd>
+ <dt>bit 0</dt>
+ <dd>Right button status; cleared if pressed, otherwise set.</dd>
+ </dl>
+ </dd>
+ <dt>Byte 2</dt>
+ <dd>The first half of horizontal movement count in two's complement; -128
+ through 127.</dd>
+ <dt>Byte 3</dt>
+ <dd>The first half of vertical movement count in two's complement; -128
+ through 127.</dd>
+ <dt>Byte 4</dt>
+ <dd>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.</dd>
+ <dt>Byte 5</dt>
+ <dd>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.</dd>
+ <dt>Byte 6</dt>
+ <dd>The bit 7 is always zero. The lower 7 bits encode the first half of Z axis
+ movement count in two's complement; -64 through 63.</dd>
+ <dt>Byte 7</dt>
+ <dd>The bit 7 is always zero. The lower 7 bits encode the second half of the Z
+ axis movement count in two's complement; -64 through 63. To obtain the
+ full Z axis movement count, add the byte 6 and 7.</dd>
+ <dt>Byte 8</dt>
+ <dd>The bit 7 is always zero. The bits 0 through 6 reflect the state of the
+ buttons 4 through 10. If a button is pressed, the corresponding bit is
+ cleared. Otherwise the bit is set.</dd>
+</dl>
+<p class="Pp">The first 5 bytes of this format is compatible with the
+ MouseSystems format. The additional 3 bytes have their MSBs always set to
+ zero. Thus, if the user program can interpret the MouseSystems data format
+ and tries to find the first byte of the format by detecting the bit pattern
+ 10000xxxb, it will discard the additional bytes, thus, be able to decode x,
+ y and states of 3 buttons correctly.</p>
+<p class="Pp">Device drivers may offer operation levels higher than one. Refer
+ to manual pages of individual drivers for details.</p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="IOCTLS"><a class="permalink" href="#IOCTLS">IOCTLS</a></h1>
+<p class="Pp">The following <a class="Xr">ioctl(2)</a> commands are defined for
+ the mouse drivers. The degree of support varies from one driver to another.
+ This section gives general description of the commands. Refer to manual
+ pages of individual drivers for specific details.</p>
+<p class="Pp"></p>
+<dl class="Bl-tag Bl-compact">
+ <dt id="MOUSE_GETLEVEL"><a class="permalink" href="#MOUSE_GETLEVEL"><code class="Dv">MOUSE_GETLEVEL</code></a>
+ <var class="Ar">int *level</var></dt>
+ <dd style="width: auto;">&#x00A0;</dd>
+ <dt id="MOUSE_SETLEVEL"><a class="permalink" href="#MOUSE_SETLEVEL"><code class="Dv">MOUSE_SETLEVEL</code></a>
+ <var class="Ar">int *level</var></dt>
+ <dd>These commands manipulate the operation level of the mouse driver.
+ <p class="Pp"></p>
+ </dd>
+ <dt id="MOUSE_GETHWINFO"><a class="permalink" href="#MOUSE_GETHWINFO"><code class="Dv">MOUSE_GETHWINFO</code></a>
+ <var class="Ar">mousehw_t *hw</var></dt>
+ <dd>Returns the hardware information of the attached device in the following
+ Except for the <code class="Dv">iftype</code> field, the device driver may
+ not always fill the structure with correct values. Consult manual pages of
+ individual drivers for details of support.
+ <div class="Bd Pp Li">
+ <pre>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;</pre>
+ </div>
+ <p class="Pp">The <code class="Dv">buttons</code> field holds the number of
+ buttons detected by the driver. The driver may put an arbitrary value,
+ such as two, in this field, if it cannot determine the exact number.</p>
+ <p class="Pp">The <code class="Dv">iftype</code> is the type of interface:
+ <code class="Dv">MOUSE_IF_SERIAL</code>,
+ <code class="Dv">MOUSE_IF_BUS</code>,
+ <code class="Dv">MOUSE_IF_INPORT</code>,
+ <code class="Dv">MOUSE_IF_PS2</code>,
+ <code class="Dv">MOUSE_IF_USB</code>,
+ <code class="Dv">MOUSE_IF_SYSMOUSE</code> or
+ <code class="Dv">MOUSE_IF_UNKNOWN</code>.</p>
+ <p class="Pp">The <code class="Dv">type</code> tells the device type:
+ <code class="Dv">MOUSE_MOUSE</code>,
+ <code class="Dv">MOUSE_TRACKBALL</code>,
+ <code class="Dv">MOUSE_STICK</code>, <code class="Dv">MOUSE_PAD</code>,
+ or <code class="Dv">MOUSE_UNKNOWN</code>.</p>
+ <p class="Pp">The <code class="Dv">model</code> may be
+ <code class="Dv">MOUSE_MODEL_GENERIC</code> or one of
+ <code class="Dv">MOUSE_MODEL_XXX</code> constants.</p>
+ <p class="Pp">The <code class="Dv">hwid</code> is the ID value returned by
+ the pointing device. It depend on the interface type; refer to the
+ manual page of specific mouse drivers for possible values.</p>
+ <p class="Pp"></p>
+ </dd>
+ <dt id="MOUSE_GETMODE"><a class="permalink" href="#MOUSE_GETMODE"><code class="Dv">MOUSE_GETMODE</code></a>
+ <var class="Ar">mousemode_t *mode</var></dt>
+ <dd>The command reports the current operation parameters of the mouse driver.
+ <div class="Bd Pp Li">
+ <pre>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;</pre>
+ </div>
+ <p class="Pp">The <code class="Dv">protocol</code> field tells the format in
+ which the device status is returned when the mouse data is read by the
+ user program. It is one of <code class="Dv">MOUSE_PROTO_XXX</code>
+ constants.</p>
+ <p class="Pp">The <code class="Dv">rate</code> field is the status report
+ rate (reports/sec) at which the device will send movement reports to the
+ host computer. -1 if unknown or not applicable.</p>
+ <p class="Pp">The <code class="Dv">resolution</code> field holds a value
+ specifying resolution of the pointing device. It is a positive value or
+ one of <code class="Dv">MOUSE_RES_XXX</code> constants.</p>
+ <p class="Pp">The <code class="Dv">accelfactor</code> field holds a value to
+ control acceleration feature. It must be zero or greater. If it is zero,
+ acceleration is disabled.</p>
+ <p class="Pp">The <code class="Dv">packetsize</code> field tells the length
+ of the fixed-size data packet or the length of the fixed part of the
+ variable-length packet. The size depends on the interface type, the
+ device type and model, the protocol and the operation level of the
+ driver.</p>
+ <p class="Pp">The array <code class="Dv">syncmask</code> holds a bit mask
+ and pattern to detect the first byte of the data packet.
+ <code class="Dv">syncmask[0]</code> is the bit mask to be ANDed with a
+ byte. If the result is equal to <code class="Dv">syncmask[1]</code>, 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, should be
+ taken only as an advisory measure.</p>
+ <p class="Pp"></p>
+ </dd>
+ <dt id="MOUSE_SETMODE"><a class="permalink" href="#MOUSE_SETMODE"><code class="Dv">MOUSE_SETMODE</code></a>
+ <var class="Ar">mousemode_t *mode</var></dt>
+ <dd>The command changes the current operation parameters of the mouse driver
+ as specified in <var class="Ar">mode</var>. Only
+ <code class="Dv">rate</code>, <code class="Dv">resolution</code>,
+ <code class="Dv">level</code> and <code class="Dv">accelfactor</code> may
+ be modifiable. Setting values in the other field does not generate error
+ and has no effect.
+ <p class="Pp">If you do not want to change the current setting of a field,
+ put -1 there. You may also put zero in
+ <code class="Dv">resolution</code> and <code class="Dv">rate</code>, and
+ the default value for the fields will be selected.</p>
+ <p class="Pp"></p>
+ </dd>
+ <dt id="MOUSE_READDATA"><a class="permalink" href="#MOUSE_READDATA"><code class="Dv">MOUSE_READDATA</code></a>
+ <var class="Ar">mousedata_t *data</var></dt>
+ <dd>The command reads the raw data from the device.
+ <div class="Bd Pp Li">
+ <pre>typedef struct mousedata {
+ int len; /* # of data in the buffer */
+ int buf[16]; /* data buffer */
+} mousedata_t;</pre>
+ </div>
+ <p class="Pp">The calling process must fill the <code class="Dv">len</code>
+ field with the number of bytes to be read into the buffer. This command
+ may not be supported by all drivers.</p>
+ <p class="Pp"></p>
+ </dd>
+ <dt id="MOUSE_READSTATE"><a class="permalink" href="#MOUSE_READSTATE"><code class="Dv">MOUSE_READSTATE</code></a>
+ <var class="Ar">mousedata_t *state</var></dt>
+ <dd>The command reads the raw state data from the device. It uses the same
+ structure as above. This command may not be supported by all drivers.
+ <p class="Pp"></p>
+ </dd>
+ <dt id="MOUSE_GETSTATUS"><a class="permalink" href="#MOUSE_GETSTATUS"><code class="Dv">MOUSE_GETSTATUS</code></a>
+ <var class="Ar">mousestatus_t *status</var></dt>
+ <dd>The command returns the current state of buttons and movement counts in
+ the following structure.
+ <div class="Bd Pp Li">
+ <pre>typedef struct mousestatus {
+ int flags; /* state change flags */
+ int button; /* button status */
+ int obutton; /* previous button status */
+ int dx; /* x movement */
+ int dy; /* y movement */
+ int dz; /* z movement */
+} mousestatus_t;</pre>
+ </div>
+ <p class="Pp">The <code class="Dv">button</code> and
+ <code class="Dv">obutton</code> fields hold the current and the previous
+ state of the mouse buttons. When a button is pressed, the corresponding
+ bit is set. The mouse drivers may support up to 31 buttons with the bit
+ 0 through 31. Few button bits are defined as
+ <code class="Dv">MOUSE_BUTTON1DOWN</code> through
+ <code class="Dv">MOUSE_BUTTON8DOWN</code>. The first three buttons
+ correspond to left, middle and right buttons.</p>
+ <p class="Pp">If the state of the button has changed since the last
+ <code class="Dv">MOUSE_GETSTATUS</code> call, the corresponding bit in
+ the <code class="Dv">flags</code> field will be set. If the mouse has
+ moved since the last call, the <code class="Dv">MOUSE_POSCHANGED</code>
+ bit in the <code class="Dv">flags</code> field will also be set.</p>
+ <p class="Pp">The other fields hold movement counts since the last
+ <code class="Dv">MOUSE_GETSTATUS</code> call. The internal counters will
+ be reset after every call to this command.</p>
+ </dd>
+</dl>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1>
+<dl class="Bl-tag Bl-compact">
+ <dt><span class="Pa">/dev/cuau%d</span></dt>
+ <dd>serial ports</dd>
+ <dt><span class="Pa">/dev/psm%d</span></dt>
+ <dd>PS/2 mouse device</dd>
+ <dt><span class="Pa">/dev/sysmouse</span></dt>
+ <dd>virtual mouse device</dd>
+ <dt><span class="Pa">/dev/ums%d</span></dt>
+ <dd>USB mouse device</dd>
+</dl>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
+ ALSO</a></h1>
+<p class="Pp"><a class="Xr">ioctl(2)</a>, <a class="Xr">psm(4)</a>,
+ <a class="Xr">sysmouse(4)</a>, <a class="Xr">ums(4)</a>,
+ <a class="Xr">moused(8)</a></p>
+</section>
+<section class="Sh">
+<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
+<p class="Pp">This manual page was written by <span class="An">Kazutaka
+ Yokota</span>
+ &lt;<a class="Mt" href="mailto:yokota@FreeBSD.org">yokota@FreeBSD.org</a>&gt;.</p>
+</section>
+</div>
+<table class="foot">
+ <tr>
+ <td class="foot-date">December 3, 1997</td>
+ <td class="foot-os">FreeBSD 15.0</td>
+ </tr>
+</table>