|
|
1.1 ! root 1: .\" Copyright (c) 1990 The Regents of the University of California. ! 2: .\" All rights reserved. ! 3: .\" ! 4: .\" This code is derived from software contributed to Berkeley by ! 5: .\" the Systems Programming Group of the University of Utah Computer ! 6: .\" Science Department. ! 7: .\" ! 8: .\" Redistribution and use in source and binary forms are permitted provided ! 9: .\" that: (1) source distributions retain this entire copyright notice and ! 10: .\" comment, and (2) distributions including binaries display the following ! 11: .\" acknowledgement: ``This product includes software developed by the ! 12: .\" University of California, Berkeley and its contributors'' in the ! 13: .\" documentation or other materials provided with the distribution and in ! 14: .\" all advertising materials mentioning features or use of this software. ! 15: .\" Neither the name of the University nor the names of its contributors may ! 16: .\" be used to endorse or promote products derived from this software without ! 17: .\" specific prior written permission. ! 18: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED ! 19: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF ! 20: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ! 21: .\" ! 22: .\" @(#)hil.4 5.1 (Berkeley) 6/29/90 ! 23: .\" ! 24: .TH HIL 4 "June 29, 1990" ! 25: .UC 7 ! 26: .SH NAME ! 27: hil \- Human Interface Link device driver ! 28: .SH DESCRIPTION ! 29: The Human Interface Link (HIL) is the interface used by the Series ! 30: 300 computers to connect devices such as keyboards, mice, control knobs, ! 31: and ID modules to the machine. ! 32: .PP ! 33: Special files /dev/hil[1-7] refer to physical HIL devices 1 through 7. ! 34: /dev/hil0 refers to the ``loop'' pseudo-device and is used for the queue ! 35: allocation commands described below. ! 36: In the current implementation, ! 37: there can only be one keyboard and it must be the first device (hil1). ! 38: .PP ! 39: The device file that corresponds to a particular HIL device is determined ! 40: by the order of the devices on the loop. For instance, if the ID module ! 41: is the second physical device on the loop, then /dev/hil2 is the special ! 42: file that should be used for communication with the module. ! 43: .PP ! 44: Communication with an HIL device is begun with an ! 45: .I open ! 46: system call. ! 47: A process may open a device already opened by another process unless ! 48: the process is operating in HP-UX compatibility mode ! 49: in which case it requires exclusive use of the device, or ! 50: another process has the device open and is using HP-UX style ! 51: device access (see ! 52: .SM HILIOCHPUX ! 53: below). ! 54: .PP ! 55: Input data from a device are obtained in one of two ways. ! 56: Processes may use an HP-UX style interface in which the \fIread\fP(2) ! 57: system call is used to get fixed-size input packets, ! 58: or they can use a ! 59: .I "shared-queue" ! 60: interface. ! 61: The shared-queue interface avoids the system call overhead associated with ! 62: the HP-UX read interface by sharing a region of memory between the system ! 63: and a user process. ! 64: This region consists of a circular list of 255 event packets, ! 65: and a header containing the size of the queue, and its head and tail indices. ! 66: The system deposits event data at the tail of the queue, ! 67: a process extracts it from the head. ! 68: Extracting an event is done by copying it from the queue and then updating ! 69: the head appropriately (i.e. head = (head + 1) % qsize). ! 70: It is up to the process to ensure that packets are removed from the ! 71: queue quickly enough to prevent the queue from filling. ! 72: The system, when it determines that the queue is full, ! 73: will ignore future packets from the device. ! 74: Devices are \fImapped\fP to queues via an ioctl. ! 75: More than one device can be mapped to a single queue and one device can ! 76: be mapped to several queues. ! 77: Queues are implicitly unmapped by a \fIfork\fP(2) and thus, ! 78: cannot be shared between processes. ! 79: .PP ! 80: Choosing the type of interface is done on a per device basis using ! 81: an ioctl, but each device can only have one interface at any given time. ! 82: .PP ! 83: .I Select ! 84: may be used with either interface to detect when input data are present. ! 85: With the read interface, selecting indicates when there is input for a ! 86: given device. ! 87: With the shared-queue interface, selecting on the loop pseudo-device (hil0) ! 88: indicates when data are present from any device on any queue ! 89: while selecting on an individual device indicates when data are present ! 90: for that device on any queue. ! 91: .PP ! 92: .I Close ! 93: shuts down the file descriptor associated with the HIL device. ! 94: The last close (system-wide) of any device removes that device ! 95: from all queues it was mapped to while the last close of the loop ! 96: pseudo-device unmaps all devices and deallocates all queues. ! 97: .PP ! 98: .IR Ioctl (2) ! 99: is used to control the HIL device. ! 100: The ioctl commands (see <hpdev/hilioctl.h>) ! 101: listed below are separated into two groups. ! 102: The first are those which provide functions identical to HP-UX. ! 103: Refer to \fIhil\fP(7) in the HP-UX documentation for more ! 104: complete descriptions of these ioctls. ! 105: The second set of ioctls are specific to this implementation and are ! 106: primarily related to the shared-queue interface. ! 107: .TP 10 ! 108: HILIOCID ! 109: Identify and Describe ! 110: .sp ! 111: The device will return up to 11 bytes of information describing the ! 112: type and characteristics of the device. ! 113: At the very least, 2 bytes of information, ! 114: the device ID, and the Describe Record Header will be returned. ! 115: Identical to the HP-UX ! 116: .SM HILID ! 117: ioctl. ! 118: .TP ! 119: HILIOCSC ! 120: Report Security Code ! 121: .sp ! 122: Request the security code record from a device. The security code can ! 123: vary from 1 byte to 15, and is only supported by some HIL devices. ! 124: Identical to the HP-UX ! 125: .SM HILSC ! 126: ioctl. ! 127: .TP ! 128: HILIOCRN ! 129: Report Name ! 130: .sp ! 131: An ascii string of up to 15 bytes in length that describes the device ! 132: is returned. ! 133: Identical to the HP-UX ! 134: .SM HILRN ! 135: ioctl. ! 136: .TP ! 137: HILIOCRS ! 138: Report Status ! 139: .sp ! 140: An ascii string of up to 15 bytes in length that describes the current ! 141: status of the device is returned. ! 142: Identical to the HP-UX ! 143: .SM HILRS ! 144: ioctl. ! 145: .TP ! 146: HILIOCED ! 147: Extended Describe ! 148: .sp ! 149: Additional information of up to 15 bytes is returned describing the device. ! 150: This ioctl is similar to HILIOCID, which must be used first ! 151: to determine if the device supports extended describe. ! 152: Identical to the HP-UX ! 153: .SM HILED ! 154: ioctl. ! 155: .TP ! 156: HILIOCAROFF ! 157: Disable Auto Repeat ! 158: .sp ! 159: Turn off auto repeat on the keyboard while it is cooked mode. ! 160: Identical to the HP-UX ! 161: .SM HILDKR ! 162: ioctl. ! 163: .TP ! 164: HILIOCAR1 ! 165: Enable Auto Repeat ! 166: .sp ! 167: Turn on auto repeat on the keyboard while it is in raw mode. ! 168: The repeat rate is set to 1/30th of a second. ! 169: Identical to the HP-UX ! 170: .SM HILER1 ! 171: ioctl. ! 172: .TP ! 173: HILIOCAR2 ! 174: Enable Auto Repeat ! 175: .sp ! 176: Turn on auto repeat on the keyboard while it is in raw mode. ! 177: The repeat rate is set to 1/60th of a second. ! 178: Identical to the HP-UX ! 179: .SM HILER2 ! 180: ioctl. ! 181: .PP ! 182: The following ioctls are specific to this implementation: ! 183: .TP 13 ! 184: HILIOCBEEP ! 185: Beep ! 186: .sp ! 187: Generate a keyboard beep as defined by ! 188: .IR arg . ! 189: .I Arg ! 190: is a pointer to two bytes of information, ! 191: the first is the duration of the beep (microseconds), ! 192: the second is the frequency of the beep. ! 193: .TP 13 ! 194: HILIOCALLOCQ ! 195: Allocate Queue ! 196: .sp ! 197: Allocate and map into user space, ! 198: an HILQ structure as defined in <hpdev/hilioctl.h>. ! 199: .I Arg ! 200: is a pointer to a ! 201: .I hilqinfo ! 202: structure (also described in <hpdev/hilioctl.h>) ! 203: consisting of a ! 204: .I qid ! 205: and an ! 206: .I addr . ! 207: If ! 208: .I addr ! 209: is non-zero it specifies where in the address space to map the queue. ! 210: If zero, the system will select a convenient location and fill in ! 211: .IR addr . ! 212: .I Qid ! 213: is filled in by the system and ! 214: is a small integer used to uniquely identify this queue. ! 215: This ioctl can only be issued to the loop pseudo-device. ! 216: .TP 14 ! 217: HILIOCFREEQ ! 218: Free Queue ! 219: .sp ! 220: Release a previously allocated HIL event queue, ! 221: unmapping it from the user's address space. ! 222: .I Arg ! 223: should point to a ! 224: .I hilqinfo ! 225: structure which contains the ! 226: .I qid ! 227: of the queue to be released. ! 228: All devices that are currently mapped to the queue are unmapped. ! 229: This ioctl can only be issued to the loop pseudo-device. ! 230: .TP 14 ! 231: HILIOCMAPQ ! 232: Map Device to Queue ! 233: .sp ! 234: Maps this device to a previously allocated HIL event queue. ! 235: .I Arg ! 236: is a pointer to an integer containing the ! 237: .I qid ! 238: of the queue. ! 239: Once a device is mapped to a queue, ! 240: all event information generated by the device will be placed ! 241: into the event queue at the tail. ! 242: .TP 14 ! 243: HILIOCUNMAPQ ! 244: Unmap Device from Queue ! 245: .sp ! 246: Unmap this device from a previously allocated HIL event queue. ! 247: .I Arg ! 248: is a pointer to an integer containing the ! 249: .I qid ! 250: for the queue. ! 251: Future events from the device are no longer placed on the event queue. ! 252: .TP 14 ! 253: HILIOCHPUX ! 254: Use HP-UX Read Interface ! 255: .sp ! 256: Use HP-UX semantics for gathering data from this device. ! 257: Instead of placing input events for the device on a queue, ! 258: they are placed, in HP-UX format, into a buffer from which they ! 259: can be obtained via \fIread\fP(2). ! 260: This interface is provided for backwards compatibility. ! 261: Refer to the HP-UX documentation for a description of the event packet. ! 262: .SH ERRORS ! 263: .TP 15 ! 264: [ENODEV] ! 265: no such HIL loop device. ! 266: .TP 15 ! 267: [ENXIO] ! 268: HIL loop is inoperative. ! 269: .TP 15 ! 270: [EBUSY] ! 271: Another HP-UX process has the device open, or another BSD process has the ! 272: device open, and is using it in HP-UX mode. ! 273: .TP 15 ! 274: [EINVAL] ! 275: Invalid ioctl specification. ! 276: .TP 15 ! 277: [EMFILE] ! 278: No more shared queues available. ! 279: .SH FILES ! 280: .ta \w'/dev/hil[1-7] 'u ! 281: /dev/hil0 HIL loop pseudo device. ! 282: .br ! 283: /dev/hil1 HIL keyboard device. ! 284: .br ! 285: /dev/hil[2-7] Individual HIL loop devices.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.