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