mirror of
https://xff.cz/git/u-boot/
synced 2025-09-03 17:52:07 +02:00
usb: kbd: implement special keys
Provide support for F1-F12, Insert, Delete, Home, End, Page Up, Page Down. As this leads to a size increase provide a customizing setting CONFIG_USB_KEYBOARD_FN_KEYS. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
This commit is contained in:
committed by
Marek Vasut
parent
3352c2114b
commit
87e91bccae
@@ -76,7 +76,11 @@ static const unsigned char usb_kbd_num_keypad[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const u8 usb_special_keys[] = {
|
static const u8 usb_special_keys[] = {
|
||||||
|
#ifdef CONFIG_USB_KEYBOARD_FN_KEYS
|
||||||
|
'2', 'H', '5', '3', 'F', '6', 'C', 'D', 'B', 'A'
|
||||||
|
#else
|
||||||
'C', 'D', 'B', 'A'
|
'C', 'D', 'B', 'A'
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -233,6 +237,43 @@ static int usb_kbd_translate(struct usb_kbd_pdata *data, unsigned char scancode,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_USB_KEYBOARD_FN_KEYS
|
||||||
|
if (scancode < 0x3a || scancode > 0x52 ||
|
||||||
|
scancode == 0x46 || scancode == 0x47)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
usb_kbd_put_queue(data, 0x1b);
|
||||||
|
if (scancode < 0x3e) {
|
||||||
|
/* F1 - F4 */
|
||||||
|
usb_kbd_put_queue(data, 0x4f);
|
||||||
|
usb_kbd_put_queue(data, scancode - 0x3a + 'P');
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
usb_kbd_put_queue(data, '[');
|
||||||
|
if (scancode < 0x42) {
|
||||||
|
/* F5 - F8 */
|
||||||
|
usb_kbd_put_queue(data, '1');
|
||||||
|
if (scancode == 0x3e)
|
||||||
|
--scancode;
|
||||||
|
keycode = scancode - 0x3f + '7';
|
||||||
|
} else if (scancode < 0x49) {
|
||||||
|
/* F9 - F12 */
|
||||||
|
usb_kbd_put_queue(data, '2');
|
||||||
|
if (scancode > 0x43)
|
||||||
|
++scancode;
|
||||||
|
keycode = scancode - 0x42 + '0';
|
||||||
|
} else {
|
||||||
|
/*
|
||||||
|
* INSERT, HOME, PAGE UP, DELETE, END, PAGE DOWN,
|
||||||
|
* RIGHT, LEFT, DOWN, UP
|
||||||
|
*/
|
||||||
|
keycode = usb_special_keys[scancode - 0x49];
|
||||||
|
}
|
||||||
|
usb_kbd_put_queue(data, keycode);
|
||||||
|
if (scancode < 0x4f && scancode != 0x4a && scancode != 0x4d)
|
||||||
|
usb_kbd_put_queue(data, '~');
|
||||||
|
return 0;
|
||||||
|
#else
|
||||||
/* Left, Right, Up, Down */
|
/* Left, Right, Up, Down */
|
||||||
if (scancode > 0x4e && scancode < 0x53) {
|
if (scancode > 0x4e && scancode < 0x53) {
|
||||||
usb_kbd_put_queue(data, 0x1b);
|
usb_kbd_put_queue(data, 0x1b);
|
||||||
@@ -241,6 +282,7 @@ static int usb_kbd_translate(struct usb_kbd_pdata *data, unsigned char scancode,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
#endif /* CONFIG_USB_KEYBOARD_FN_KEYS */
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint32_t usb_kbd_service_key(struct usb_device *dev, int i, int up)
|
static uint32_t usb_kbd_service_key(struct usb_device *dev, int i, int up)
|
||||||
|
@@ -100,6 +100,12 @@ config USB_KEYBOARD
|
|||||||
|
|
||||||
if USB_KEYBOARD
|
if USB_KEYBOARD
|
||||||
|
|
||||||
|
config USB_KEYBOARD_FN_KEYS
|
||||||
|
bool "USB keyboard function key support"
|
||||||
|
help
|
||||||
|
Say Y here if you want support for keys F1 - F12, INS, HOME, DELETE,
|
||||||
|
END, PAGE UP, and PAGE DOWN.
|
||||||
|
|
||||||
choice
|
choice
|
||||||
prompt "USB keyboard polling"
|
prompt "USB keyboard polling"
|
||||||
default SYS_USB_EVENT_POLL
|
default SYS_USB_EVENT_POLL
|
||||||
|
Reference in New Issue
Block a user