iPXE
Data Structures | Macros | Functions
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. More...
 
#define __keymap_default   __table_entry ( KEYMAP, 01 )
 Define a default keyboard mapping. More...
 
#define __keymap   __table_entry ( KEYMAP, 02 )
 Define a keyboard mapping. More...
 
#define KEYMAP_MASK   0xff
 Mappable character mask. More...
 
#define KEYMAP_PSEUDO   0x80
 Pseudo key flag. More...
 
#define KEYMAP_CTRL   0x01000000
 Ctrl key flag. More...
 
#define KEYMAP_CAPSLOCK   0x02000000
 CapsLock key flag. More...
 
#define KEYMAP_CAPSLOCK_UNDO   0x04000000
 Undo CapsLock key flag. More...
 
#define KEYMAP_CAPSLOCK_REDO   ( KEYMAP_CAPSLOCK | KEYMAP_CAPSLOCK_UNDO )
 Undo and redo CapsLock key flags. More...
 
#define KEYMAP_ALTGR   0x08000000
 AltGr key flag. More...
 

Functions

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

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 40 of file keymap.h.

◆ __keymap_default

#define __keymap_default   __table_entry ( KEYMAP, 01 )

Define a default keyboard mapping.

Definition at line 43 of file keymap.h.

◆ __keymap

#define __keymap   __table_entry ( KEYMAP, 02 )

Define a keyboard mapping.

Definition at line 46 of file keymap.h.

◆ KEYMAP_MASK

#define KEYMAP_MASK   0xff

Mappable character mask.

Definition at line 49 of file keymap.h.

◆ KEYMAP_PSEUDO

#define KEYMAP_PSEUDO   0x80

Pseudo key flag.

Definition at line 52 of file keymap.h.

◆ KEYMAP_CTRL

#define KEYMAP_CTRL   0x01000000

Ctrl key flag.

Definition at line 55 of file keymap.h.

◆ KEYMAP_CAPSLOCK

#define KEYMAP_CAPSLOCK   0x02000000

CapsLock key flag.

Definition at line 58 of file keymap.h.

◆ 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 67 of file keymap.h.

◆ KEYMAP_CAPSLOCK_REDO

#define KEYMAP_CAPSLOCK_REDO   ( KEYMAP_CAPSLOCK | KEYMAP_CAPSLOCK_UNDO )

Undo and redo CapsLock key flags.

Definition at line 70 of file keymap.h.

◆ KEYMAP_ALTGR

#define KEYMAP_ALTGR   0x08000000

AltGr key flag.

Definition at line 73 of file keymap.h.

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )

◆ key_remap()

unsigned int key_remap ( unsigned int  character)

Remap a key.

Parameters
characterCharacter read from console
Return values
mappedMapped character

Definition at line 61 of file keymap.c.

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

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)

Find keyboard map by name.

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

Definition at line 104 of file keymap.c.

104  {
105  struct keymap *keymap;
106 
107  /* Find matching keyboard map */
109  if ( strcmp ( keymap->name, name ) == 0 )
110  return keymap;
111  }
112 
113  return NULL;
114 }
#define KEYMAP
Keyboard mapping table.
Definition: keymap.h:40
const char * name
Definition: ath9k_hw.c:1984
#define for_each_table_entry(pointer, table)
Iterate through all entries within a linker table.
Definition: tables.h:385
const char * name
Name.
Definition: keymap.h:32
int strcmp(const char *first, const char *second)
Compare strings.
Definition: string.c:173
A keyboard mapping.
Definition: keymap.h:30
#define NULL
NULL pointer (VOID *)
Definition: Base.h:321

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

Referenced by keymap_apply().

◆ keymap_set()

void keymap_set ( struct keymap keymap)

Set keyboard map.

Parameters
keymapKeyboard map, or NULL to use default

Definition at line 121 of file keymap.c.

121  {
122 
123  /* Use default keymap if none specified */
124  if ( ! keymap )
125  keymap = keymap_start;
126 
127  /* Set new keyboard map */
128  if ( keymap != keymap_current )
129  DBGC ( &keymap_current, "KEYMAP using \"%s\"\n", keymap->name );
131 }
static struct keymap * keymap_current
Current keyboard mapping.
Definition: keymap.c:53
#define DBGC(...)
Definition: compiler.h:505
const char * name
Name.
Definition: keymap.h:32
A keyboard mapping.
Definition: keymap.h:30

References DBGC, keymap_current, and keymap::name.

Referenced by keymap_apply().