PS/2 keyboard Scancode Set 3 support
The following patch adds PS/2 keyboard Scancode Set 3 support. Signed-off-by: Roy Tam <roytam@gmail.com> Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
This commit is contained in:
		
							parent
							
								
									92cdfaeb61
								
							
						
					
					
						commit
						7096a96db2
					
				
							
								
								
									
										22
									
								
								hw/ps2.c
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								hw/ps2.c
									
									
									
									
									
								
							@ -119,6 +119,16 @@ static const unsigned char ps2_raw_keycode[128] = {
 | 
				
			|||||||
 71,  79,  86,  94,   8,  16,  24,  32,  40,  48,  56,  64,  72,  80,  87, 111,
 | 
					 71,  79,  86,  94,   8,  16,  24,  32,  40,  48,  56,  64,  72,  80,  87, 111,
 | 
				
			||||||
 19,  25,  57,  81,  83,  92,  95,  98,  99, 100, 101, 103, 104, 106, 109, 110
 | 
					 19,  25,  57,  81,  83,  92,  95,  98,  99, 100, 101, 103, 104, 106, 109, 110
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					static const unsigned char ps2_raw_keycode_set3[128] = {
 | 
				
			||||||
 | 
					  0,   8,  22,  30,  38,  37,  46,  54,  61,  62,  70,  69,  78,  85, 102,  13,
 | 
				
			||||||
 | 
					 21,  29,  36,  45,  44,  53,  60,  67,  68,  77,  84,  91,  90,  17,  28,  27,
 | 
				
			||||||
 | 
					 35,  43,  52,  51,  59,  66,  75,  76,  82,  14,  18,  92,  26,  34,  33,  42,
 | 
				
			||||||
 | 
					 50,  49,  58,  65,  73,  74,  89, 126,  25,  41,  20,   7,  15,  23,  31,  39,
 | 
				
			||||||
 | 
					 47,   2,  63,  71,  79, 118,  95, 108, 117, 125, 132, 107, 115, 116, 124, 105,
 | 
				
			||||||
 | 
					114, 122, 112, 113, 127,  96,  97,  86,  94,  15,  23,  31,  39,  47,  55,  63,
 | 
				
			||||||
 | 
					 71,  79,  86,  94,   8,  16,  24,  32,  40,  48,  56,  64,  72,  80,  87, 111,
 | 
				
			||||||
 | 
					 19,  25,  57,  81,  83,  92,  95,  98,  99, 100, 101, 103, 104, 106, 109, 110
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ps2_queue(void *opaque, int b)
 | 
					void ps2_queue(void *opaque, int b)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@ -143,12 +153,16 @@ static void ps2_put_keycode(void *opaque, int keycode)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    PS2KbdState *s = opaque;
 | 
					    PS2KbdState *s = opaque;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /* XXX: add support for scancode sets 1 and 3 */
 | 
					    /* XXX: add support for scancode set 1 */
 | 
				
			||||||
    if (!s->translate && keycode < 0xe0 && s->scancode_set == 2)
 | 
					    if (!s->translate && keycode < 0xe0 && s->scancode_set > 1) {
 | 
				
			||||||
      {
 | 
					        if (keycode & 0x80) {
 | 
				
			||||||
        if (keycode & 0x80)
 | 
					 | 
				
			||||||
            ps2_queue(&s->common, 0xf0);
 | 
					            ps2_queue(&s->common, 0xf0);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (s->scancode_set == 2) {
 | 
				
			||||||
            keycode = ps2_raw_keycode[keycode & 0x7f];
 | 
					            keycode = ps2_raw_keycode[keycode & 0x7f];
 | 
				
			||||||
 | 
					        } else if (s->scancode_set == 3) {
 | 
				
			||||||
 | 
					            keycode = ps2_raw_keycode_set3[keycode & 0x7f];
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ps2_queue(&s->common, keycode);
 | 
					    ps2_queue(&s->common, keycode);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user