mouse(7) DEVICES AND MODULES mouse(7)
NAME
mouse - NEWS mouse device interface
SYNOPSIS
/dev/mouse
#include <sys/time.h>
#include <io/mouse.h>
DESCRIPTION
Mouse is the mouse device interface on NEWS.
The interface provides two modes, sample or event. In event
mode, the inteface maintains a queue of mouse event reports.
When mouse is opened, the interface is set to sample mode
and mouse coordinates is set to (0, 0). Mode can be changed
using ioctl() described below. When mouse is closed, the
interface is reset to sample mode. When the mode of the
interface is set from event mode to sample mode, mouse event
queue is flushed.
In sample mode, mouse data returned by read() system call is
defined in headef file <newsiop/msreg.h> as follows,
struct ms_data {
int md_sw; /* mouse button */
#define MS_BUTNL 0x04
#define MS_BUTNM 0x02
#define MS_BUTNR 0x01
int md_x; /* x coordinate */
int md_y; /* y coordinate */
};
md_sw encodes the mouse button status and down position is
encoded as '1'(i.e, if ( md_sw & MS_BUTNL) is true, the left
button is in down positon and so on). The number of mouse
data returned is multiple of sizeof(struct ms_data),
although request for multiple mouse data at a time is not
useful in this mode.
In event mode, mouse data returned by read() system call is
mouse event report defined as follows,
/*
* mouse event report
* event report is queued when mouse is put in event mode
* by using MSIOCSETEM ioctl()
*/
struct ms_event {
struct ms_data mse_data; /* mouse X, Y and button status */
char mse_trig; /* trigger that caused this event */
#define MSE_MOTION 0 /* mouse movement */
#define MSE_BUTTON 1 /* mouse buttons */
#define MSE_KEY 2 /* keyboard keys */
char mse_dir; /* key or button direction */
Sony NEWS Distribution 1
mouse(7) DEVICES AND MODULES mouse(7)
#define MSE_DOWN 0 /* down */
#define MSE_UP 1 /* up */
#define MSE_UNKOWN 2 /* unkown */
char mse_code; /* key or button code */
#define MSE_BUTNR 0 /* right button */
#define MSE_BUTNM 1 /* middle button */
#define MSE_BUTNL 2 /* left button */
struct timeval mse_time; /* time when this event occurred */
};
The number of mouse event reports returned by read() system
call is multiple of sizeof(struct ms_event). Currently, the
number of mouse event report queue maintained in the inter-
face is 128. Mse_data is a mouse data same as returned in
sample mode. Mse_trig is a trigger which has caused the
event, and one of mouse motion (MSE_MOTION), mouse button
status changed (MSE_BUTTUN), or keyborad key status changed
(MSE_KEY). Mse_dir is the direction (up or down) of mouse
button or keyboard key change and not meaningful when
mse_trig is MSE_MOTION. mse_code is a code of mouse button
(if mse_trig is MSE_BUTTON) or keyboard key (if mse_trig is
MSE_KEY). See <io/mouse.h> for key code. Finally, mse_time
is the time when this event occurred. The format of time is
defined in <sys/time.h>
You can simulate mouse motion by writing to mouse. Data for-
mat for mouse position to write is,
struct ms_coord {
int mc_x; /* x coordinate */
int mc_y; /* y coordinate */
} ms_coord;
IOCTL
MSIOCSETEM exchanges between two modes and defines an
event mask.
#define MS_EMEVENT 0x80 /* 1 -> event mode */
#define MS_EMKEY 0x40 /* keyboard key changes -> event */
#define MS_EMMOTION 0x10 /* coordinates changes -> event */
#define MS_EMBUTNL 0x04 /* left button changes -> event */
#define MS_EMBUTNM 0x02 /* mid button changes -> event */
#define MS_EMBUTNR 0x01 /* right button changes -> event */
int eventmask;
ioctl(fildes, MSIOCSETEM, &eventmask);
MS_EMEVENT controls mode. If MS_EMEVENT is OFF, the inter-
face is set to sample mode, and if it is ON, the interface
is set to event mode. When MS_EMEVENT is ON, the other bits
specified which trigger will cause events.
MSIOCGETEM get current setting of event mask.
Sony NEWS Distribution 2
mouse(7) DEVICES AND MODULES mouse(7)
int eventmask;
ioctl(fildes, MSIOCGETEM, &eventmask);
MSIOCSETXY set current mouse position.
struct ms_coord ms_coord;
ioctl(fildes, MSIOCSETXY, &ms_coord);
MSIOCFLUSH flush the event queue.
ioctl(fildes, MSIOCFLUSH);
MSIOCSETPARAM set mouse parameter. A mouse paramter has
two componets, mp_delta and mp_mag. When a
mouse is moved more than mp_delta, amount
that exceeds mp_delta is multiplied by
mp_mag. The initial setting of mp_delta is 5
and mp_mag 3.
/* strct ms_param:
* when mouse is moved more than mp_delta, amount that exceeds
* the mp_delta is magnified by mp_mag(>0)
*/
struct ms_param {
int mp_delta; /* threshold for magnification */
int mp_mag; /* magnifying factor */
};
struct msparam msparam;
ioctl(fildes, MSIOCSETPARAM, &msparam);
FILES
/dev/mouse
Sony NEWS Distribution 3