The Pedigree Project  0.1
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Types | Private Attributes | Static Private Attributes | List of all members
KeymapManager Class Reference

#include <KeymapManager.h>

+ Collaboration diagram for KeymapManager:

Classes

struct  KeymapEntry
 Structure representing an entry in the keymap table. More...
 
struct  KeyState
 
struct  SparseEntry
 Structure representing an entry in the sparse table. More...
 

Public Types

enum  EscapeState { EscapeNone = 0, EscapeE0, EscapeE1 }
 

Public Member Functions

 KeymapManager ()
 Default constructor.
 
virtual ~KeymapManager ()
 Default destructor.
 
void useKeymap (uint8_t *pSparseTable, uint8_t *pDataTable)
 Changes the current keymap to the given one.
 
bool useCompiledKeymap (uint32_t *pCompiledKeymap, size_t keymapLength)
 Changes the current keymap to the given (compiled) one.
 
bool handleHidModifier (uint8_t keyCode, bool bDown)
 
uint64_t resolveHidKeycode (uint8_t keyCode)
 
uint8_t convertPc102ScancodeToHidKeycode (uint8_t scancode, EscapeState &escape)
 Converts a pc102 scancode into a HID keycode.
 
KeymapEntrygetKeymapEntry (bool bCtrl, bool bShift, bool bAlt, bool bAltGr, uint8_t nCombinator, uint8_t keyCode)
 Returns the keymap entry corresponding to given keycode and modifiers.
 

Static Public Member Functions

static KeymapManagerinstance ()
 Singleton design.
 

Private Types

enum  IndexModifiers { IndexCtrl = 1, IndexShift = 2, IndexAlt = 4, IndexAltGr = 8 }
 
enum  HidModifiers {
  HidCapsLock = 0x39, HidLeftCtrl = 0xE0, HidLeftShift = 0xE1, HidLeftAlt = 0xE2,
  HidLeftGui = 0xE3, HidRightCtrl = 0xE4, HidRightShift = 0xE5, HidRightAlt = 0xE6,
  HidRightGui = 0xE7
}
 HID keycodes corresponding to modifiers.
 

Private Attributes

SparseEntrym_pSparseTable
 The sparse and data tables for the current keymap.
 
KeymapEntrym_pDataTable
 
bool m_bLeftCtrl
 State of the modifiers, true if down, false if up.
 
bool m_bLeftShift
 
bool m_bLeftAlt
 
bool m_bRightCtrl
 
bool m_bRightShift
 
bool m_bRightAlt
 
bool m_bCapsLock
 True if caps lock is on.
 
uint8_t m_nCombinator
 Index of the current active combinator, if any.
 
Tree< uint8_t, KeyState * > m_KeyStates
 Current key states (for periodic callbacks while a key is down)
 
Spinlock m_KeyLock
 
bool m_bHaveLoadedKeymap
 

Static Private Attributes

static KeymapManager m_Instance
 Static instance.
 

Detailed Description

Global manager for keymaps

Definition at line 31 of file KeymapManager.h.

Member Function Documentation

bool KeymapManager::handleHidModifier ( uint8_t  keyCode,
bool  bDown 
)

If the given keycode is a modifier, applies it and returns true, otherwise it returns false.

Definition at line 143 of file KeymapManager.cc.

References m_bCapsLock, and m_bLeftCtrl.

Referenced by HidInputManager::keyDown(), and HidInputManager::keyUp().

+ Here is the caller graph for this function:

uint64_t KeymapManager::resolveHidKeycode ( uint8_t  keyCode)

Resolves a HID keycode using the current keymap and returns a "real" character in UTF-32 format, plus modifier flags in the top 32-bits.

Definition at line 168 of file KeymapManager.cc.

References getKeymapEntry(), m_bCapsLock, m_bLeftCtrl, and m_nCombinator.

Referenced by HidInputManager::keyDown(), X86Keyboard::scancodeToAscii(), HidInputManager::updateKeys(), useCompiledKeymap(), and useKeymap().

+ Here is the caller graph for this function:

Member Data Documentation

bool KeymapManager::m_bHaveLoadedKeymap
private

Whether or not we've loaded a new keymap. Used to figure out if we can safely free the old keymap data.

Definition at line 165 of file KeymapManager.h.

Referenced by useCompiledKeymap(), and useKeymap().

Spinlock KeymapManager::m_KeyLock
private

Spinlock for work on keys.

Note
Using a Spinlock here because a lot of our work will happen in the middle of an IRQ where it's potentially dangerous to reschedule (which may happen with a Mutex or Semaphore).

Definition at line 161 of file KeymapManager.h.


The documentation for this class was generated from the following files: