1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*
23  * Copyright (c) 1999 by Sun Microsystems, Inc.
24  * All rights reserved.
25  */
26 
27 #ifndef _KBTRANS_LOWER_H
28 #define	_KBTRANS_LOWER_H
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 /*
35  * This structure describes the state of the keyboard.
36  * and also specifies the keytables.
37  */
38 struct kbtrans_lower {
39 	/* Generating pre-4.1 events? */
40 	int	kbtrans_compat;
41 
42 	/* key to repeat in TR_ASCII mode */
43 	kbtrans_key_t kbtrans_repeatkey;
44 
45 	/* Current state of the LED's */
46 	uchar_t	kbtrans_led_state;
47 
48 	/* Pointer to keyboard maps */
49 	struct  keyboard *kbtrans_keyboard;
50 
51 	/* Current shift state */
52 	uint_t   kbtrans_shiftmask;
53 
54 	uchar_t  kbtrans_state;		/* compose state */
55 	uint_t   kbtrans_buckybits;	/* current buckybits */
56 	uint_t   kbtrans_togglemask;   	/* Toggle shifts state */
57 	kbtrans_key_t kbtrans_compose_key;	/* first compose key */
58 	kbtrans_key_t kbtrans_fltaccent_entry; /* floating accent entry */
59 
60 	/*
61 	 * Various mapping tables.
62 	 */
63 	signed char			*kbtrans_compose_map;
64 	struct compose_sequence_t	*kbtrans_compose_table;
65 	struct fltaccent_sequence_t	*kbtrans_fltaccent_table;
66 
67 	/* Strings sent by various keys */
68 	char				(*kbtrans_keystringtab)[KTAB_STRLEN];
69 
70 	/* Num lock table */
71 	unsigned char			*kbtrans_numlock_table;
72 
73 	/*
74 	 * The kbtrans structure specifies the state of the
75 	 * stream.
76 	 */
77 	struct kbtrans			*kbtrans_upper;
78 };
79 
80 
81 /*
82  * Different functions must be called based upon the type of translation
83  * mode.  Each translation mode such as TR_ASCII, TR_EVENT, TR_NONE, etc.
84  * has an instance of this structure.
85  */
86 struct keyboard_callback {
87 
88 	/*
89 	 * Raw (untranslated) keypress
90 	 */
91 	void (*kc_keypressed_raw)(struct kbtrans *, kbtrans_key_t);
92 
93 	/*
94 	 * Raw (untranslated) keyrelease
95 	 */
96 	void (*kc_keyreleased_raw)(struct kbtrans *, kbtrans_key_t);
97 
98 	/*
99 	 * Keypress
100 	 */
101 	void (*kc_keypressed)(struct kbtrans *, uint_t, kbtrans_key_t, uint_t);
102 
103 	/*
104 	 * Keyrelease
105 	 */
106 	void (*kc_keyreleased)(struct kbtrans *, kbtrans_key_t);
107 
108 	/*
109 	 * Initialize a repeat character
110 	 */
111 	void (*kc_setup_repeat)(struct kbtrans *, uint_t, kbtrans_key_t);
112 
113 	/*
114 	 * Cancel a repeat character
115 	 */
116 	void (*kc_cancel_repeat)(struct kbtrans *);
117 
118 	/*
119 	 * Process the led state change
120 	 */
121 	void (*kc_setled)(struct kbtrans *);
122 };
123 
124 /*
125  * Process a scancode.  This routine will call the functions in
126  * keyboard_callback to handle the translated key.
127  */
128 void kbtrans_processkey(struct kbtrans_lower *, struct keyboard_callback *,
129     kbtrans_key_t, enum keystate);
130 
131 /*
132  * This routine finds the entry for the specified keycode based on the
133  * specified shift mask.
134  */
135 keymap_entry_t *kbtrans_find_entry(struct kbtrans_lower *, uint_t,
136     kbtrans_key_t);
137 
138 /*
139  * Debug printing
140  */
141 #ifndef DPRINTF
142 #ifdef DEBUG
143 #define	DPRINTF(l, m, args) \
144 	(((l) >= kbtrans_errlevel) && ((m) & kbtrans_errmask) ? \
145 		kbtrans_dprintf args :                          \
146 		(void) 0)
147 #else
148 #define	DPRINTF(l, m, args)
149 #endif
150 #endif
151 
152 /*
153  * Severity levels for printing
154  */
155 #define	PRINT_L0	0	/* print every message */
156 #define	PRINT_L1	1	/* debug */
157 #define	PRINT_L2	2	/* minor errors */
158 #define	PRINT_L3	3	/* major errors */
159 #define	PRINT_L4	4	/* catastophic errors */
160 
161 /*
162  * Masks
163  */
164 
165 #define	PRINT_MASK_ALL		0xFFFFFFFF
166 #define	PRINT_MASK_OPEN		0x00000002
167 #define	PRINT_MASK_PACKET	0x00000008
168 #define	PRINT_MASK_CLOSE	0x00000004
169 
170 #ifdef DEBUG
171 extern int	kbtrans_errmask;
172 extern int	kbtrans_errlevel;
173 extern void	kbtrans_dprintf(void *, const char *fmt, ...);
174 #endif
175 
176 #ifdef __cplusplus
177 }
178 #endif
179 
180 #endif	/* _KBTRANS_LOWER_H */
181