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 */