xref: /illumos-gate/usr/src/uts/common/sys/vuid_event.h (revision 2d6eb4a5)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
57c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
67c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
77c478bd9Sstevel@tonic-gate  * with the License.
87c478bd9Sstevel@tonic-gate  *
97c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
107c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
117c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
127c478bd9Sstevel@tonic-gate  * and limitations under the License.
137c478bd9Sstevel@tonic-gate  *
147c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
157c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
167c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
177c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
187c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
197c478bd9Sstevel@tonic-gate  *
207c478bd9Sstevel@tonic-gate  * CDDL HEADER END
217c478bd9Sstevel@tonic-gate  */
227c478bd9Sstevel@tonic-gate /*
23*7db6e34eSqz  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
247c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
257c478bd9Sstevel@tonic-gate  */
267c478bd9Sstevel@tonic-gate 
277c478bd9Sstevel@tonic-gate #ifndef _SYS_VUID_EVENT_H
287c478bd9Sstevel@tonic-gate #define	_SYS_VUID_EVENT_H
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate #include <sys/types.h>
317c478bd9Sstevel@tonic-gate #include <sys/types32.h>
327c478bd9Sstevel@tonic-gate 
337c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
347c478bd9Sstevel@tonic-gate extern "C" {
357c478bd9Sstevel@tonic-gate #endif
367c478bd9Sstevel@tonic-gate 
377c478bd9Sstevel@tonic-gate /*
387c478bd9Sstevel@tonic-gate  * This file describes a virtual user input device (vuid) interface.  This
397c478bd9Sstevel@tonic-gate  * is an interface between input devices and their clients.  The interface
407c478bd9Sstevel@tonic-gate  * defines an idealized user input device that may not correspond to any
417c478bd9Sstevel@tonic-gate  * existing physical collection of input devices.
427c478bd9Sstevel@tonic-gate  *
437c478bd9Sstevel@tonic-gate  * It is targeted to input devices that gather command data from humans,
447c478bd9Sstevel@tonic-gate  * e.g., mice, keyboards, tablets, joysticks, light pens, knobs, sliders,
457c478bd9Sstevel@tonic-gate  * buttons, ascii terminals, etc.  The vuid interface is specifically not
467c478bd9Sstevel@tonic-gate  * designed to support input devices that produce voluminous amounts of
477c478bd9Sstevel@tonic-gate  * data, e.g., input scanners, disk drives, voice packets.
487c478bd9Sstevel@tonic-gate  *
497c478bd9Sstevel@tonic-gate  * Here are some of the properties that are expected of a typical client
507c478bd9Sstevel@tonic-gate  * of vuid:
517c478bd9Sstevel@tonic-gate  *
527c478bd9Sstevel@tonic-gate  *	The client has a richer user interface than can be supported by
537c478bd9Sstevel@tonic-gate  *	a simple ascii terminal.
547c478bd9Sstevel@tonic-gate  *
557c478bd9Sstevel@tonic-gate  *	The client serializes multiple input devices being used
567c478bd9Sstevel@tonic-gate  *	by the user into a single stream of events.
577c478bd9Sstevel@tonic-gate  *
587c478bd9Sstevel@tonic-gate  *	The client preserves the entire state of its input so that
597c478bd9Sstevel@tonic-gate  *	it may query this state.
607c478bd9Sstevel@tonic-gate  *
617c478bd9Sstevel@tonic-gate  * Here are some features that vuid provides to its clients:
627c478bd9Sstevel@tonic-gate  *
637c478bd9Sstevel@tonic-gate  *	A client may extend the capabilities of the predefined vuid by
647c478bd9Sstevel@tonic-gate  *	adding input devices.  A client wants to be able to do this in
657c478bd9Sstevel@tonic-gate  *	a way that fits smoothly with its existing input paradigm.
667c478bd9Sstevel@tonic-gate  *
677c478bd9Sstevel@tonic-gate  *	A client can write its code to be input device independent.  A
687c478bd9Sstevel@tonic-gate  *	client can replace the underlaying physical devices and not
697c478bd9Sstevel@tonic-gate  *	have to be concerned.  In fact, the vuid interface doesn't
707c478bd9Sstevel@tonic-gate  *	really care about physical devices.  One physical device can
717c478bd9Sstevel@tonic-gate  *	masquerade a many logical devices and many physical devices can
727c478bd9Sstevel@tonic-gate  *	look like a single logical device.
737c478bd9Sstevel@tonic-gate  *
747c478bd9Sstevel@tonic-gate  * This file defines the protocol that makes up the virtual user input
757c478bd9Sstevel@tonic-gate  * device.  This includes:
767c478bd9Sstevel@tonic-gate  *
777c478bd9Sstevel@tonic-gate  *	The vuid station codes and there meanings.
787c478bd9Sstevel@tonic-gate  *
797c478bd9Sstevel@tonic-gate  *	The form by which changes to vuid stations, i.e., firm events,
807c478bd9Sstevel@tonic-gate  *	are communicated to clients (typically via the read system
817c478bd9Sstevel@tonic-gate  *	call).
827c478bd9Sstevel@tonic-gate  *
837c478bd9Sstevel@tonic-gate  *	The form by which clients send commands to input devices that
847c478bd9Sstevel@tonic-gate  *	support the vuid (typically via an ioctl system call to send
857c478bd9Sstevel@tonic-gate  *	vuid instead of a native byte stream).
867c478bd9Sstevel@tonic-gate  *
877c478bd9Sstevel@tonic-gate  * Explicitly, this file does not define:
887c478bd9Sstevel@tonic-gate  *
897c478bd9Sstevel@tonic-gate  *	How to store the state of the vuid
907c478bd9Sstevel@tonic-gate  *	(see ../sunwindowdev/vuid_state.h).
917c478bd9Sstevel@tonic-gate  *
927c478bd9Sstevel@tonic-gate  *	How to dynamically allocate additional vuid segments in order
937c478bd9Sstevel@tonic-gate  *	to extend the vuid (one could statically allocate additional
947c478bd9Sstevel@tonic-gate  *	vuid segments by treating this file as the central registry
957c478bd9Sstevel@tonic-gate  *	of vuid segments).
967c478bd9Sstevel@tonic-gate  */
977c478bd9Sstevel@tonic-gate 
987c478bd9Sstevel@tonic-gate /*
997c478bd9Sstevel@tonic-gate  * VUID_SEG_SIZE is the size of a virtual user input "device" address space
1007c478bd9Sstevel@tonic-gate  * segment.
1017c478bd9Sstevel@tonic-gate  */
1027c478bd9Sstevel@tonic-gate #define	VUID_SEG_SIZE	(256)
1037c478bd9Sstevel@tonic-gate 
1047c478bd9Sstevel@tonic-gate /*
1057c478bd9Sstevel@tonic-gate  * This is the central registry of virtual user input devices.
1067c478bd9Sstevel@tonic-gate  * To allocate a new vuid:
1077c478bd9Sstevel@tonic-gate  *
1087c478bd9Sstevel@tonic-gate  *	o Choose an unused portion of the address space.
1097c478bd9Sstevel@tonic-gate  *	  Vuids from 0x00 to 0x7F are reserved for Sun implementers.
1107c478bd9Sstevel@tonic-gate  *	  Vuids from 0x80 to 0xFF are reserved for Sun customers.
1117c478bd9Sstevel@tonic-gate  *
1127c478bd9Sstevel@tonic-gate  *	o Note the new device with a *_DEVID define.  Breifly describe
1137c478bd9Sstevel@tonic-gate  *	  the purpose/usage of the device.  Point to the place where
1147c478bd9Sstevel@tonic-gate  *	  more information can be found.
1157c478bd9Sstevel@tonic-gate  *
1167c478bd9Sstevel@tonic-gate  *	o Note the new device with a VUID_* entry in the Vuid_device
1177c478bd9Sstevel@tonic-gate  *	  enumeration.
1187c478bd9Sstevel@tonic-gate  *
1197c478bd9Sstevel@tonic-gate  *	o List the specific event codes in another header file that is
1207c478bd9Sstevel@tonic-gate  *	  specific to the new device (ASCII_DEVID, TOP_DEVID &
1217c478bd9Sstevel@tonic-gate  *	  WORKSTATION_DEVID events are listing here for historical
1227c478bd9Sstevel@tonic-gate  *	  reasons).
1237c478bd9Sstevel@tonic-gate  */
1247c478bd9Sstevel@tonic-gate 
1257c478bd9Sstevel@tonic-gate #define	ASCII_DEVID		0x00
1267c478bd9Sstevel@tonic-gate 	/* Ascii codes, which include META codes and 8-bit EUC codes */
1277c478bd9Sstevel@tonic-gate 	/* (see below) */
1287c478bd9Sstevel@tonic-gate #define	TOP_DEVID		0x01
1297c478bd9Sstevel@tonic-gate 	/* Top codes, which is ASCII with the 9th bit on (see below) */
1307c478bd9Sstevel@tonic-gate #define	ISO_DEVID		0x02
1317c478bd9Sstevel@tonic-gate 	/* ISO characters 0x80 - 0xFF (backwards compatibility) */
1327c478bd9Sstevel@tonic-gate /* ... Sun implementers add new device ids here ... */
1337c478bd9Sstevel@tonic-gate #define	WHEEL_DEVID		0x78
1347c478bd9Sstevel@tonic-gate #define	LIGHTPEN_DEVID		0x79
1357c478bd9Sstevel@tonic-gate 	/* Lightpen events for	Lightpen */
1367c478bd9Sstevel@tonic-gate #define	BUTTON_DEVID		0x7A
1377c478bd9Sstevel@tonic-gate 	/* Button events from Sun button box */
1387c478bd9Sstevel@tonic-gate #define	DIAL_DEVID		0x7B
1397c478bd9Sstevel@tonic-gate 	/* Dial events from Sun dial box */
1407c478bd9Sstevel@tonic-gate #define	SUNVIEW_DEVID		0x7C
1417c478bd9Sstevel@tonic-gate 	/* Sunview Semantic events */
1427c478bd9Sstevel@tonic-gate #define	PANEL_DEVID		0x7D
1437c478bd9Sstevel@tonic-gate 	/* Panel subwindow package event codes passed around internal */
1447c478bd9Sstevel@tonic-gate 	/* to the panel package (see <suntool/panel.h>) */
1457c478bd9Sstevel@tonic-gate #define	SCROLL_DEVID		0x7E
1467c478bd9Sstevel@tonic-gate 	/* Scrollbar package event codes passed to scrollbar clients on */
1477c478bd9Sstevel@tonic-gate 	/* interesting scrollbar activity (see <suntool/scrollbar.h>) */
1487c478bd9Sstevel@tonic-gate #define	WORKSTATION_DEVID	0x7F
1497c478bd9Sstevel@tonic-gate 	/* Virtual keyboard and locator (mouse) related event codes */
1507c478bd9Sstevel@tonic-gate 	/* that describe a basic "workstation" device collection (see below). */
1517c478bd9Sstevel@tonic-gate 	/* This device is a bit of a hodge podge for historical reasons; */
1527c478bd9Sstevel@tonic-gate 	/* the middle of the address space has SunWindows related events */
1537c478bd9Sstevel@tonic-gate 	/* in it (see <sunwindow/win_input.h >), and the virtual keyboard */
1547c478bd9Sstevel@tonic-gate 	/* and virtual locator are thrown together. */
1557c478bd9Sstevel@tonic-gate /* ... Sun customers add new device ids here ... */
1567c478bd9Sstevel@tonic-gate #define	LAST_DEVID		0xFF
1577c478bd9Sstevel@tonic-gate 	/* No more device ids beyond LAST_DEVID */
1587c478bd9Sstevel@tonic-gate 
1597c478bd9Sstevel@tonic-gate typedef enum vuid_device {
1607c478bd9Sstevel@tonic-gate 	VUID_ASCII = ASCII_DEVID,
1617c478bd9Sstevel@tonic-gate 	VUID_TOP = TOP_DEVID,
1627c478bd9Sstevel@tonic-gate 	VUID_ISO = ISO_DEVID,
1637c478bd9Sstevel@tonic-gate 	VUID_WHEEL = WHEEL_DEVID,
1647c478bd9Sstevel@tonic-gate 	VUID_LIGHTPEN = LIGHTPEN_DEVID,
1657c478bd9Sstevel@tonic-gate 	VUID_DIAL = DIAL_DEVID,
1667c478bd9Sstevel@tonic-gate 	VUID_SUNVIEW = SUNVIEW_DEVID,
1677c478bd9Sstevel@tonic-gate 	VUID_PANEL = PANEL_DEVID,
1687c478bd9Sstevel@tonic-gate 	VUID_SCROLL = SCROLL_DEVID,
1697c478bd9Sstevel@tonic-gate 	VUID_WORKSTATION = WORKSTATION_DEVID,
1707c478bd9Sstevel@tonic-gate 	VUID_LAST = LAST_DEVID
1717c478bd9Sstevel@tonic-gate } Vuid_device;
1727c478bd9Sstevel@tonic-gate 
1737c478bd9Sstevel@tonic-gate #define	vuid_first(devid)	((devid) << 8)
1747c478bd9Sstevel@tonic-gate #define	vuid_last(devid)	(((devid) << 8)+VUID_SEG_SIZE-1)
1757c478bd9Sstevel@tonic-gate #define	vuid_in_range(devid, id) \
1767c478bd9Sstevel@tonic-gate 	    ((id >= vuid_first(devid)) && (id <= vuid_last(devid)))
1777c478bd9Sstevel@tonic-gate 
1787c478bd9Sstevel@tonic-gate /*
1797c478bd9Sstevel@tonic-gate  * EUC (Extended UNIX Code) device related definitions:
1807c478bd9Sstevel@tonic-gate  */
1817c478bd9Sstevel@tonic-gate #define	EUC_FIRST	(0)
1827c478bd9Sstevel@tonic-gate #define	EUC_LAST	(255)
1837c478bd9Sstevel@tonic-gate 
1847c478bd9Sstevel@tonic-gate /*
1857c478bd9Sstevel@tonic-gate  * Old ASCII definitions for backwards compatibility:
1867c478bd9Sstevel@tonic-gate  */
1877c478bd9Sstevel@tonic-gate #define	ASCII_FIRST	(0)
1887c478bd9Sstevel@tonic-gate #define	ASCII_LAST	(127)
1897c478bd9Sstevel@tonic-gate #define	META_FIRST	(128)
1907c478bd9Sstevel@tonic-gate #define	META_LAST	(255)
1917c478bd9Sstevel@tonic-gate 
1927c478bd9Sstevel@tonic-gate /*
1937c478bd9Sstevel@tonic-gate  * Top device related definitions:
1947c478bd9Sstevel@tonic-gate  */
1957c478bd9Sstevel@tonic-gate #define	TOP_FIRST	(256)
1967c478bd9Sstevel@tonic-gate #define	TOP_LAST	(511)
1977c478bd9Sstevel@tonic-gate 
1987c478bd9Sstevel@tonic-gate /*
1997c478bd9Sstevel@tonic-gate  * Old ISO definitions for backwards compatibility:
2007c478bd9Sstevel@tonic-gate  */
2017c478bd9Sstevel@tonic-gate #define	ISO_FIRST	(512)
2027c478bd9Sstevel@tonic-gate #define	ISO_LAST	(767)
2037c478bd9Sstevel@tonic-gate 
2047c478bd9Sstevel@tonic-gate /*
2057c478bd9Sstevel@tonic-gate  * Workstation device related definitions.  First are virtual keyboard
2067c478bd9Sstevel@tonic-gate  * assignments.	 All events for the virtual keyboard have 0 (went up) or
2077c478bd9Sstevel@tonic-gate  * 1 (went down) values.
2087c478bd9Sstevel@tonic-gate  */
2097c478bd9Sstevel@tonic-gate 
2107c478bd9Sstevel@tonic-gate #define	VKEY_FIRST	vuid_first(WORKSTATION_DEVID)
2117c478bd9Sstevel@tonic-gate #define	VKEY_UP		0
2127c478bd9Sstevel@tonic-gate #define	VKEY_DOWN	1
2137c478bd9Sstevel@tonic-gate 
2147c478bd9Sstevel@tonic-gate #define	VKEY_KBD_CODES	(128)	/* The number of event codes in a subset of */
2157c478bd9Sstevel@tonic-gate 				/* the workstation device's address space */
2167c478bd9Sstevel@tonic-gate 				/* that belong to the virtual keyboard */
2177c478bd9Sstevel@tonic-gate 
2187c478bd9Sstevel@tonic-gate #define	VKEY_FIRSTPSEUDO	(VKEY_FIRST)			/* 32512 */
2197c478bd9Sstevel@tonic-gate /*
2207c478bd9Sstevel@tonic-gate  * VKEY_FIRSTPSEUDO thru VKEY_LASTPSEUDO are taken (for historical
2217c478bd9Sstevel@tonic-gate  * reasons) by SunWindows related codes (see <sunwindow/win_input.h >).
2227c478bd9Sstevel@tonic-gate  */
2237c478bd9Sstevel@tonic-gate #define	VKEY_LASTPSEUDO		(VKEY_FIRSTPSEUDO+15)		/* 32527 */
2247c478bd9Sstevel@tonic-gate 
2257c478bd9Sstevel@tonic-gate #define	VKEY_FIRSTSHIFT		(VKEY_LASTPSEUDO+1)		/* 32528 */
2267c478bd9Sstevel@tonic-gate #define	SHIFT_CAPSLOCK		(VKEY_FIRSTSHIFT+0)		/* 32528 */
2277c478bd9Sstevel@tonic-gate #define	SHIFT_LOCK		(VKEY_FIRSTSHIFT+1)		/* 32529 */
2287c478bd9Sstevel@tonic-gate #define	SHIFT_LEFT		(VKEY_FIRSTSHIFT+2)		/* 32530 */
2297c478bd9Sstevel@tonic-gate #define	SHIFT_RIGHT		(VKEY_FIRSTSHIFT+3)		/* 32531 */
2307c478bd9Sstevel@tonic-gate #define	SHIFT_LEFTCTRL		(VKEY_FIRSTSHIFT+4)		/* 32532 */
2317c478bd9Sstevel@tonic-gate /* SHIFT_CTRL is for compatability with previous releases */	/* 32532 */
2327c478bd9Sstevel@tonic-gate #define	SHIFT_CTRL		SHIFT_LEFTCTRL			/* 32532 */
2337c478bd9Sstevel@tonic-gate #define	SHIFT_RIGHTCTRL		(VKEY_FIRSTSHIFT+5)		/* 32533 */
2347c478bd9Sstevel@tonic-gate #define	SHIFT_META		(VKEY_FIRSTSHIFT+6)		/* 32534 */
2357c478bd9Sstevel@tonic-gate #define	SHIFT_TOP		(VKEY_FIRSTSHIFT+7)		/* 32535 */
2367c478bd9Sstevel@tonic-gate #define	SHIFT_CMD		(VKEY_FIRSTSHIFT+8)		/* 32536 */
2377c478bd9Sstevel@tonic-gate #define	SHIFT_ALTG		(VKEY_FIRSTSHIFT+9)		/* 32537 */
2387c478bd9Sstevel@tonic-gate #define	SHIFT_ALT		(VKEY_FIRSTSHIFT+10)		/* 32538 */
2397c478bd9Sstevel@tonic-gate #define	SHIFT_NUMLOCK		(VKEY_FIRSTSHIFT+11)		/* 32539 */
2407c478bd9Sstevel@tonic-gate #define	VKEY_LASTSHIFT		(VKEY_FIRSTSHIFT+15)		/* 32543 */
2417c478bd9Sstevel@tonic-gate 
2427c478bd9Sstevel@tonic-gate #define	VKEY_FIRSTFUNC		(VKEY_LASTSHIFT+1)		/* 32544 */
2437c478bd9Sstevel@tonic-gate 
2447c478bd9Sstevel@tonic-gate #define	BUT_FIRST		(VKEY_FIRSTFUNC)		/* 32544 */
2457c478bd9Sstevel@tonic-gate #define	BUT(i)			((BUT_FIRST)+(i)-1)		/* 32544+i-1 */
2467c478bd9Sstevel@tonic-gate #define	BUT_LAST		(BUT_FIRST+9)			/* 32553 */
2477c478bd9Sstevel@tonic-gate 
2487c478bd9Sstevel@tonic-gate #define	KEY_LEFTFIRST		((BUT_LAST)+1)			/* 32554 */
2497c478bd9Sstevel@tonic-gate #define	KEY_LEFT(i)		((KEY_LEFTFIRST)+(i)-1)		/* 32554+i-1 */
2507c478bd9Sstevel@tonic-gate #define	KEY_LEFTLAST		((KEY_LEFTFIRST)+15)		/* 32569 */
2517c478bd9Sstevel@tonic-gate 
2527c478bd9Sstevel@tonic-gate #define	KEY_RIGHTFIRST		((KEY_LEFTLAST)+1)		/* 32570 */
2537c478bd9Sstevel@tonic-gate #define	KEY_RIGHT(i)		((KEY_RIGHTFIRST)+(i)-1)	/* 32570+i-1 */
2547c478bd9Sstevel@tonic-gate #define	KEY_RIGHTLAST		((KEY_RIGHTFIRST)+15)		/* 32585 */
2557c478bd9Sstevel@tonic-gate 
2567c478bd9Sstevel@tonic-gate #define	KEY_TOPFIRST		((KEY_RIGHTLAST)+1)		/* 32586 */
2577c478bd9Sstevel@tonic-gate #define	KEY_TOP(i)		((KEY_TOPFIRST)+(i)-1)		/* 32586+i-1 */
2587c478bd9Sstevel@tonic-gate #define	KEY_TOPLAST		((KEY_TOPFIRST)+15)		/* 32601 */
2597c478bd9Sstevel@tonic-gate 
2607c478bd9Sstevel@tonic-gate #define	KEY_BOTTOMLEFT		((KEY_TOPLAST)+1)		/* 32602 */
2617c478bd9Sstevel@tonic-gate #define	KEY_BOTTOMRIGHT		((KEY_BOTTOMLEFT)+1)		/* 32603 */
2627c478bd9Sstevel@tonic-gate #define	KEY_BOTTOMFIRST		((KEY_TOPLAST)+1)		/* 32602 */
2637c478bd9Sstevel@tonic-gate #define	KEY_BOTTOM(i)		((KEY_BOTTOMFIRST)+(i)-1)	/* 32602+i-1 */
2647c478bd9Sstevel@tonic-gate #define	KEY_BOTTOMLAST		((KEY_BOTTOMFIRST)+15)		/* 32617 */
2657c478bd9Sstevel@tonic-gate 
2667c478bd9Sstevel@tonic-gate #define	VKEY_LASTFUNC		(VKEY_FIRSTFUNC+73)		/* 32617 */
2677c478bd9Sstevel@tonic-gate 
2687c478bd9Sstevel@tonic-gate #define	VKEY_FIRSTPAD		(VKEY_LASTFUNC+1)		/* 32618 */
2697c478bd9Sstevel@tonic-gate 
2707c478bd9Sstevel@tonic-gate #define	VKEY_PADEQUAL		(VKEY_FIRSTPAD+0)		/* 32618 */
2717c478bd9Sstevel@tonic-gate #define	VKEY_PADSLASH		(VKEY_FIRSTPAD+1)		/* 32619 */
2727c478bd9Sstevel@tonic-gate #define	VKEY_PADSTAR		(VKEY_FIRSTPAD+2)		/* 32620 */
2737c478bd9Sstevel@tonic-gate #define	VKEY_PADMINUS		(VKEY_FIRSTPAD+3)		/* 32621 */
2747c478bd9Sstevel@tonic-gate #define	VKEY_PADSEP		(VKEY_FIRSTPAD+4)		/* 32622 */
2757c478bd9Sstevel@tonic-gate #define	VKEY_PAD7		(VKEY_FIRSTPAD+5)		/* 32623 */
2767c478bd9Sstevel@tonic-gate #define	VKEY_PAD8		(VKEY_FIRSTPAD+6)		/* 32624 */
2777c478bd9Sstevel@tonic-gate #define	VKEY_PAD9		(VKEY_FIRSTPAD+7)		/* 32625 */
2787c478bd9Sstevel@tonic-gate #define	VKEY_PADPLUS		(VKEY_FIRSTPAD+8)		/* 32626 */
2797c478bd9Sstevel@tonic-gate #define	VKEY_PAD4		(VKEY_FIRSTPAD+9)		/* 32627 */
2807c478bd9Sstevel@tonic-gate #define	VKEY_PAD5		(VKEY_FIRSTPAD+10)		/* 32628 */
2817c478bd9Sstevel@tonic-gate #define	VKEY_PAD6		(VKEY_FIRSTPAD+11)		/* 32629 */
2827c478bd9Sstevel@tonic-gate #define	VKEY_PAD1		(VKEY_FIRSTPAD+12)		/* 32630 */
2837c478bd9Sstevel@tonic-gate #define	VKEY_PAD2		(VKEY_FIRSTPAD+13)		/* 32631 */
2847c478bd9Sstevel@tonic-gate #define	VKEY_PAD3		(VKEY_FIRSTPAD+14)		/* 32632 */
2857c478bd9Sstevel@tonic-gate #define	VKEY_PAD0		(VKEY_FIRSTPAD+15)		/* 32633 */
2867c478bd9Sstevel@tonic-gate #define	VKEY_PADDOT		(VKEY_FIRSTPAD+16)		/* 32634 */
2877c478bd9Sstevel@tonic-gate #define	VKEY_PADENTER		(VKEY_FIRSTPAD+17)		/* 32635 */
2887c478bd9Sstevel@tonic-gate 
2897c478bd9Sstevel@tonic-gate #define	VKEY_LASTPAD		(VKEY_FIRSTPAD+17)		/* 32635 */
2907c478bd9Sstevel@tonic-gate 
2917c478bd9Sstevel@tonic-gate #define	VKEY_LAST		(VKEY_FIRST+VKEY_KBD_CODES-1)	/* 32639 */
2927c478bd9Sstevel@tonic-gate 
2937c478bd9Sstevel@tonic-gate /*
2947c478bd9Sstevel@tonic-gate  * More workstation device definitions.	 These are virtual locator
2957c478bd9Sstevel@tonic-gate  * related event code assignments.  Values for these events are int.
2967c478bd9Sstevel@tonic-gate  * VLOC_BATCH's value is a uint_t that describes the number of events
2977c478bd9Sstevel@tonic-gate  * that follow that should be treated as a batch.
2987c478bd9Sstevel@tonic-gate  */
2997c478bd9Sstevel@tonic-gate #define	MOUSE_DEVID	WORKSTATION_DEVID	/* Backward compatibility */
3007c478bd9Sstevel@tonic-gate 
3017c478bd9Sstevel@tonic-gate #define	VLOC_FIRST		(VKEY_LAST+1)			/* 32640 */
3027c478bd9Sstevel@tonic-gate #define	LOC_FIRST_DELTA		(VLOC_FIRST+0)			/* 32640 */
3037c478bd9Sstevel@tonic-gate #define	LOC_X_DELTA		(VLOC_FIRST+0)			/* 32640 */
3047c478bd9Sstevel@tonic-gate #define	LOC_Y_DELTA		(VLOC_FIRST+1)			/* 32641 */
3057c478bd9Sstevel@tonic-gate #define	LOC_LAST_DELTA		(VLOC_FIRST+1)			/* 32641 */
3067c478bd9Sstevel@tonic-gate 
3077c478bd9Sstevel@tonic-gate #define	LOC_FIRST_ABSOLUTE	(VLOC_FIRST+2)			/* 32642 */
3087c478bd9Sstevel@tonic-gate #define	LOC_X_ABSOLUTE		(VLOC_FIRST+2)			/* 32642 */
3097c478bd9Sstevel@tonic-gate #define	LOC_Y_ABSOLUTE		(VLOC_FIRST+3)			/* 32643 */
3107c478bd9Sstevel@tonic-gate #define	LOC_LAST_ABSOLUTE	(VLOC_FIRST+3)			/* 32643 */
3117c478bd9Sstevel@tonic-gate 
3127c478bd9Sstevel@tonic-gate #define	VLOC_BATCH		(VLOC_FIRST+4)			/* 32644 */
3137c478bd9Sstevel@tonic-gate #define	VLOC_LAST		(VLOC_BATCH+1)			/* 32645 */
3147c478bd9Sstevel@tonic-gate 
3157c478bd9Sstevel@tonic-gate #define	MOUSE_CAP_CHANGE_FIRST		(VLOC_LAST+1)		/* 32646 */
3167c478bd9Sstevel@tonic-gate #define	MOUSE_CAP_CHANGE_NUM_BUT	(MOUSE_CAP_CHANGE_FIRST+0) /* 32646 */
3177c478bd9Sstevel@tonic-gate #define	MOUSE_CAP_CHANGE_NUM_WHEEL	(MOUSE_CAP_CHANGE_FIRST+1) /* 32647 */
3187c478bd9Sstevel@tonic-gate 
3197c478bd9Sstevel@tonic-gate #define	MOUSE_TYPE_ABSOLUTE	(VLOC_LAST+3)			/* 32648 */
3207c478bd9Sstevel@tonic-gate 
321*7db6e34eSqz #define	MOUSE_LAST		(VLOC_LAST+3)			/* 32648 */
322*7db6e34eSqz #define	KEYBOARD_LAYOUT_CHANGE	(MOUSE_LAST+1)			/* 32649 */
323*7db6e34eSqz 
3247c478bd9Sstevel@tonic-gate /*
3257c478bd9Sstevel@tonic-gate  * Common names for certain input codes.  The buttons on the physical
3267c478bd9Sstevel@tonic-gate  * mouse are thought to actually belong to the virtual keyboard.
3277c478bd9Sstevel@tonic-gate  */
3287c478bd9Sstevel@tonic-gate #define	MS_LEFT		BUT(1)					/* 32544 */
3297c478bd9Sstevel@tonic-gate #define	MS_MIDDLE	BUT(2)					/* 32545 */
3307c478bd9Sstevel@tonic-gate #define	MS_RIGHT	BUT(3)					/* 32546 */
3317c478bd9Sstevel@tonic-gate 
3327c478bd9Sstevel@tonic-gate /*
3337c478bd9Sstevel@tonic-gate  * A firm_event structure is encoded in the byte stream of a device
3347c478bd9Sstevel@tonic-gate  * when the device has been asked to format its byte stream so.
3357c478bd9Sstevel@tonic-gate  * The time stamp is not defined to be meaningful except to compare
3367c478bd9Sstevel@tonic-gate  * with other Firm_event time stamps.
3377c478bd9Sstevel@tonic-gate  *
3387c478bd9Sstevel@tonic-gate  * The pair field is critical for a state maintainence package
3397c478bd9Sstevel@tonic-gate  * (such as vuid_state.h), one that is designed to not know anything
3407c478bd9Sstevel@tonic-gate  * about the semantics of particular events, to maintain correct data
3417c478bd9Sstevel@tonic-gate  * for corresponding absolute, delta and paired state variables.
3427c478bd9Sstevel@tonic-gate  *
3437c478bd9Sstevel@tonic-gate  * pair, when defined (as indicated by pair_type), is the associated
3447c478bd9Sstevel@tonic-gate  * state variable that should be updated due to this events generation.
3457c478bd9Sstevel@tonic-gate  * This is used to maintain a correspondence between an event that is a
3467c478bd9Sstevel@tonic-gate  * delta and a state that is an absolute value (with a known delta event
3477c478bd9Sstevel@tonic-gate  * defined) and visa versa, e.g., LOC_X_DELTA & LOC_X_ABSOLUTE.
3487c478bd9Sstevel@tonic-gate  * pair is also used to indicate another state variable that
3497c478bd9Sstevel@tonic-gate  * should be updated with the occurrence of this event, e.g., if id is
3507c478bd9Sstevel@tonic-gate  * '^G' then pair could be 'g' or 'G' depending on the state of the shift
3517c478bd9Sstevel@tonic-gate  * key.
3527c478bd9Sstevel@tonic-gate  */
3537c478bd9Sstevel@tonic-gate typedef struct firm_event {
3547c478bd9Sstevel@tonic-gate 	ushort_t	id;	/* Event's unique id */
3557c478bd9Sstevel@tonic-gate 	uchar_t		pair_type;	/* Event pair's type */
3567c478bd9Sstevel@tonic-gate #define	FE_PAIR_NONE		0	/* pair is not defined */
3577c478bd9Sstevel@tonic-gate #define	FE_PAIR_SET		1	/* pair is accompanying id to set */
3587c478bd9Sstevel@tonic-gate 					/* to this events value */
3597c478bd9Sstevel@tonic-gate #define	FE_PAIR_DELTA		2	/* pair is accompanying id that */
3607c478bd9Sstevel@tonic-gate 					/* should be set to the delta of */
3617c478bd9Sstevel@tonic-gate 					/* id's current value and the new */
3627c478bd9Sstevel@tonic-gate 					/* value indicated by this event */
3637c478bd9Sstevel@tonic-gate #define	FE_PAIR_ABSOLUTE	3	/* pair is accompanying id that */
3647c478bd9Sstevel@tonic-gate 					/* should be set to the sum of its */
3657c478bd9Sstevel@tonic-gate 					/* current value and the delta */
3667c478bd9Sstevel@tonic-gate 					/* indicated by this event's value */
3677c478bd9Sstevel@tonic-gate 	uchar_t		pair;	/* Event id's associated delta|absolute|pair */
3687c478bd9Sstevel@tonic-gate 				/* offset within id's segment (minus id's */
3697c478bd9Sstevel@tonic-gate 				/* address) */
3707c478bd9Sstevel@tonic-gate 	int		value;	/* Event's value */
3717c478bd9Sstevel@tonic-gate #if defined(_LP64) || defined(_I32LPx)
3727c478bd9Sstevel@tonic-gate 	struct timeval32 time;	/* Event's time stamp */
3737c478bd9Sstevel@tonic-gate #else
3747c478bd9Sstevel@tonic-gate 	struct timeval time;
3757c478bd9Sstevel@tonic-gate #endif
3767c478bd9Sstevel@tonic-gate } Firm_event;
3777c478bd9Sstevel@tonic-gate #define	FIRM_EVENT_NULL ((Firm_event *)0)
3787c478bd9Sstevel@tonic-gate #define	vuid_id_addr(id)		((id) & 0xFF00)
3797c478bd9Sstevel@tonic-gate #define	vuid_id_offset(id)		((id) & 0xFF)
3807c478bd9Sstevel@tonic-gate #define	vuid_boolean_value(value)	(((value) == 0) || ((value) == 1))
3817c478bd9Sstevel@tonic-gate #define	vuid_int_value(value)		(!(vuid_boolean_value((value))))
3827c478bd9Sstevel@tonic-gate 
3837c478bd9Sstevel@tonic-gate /*
3847c478bd9Sstevel@tonic-gate  * Ioctls to input devices that support vuid.
3857c478bd9Sstevel@tonic-gate  */
3867c478bd9Sstevel@tonic-gate 
3877c478bd9Sstevel@tonic-gate /*
3887c478bd9Sstevel@tonic-gate  * VUID*FORMAT ioctls are used to control which byte stream format that
3897c478bd9Sstevel@tonic-gate  * a input device should use.  An errno of ENOTTY or EINVAL indicates that
3907c478bd9Sstevel@tonic-gate  * a device can't speak Firm_events.
3917c478bd9Sstevel@tonic-gate  */
3927c478bd9Sstevel@tonic-gate #define	VUIOC		('v'<<8)
3937c478bd9Sstevel@tonic-gate #if defined(__i386) || defined(__i386_COMPAT)
3947c478bd9Sstevel@tonic-gate #define	VUIDSFORMAT   (VUIOC|11) /* avoid conflict with VT_?????? */
3957c478bd9Sstevel@tonic-gate #define	VUIDGFORMAT   (VUIOC|12) /* avoid conflict with VT_?????? */
3967c478bd9Sstevel@tonic-gate #else
3977c478bd9Sstevel@tonic-gate #define	VUIDSFORMAT   (VUIOC|1) /* Set input device byte stream format */
3987c478bd9Sstevel@tonic-gate #define	VUIDGFORMAT   (VUIOC|2) /* Get input device byte stream format */
3997c478bd9Sstevel@tonic-gate #endif
4007c478bd9Sstevel@tonic-gate #define	VUID_NATIVE	0	/* Native byte stream format */
4017c478bd9Sstevel@tonic-gate #define	VUID_FIRM_EVENT 1	/* struct firm_event byte stream format */
4027c478bd9Sstevel@tonic-gate 
4037c478bd9Sstevel@tonic-gate /*
4047c478bd9Sstevel@tonic-gate  * VUID*ADDR ioctls are used to control which address a particular
4057c478bd9Sstevel@tonic-gate  * virtual input device segment has.  This is used to have an instancing
4067c478bd9Sstevel@tonic-gate  * capability, e.g., a second mouse.  An errno of ENOTTY indicates that
4077c478bd9Sstevel@tonic-gate  * a device can't deal with these commands.  An errno of ENODEV indicates
4087c478bd9Sstevel@tonic-gate  * that the requested virtual device has no events generated for it by
4097c478bd9Sstevel@tonic-gate  * this physical device.
4107c478bd9Sstevel@tonic-gate  *
4117c478bd9Sstevel@tonic-gate  * VUIDSADDR sets the virtual input device segment address indicated by
4127c478bd9Sstevel@tonic-gate  * default to next.
4137c478bd9Sstevel@tonic-gate  *
4147c478bd9Sstevel@tonic-gate  * VUIDGADDR gets the in force address of the virtual input device segment
4157c478bd9Sstevel@tonic-gate  * indicated by default into current.
4167c478bd9Sstevel@tonic-gate  */
4177c478bd9Sstevel@tonic-gate typedef struct	vuid_addr_probe {
4187c478bd9Sstevel@tonic-gate 	short	base;		/* default vuid device addr directed too */
4197c478bd9Sstevel@tonic-gate 	union	{
4207c478bd9Sstevel@tonic-gate 		short	next;	/* next addr for default when VUIDSADDR */
4217c478bd9Sstevel@tonic-gate 		short	current; /* current addr of default when VUIDGADDR */
4227c478bd9Sstevel@tonic-gate 	} data;
4237c478bd9Sstevel@tonic-gate } Vuid_addr_probe;
4247c478bd9Sstevel@tonic-gate 
4257c478bd9Sstevel@tonic-gate #if defined(__i386) || defined(__i386_COMPAT)
4267c478bd9Sstevel@tonic-gate #define	VUIDSADDR   (VUIOC|13)	/* avoid conflict with VT_?????? */
4277c478bd9Sstevel@tonic-gate #define	VUIDGADDR   (VUIOC|14)	/* avoid conflict with VT_?????? */
4287c478bd9Sstevel@tonic-gate #else
4297c478bd9Sstevel@tonic-gate #define	VUIDSADDR   (VUIOC|3)	/* Set vuid address */
4307c478bd9Sstevel@tonic-gate #define	VUIDGADDR   (VUIOC|4)	/* Get vuid address */
4317c478bd9Sstevel@tonic-gate #endif
4327c478bd9Sstevel@tonic-gate 
4337c478bd9Sstevel@tonic-gate #ifdef	__cplusplus
4347c478bd9Sstevel@tonic-gate }
4357c478bd9Sstevel@tonic-gate #endif
4367c478bd9Sstevel@tonic-gate 
4377c478bd9Sstevel@tonic-gate #endif	/* _SYS_VUID_EVENT_H */
438