Skip to content
Snippets Groups Projects
Commit 4785a694 authored by Zhang Wei's avatar Zhang Wei Committed by Wolfgang Denk
Browse files

Add Ctrl combo key support to usb keyboard driver.


Ctrl combo key support is added, which is very useful to input Ctrl-C
for interrupt current job.
Also add usb_event_poll() calling to usb_kbd_testc(), which can get
key input when tstc() is called.

Signed-off-by: default avatarZhang Wei <wei.zhang@freescale.com>
parent 10c7382b
No related branches found
No related tags found
No related merge requests found
...@@ -84,6 +84,7 @@ int repeat_delay; ...@@ -84,6 +84,7 @@ int repeat_delay;
static unsigned char num_lock = 0; static unsigned char num_lock = 0;
static unsigned char caps_lock = 0; static unsigned char caps_lock = 0;
static unsigned char scroll_lock = 0; static unsigned char scroll_lock = 0;
static unsigned char ctrl = 0;
static unsigned char leds __attribute__ ((aligned (0x4))); static unsigned char leds __attribute__ ((aligned (0x4)));
...@@ -120,6 +121,9 @@ static void usb_kbd_put_queue(char data) ...@@ -120,6 +121,9 @@ static void usb_kbd_put_queue(char data)
/* test if a character is in the queue */ /* test if a character is in the queue */
static int usb_kbd_testc(void) static int usb_kbd_testc(void)
{ {
#ifdef CFG_USB_EVENT_POLL
usb_event_poll();
#endif
if(usb_in_pointer==usb_out_pointer) if(usb_in_pointer==usb_out_pointer)
return(0); /* no data */ return(0); /* no data */
else else
...@@ -274,6 +278,10 @@ static int usb_kbd_translate(unsigned char scancode,unsigned char modifier,int p ...@@ -274,6 +278,10 @@ static int usb_kbd_translate(unsigned char scancode,unsigned char modifier,int p
else /* non shifted */ else /* non shifted */
keycode=usb_kbd_numkey[scancode-0x1e]; keycode=usb_kbd_numkey[scancode-0x1e];
} }
if (ctrl)
keycode = scancode - 0x3;
if(pressed==1) { if(pressed==1) {
if(scancode==NUM_LOCK) { if(scancode==NUM_LOCK) {
num_lock=~num_lock; num_lock=~num_lock;
...@@ -306,6 +314,17 @@ static int usb_kbd_irq(struct usb_device *dev) ...@@ -306,6 +314,17 @@ static int usb_kbd_irq(struct usb_device *dev)
return 1; return 1;
} }
res=0; res=0;
switch (new[0]) {
case 0x0: /* No combo key pressed */
ctrl = 0;
break;
case 0x01: /* Left Ctrl pressed */
case 0x10: /* Right Ctrl pressed */
ctrl = 1;
break;
}
for (i = 2; i < 8; i++) { for (i = 2; i < 8; i++) {
if (old[i] > 3 && memscan(&new[2], old[i], 6) == &new[8]) { if (old[i] > 3 && memscan(&new[2], old[i], 6) == &new[8]) {
res|=usb_kbd_translate(old[i],new[0],0); res|=usb_kbd_translate(old[i],new[0],0);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment