1
0
mirror of https://github.com/mist-devel/mist-firmware.git synced 2026-02-03 23:03:01 +00:00

Added support for PS/2 extended characters and USB modifier keys

This commit is contained in:
Newsdee
2016-06-13 23:35:44 +08:00
parent 1f039a5e95
commit 42dcad85d5
2 changed files with 35 additions and 8 deletions

41
menu.c
View File

@@ -430,11 +430,25 @@ void get_joystick_id ( char *usb_id, unsigned char joy_num, short raw_id ) {
}
return;
}
/* translates a USB modifier bit into a PS2 scancode */
void assign_ps2_modifier ( unsigned char mod, unsigned int* keys_ps2, unsigned char offset, unsigned int ps2_value) {
unsigned int i;
if(mod&offset) {
for(i=0; i<4; i++) {
if(keys_ps2[i]==0) {
keys_ps2[i] = ps2_value;
return;
}
}
}
}
void HandleUI(void)
{
char *p;
unsigned char i, c, up, down, select, menu, right, left, plus, minus;
unsigned char i, c, m, up, down, select, menu, right, left, plus, minus;
unsigned long len;
static hardfileTYPE t_hardfile[2]; // temporary copy of former hardfile configuration
static unsigned char ctrl = false;
@@ -1048,14 +1062,13 @@ void HandleUI(void)
menustate = MENU_8BIT_KEYTEST2;
parentstate=MENU_8BIT_KEYTEST1;
OsdKeyboardPressed(keys);
OsdWrite(0, "", 0, 0);
OsdWrite(1, " USB scancodes", 0, 0);
siprintf(s, " %2x %2x %2x %2x %2x %2x", keys[0], keys[1], keys[2], keys[3], keys[4], keys[5]);
OsdWrite(0, " USB scancodes", 0,0);
siprintf(s, " %2x %2x %2x %2x", keys[0], keys[1], keys[2], keys[3]); // keys[4], keys[5]); - no need to show all, save some space...
OsdWrite(2, s, 0,0);
OsdWrite(3, "", 0, 0);
OsdWrite(4, " PS/2 scancodes", 0, 0);
OsdKeyboardPressedPS2(keys_ps2);
siprintf(s, " %3x%3x%3x%3x%3x%3x", keys_ps2[0], keys_ps2[1], keys_ps2[2], keys_ps2[3], keys_ps2[4], keys_ps2[5]);
siprintf(s, " %4x %4x %4x %4x", keys_ps2[0], keys_ps2[1], keys_ps2[2], keys_ps2[3]); // keys_ps2[4], keys_ps2[5]);
OsdWrite(5, s, 0, 0);
OsdWrite(6, " ", 0, 0);
OsdWrite(7, STD_COMBO_EXIT, menusub==0, 0);
@@ -1063,11 +1076,25 @@ void HandleUI(void)
case MENU_8BIT_KEYTEST2:
OsdKeyboardPressed(keys);
siprintf(s, " %2x %2x %2x %2x %2x %2x", keys[0], keys[1], keys[2], keys[3], keys[4], keys[5]);
OsdWrite(0, " USB scancodes", 0,0);
siprintf(s, " %2x %2x %2x %2x", keys[0], keys[1], keys[2], keys[3]); // keys[4], keys[5]);
OsdWrite(1, s, 0,0);
m = OsdKeyboardModifiers();
siprintbinary(usb_id, sizeof(m), &m);
siprintf(s, " mod keys - %s", usb_id);
OsdWrite(2, s, 0,0);
OsdKeyboardPressedPS2(keys_ps2);
siprintf(s, " %3x%3x%3x%3x%3x%3x", keys_ps2[0], keys_ps2[1], keys_ps2[2], keys_ps2[3], keys_ps2[4], keys_ps2[5]);
assign_ps2_modifier( m, keys_ps2, 0x1, 0x14); // LCTRL
assign_ps2_modifier( m, keys_ps2, 0x2, 0x12); // LSHIFT
assign_ps2_modifier( m, keys_ps2, 0x4, 0x11); // LALT
assign_ps2_modifier( m, keys_ps2, 0x8, 0xE01F); // LGUI
assign_ps2_modifier( m, keys_ps2, 0x10, 0xE015); // RCTRL
assign_ps2_modifier( m, keys_ps2, 0x20, 0x59); // RSHIFT
assign_ps2_modifier( m, keys_ps2, 0x40, 0xE011); // RALT
assign_ps2_modifier( m, keys_ps2, 0x80, 0xE027); // RGUI
siprintf(s, " %4x %4x %4x %4x", keys_ps2[0], keys_ps2[1], keys_ps2[2], keys_ps2[3]);// keys_ps2[4], keys_ps2[5]);
OsdWrite(5, s, 0, 0);
// allow allow exit when hitting space and ESC
for(i=0; i<6; i++) {
if(keys[i]==0x29) { //ESC

2
osd.c
View File

@@ -833,7 +833,7 @@ void OsdKeyboardSet( unsigned char modifier, char* keycodes, int* keycodes_ps2)
//iprintf("PS2 keycode: %x\n", keycodes_ps2[i]);
// translate EXT into 0E
if(0x1000 & keycodes_ps2[i]) {
key_ps2[i] = keycodes_ps2[i]&0xFF | 0x0E00;
key_ps2[i] = keycodes_ps2[i]&0xFF | 0xE000;
} else {
key_ps2[i] = keycodes_ps2[i]&0xFF;
}