iPXE
Data Structures | Defines | Enumerations | Functions
usbkbd.h File Reference

USB keyboard driver. More...

#include <assert.h>
#include <ipxe/usb.h>
#include <ipxe/usbhid.h>

Go to the source code of this file.

Data Structures

struct  usb_keyboard_report
 A USB keyboard report. More...
struct  usb_keyboard
 A USB keyboard device. More...

Defines

#define USBKBD_PROTOCOL   1
 Keyboard protocol.
#define USBKBD_CTRL   ( USBKBD_CTRL_LEFT | USBKBD_CTRL_RIGHT )
 Either Ctrl key.
#define USBKBD_SHIFT   ( USBKBD_SHIFT_LEFT | USBKBD_SHIFT_RIGHT )
 Either Shift key.
#define USBKBD_ALT   ( USBKBD_ALT_LEFT | USBKBD_ALT_RIGHT )
 Either Alt key.
#define USBKBD_GUI   ( USBKBD_GUI_LEFT | USBKBD_GUI_RIGHT )
 Either GUI key.
#define USBKBD_IDLE_DURATION   10 /* 10 x 4ms = 40ms */
 Keyboard idle duration (in 4ms units)
#define USBKBD_HOLDOFF   12 /* 12 x 40ms = 480ms */
 Keyboard auto-repeat hold-off (in units of USBKBD_IDLE_DURATION)
#define USBKBD_INTR_MAX_FILL   8
 Interrupt endpoint maximum fill level.
#define USBKBD_BUFSIZE   8
 Keyboard buffer size.

Enumerations

enum  usb_keyboard_modifier {
  USBKBD_CTRL_LEFT = 0x01, USBKBD_SHIFT_LEFT = 0x02, USBKBD_ALT_LEFT = 0x04, USBKBD_GUI_LEFT = 0x08,
  USBKBD_CTRL_RIGHT = 0x10, USBKBD_SHIFT_RIGHT = 0x20, USBKBD_ALT_RIGHT = 0x40, USBKBD_GUI_RIGHT = 0x80
}
 USB modifier keys. More...
enum  usb_keycode {
  USBKBD_KEY_A = 0x04, USBKBD_KEY_Z = 0x1d, USBKBD_KEY_1 = 0x1e, USBKBD_KEY_0 = 0x27,
  USBKBD_KEY_ENTER = 0x28, USBKBD_KEY_SPACE = 0x2c, USBKBD_KEY_MINUS = 0x2d, USBKBD_KEY_SLASH = 0x38,
  USBKBD_KEY_CAPS_LOCK = 0x39, USBKBD_KEY_F1 = 0x3a, USBKBD_KEY_UP = 0x52, USBKBD_KEY_NUM_LOCK = 0x53,
  USBKBD_KEY_PAD_ENTER = 0x58, USBKBD_KEY_PAD_1 = 0x59, USBKBD_KEY_PAD_DOT = 0x63
}
 USB keycodes. More...
enum  usb_keyboard_led { USBKBD_LED_NUM_LOCK = 0x01, USBKBD_LED_CAPS_LOCK = 0x02, USBKBD_LED_SCROLL_LOCK = 0x04 }
 USB keyboard LEDs. More...

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
static unsigned int usbkbd_fill (struct usb_keyboard *kbd)
 Calculate keyboard buffer fill level.

Detailed Description

USB keyboard driver.

Definition in file usbkbd.h.


Define Documentation

#define USBKBD_PROTOCOL   1

Keyboard protocol.

Definition at line 17 of file usbkbd.h.

Either Ctrl key.

Definition at line 50 of file usbkbd.h.

Referenced by usbkbd_map().

Either Shift key.

Definition at line 53 of file usbkbd.h.

Referenced by usbkbd_map().

Either Alt key.

Definition at line 56 of file usbkbd.h.

Either GUI key.

Definition at line 59 of file usbkbd.h.

#define USBKBD_IDLE_DURATION   10 /* 10 x 4ms = 40ms */

Keyboard idle duration (in 4ms units)

