| /* |
| * CDDL HEADER START |
| * |
| * The contents of this file are subject to the terms of the |
| * Common Development and Distribution License, Version 1.0 only |
| * (the "License"). You may not use this file except in compliance |
| * with the License. |
| * |
| * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE |
| * or http://www.opensolaris.org/os/licensing. |
| * See the License for the specific language governing permissions |
| * and limitations under the License. |
| * |
| * When distributing Covered Code, include this CDDL HEADER in each |
| * file and include the License file at usr/src/OPENSOLARIS.LICENSE. |
| * If applicable, add the following below this CDDL HEADER, with the |
| * fields enclosed by brackets "[]" replaced with your own identifying |
| * information: Portions Copyright [yyyy] [name of copyright owner] |
| * |
| * CDDL HEADER END |
| */ |
| /* |
| * Copyright (c) 1999 by Sun Microsystems, Inc. |
| * All rights reserved. |
| */ |
| |
| #ifndef _KBTRANS_LOWER_H |
| #define _KBTRANS_LOWER_H |
| |
| #pragma ident "%Z%%M% %I% %E% SMI" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* |
| * This structure describes the state of the keyboard. |
| * and also specifies the keytables. |
| */ |
| struct kbtrans_lower { |
| /* Generating pre-4.1 events? */ |
| int kbtrans_compat; |
| |
| /* key to repeat in TR_ASCII mode */ |
| kbtrans_key_t kbtrans_repeatkey; |
| |
| /* Current state of the LED's */ |
| uchar_t kbtrans_led_state; |
| |
| /* Pointer to keyboard maps */ |
| struct keyboard *kbtrans_keyboard; |
| |
| /* Current shift state */ |
| uint_t kbtrans_shiftmask; |
| |
| uchar_t kbtrans_state; /* compose state */ |
| uint_t kbtrans_buckybits; /* current buckybits */ |
| uint_t kbtrans_togglemask; /* Toggle shifts state */ |
| ushort_t kbtrans_compose_key; /* first compose key */ |
| ushort_t kbtrans_fltaccent_entry; /* floating accent keymap entry */ |
| |
| /* |
| * Various mapping tables. |
| */ |
| signed char *kbtrans_compose_map; |
| struct compose_sequence_t *kbtrans_compose_table; |
| struct fltaccent_sequence_t *kbtrans_fltaccent_table; |
| |
| /* Strings sent by various keys */ |
| char (*kbtrans_keystringtab)[KTAB_STRLEN]; |
| |
| /* Num lock table */ |
| unsigned char *kbtrans_numlock_table; |
| |
| /* |
| * The kbtrans structure specifies the state of the |
| * stream. |
| */ |
| struct kbtrans *kbtrans_upper; |
| }; |
| |
| |
| /* |
| * Different functions must be called based upon the type of translation |
| * mode. Each translation mode such as TR_ASCII, TR_EVENT, TR_NONE, etc. |
| * has an instance of this structure. |
| */ |
| struct keyboard_callback { |
| |
| /* |
| * Raw (untranslated) keypress |
| */ |
| void (*kc_keypressed_raw)(struct kbtrans *, kbtrans_key_t); |
| |
| /* |
| * Raw (untranslated) keyrelease |
| */ |
| void (*kc_keyreleased_raw)(struct kbtrans *, kbtrans_key_t); |
| |
| /* |
| * Keypress |
| */ |
| void (*kc_keypressed)(struct kbtrans *, uint_t, kbtrans_key_t, uint_t); |
| |
| /* |
| * Keyrelease |
| */ |
| void (*kc_keyreleased)(struct kbtrans *, kbtrans_key_t); |
| |
| /* |
| * Initialize a repeat character |
| */ |
| void (*kc_setup_repeat)(struct kbtrans *, uint_t, kbtrans_key_t); |
| |
| /* |
| * Cancel a repeat character |
| */ |
| void (*kc_cancel_repeat)(struct kbtrans *); |
| |
| /* |
| * Process the led state change |
| */ |
| void (*kc_setled)(struct kbtrans *); |
| }; |
| |
| /* |
| * Process a scancode. This routine will call the functions in |
| * keyboard_callback to handle the translated key. |
| */ |
| void |
| kbtrans_processkey( |
| struct kbtrans_lower *lower, |
| struct keyboard_callback *cb, |
| kbtrans_key_t key, |
| enum keystate state |
| ); |
| |
| /* |
| * This routine finds the entry for the specified keycode based on the |
| * specified shift mask. |
| */ |
| unsigned short * |
| kbtrans_find_entry( |
| struct kbtrans_lower *lower, |
| uint_t mask, |
| kbtrans_key_t |
| ); |
| |
| /* |
| * Debug printing |
| */ |
| #ifndef DPRINTF |
| #ifdef DEBUG |
| #define DPRINTF(l, m, args) \ |
| (((l) >= kbtrans_errlevel) && ((m) & kbtrans_errmask) ? \ |
| kbtrans_dprintf args : \ |
| (void) 0) |
| #else |
| #define DPRINTF(l, m, args) |
| #endif |
| #endif |
| |
| /* |
| * Severity levels for printing |
| */ |
| #define PRINT_L0 0 /* print every message */ |
| #define PRINT_L1 1 /* debug */ |
| #define PRINT_L2 2 /* minor errors */ |
| #define PRINT_L3 3 /* major errors */ |
| #define PRINT_L4 4 /* catastophic errors */ |
| |
| /* |
| * Masks |
| */ |
| |
| #define PRINT_MASK_ALL 0xFFFFFFFF |
| #define PRINT_MASK_OPEN 0x00000002 |
| #define PRINT_MASK_PACKET 0x00000008 |
| #define PRINT_MASK_CLOSE 0x00000004 |
| |
| #ifdef DEBUG |
| extern int kbtrans_errmask; |
| extern int kbtrans_errlevel; |
| extern void kbtrans_dprintf(void *, const char *fmt, ...); |
| #endif |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* _KBTRANS_LOWER_H */ |