iPXE
keymap.h File Reference

Keyboard mappings. More...

#include <stdint.h>
#include <ipxe/tables.h>

Go to the source code of this file.

Data Structures

struct  keymap_key
 A remapped key. More...
struct  keymap
 A keyboard mapping. More...

Macros

#define KEYMAP   __table ( struct keymap, "keymap" )
 Keyboard mapping table.
#define __keymap_default   __table_entry ( KEYMAP, 01 )
 Define a default keyboard mapping.
#define __keymap   __table_entry ( KEYMAP, 02 )
 Define a keyboard mapping.
#define KEYMAP_MASK   0xff
 Mappable character mask.
#define KEYMAP_PSEUDO   0x80
 Pseudo key flag.
#define KEYMAP_CTRL   0x01000000
 Ctrl key flag.
#define KEYMAP_CAPSLOCK   0x02000000
 CapsLock key flag.
#define KEYMAP_CAPSLOCK_UNDO   0x04000000
 Undo CapsLock key flag.
#define KEYMAP_CAPSLOCK_REDO   ( KEYMAP_CAPSLOCK | KEYMAP_CAPSLOCK_UNDO )
 Undo and redo CapsLock key flags.
#define KEYMAP_ALTGR   0x08000000
 AltGr key flag.

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
 FILE_SECBOOT (PERMITTED)
unsigned int key_remap (unsigned int character)
 Remap a key.
struct keymapkeymap_find (const char *name)
 Find keyboard map by name.
void keymap_set (struct keymap *keymap)
 Set keyboard map.

Detailed Description

Keyboard mappings.

Definition in file keymap.h.

Macro Definition Documentation

◆ KEYMAP

#define KEYMAP   __table ( struct keymap, "keymap" )

Keyboard mapping table.

Definition at line 41 of file keymap.h.

Referenced by keymap_find(), and TABLE_START().

◆ __keymap_default

#define __keymap_default   __table_entry ( KEYMAP, 01 )

Define a default keyboard mapping.

Definition at line 44 of file keymap.h.

◆ __keymap

#define __keymap   __table_entry ( KEYMAP, 02 )

Define a keyboard mapping.

Definition at line 47 of file keymap.h.

◆ KEYMAP_MASK

#define KEYMAP_MASK   0xff

Mappable character mask.

Definition at line 50 of file keymap.h.

Referenced by key_remap().

◆ KEYMAP_PSEUDO

#define KEYMAP_PSEUDO   0x80

Pseudo key flag.

Definition at line 53 of file keymap.h.

Referenced by bios_getchar(), and usbkbd_map().

◆ KEYMAP_CTRL

#define KEYMAP_CTRL   0x01000000

Ctrl key flag.

Definition at line 56 of file keymap.h.

Referenced by bios_getchar(), efi_getchar(), key_remap(), and usbkbd_map().

◆ KEYMAP_CAPSLOCK

#define KEYMAP_CAPSLOCK   0x02000000

CapsLock key flag.

Definition at line 59 of file keymap.h.

Referenced by key_remap(), and usbkbd_map().

◆ KEYMAP_CAPSLOCK_UNDO

#define KEYMAP_CAPSLOCK_UNDO   0x04000000

Undo CapsLock key flag.

Used when the keyboard driver has already interpreted the CapsLock key, in which case the effect needs to be undone before remapping in order to correctly handle keyboard mappings that swap alphabetic and non-alphabetic keys.

Definition at line 68 of file keymap.h.

Referenced by key_remap().

◆ KEYMAP_CAPSLOCK_REDO

#define KEYMAP_CAPSLOCK_REDO   ( KEYMAP_CAPSLOCK | KEYMAP_CAPSLOCK_UNDO )

Undo and redo CapsLock key flags.

Definition at line 71 of file keymap.h.

Referenced by bios_getchar(), and efi_getchar().

◆ KEYMAP_ALTGR

#define KEYMAP_ALTGR   0x08000000

AltGr key flag.

Definition at line 74 of file keymap.h.

Referenced by bios_getchar(), efi_getchar(), key_remap(), and usbkbd_map().

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ FILE_SECBOOT()

FILE_SECBOOT ( PERMITTED )

◆ key_remap()

unsigned int key_remap ( unsigned int character)
extern

Remap a key.

Parameters
characterCharacter read from console
Return values
mappedMapped character

Definition at line 62 of file keymap.c.

