[coreboot-gerrit] New patch to review for coreboot: libpayload: Export usbhid_getmodifiers

Patrick Rudolph (siro@das-labor.org) gerrit at coreboot.org
Mon Mar 6 18:51:59 CET 2017


Patrick Rudolph (siro at das-labor.org) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/18602

-gerrit

commit 1777e8a056fd03b21409b0ce1be27015740d944d
Author: Patrick Rudolph <siro at das-labor.org>
Date:   Mon Mar 6 18:37:00 2017 +0100

    libpayload: Export usbhid_getmodifiers
    
    Add a new method to retrieve active usb keyboard modifiers.
    
    Change-Id: Ief6679ce782b58b9ced207f4f27504fb2a517b76
    Signed-off-by: Patrick Rudolph <siro at das-labor.org>
---
 payloads/libpayload/drivers/usb/usbhid.c | 29 +++++++++++++++++------------
 payloads/libpayload/include/libpayload.h |  1 +
 2 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/payloads/libpayload/drivers/usb/usbhid.c b/payloads/libpayload/drivers/usb/usbhid.c
index 1cfdff6..54e179b 100644
--- a/payloads/libpayload/drivers/usb/usbhid.c
+++ b/payloads/libpayload/drivers/usb/usbhid.c
@@ -98,6 +98,7 @@ usb_hid_destroy (usbdev_t *dev)
 static int keycount;
 #define KEYBOARD_BUFFER_SIZE 16
 static short keybuffer[KEYBOARD_BUFFER_SIZE];
+static int modifiers;
 
 /* relative mouse movement is global to all USB mice */
 static int mouse_rel_x;
@@ -261,9 +262,6 @@ static const struct layout_maps keyboard_layouts[] = {
 //#endif
 };
 
-#define MOD_SHIFT    (1 << 0)
-#define MOD_ALT      (1 << 1)
-#define MOD_CTRL     (1 << 2)
 
 static void usb_hid_keyboard_queue(int ch) {
 	/* ignore key presses if buffer full */
@@ -282,15 +280,17 @@ usb_hid_process_keyboard_event(usbhid_inst_t *const inst,
 {
 	const usb_hid_keyboard_event_t *const previous = &inst->previous;
 
-	int i, keypress = 0, modifiers = 0;
+	int i, keypress = 0;
 
-	if (current->modifiers & 0x01) /* Left-Ctrl */   modifiers |= MOD_CTRL;
-	if (current->modifiers & 0x02) /* Left-Shift */  modifiers |= MOD_SHIFT;
-	if (current->modifiers & 0x04) /* Left-Alt */    modifiers |= MOD_ALT;
+	modifiers = 0;
+
+	if (current->modifiers & 0x01) /* Left-Ctrl */   modifiers |= KB_MOD_CTRL;
+	if (current->modifiers & 0x02) /* Left-Shift */  modifiers |= KB_MOD_SHIFT;
+	if (current->modifiers & 0x04) /* Left-Alt */    modifiers |= KB_MOD_ALT;
 	if (current->modifiers & 0x08) /* Left-GUI */    ;
-	if (current->modifiers & 0x10) /* Right-Ctrl */  modifiers |= MOD_CTRL;
-	if (current->modifiers & 0x20) /* Right-Shift */ modifiers |= MOD_SHIFT;
-	if (current->modifiers & 0x40) /* Right-AltGr */ modifiers |= MOD_ALT;
+	if (current->modifiers & 0x10) /* Right-Ctrl */  modifiers |= KB_MOD_CTRL;
+	if (current->modifiers & 0x20) /* Right-Shift */ modifiers |= KB_MOD_SHIFT;
+	if (current->modifiers & 0x40) /* Right-AltGr */ modifiers |= KB_MOD_ALT;
 	if (current->modifiers & 0x80) /* Right-GUI */   ;
 
 	if ((current->modifiers & 0x05) && ((current->keys[0] == 0x4c) ||
@@ -333,10 +333,10 @@ usb_hid_process_keyboard_event(usbhid_inst_t *const inst,
 			continue;
 
 
-		/* Mask off MOD_CTRL */
+		/* Mask off KB_MOD_CTRL */
 		keypress = map->map[modifiers & 0x03][current->keys[i]];
 
-		if (modifiers & MOD_CTRL) {
+		if (modifiers & KB_MOD_CTRL) {
 			switch (keypress) {
 			case 'a' ... 'z':
 				keypress &= 0x1f;
@@ -639,3 +639,8 @@ int usbhid_getchar (void)
 
 	return (int)ret;
 }
+
+int usbhid_getmodifiers(void)
+{
+	return modifiers;
+}
diff --git a/payloads/libpayload/include/libpayload.h b/payloads/libpayload/include/libpayload.h
index 4dcc334..e74297a 100644
--- a/payloads/libpayload/include/libpayload.h
+++ b/payloads/libpayload/include/libpayload.h
@@ -140,6 +140,7 @@ int usb_initialize(void);
 int usb_exit (void);
 int usbhid_havechar(void);
 int usbhid_getchar(void);
+int usbhid_getmodifiers(void);
 /** @} */
 
 /**



More information about the coreboot-gerrit mailing list