summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/man/man4/Makefile1
-rw-r--r--share/man/man4/vkbd.4154
-rw-r--r--sys/conf/files1
-rw-r--r--sys/modules/Makefile1
4 files changed, 157 insertions, 0 deletions
diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile
index dc0254e..454a356 100644
--- a/share/man/man4/Makefile
+++ b/share/man/man4/Makefile
@@ -330,6 +330,7 @@ MAN= aac.4 \
vga.4 \
vge.4 \
vinum.4 \
+ vkbd.4 \
vlan.4 \
vpo.4 \
vr.4 \
diff --git a/share/man/man4/vkbd.4 b/share/man/man4/vkbd.4
new file mode 100644
index 0000000..dd17c86
--- /dev/null
+++ b/share/man/man4/vkbd.4
@@ -0,0 +1,154 @@
+.\" $Id: vkbd.4,v 1.4 2004/11/16 16:49:39 max Exp $
+.\" $FreeBSD$
+.\"
+.Dd August 12, 2004
+.Os
+.Dt VKBD 4
+.Sh NAME
+.Nm vkbd
+.Nd the virtual AT keyboard interface
+.Sh SYNOPSIS
+.Cd device vkbd
+.Sh DESCRIPTION
+The
+.Nm
+interface is a software loopback mechanism that can be loosely
+described as the virtual AT keyboard analog of the
+.Xr pty 4 ,
+that is,
+.Nm
+does for virtual AT keyboards what the
+.Nm pty
+driver does for terminals.
+.Pp
+The
+.Nm
+driver, like the
+.Nm pty
+driver, provides two interfaces: a keyboard interface like the usual
+facility it is simulating (a virtual AT keyboard in the case of
+.Nm ,
+or a terminal for
+.Nm pty ) ,
+and a character-special device
+.Dq control
+interface.
+.Pp
+The virtual AT keyboards are named
+.Dq Li vkbd0 ,
+.Dq Li vkbd1 ,
+etc., one for each control device that has been opened.
+.Pp
+The
+.Nm
+interface permits opens on the special control device
+.Pa /dev/vkbdctl .
+When this device is opened,
+.Nm
+will return a handle for the lowest unused
+.Nm vkbdctl
+device (use
+.Xr devname 3
+to determine which).
+.Pp
+Each virtual AT keyboad supports the usual keyboard interface
+.Xr ioctl 2 Ns s ,
+and thus can be used with
+.Xr kbdcontrol 1
+like any other keyboard.
+The control device supports exactly the same
+.Xr ioctl 2 Ns s
+as the virtual AT keyboad device.
+Writing AT scan codes to the control device generates an input on
+the virtual AT keyboard, as if the
+(non-existent)
+hardware had just received it.
+.Pp
+The virtual AT kerboard control device, normally
+.Pa /dev/vkbdctl Ns Sy N ,
+is exclusive-open
+(it cannot be opened if it is already open)
+and is restricted to the super-user.
+A
+.Fn read
+call will return the virtual AT keyboard status structure
+(defined in
+.In dev/vkbd/vkbd_var.h )
+if one is available;
+if not, it will either block until one is or return
+.Er EWOULDBLOCK ,
+depending on whether non-blocking I/O has been enabled.
+.Pp
+A
+.Xr write 2
+call passes AT scan codes to be
+.Dq received
+from the virtual AT keyboard.
+Each AT scan code must be passed as
+.Vt unsigned int .
+Although AT scan codes must be passes as
+.Vt unsigned int Ns s ,
+the size of the buffer passed to
+.Xr write 2
+still should be in bytes, i.e.
+.Bd -literal -offset indent
+static unsigned int codes[] =
+{
+/* Make Break */
+ 0x1e, 0x9e
+};
+
+int
+main(void)
+{
+ int fd, len;
+
+ fd = open("/dev/vkbdctl0", O_RDWR);
+ if (fd < 0)
+ err(1, "open");
+
+ /* Note sizeof(codes) - not 2! */
+ len = write(fd, codes, sizeof(codes));
+ if (len < 0)
+ err(1, "write");
+
+ close(fd);
+
+ return (0);
+}
+.Ed
+.Pp
+Write will block if there is not enough space in the input queue.
+.Pp
+The control device also supports
+.Xr select 2
+for read and write.
+.Pp
+On the last close of the control device, the virtual AT keyboard is removed.
+All queued scan codes are thrown away.
+.Sh SEE ALSO
+.Xr kbdcontrol 1 ,
+.Xr atkbdc 4 ,
+.Xr pcvt 4 ,
+.Xr psm 4 ,
+.Xr syscons 4
+.Sh CAVEAT
+The
+.Nm
+interface is a software loopback mechanism, and, thus
+.Xr ddb 4
+will not work with it.
+Current implementation of the
+.Xr syscons 4
+driver can accept input from only one keyboard, even if it is virtual.
+Thus is it not possible to have both wired and virtual keyboard to be active
+at the same time. It is, however, in principal possible to obtain AT scan
+codes from the different sources and write them into the same virtual keyboard.
+The virtual keyboard state synchronization is the user's responsibility.
+.Sh HISTORY
+The
+.Nm
+module was implemented in
+.Fx 6.0 .
+.Sh AUTHORS
+.An Maksim Yevmenkin Aq m_evmenkin@yahoo.com
diff --git a/sys/conf/files b/sys/conf/files
index dd28954..63b12cc 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -835,6 +835,7 @@ dev/usb/usbdi.c optional usb
dev/usb/usbdi_util.c optional usb
dev/utopia/utopia.c optional utopia
dev/vge/if_vge.c optional vge
+dev/vkbd/vkbd.c optional vkbd
dev/vx/if_vx.c optional vx
dev/vx/if_vx_eisa.c optional vx eisa
dev/vx/if_vx_pci.c optional vx pci
diff --git a/sys/modules/Makefile b/sys/modules/Makefile
index faad64d..48bec3c 100644
--- a/sys/modules/Makefile
+++ b/sys/modules/Makefile
@@ -242,6 +242,7 @@ SUBDIR= ${_3dfx} \
uvscom \
${_vesa} \
vge \
+ vkbd \
vpo \
vr \
vx \
OpenPOWER on IntegriCloud