62 {
64 unsigned int mapped = ( character & KEYMAP_MASK );
65 struct keymap_key *key;
66
67 /* Invert case before remapping if applicable */
68 if ( ( character & KEYMAP_CAPSLOCK_UNDO ) && isalpha ( mapped ) )
69 mapped ^= CASE_TOGGLE;
70
71 /* Select remapping table */
72 key = ( ( character & KEYMAP_ALTGR ) ? keymap->altgr : keymap->basic );
73
74 /* Remap via table */
75 for ( ; key->from ; key++ ) {
76 if ( mapped == key->from ) {
77 mapped = key->to;
78 break;
79 }
80 }
81
82 /* Handle Ctrl-<key> and CapsLock */
83 if ( isalpha ( mapped ) ) {
84 if ( character & KEYMAP_CTRL ) {
85 mapped &= CTRL_MASK;
86 } else if ( character & KEYMAP_CAPSLOCK ) {
87 mapped ^= CASE_TOGGLE;
88 }
89 }
90
91 /* Clear flags */
92 mapped &= ASCII_MASK;
93
94 DBGC2 ( &keymap_current, "KEYMAP mapped %04x => %02x\n",
95 character, mapped );
96 return mapped;
97}
union @162305117151260234136356364136041353210355154177 key
Sense key.
Definition scsi.h:3
static int isalpha(int character)
Check if character is alphabetic.
Definition ctype.h:76
#define DBGC2(...)
Definition compiler.h:522
#define ASCII_MASK
ASCII character mask.
Definition keymap.c:39
#define CTRL_MASK
Control character mask.
Definition keymap.c:42
static struct keymap * keymap_current
Current keyboard mapping.
Definition keymap.c:54
#define CASE_TOGGLE
Case toggle bit.
Definition keymap.c:48
#define KEYMAP_CAPSLOCK_UNDO
Undo CapsLock key flag.
Definition keymap.h:68
#define KEYMAP_ALTGR
AltGr key flag.
Definition keymap.h:74
#define KEYMAP_CTRL
Ctrl key flag.
Definition keymap.h:56
#define KEYMAP_MASK
Mappable character mask.
Definition keymap.h:50
#define KEYMAP_CAPSLOCK
CapsLock key flag.
Definition keymap.h:59
A remapped key.
Definition keymap.h:23
A keyboard mapping.
Definition keymap.h:31
struct keymap_key * altgr
AltGr remapping table (zero-terminated)
Definition keymap.h:37
struct keymap_key * basic
Basic remapping table (zero-terminated)
Definition keymap.h:35

References keymap::altgr, ASCII_MASK, keymap::basic, CASE_TOGGLE, CTRL_MASK, DBGC2, isalpha(), key, KEYMAP_ALTGR, KEYMAP_CAPSLOCK, KEYMAP_CAPSLOCK_UNDO, KEYMAP_CTRL, keymap_current, and KEYMAP_MASK.

Referenced by bios_getchar(), efi_getchar(), and usbkbd_map().

◆ keymap_find()

struct keymap * keymap_find ( const char * name)
extern

Find keyboard map by name.

Parameters
nameKeyboard map name
Return values
keymapKeyboard map, or NULL if not found

Definition at line 105 of file keymap.c.

105 {
106 struct keymap *keymap;
107
108 /* Find matching keyboard map */
110 if ( strcmp ( keymap->name, name ) == 0 )
111 return keymap;
112 }
113
114 return NULL;
115}
#define NULL
NULL pointer (VOID *)
Definition Base.h:322
const char * name
Definition ath9k_hw.c:1986
#define KEYMAP
Keyboard mapping table.
Definition keymap.h:41
int strcmp(const char *first, const char *second)
Compare strings.
Definition string.c:174
const char * name
Name.
Definition keymap.h:33
#define for_each_table_entry(pointer, table)
Iterate through all entries within a linker table.
Definition tables.h:386

References for_each_table_entry, KEYMAP, keymap::name, name, NULL, and strcmp().

Referenced by keymap_apply().

◆ keymap_set()

void keymap_set ( struct keymap * keymap)
extern

Set keyboard map.

Parameters
keymapKeyboard map, or NULL to use default

Definition at line 122 of file keymap.c.

122 {
123
124 /* Use default keymap if none specified */
125 if ( ! keymap )
126 keymap = keymap_start;
127
128 /* Set new keyboard map */
129 if ( keymap != keymap_current )
130 DBGC ( &keymap_current, "KEYMAP using \"%s\"\n", keymap->name );
132}
#define DBGC(...)
Definition compiler.h:505

References DBGC, keymap_current, and keymap::name.

Referenced by keymap_apply().