1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
|
/*
* libbrlapi - A library providing access to braille terminals for applications.
*
* Copyright (C) 2002-2025 by
* Samuel Thibault <Samuel.Thibault@ens-lyon.org>
* Sébastien Hinderer <Sebastien.Hinderer@ens-lyon.org>
*
* libbrlapi comes with ABSOLUTELY NO WARRANTY.
*
* This is free software, placed under the terms of the
* GNU Lesser General Public License, as published by the Free Software
* Foundation; either version 2.1 of the License, or (at your option) any
* later version. Please see the file LICENSE-LGPL for details.
*
* Web Page: http://brltty.app/
*
* This software is maintained by Dave Mielke <dave@mielke.cc>.
*/
/** \file
*/
#ifndef BRLAPI_INCLUDED_KEYCODES
#define BRLAPI_INCLUDED_KEYCODES
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/** \defgroup brlapi_keycodes Types and Defines for \e BrlAPI Key Codes
*
* Key codes are unsigned 64 bit integers. This 64-bit space is split into 3
* parts:
*
* - bits 63-32 (BRLAPI_KEY_FLAGS_MASK), flags: bits 39-32 are standard X
* modifiers (shift, control, meta, ...). Other flags are used for some commands,
* see documentation of BRLAPI_KEY_FLG_* for their respective uses.
* - bits 31-29 (BRLAPI_KEY_TYPE_MASK), key type: either BRLAPI_KEY_TYPE_CMD for
* braille commands, or BRLAPI_KEY_TYPE_SYM for standard X keysyms.
* - bits 28-0 (BRLAPI_KEY_CODE_MASK), key code: for braille commands, see
* BRLAPI_KEY_CMD_* ; for standard X keysyms, this is the keysym value, see
* X11 documentation, a complete list is probably available on your system in
* /usr/include/X11/keysymdef.h
*
* The second and third part are thus mandatory to tell the type of keycode and
* the value of the keycode, and the first part contains optional flags.
*
* The third part is itself split into two parts: a command number and a command
* value. The relative sizes of these parts vary according to the key type.
*
* For a braille command, bits 28-16 (BRLAPI_KEY_CMD_BLK_MASK) hold the braille
* command number, while bits 15-0 (BRLAPI_KEY_CMD_ARG_MASK) hold the command
* value.
*
* The brlapi_expandKeyCode() function may be used for splitting key codes into
* these parts.
*
* For a X keysym, if it is a unicode keysym (0x1uvwxyz), then the command
* number part is 0x1000000 and the value part is 0xuvwxyz. Else, the command
* part is held by bits 28-8 and the value part is held by bits 7-0. This
* permits to easily handle usual cases like 0x00xy (latin1), 0x01xy (latin2),
* XK_Backspace (0xff08, backspace), XK_Tab (0xff09, tab), ...
*
* For instance, if key == 0x0000000020010008,
* - (key & BRLAPI_KEY_TYPE_MASK) == BRLAPI_KEY_TYPE_CMD, so it's a braille
* command
* - (key & BRLAPI_KEY_CMD_BLK_MASK) == BRLAPI_KEY_CMD_ROUTE, so it's the
* braille route command.
* - (key & BRLAPI_KEY_CMD_ARG_MASK) == 8, so the highlighted cell is the 9th
* one (cells are numbered from 0)
* - (key & BRLAPI_KEY_FLAGS_MASK) == 0, so no modifier key was pressed during
* the command, and no particular flag applies to the command.
*
* if key == 0x000000010000FF09,
* - (key & BRLAPI_KEY_TYPE_MASK) == BRLAPI_KEY_TYPE_SYM, so it's a keysym
* - (key & BRLAPI_KEY_CODE_MASK) == XK_Tab, so it's the tab key.
* BRLAPI_KEY_SYM_TAB can also be used here, as well as a few other
* BRLAPI_KEY_SYM_* constants which are provided to avoid having to include
* X11/keysymdef.h
* - (key & BRLAPI_KEY_FLAGS_MASK) == BRLAPI_KEY_FLG_SHIFT, so the shift
* modifier was pressed during the command.
*
* in the X11 standard some keysyms are directly unicode, for instance if
* key == 0x0000000001001EA0,
* - (key & BRLAPI_KEY_TYPE_MASK) == BRLAPI_KEY_TYPE_SYM, so it's a keysym
* - (key & BRLAPI_KEY_SYM_UNICODE) != 0 so it's a unicode keysym, whose value
* is key & (BRLAPI_KEY_SYM_UNICODE-1). Of course, one can also consider
* (key & BRLAPI_KEY_CODE_MASK) == XK_Abelowdot
* - (key & BRLAPI_KEY_FLAGS_MASK) == 0, so no modifier key was pressed during
* the command, and no particular flag applies to the command.
*
* brlapi_ignoreKeyRanges() and brlapi_acceptKeyRanges() manipulate keycode
* ranges. They are composed of 2 keycodes: the "first" and the "last"
* boundaries. The range expressed by these two keycodes is the set of keycodes
* whose lower part (bits 31-0) is between the lower part of the "first" keycode
* and the "last" keycode (inclusive), and whose high part (bits 63-32), the
* flags, contains at least the flags of the "first" keycode, and at most the
* flags of the "last" keycode. Setting the "first" and "last" keycode to the
* same value express only one keycode, for instance. Setting the first and last
* keycode to the same command code but setting no flags in the "first" keycode
* and setting one flag in the "last" keycode expresses only two keycode, with
* the same lower part and no flags set except possibly the flag that is set in
* the "last" keycode. Setting one flag i in the "first" keycode and setting
* the same flag plus another flag j in the "last" keycode expresses that the
* keycodes in the range have flag i set and possibly flag j set, but no other
* flag.
* @{
*/
typedef uint64_t brlapi_keyCode_t;
/** Define a brlapi_keyCode_t constant */
#define BRLAPI_KEYCODE_C(value) UINT64_C(value)
/** Hexadecimal print format for brlapi_keyCode_t */
#define BRLAPI_PRIxKEYCODE PRIx64
/** Unsigned decimal print format for brlapi_keyCode_t */
#define BRLAPI_PRIuKEYCODE PRIu64
/** Brlapi_keyCode_t's biggest value
*
* As defined in \c <stdint.h> */
#define BRLAPI_KEY_MAX UINT64_C(0XFFFFFFFFFFFFFFFF)
/**
* Mask for flags of brlapi_keyCode_t
*/
#define BRLAPI_KEY_FLAGS_MASK UINT64_C(0XFFFFFFFF00000000)
/** Shift for flags of brlapi_keyCode_t */
#define BRLAPI_KEY_FLAGS_SHIFT 32
#define BRLAPI_KEY_FLG(v) ((brlapi_keyCode_t)(v) << BRLAPI_KEY_FLAGS_SHIFT)
/** Standard X modifiers */
/** Mod1 modifier (AKA meta) */
#define BRLAPI_KEY_FLG_MOD1 BRLAPI_KEY_FLG(0x00000008)
/** Mod2 modifier (usually numlock) */
#define BRLAPI_KEY_FLG_MOD2 BRLAPI_KEY_FLG(0x00000010)
/** Mod3 modifier */
#define BRLAPI_KEY_FLG_MOD3 BRLAPI_KEY_FLG(0x00000020)
/** Mod4 modifier */
#define BRLAPI_KEY_FLG_MOD4 BRLAPI_KEY_FLG(0x00000040)
/** Mod5 modifier (usually Alt-Gr) */
#define BRLAPI_KEY_FLG_MOD5 BRLAPI_KEY_FLG(0x00000080)
/**
* Mask for type of brlapi_keyCode_t
*/
#define BRLAPI_KEY_TYPE_MASK UINT64_C(0X00000000E0000000)
/** Shift for type of brlapi_keyCode_t */
#define BRLAPI_KEY_TYPE_SHIFT 29
/** Braille command brlapi_keyCode_t */
#define BRLAPI_KEY_TYPE_CMD UINT64_C(0X0000000020000000)
/** X Keysym brlapi_keyCode_t */
#define BRLAPI_KEY_TYPE_SYM UINT64_C(0X0000000000000000)
/**
* Mask for code of brlapi_keyCode_t
*/
#define BRLAPI_KEY_CODE_MASK UINT64_C(0X000000001FFFFFFF)
/** Shift for code of brlapi_keyCode_t */
#define BRLAPI_KEY_CODE_SHIFT 0
/** Mask for braille command type */
#define BRLAPI_KEY_CMD_BLK_MASK UINT64_C(0X1FFF0000)
/** Shift for braille command type */
#define BRLAPI_KEY_CMD_BLK_SHIFT 16
/** Mask for braille command value */
#define BRLAPI_KEY_CMD_ARG_MASK UINT64_C(0X0000FFFF)
/** Shift for braille command value */
#define BRLAPI_KEY_CMD_ARG_SHIFT 0
#define BRLAPI_KEY_CMD(v) ((v) << BRLAPI_KEY_CMD_BLK_SHIFT)
/** Standard X keysyms */
#define BRLAPI_KEY_SYM_BACKSPACE UINT64_C(0X0000FF08)
#define BRLAPI_KEY_SYM_TAB UINT64_C(0X0000FF09)
#define BRLAPI_KEY_SYM_LINEFEED UINT64_C(0X0000FF0D)
#define BRLAPI_KEY_SYM_ESCAPE UINT64_C(0X0000FF1B)
#define BRLAPI_KEY_SYM_HOME UINT64_C(0X0000FF50)
#define BRLAPI_KEY_SYM_LEFT UINT64_C(0X0000FF51)
#define BRLAPI_KEY_SYM_UP UINT64_C(0X0000FF52)
#define BRLAPI_KEY_SYM_RIGHT UINT64_C(0X0000FF53)
#define BRLAPI_KEY_SYM_DOWN UINT64_C(0X0000FF54)
#define BRLAPI_KEY_SYM_PAGE_UP UINT64_C(0X0000FF55)
#define BRLAPI_KEY_SYM_PAGE_DOWN UINT64_C(0X0000FF56)
#define BRLAPI_KEY_SYM_END UINT64_C(0X0000FF57)
#define BRLAPI_KEY_SYM_INSERT UINT64_C(0X0000FF63)
#define BRLAPI_KEY_SYM_FUNCTION UINT64_C(0X0000FFBE)
#define BRLAPI_KEY_SYM_DELETE UINT64_C(0X0000FFFF)
#define BRLAPI_KEY_SYM_UNICODE UINT64_C(0X01000000)
/**
* When brlapi_enterTtyMode() or brlapi_entg$erTtyModeWithPath() is called
* with a driver name, brlapi_readKey() and brlapi_readKeyWithTimeout()
* will return driver-specific key codes. From most- to least-significant,
* their eight bytes are: F 0 0 0 0 0 G N. F is a byte that contains flag
* bits which are common for all drivers. BRLAPI_DRV_KEY_PRESS, which
* indicates that it's a key press (as opposed to a release) event, is the
* only currently defined flag. The other flag bits are always 0.
* G is the key's group, and N is the key's number within that group.
*/
/** Flag for a driver-specific keycode press (not set means a release) */
#define BRLAPI_DRV_KEY_PRESS BRLAPI_KEYCODE_C(0X8000000000000000)
/** Shift for key number of brlapi_keyCode_t */
#define BRLAPI_DRV_KEY_NUMBER_SHIFT 0
/** Mask for key number of brlapi_keyCode_t */
#define BRLAPI_DRV_KEY_NUMBER_MASK 0XFF
/** Get key number of brlapi_keyCode_t */
#define BRLAPI_DRV_KEY_NUMBER(code) (((code) & BRLAPI_DRV_KEY_NUMBER_MASK) >> BRLAPI_DRV_KEY_NUMBER_SHIFT)
/** Shift for key group of brlapi_keyCode_t */
#define BRLAPI_DRV_KEY_GROUP_SHIFT 8
/** Mask for key group of brlapi_keyCode_t */
#define BRLAPI_DRV_KEY_GROUP_MASK 0XFF00
/** Get key group of brlapi_keyCode_t */
#define BRLAPI_DRV_KEY_GROUP(code) (((code) & BRLAPI_DRV_KEY_GROUP_MASK) >> BRLAPI_DRV_KEY_GROUP_SHIFT)
/** Mask for key value (group and number) of brlapi_keyCode_t */
#define BRLAPI_DRV_KEY_VALUE_MASK (BRLAPI_DRV_KEY_GROUP_MASK | BRLAPI_DRV_KEY_NUMBER_MASK)
/** Key number representing any key in the group */
#define BRLAPI_DRV_KEY_NUMBER_ANY 0XFF
/** @} */
#include "brlapi_constants.h"
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* BRLAPI_INCLUDED_KEYCODES */
|