This is a policy decision. We choose to use an autorepeat rate of approximately 40ms.

Definition at line 92 of file usbkbd.h.

Referenced by usbkbd_probe().

#define USBKBD_HOLDOFF   12 /* 12 x 40ms = 480ms */

Keyboard auto-repeat hold-off (in units of USBKBD_IDLE_DURATION)

This is a policy decision. We choose to use an autorepeat delay of approximately 500ms.

Definition at line 99 of file usbkbd.h.

Referenced by usbkbd_report().

#define USBKBD_INTR_MAX_FILL   8

Interrupt endpoint maximum fill level.

When idling, we are likely to poll the USB endpoint at only the 18.2Hz system timer tick rate. With a typical observed bInterval of 10ms (which will be rounded down to 8ms by the HCI drivers), this gives approximately 7 completions per poll.

Definition at line 108 of file usbkbd.h.

Referenced by usbkbd_probe().

#define USBKBD_BUFSIZE   8

Keyboard buffer size.

Must be a power of two.

Definition at line 114 of file usbkbd.h.

Referenced by usbkbd_consume(), usbkbd_fill(), and usbkbd_produce().


Enumeration Type Documentation

USB modifier keys.

Enumerator:
USBKBD_CTRL_LEFT 

Left Ctrl key.

USBKBD_SHIFT_LEFT 

Left Shift key.

USBKBD_ALT_LEFT 

Left Alt key.

USBKBD_GUI_LEFT 

Left GUI key.

USBKBD_CTRL_RIGHT 

Right Ctrl key.

USBKBD_SHIFT_RIGHT 

Right Shift key.

USBKBD_ALT_RIGHT 

Right Alt key.

USBKBD_GUI_RIGHT 

Right GUI key.

Definition at line 30 of file usbkbd.h.

                           {
        /** Left Ctrl key */
        USBKBD_CTRL_LEFT = 0x01,
        /** Left Shift key */
        USBKBD_SHIFT_LEFT = 0x02,
        /** Left Alt key */
        USBKBD_ALT_LEFT = 0x04,
        /** Left GUI key */
        USBKBD_GUI_LEFT = 0x08,
        /** Right Ctrl key */
        USBKBD_CTRL_RIGHT = 0x10,
        /** Right Shift key */
        USBKBD_SHIFT_RIGHT = 0x20,
        /** Right Alt key */
        USBKBD_ALT_RIGHT = 0x40,
        /** Right GUI key */
        USBKBD_GUI_RIGHT = 0x80,
};

USB keycodes.

Enumerator:
USBKBD_KEY_A 
USBKBD_KEY_Z 
USBKBD_KEY_1 
USBKBD_KEY_0 
USBKBD_KEY_ENTER 
USBKBD_KEY_SPACE 
USBKBD_KEY_MINUS 
USBKBD_KEY_SLASH 
USBKBD_KEY_CAPS_LOCK 
USBKBD_KEY_F1 
USBKBD_KEY_UP 
USBKBD_KEY_NUM_LOCK 
USBKBD_KEY_PAD_ENTER 
USBKBD_KEY_PAD_1 
USBKBD_KEY_PAD_DOT 

Definition at line 62 of file usbkbd.h.

USB keyboard LEDs.

Enumerator:
USBKBD_LED_NUM_LOCK 
USBKBD_LED_CAPS_LOCK 
USBKBD_LED_SCROLL_LOCK 

Definition at line 81 of file usbkbd.h.


Function Documentation

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL  )
static unsigned int usbkbd_fill ( struct usb_keyboard kbd) [inline, static]

Calculate keyboard buffer fill level.

Parameters:
kbdUSB keyboard
Return values:
fillKeyboard buffer fill level

Definition at line 164 of file usbkbd.h.

References assert, fill, and USBKBD_BUFSIZE.

Referenced by usbkbd_consume(), usbkbd_getchar(), usbkbd_iskey(), and usbkbd_produce().

                                         {
        unsigned int fill = ( kbd->prod - kbd->cons );

        assert ( fill <= USBKBD_BUFSIZE );
        return fill;
}