diff options
| author | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:55:43 -0400 |
|---|---|---|
| committer | Jacob McDonnell <jacob@jacobmcdonnell.com> | 2026-04-25 19:55:43 -0400 |
| commit | ac5e55f5f2af5b92794c2aded46c6bae85b5f5ed (patch) | |
| tree | 9367490586c84cba28652e443e3166d66c33b0d9 /static/freebsd/man4/mouse.4 3.html | |
| parent | 253e67c8b3a72b3a4757fdbc5845297628db0a4a (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.html | 292 |
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> — <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 + <<a class="In">sys/mouse.h</a>></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;"> </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> + <<a class="Mt" href="mailto:yokota@FreeBSD.org">yokota@FreeBSD.org</a>>.</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> |
