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 #pragma ident "%Z%%M% %I% %E% SMI"
31
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35
36 /*
37 * This structure describes the state of the keyboard.
38 * and also specifies the keytables.
39 */
40 struct kbtrans_lower {
41 /* Generating pre-4.1 events? */
42 int kbtrans_compat;
43
44 /* key to repeat in TR_ASCII mode */
45 kbtrans_key_t kbtrans_repeatkey;
46
47 /* Current state of the LED's */
48 uchar_t kbtrans_led_state;
49
50 /* Pointer to keyboard maps */
51 struct keyboard *kbtrans_keyboard;
52
53 /* Current shift state */
54 uint_t kbtrans_shiftmask;
55
56 uchar_t kbtrans_state; /* compose state */
57 uint_t kbtrans_buckybits; /* current buckybits */
58 uint_t kbtrans_togglemask; /* Toggle shifts state */
59 ushort_t kbtrans_compose_key; /* first compose key */
60 ushort_t kbtrans_fltaccent_entry; /* floating accent keymap entry */
61
62 /*
63 * Various mapping tables.
64 */
65 signed char *kbtrans_compose_map;
66 struct compose_sequence_t *kbtrans_compose_table;
67 struct fltaccent_sequence_t *kbtrans_fltaccent_table;
68
69 /* Strings sent by various keys */
70 char (*kbtrans_keystringtab)[KTAB_STRLEN];
71
72 /* Num lock table */
73 unsigned char *kbtrans_numlock_table;
74
75 /*
76 * The kbtrans structure specifies the state of the
77 * stream.
78 */
79 struct kbtrans *kbtrans_upper;
80 };
81
82
83 /*
84 * Different functions must be called based upon the type of translation
85 * mode. Each translation mode such as TR_ASCII, TR_EVENT, TR_NONE, etc.
86 * has an instance of this structure.
87 */
88 struct keyboard_callback {
89
90 /*
91 * Raw (untranslated) keypress
92 */
93 void (*kc_keypressed_raw)(struct kbtrans *, kbtrans_key_t);
94
95 /*
96 * Raw (untranslated) keyrelease
97 */
98 void (*kc_keyreleased_raw)(struct kbtrans *, kbtrans_key_t);
99
100 /*
101 * Keypress
102 */
103 void (*kc_keypressed)(struct kbtrans *, uint_t, kbtrans_key_t, uint_t);
104
105 /*
106 * Keyrelease
107 */
108 void (*kc_keyreleased)(struct kbtrans *, kbtrans_key_t);
109
110 /*
111 * Initialize a repeat character
112 */
113 void (*kc_setup_repeat)(struct kbtrans *, uint_t, kbtrans_key_t);
114
115 /*
116 * Cancel a repeat character
117 */
118 void (*kc_cancel_repeat)(struct kbtrans *);
119
120 /*
121 * Process the led state change
122 */
123 void (*kc_setled)(struct kbtrans *);
124 };
125
126 /*
127 * Process a scancode. This routine will call the functions in
128 * keyboard_callback to handle the translated key.
129 */
130 void
131 kbtrans_processkey(
132 struct kbtrans_lower *lower,
133 struct keyboard_callback *cb,
134 kbtrans_key_t key,
135 enum keystate state
136 );
137
138 /*
139 * This routine finds the entry for the specified keycode based on the
140 * specified shift mask.
141 */
142 unsigned short *
143 kbtrans_find_entry(
144 struct kbtrans_lower *lower,
145 uint_t mask,
146 kbtrans_key_t
147 );
148
149 /*
150 * Debug printing
151 */
152 #ifndef DPRINTF
153 #ifdef DEBUG
154 #define DPRINTF(l, m, args) \
155 (((l) >= kbtrans_errlevel) && ((m) & kbtrans_errmask) ? \
156 kbtrans_dprintf args : \
157 (void) 0)
158 #else
159 #define DPRINTF(l, m, args)
160 #endif
161 #endif
162
163 /*
164 * Severity levels for printing
165 */
166 #define PRINT_L0 0 /* print every message */
167 #define PRINT_L1 1 /* debug */
168 #define PRINT_L2 2 /* minor errors */
169 #define PRINT_L3 3 /* major errors */
170 #define PRINT_L4 4 /* catastophic errors */
171
172 /*
173 * Masks
174 */
175
176 #define PRINT_MASK_ALL 0xFFFFFFFF
177 #define PRINT_MASK_OPEN 0x00000002
178 #define PRINT_MASK_PACKET 0x00000008
179 #define PRINT_MASK_CLOSE 0x00000004
180
181 #ifdef DEBUG
182 extern int kbtrans_errmask;
183 extern int kbtrans_errlevel;
184 extern void kbtrans_dprintf(void *, const char *fmt, ...);
185 #endif
186
187 #ifdef __cplusplus
188 }
189 #endif
190
191 #endif /* _KBTRANS_LOWER_H */