WSKBD(9) | Kernel Developer's Manual | WSKBD(9) |
wskbd
, wskbd_input
,
wskbd_rawinput
,
wskbd_cnattach
,
wskbd_cndetach
, wskbddevprint
—
#include <dev/wscons/wsconsio.h>
#include <dev/wscons/wskbdvar.h>
#include
<dev/wscons/wsksymdef.h>
#include
<dev/wscons/wsksymvar.h>
void
wskbd_input
(struct
device *kbddev, u_int
type, int
value);
void
wskbd_rawinput
(struct
device *kbddev, u_char
*buf, int len);
void
wskbd_cnattach
(const
struct wskbd_consops *consops,
void *conscookie,
const struct wskbd_mapdata
*mapdata);
void
wskbd_cndetach
();
int
wskbddevprint
(void
*aux, const char
*pnp);
wskbd
module is a component of the
wscons(9) framework to provide
machine-independent keyboard support. Most of the support is provided by the
wskbd(4) device driver, which
must be a child of the hardware device driver.
int (*enable)(void *, int); void (*set_leds)(void *, int); int (*ioctl)(void *v, u_long cmd, void *data, int flag, struct lwp *l);
The enable member defines the function to be called to enable keypress passing to wscons. The set_leds member defined the function to be called to set the LEDs on the keyboard. The ioctl member defines the function to be called to perform keyboard-specific ioctl calls.
There is a void * cookie provided by the keyboard driver associated with these functions, which is passed to them when they are invoked.
void (*getc)(void *, u_int *, int *); void (*pollc)(void *, int); void (*bell)(void *, u_int, u_int, u_int);
There is a void * cookie provided by the keyboard driver associated with these functions, which is passed to them when they are invoked.
kbd_t name; /* name of this map */ kbd_t base; /* map this one is based on */ int map_size; /* size of map */ const keysym_t *map; /* the map itself */
const struct wscons_keydesc *keydesc; kbd_t layout;
int console; const struct wskbd_mapdata *keymap; const struct wskbd_accessops *accessops; void *accesscookie;
pos [cmd] normal [shift] [altgr] [shift-altgr]
The fields have the following meanings:
If the keysym after pos is not KS_Cmd_XXX, then cmd is empty. The shift, altgr and shift-altgr fields are determined from previous fields if they are not specified. Therefore, there are four valid keysym declarations:
pos [cmd] normal
pos [cmd] normal shift
pos [cmd] normal shift altgr
pos [cmd] normal shift altgr shift-altgr
wskbd_input
(kbddev,
type, value)wskbd_rawinput
(kbddev,
buf, len)wskbd_cnattach
(consops,
conscookie, mapdata)wskbd_cndetach
()wskbddevprint
(aux,
pnp)config_found
(). (see
autoconf(9)).config_found
() to perform the attach (see
autoconf(9)). The
keymap member points to the
wskbd_mapdata structure which describes the keycode mapping
operations. The accessops member points to the
wskbd_accessops structure which describes the keyboard
access operations. The console member is a boolean to
indicate to wscons whether this keyboard will be used for console input.
wskbd_cnattach
() at console attach
time.
When a keypress arrives from the keyboard, the keyboard driver
must perform any necessary character decoding to wscons events and pass the
events to wscons via wskbd_input
(). If the kernel is
compiled with the option WSDISPLAY_COMPAT_RAWKBD, then the
keyboard driver must also pass the raw keyboard data to wscons via
wskbd_rawinput
().
The wscons framework calls back into the hardware driver by
invoking the functions that are specified in the accessops
structure. The enable
() and
set_leds
() functions are relatively simple and
self-explanatory. The ioctl
() function is called by
the wscons interface to perform keyboard-specific ioctl operations (see
ioctl(2)). The argument
cmd to the ioctl
() function
specifies the specific command to perform using the data
data. Valid commands are listed in
sys/dev/wscons/wsconsio.h.
wskbd
module itself is implement within the files
sys/dev/wscons/wskbd.c and
sys/dev/wscons/wskbdutil.c.
ioctl(2) operations are listed in
sys/dev/wscons/wsconsio.h.
December 20, 2005 | NetBSD 9.0 |