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