mirror of
https://github.com/mist-devel/mist-firmware.git
synced 2026-01-13 07:09:44 +00:00
Added built-in mapping for 8BitDo SFC30
Added Inputs menu (contains tests) Added simple keyboard test menu. Added display to show raw VID/PID data of controllers.
This commit is contained in:
parent
e2e8c66927
commit
5514b98c62
254
menu.c
254
menu.c
@ -215,7 +215,8 @@ static void substrcpy(char *d, char *s, char idx) {
|
||||
*d = 0;
|
||||
}
|
||||
|
||||
#define STD_EXIT " exit"
|
||||
#define STD_EXIT " exit"
|
||||
#define STD_SPACE_EXIT " SPACE to exit"
|
||||
|
||||
#define JOY_NO_INPUT " \x14" // center of joystick arrows
|
||||
#define JOY_VID "VID:"
|
||||
@ -314,7 +315,7 @@ void get_joystick_state( char *joy_string, char *joy_string2, unsigned int joy_n
|
||||
|
||||
if(vjoy & JOY_L3) strcat(joy_string, "L3");
|
||||
// switch to string2 because we run out of space
|
||||
if(vjoy & JOY_L3) strcat(joy_string2, "R3 ");
|
||||
if(vjoy & JOY_R3) strcat(joy_string2, "R3 ");
|
||||
|
||||
return;
|
||||
}
|
||||
@ -358,22 +359,51 @@ void get_joystick_state_usb( char *s, unsigned char joy_num ) {
|
||||
return;
|
||||
}
|
||||
|
||||
void get_joystick_id ( char *usb_id, unsigned char joy_num ) {
|
||||
void append_joystick_usbid ( char *usb_id, unsigned int usb_vid, unsigned int usb_pid ) {
|
||||
/*
|
||||
appends a string with VID and PID numbers.
|
||||
Make sure to provide long enough string in usb_id
|
||||
*/
|
||||
unsigned short i;
|
||||
char vid[5] = " ";
|
||||
char pid[5] = " ";
|
||||
itoa(usb_vid, vid, 16);
|
||||
itoa(usb_pid, pid, 16);
|
||||
if(strlen(vid)<4) {
|
||||
for(i=5;i>0;i--) {
|
||||
vid[i]=vid[i-1];
|
||||
}
|
||||
vid[0]='0';
|
||||
}
|
||||
if(strlen(pid)<4) {
|
||||
for(i=5;i>0;i--) {
|
||||
pid[i]=pid[i-1];
|
||||
}
|
||||
pid[0]='0';
|
||||
}
|
||||
strcat( usb_id, JOY_VID);
|
||||
strcat( usb_id, vid);
|
||||
strcat( usb_id, " ");
|
||||
strcat( usb_id, JOY_PID);
|
||||
strcat( usb_id, pid);
|
||||
return;
|
||||
}
|
||||
|
||||
void get_joystick_id ( char *usb_id, unsigned char joy_num, short raw_id ) {
|
||||
/*
|
||||
Builds a string containing the USB VID/PID information of a joystick
|
||||
*/
|
||||
unsigned int i;
|
||||
unsigned int usb_vid;
|
||||
unsigned int usb_pid;
|
||||
char vid[5] = " ";
|
||||
char pid[5] = " ";
|
||||
char buffer[32];
|
||||
|
||||
if (OsdNumJoysticks()==0 || (joy_num==1 && OsdNumJoysticks()<2))
|
||||
{
|
||||
strcpy( usb_id, " ");
|
||||
strcat( usb_id, "Atari DB9 Joystick");
|
||||
return;
|
||||
if (raw_id==0) {
|
||||
if (OsdNumJoysticks()==0 || (joy_num==1 && OsdNumJoysticks()<2))
|
||||
{
|
||||
strcpy( usb_id, " ");
|
||||
strcat( usb_id, "Atari DB9 Joystick");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (joy_num==1) {
|
||||
@ -386,36 +416,19 @@ void get_joystick_id ( char *usb_id, unsigned char joy_num ) {
|
||||
|
||||
if (usb_vid>0) {
|
||||
|
||||
strcpy(usb_id, get_joystick_alias( usb_vid, usb_pid ));
|
||||
if(strlen(usb_id)>0) {
|
||||
siprintf(buffer, "%*s", (28-strlen(usb_id))/2, " ");
|
||||
strcat(buffer, usb_id);
|
||||
strcpy(usb_id, buffer);
|
||||
return; //exit, we got an alias for the stick
|
||||
if (raw_id ==0) {
|
||||
strcpy(usb_id, get_joystick_alias( usb_vid, usb_pid ));
|
||||
if(strlen(usb_id)>0) {
|
||||
siprintf(buffer, "%*s", (28-strlen(usb_id))/2, " ");
|
||||
strcat(buffer, usb_id);
|
||||
strcpy(usb_id, buffer);
|
||||
return; //exit, we got an alias for the stick
|
||||
}
|
||||
}
|
||||
|
||||
memset(usb_id, '\0', sizeof(usb_id));
|
||||
strcpy(usb_id, " ");
|
||||
append_joystick_usbid( usb_id, usb_vid, usb_pid );
|
||||
|
||||
itoa(usb_vid, vid, 16);
|
||||
itoa(usb_pid, pid, 16);
|
||||
if(strlen(vid)<4) {
|
||||
for(i=5;i>0;i--) {
|
||||
vid[i]=vid[i-1];
|
||||
}
|
||||
vid[0]='0';
|
||||
}
|
||||
if(strlen(pid)<4) {
|
||||
for(i=5;i>0;i--) {
|
||||
pid[i]=pid[i-1];
|
||||
}
|
||||
pid[0]='0';
|
||||
}
|
||||
strcat( usb_id, JOY_VID);
|
||||
strcat( usb_id, vid);
|
||||
strcat( usb_id, " ");
|
||||
strcat( usb_id, JOY_PID);
|
||||
strcat( usb_id, pid);
|
||||
} else {
|
||||
strcat(usb_id, "Atari DB9 Joystick");
|
||||
}
|
||||
@ -434,6 +447,7 @@ void HandleUI(void)
|
||||
static long helptext_timer;
|
||||
static const char *helptext;
|
||||
static char helpstate=0;
|
||||
unsigned char keys[6] = {0,0,0,0,0,0};
|
||||
|
||||
/* check joystick status */
|
||||
char joy_string[32];
|
||||
@ -870,18 +884,18 @@ void HandleUI(void)
|
||||
|
||||
case MENU_8BIT_SYSTEM1:
|
||||
helptext=helptexts[HELPTEXT_MAIN];
|
||||
menumask=0x3f; // 5 selections + Exit
|
||||
menumask=0x1f; // 5 selections + Exit
|
||||
OsdSetTitle("System", OSD_ARROW_LEFT);
|
||||
menustate = MENU_8BIT_SYSTEM2;
|
||||
parentstate = MENU_8BIT_SYSTEM1;
|
||||
OsdWrite(0, "", 0,0);
|
||||
OsdWrite(1, " Firmware & Core \x16", menusub == 0,0);
|
||||
OsdWrite(2, " Joystick 1 Test \x16", menusub == 1,0);
|
||||
OsdWrite(3, " Joystick 2 Test \x16", menusub == 2,0);
|
||||
OsdWrite(4, " Save settings", menusub == 3,0);
|
||||
OsdWrite(5, " About", menusub == 4,0);
|
||||
OsdWrite(2, " Input Devices \x16", menusub == 1,0);
|
||||
OsdWrite(3, " Save settings \x16", menusub == 2,0);
|
||||
OsdWrite(4, "", 0,0);
|
||||
OsdWrite(5, " About", menusub == 3,0);
|
||||
OsdWrite(6, "", 0,0);
|
||||
OsdWrite(7, STD_EXIT, menusub == 5, 0);
|
||||
OsdWrite(7, STD_EXIT, menusub == 4, 0);
|
||||
break;
|
||||
|
||||
case MENU_8BIT_SYSTEM2 :
|
||||
@ -897,15 +911,10 @@ void HandleUI(void)
|
||||
break;
|
||||
case 1:
|
||||
// Joystick1 test
|
||||
menustate = MENU_8BIT_TEST1;
|
||||
menustate = MENU_8BIT_CONTROLLERS1;
|
||||
menusub = 0;
|
||||
break;
|
||||
case 2:
|
||||
// Joystick2 test
|
||||
menustate = MENU_8BIT_JOYTEST_B1;
|
||||
menusub = 0;
|
||||
break;
|
||||
case 3:
|
||||
// Save settings
|
||||
user_io_create_config_name(s);
|
||||
iprintf("Saving config to %s\n", s);
|
||||
@ -916,12 +925,12 @@ void HandleUI(void)
|
||||
iprintf("Settings for %s written\n", s);
|
||||
}
|
||||
break;
|
||||
case 4:
|
||||
case 3:
|
||||
// About logo
|
||||
menustate = MENU_8BIT_ABOUT1;
|
||||
menusub = 0;
|
||||
break;
|
||||
case 5:
|
||||
case 4:
|
||||
// Exit
|
||||
menustate=MENU_NONE1;
|
||||
menusub = 0;
|
||||
@ -982,26 +991,143 @@ void HandleUI(void)
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_8BIT_TEST1:
|
||||
case MENU_8BIT_CONTROLLERS1:
|
||||
helptext = helptexts[HELPTEXT_NONE];
|
||||
menumask=0x1f;
|
||||
OsdSetTitle("Inputs", 0);
|
||||
menustate = MENU_8BIT_CONTROLLERS2;
|
||||
parentstate=MENU_8BIT_CONTROLLERS1;
|
||||
OsdWrite(0, "", 0, 0);
|
||||
OsdWrite(1, " Joystick 1 Test \x16", menusub==0, 0);
|
||||
OsdWrite(2, " Joystick 2 Test \x16", menusub==1, 0);
|
||||
OsdWrite(3, " Keyboard Test \x16", menusub==2, 0);
|
||||
OsdWrite(4, " USB status \x16", menusub==3, 0);
|
||||
OsdWrite(5, "", 0, 0);
|
||||
OsdWrite(6, "", 0, 0);
|
||||
OsdWrite(7, STD_EXIT, menusub==4, 0);
|
||||
break;
|
||||
|
||||
case MENU_8BIT_CONTROLLERS2:
|
||||
// menu key closes menu
|
||||
if (menu)
|
||||
menustate = MENU_NONE1;
|
||||
if(select) {
|
||||
switch (menusub) {
|
||||
case 0:
|
||||
// Joystick1 Test
|
||||
menustate = MENU_8BIT_JOYTEST_A1;
|
||||
menusub = 0;
|
||||
break;
|
||||
case 1:
|
||||
// Joystick2 test
|
||||
menustate = MENU_8BIT_JOYTEST_B1;
|
||||
menusub = 0;
|
||||
break;
|
||||
case 2:
|
||||
// Keyboard test
|
||||
menustate = MENU_8BIT_KEYTEST1;
|
||||
menusub = 0;
|
||||
break;
|
||||
case 3:
|
||||
// USB status
|
||||
menustate=MENU_8BIT_USB1;
|
||||
menusub = 0;
|
||||
break;
|
||||
case 4:
|
||||
// Exit
|
||||
menustate=MENU_NONE1;
|
||||
menusub = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_8BIT_KEYTEST1:
|
||||
helptext = helptexts[HELPTEXT_NONE];
|
||||
menumask=1;
|
||||
get_joystick_id( usb_id, 0 );
|
||||
OsdSetTitle("Keyboard", 0);
|
||||
menustate = MENU_8BIT_KEYTEST2;
|
||||
parentstate=MENU_8BIT_KEYTEST1;
|
||||
OsdKeyboardPressed(keys);
|
||||
siprintf(s, "%2x %2x %2x %2x %2x %2x", keys[0], keys[1], keys[2], keys[3], keys[4], keys[5]);
|
||||
OsdWrite(0, "", 0, 0);
|
||||
OsdWrite(1, s, 0,0);
|
||||
OsdWrite(2, "", 0, 0);
|
||||
OsdWrite(3, "", 0, 0);
|
||||
OsdWrite(4, "", 0, 0);
|
||||
OsdWrite(5, "", 0, 0);
|
||||
OsdWrite(6, " ", 0, 0);
|
||||
OsdWrite(7, STD_SPACE_EXIT, menusub==0, 0);
|
||||
break;
|
||||
|
||||
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(1, s, 0,0);
|
||||
// allow allow exit when hitting space
|
||||
if(c==KEY_SPACE) {
|
||||
menustate = MENU_8BIT_CONTROLLERS1;
|
||||
menusub = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_8BIT_USB1:
|
||||
helptext = helptexts[HELPTEXT_NONE];
|
||||
menumask=1;
|
||||
OsdSetTitle("USB", 0);
|
||||
menustate = MENU_8BIT_USB2;
|
||||
parentstate=MENU_8BIT_USB1;
|
||||
get_joystick_id( usb_id, 0, 1);
|
||||
OsdWrite(0, " Joy1:", 0, 0);
|
||||
OsdWrite(1, usb_id, 0, 0);
|
||||
strcpy(usb_id, " ");
|
||||
get_joystick_id( usb_id, 1, 1);
|
||||
OsdWrite(2, " Joy2:", 0, 0);
|
||||
OsdWrite(3, usb_id, 0, 0);
|
||||
OsdWrite(4, "", 0, 0);
|
||||
OsdWrite(5, "", 0, 0);
|
||||
OsdWrite(6, " ", 0, 0);
|
||||
OsdWrite(7, STD_SPACE_EXIT, menusub==0, 0);
|
||||
break;
|
||||
|
||||
case MENU_8BIT_USB2:
|
||||
menumask=1;
|
||||
OsdSetTitle("USB", 0);
|
||||
get_joystick_id( usb_id, 0, 1);
|
||||
OsdWrite(0, " Joy1:", 0, 0);
|
||||
OsdWrite(1, usb_id, 0, 0);
|
||||
strcpy(usb_id, " ");
|
||||
get_joystick_id( usb_id, 1, 1);
|
||||
OsdWrite(2, " Joy2:", 0, 0);
|
||||
OsdWrite(3, usb_id, 0, 0);
|
||||
OsdWrite(7, STD_SPACE_EXIT, menusub==0, 0);
|
||||
// allow allow exit when hitting space
|
||||
if(c==KEY_SPACE) {
|
||||
menustate = MENU_8BIT_CONTROLLERS1;
|
||||
menusub = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case MENU_8BIT_JOYTEST_A1:
|
||||
helptext = helptexts[HELPTEXT_NONE];
|
||||
menumask=1;
|
||||
get_joystick_id( usb_id, 0, 0);
|
||||
OsdSetTitle("Joy1", 0);
|
||||
menustate = MENU_8BIT_TEST2;
|
||||
parentstate=MENU_8BIT_TEST1;
|
||||
OsdWrite(0, " Test Joystick 1", 0, 0);
|
||||
menustate = MENU_8BIT_JOYTEST_A2;
|
||||
parentstate=MENU_8BIT_JOYTEST_A1;
|
||||
OsdWrite(0, " Test Joystick 1", 0, 0);
|
||||
OsdWrite(1, usb_id, 0, 0);
|
||||
OsdWrite(2, "", 0, 0);
|
||||
OsdWrite(3, "", 0, 0);
|
||||
OsdWrite(4, "", 0, 0);
|
||||
OsdWrite(5, "", 0, 0);
|
||||
OsdWrite(6, " ", 0, 0);
|
||||
OsdWrite(7, " SPACE to exit", menusub==0, 0);
|
||||
OsdWrite(7, STD_SPACE_EXIT, menusub==0, 0);
|
||||
break;
|
||||
|
||||
case MENU_8BIT_TEST2:
|
||||
case MENU_8BIT_JOYTEST_A2:
|
||||
get_joystick_state( joy_string, joy_string2, 0 ); //grab state of joy 0
|
||||
get_joystick_id( usb_id, 0 );
|
||||
get_joystick_id( usb_id, 0, 0 );
|
||||
OsdWrite(1, usb_id, 0, 0);
|
||||
OsdWrite(3, joy_string, 0, 0);
|
||||
OsdWrite(4, joy_string2, 0, 0);
|
||||
@ -1011,7 +1137,7 @@ void HandleUI(void)
|
||||
OsdWrite(6, s, 0,0);
|
||||
// allow allow exit when hitting space
|
||||
if(c==KEY_SPACE) {
|
||||
menustate = MENU_8BIT_SYSTEM1;
|
||||
menustate = MENU_8BIT_CONTROLLERS1;
|
||||
menusub = 0;
|
||||
}
|
||||
break;
|
||||
@ -1019,7 +1145,7 @@ void HandleUI(void)
|
||||
case MENU_8BIT_JOYTEST_B1:
|
||||
helptext = helptexts[HELPTEXT_NONE];
|
||||
menumask=1;
|
||||
get_joystick_id( usb_id, 1 );
|
||||
get_joystick_id( usb_id, 1, 0);
|
||||
OsdSetTitle("Joy2", 0);
|
||||
menustate = MENU_8BIT_JOYTEST_B2;
|
||||
parentstate=MENU_8BIT_JOYTEST_B1;
|
||||
@ -1030,12 +1156,12 @@ void HandleUI(void)
|
||||
OsdWrite(4, "", 0, 0);
|
||||
OsdWrite(5, "", 0, 0);
|
||||
OsdWrite(6, " ", 0, 0);
|
||||
OsdWrite(7, " SPACE to exit", menusub==0, 0);
|
||||
OsdWrite(7, STD_SPACE_EXIT, menusub==0, 0);
|
||||
break;
|
||||
|
||||
case MENU_8BIT_JOYTEST_B2:
|
||||
get_joystick_state( joy_string, joy_string2, 1 );
|
||||
get_joystick_id( usb_id, 1 );
|
||||
get_joystick_id( usb_id, 1, 0);
|
||||
OsdWrite(1, usb_id, 0, 0);
|
||||
OsdWrite(3, joy_string, 0, 0);
|
||||
OsdWrite(4, joy_string2, 0, 0);
|
||||
@ -1045,7 +1171,7 @@ void HandleUI(void)
|
||||
OsdWrite(6, s, 0,0);
|
||||
// allow allow exit when hitting space
|
||||
if(c==KEY_SPACE) {
|
||||
menustate = MENU_8BIT_SYSTEM1;
|
||||
menustate = MENU_8BIT_CONTROLLERS1;
|
||||
menusub = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
12
menu.h
12
menu.h
@ -99,10 +99,16 @@ enum MENU
|
||||
MENU_8BIT_SYSTEM2,
|
||||
MENU_8BIT_ABOUT1,
|
||||
MENU_8BIT_ABOUT2,
|
||||
MENU_8BIT_TEST1,
|
||||
MENU_8BIT_TEST2,
|
||||
MENU_8BIT_CONTROLLERS1,
|
||||
MENU_8BIT_CONTROLLERS2,
|
||||
MENU_8BIT_JOYTEST_A1,
|
||||
MENU_8BIT_JOYTEST_A2,
|
||||
MENU_8BIT_JOYTEST_B1,
|
||||
MENU_8BIT_JOYTEST_B2
|
||||
MENU_8BIT_JOYTEST_B2,
|
||||
MENU_8BIT_KEYTEST1,
|
||||
MENU_8BIT_KEYTEST2,
|
||||
MENU_8BIT_USB1,
|
||||
MENU_8BIT_USB2
|
||||
};
|
||||
|
||||
// UI strings, used by boot messages
|
||||
|
||||
23
osd.c
23
osd.c
@ -820,6 +820,29 @@ unsigned int OsdUsbPidGetB() {
|
||||
return usb_pid_b;
|
||||
}
|
||||
|
||||
/* keyboard data */
|
||||
static unsigned char key_modifier = 0;
|
||||
static unsigned char key_pressed[6] = { 0,0,0,0,0,0 };
|
||||
void OsdKeyboardSet( unsigned char modifier, char* keycodes) {
|
||||
unsigned i=0;
|
||||
key_modifier = modifier;
|
||||
for(i=0; i<6; i++) {
|
||||
if((keycodes[i]&0xFF) != 0xFF )
|
||||
key_pressed[i]=keycodes[i];
|
||||
else
|
||||
key_pressed[i]=0;
|
||||
}
|
||||
iprintf("keyodes: %x %x\n", key_pressed[0], key_pressed[1]);
|
||||
|
||||
}
|
||||
unsigned char OsdKeyboardModifiers() {
|
||||
return key_modifier;
|
||||
}
|
||||
void OsdKeyboardPressed(char *keycodes) {
|
||||
unsigned i=0;
|
||||
for(i=0; i<6; i++)
|
||||
keycodes[i]=key_pressed[i];
|
||||
}
|
||||
|
||||
/* core currently loaded */
|
||||
static char lastcorename[261+10] = "CORE";
|
||||
|
||||
5
osd.h
5
osd.h
@ -168,6 +168,11 @@ void OsdUsbIdSetB(unsigned int vid, unsigned int pid);
|
||||
unsigned int OsdUsbVidGetB();
|
||||
unsigned int OsdUsbPidGetB();
|
||||
|
||||
// keyboard status
|
||||
void OsdKeyboardSet( unsigned char modifier, char* pressed);
|
||||
unsigned char OsdKeyboardModifiers();
|
||||
void OsdKeyboardPressed(char *pressed);
|
||||
|
||||
// get/set core currently loaded
|
||||
void OsdCoreNameSet(const char* str);
|
||||
char* OsdCoreName();
|
||||
|
||||
@ -142,6 +142,9 @@ char* get_joystick_alias( uint16_t vid, uint16_t pid ) {
|
||||
if(vid==0x1345 && pid==0x1030)
|
||||
return JOYSTICK_ALIAS_RETRO_FREAK;
|
||||
|
||||
if(vid==0x1235 && pid==0xab21)
|
||||
return JOYSTICK_ALIAS_8BITDO_SFC30;
|
||||
|
||||
return JOYSTICK_ALIAS_NONE;
|
||||
|
||||
}
|
||||
@ -255,6 +258,22 @@ uint16_t virtual_joystick_mapping (uint16_t vid, uint16_t pid, uint16_t joy_inpu
|
||||
use_default=0;
|
||||
}
|
||||
|
||||
//mapping for 8bitdo SFC30
|
||||
if(vid==0x1235 && pid==0xab21) {
|
||||
mapping[btn_off+1] = JOY_A;
|
||||
mapping[btn_off+2] = JOY_B;
|
||||
//mapping[btn_off+3] // not used
|
||||
mapping[btn_off+4] = JOY_X;
|
||||
mapping[btn_off+5] = JOY_Y;
|
||||
//mapping[btn_off+6] // not used
|
||||
mapping[btn_off+7] = JOY_L | JOY_L2; // also bind to buttons for flippers
|
||||
mapping[btn_off+8] = JOY_R | JOY_R2; // also bind to buttons for flippers
|
||||
//9 and 10 not used
|
||||
mapping[btn_off+11] = JOY_SELECT;
|
||||
mapping[btn_off+12] = JOY_START;
|
||||
use_default=0;
|
||||
}
|
||||
|
||||
// apply remap information from mist.ini if present
|
||||
uint8_t j;
|
||||
for(j=0;j<MAX_VIRTUAL_JOYSTICK_REMAP;j++) {
|
||||
@ -387,7 +406,7 @@ void virtual_joystick_keyboard ( uint16_t vjoy ) {
|
||||
|
||||
// shortcuts mapped if start is pressed (take priority)
|
||||
if (vjoy & JOY_START) {
|
||||
iprintf("joy2key START is pressed\n");
|
||||
//iprintf("joy2key START is pressed\n");
|
||||
int idx = 0;
|
||||
if(vjoy & JOY_A) buf[idx++] = 0x28; // ENTER
|
||||
if(vjoy & JOY_B) buf[idx++] = 0x2C; // SPACE
|
||||
@ -427,7 +446,7 @@ void virtual_joystick_keyboard ( uint16_t vjoy ) {
|
||||
if (joy_key_map[i].modifier) {
|
||||
modifier |= joy_key_map[i].modifier;
|
||||
mapped_hit=1;
|
||||
iprintf("joy2key hit (modifier):%d\n", joy_key_map[i].modifier);
|
||||
//iprintf("joy2key hit (modifier):%d\n", joy_key_map[i].modifier);
|
||||
}
|
||||
// only override up to 6 keys,
|
||||
// and preserve overrides from further up this function
|
||||
@ -440,7 +459,7 @@ void virtual_joystick_keyboard ( uint16_t vjoy ) {
|
||||
if (joy_key_map[i].keys[j]) {
|
||||
buf[k++] = joy_key_map[i].keys[j];
|
||||
mapped_hit=1;
|
||||
iprintf("joy2key hit:%d\n", joy_key_map[i].keys[j]);
|
||||
//iprintf("joy2key hit:%d\n", joy_key_map[i].keys[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,7 +19,7 @@
|
||||
#define JOYSTICK_ALIAS_ROYDS_EX "ROYDS Stick.EX"
|
||||
#define JOYSTICK_ALIAS_NEOGEO_DAPTOR "NEOGEO-daptor"
|
||||
#define JOYSTICK_ALIAS_RETRO_FREAK "Retro Freak gamepad"
|
||||
|
||||
#define JOYSTICK_ALIAS_8BITDO_SFC30 "8BitDo SFC30"
|
||||
|
||||
/*****************************************************************************/
|
||||
|
||||
|
||||
71
user_io.c
71
user_io.c
@ -1108,8 +1108,8 @@ void user_io_poll() {
|
||||
ps2_mouse[2] = mouse_pos[Y];
|
||||
|
||||
// collect movement info and send at predefined rate
|
||||
iprintf("PS2 MOUSE: %x %d %d\n",
|
||||
ps2_mouse[0], ps2_mouse[1], ps2_mouse[2]);
|
||||
if(!(ps2_mouse[0]==0x08 && ps2_mouse[1]==0 && ps2_mouse[2]==0))
|
||||
iprintf("PS2 MOUSE: %x %d %d\n", ps2_mouse[0], ps2_mouse[1], ps2_mouse[2]);
|
||||
|
||||
spi_uio_cmd_cont(UIO_MOUSE);
|
||||
spi8(ps2_mouse[0]);
|
||||
@ -1251,18 +1251,17 @@ static void send_keycode(unsigned short code) {
|
||||
|
||||
// pause does not have a break code
|
||||
if(!(code & BREAK)) {
|
||||
|
||||
// Pause key sends E11477E1F014E077
|
||||
static const unsigned char c[] = {
|
||||
0xe1, 0x14, 0x77, 0xe1, 0xf0, 0x14, 0xf0, 0x77, 0x00 };
|
||||
const unsigned char *p = c;
|
||||
|
||||
iprintf("PS2 KBD ");
|
||||
while(*p) {
|
||||
iprintf("%x ", *p);
|
||||
spi8(*p++);
|
||||
}
|
||||
iprintf("\n");
|
||||
// Pause key sends E11477E1F014E077
|
||||
static const unsigned char c[] = {
|
||||
0xe1, 0x14, 0x77, 0xe1, 0xf0, 0x14, 0xf0, 0x77, 0x00 };
|
||||
const unsigned char *p = c;
|
||||
|
||||
iprintf("PS2 KBD ");
|
||||
while(*p) {
|
||||
iprintf("%x ", *p);
|
||||
spi8(*p++);
|
||||
}
|
||||
iprintf("\n");
|
||||
}
|
||||
} else {
|
||||
iprintf("PS2 KBD ");
|
||||
@ -1431,12 +1430,14 @@ void user_io_kbd(unsigned char m, unsigned char *k, uint8_t priority) {
|
||||
(core_type == CORE_TYPE_ARCHIE) ||
|
||||
(core_type == CORE_TYPE_8BIT)) {
|
||||
|
||||
|
||||
// iprintf("KBD: %d\n", m);
|
||||
// hexdump(k, 6, 0);
|
||||
|
||||
static unsigned char modifier = 0, pressed[6] = { 0,0,0,0,0,0 };
|
||||
char keycodes[6] = { 0,0,0,0,0,0 };
|
||||
char i, j;
|
||||
|
||||
|
||||
// remap keycodes if requested
|
||||
for(i=0;(i<6) && k[i];i++) {
|
||||
for(j=0;j<MAX_REMAP;j++) {
|
||||
@ -1446,25 +1447,25 @@ void user_io_kbd(unsigned char m, unsigned char *k, uint8_t priority) {
|
||||
}
|
||||
}
|
||||
}
|
||||
// remap modifiers to each other if requested
|
||||
// bit 0 1 2 3 4 5 6 7
|
||||
// remap modifiers to each other if requested
|
||||
// bit 0 1 2 3 4 5 6 7
|
||||
// key LCTRL LSHIFT LALT LGUI RCTRL RSHIFT RALT RGUI
|
||||
if (false) { // (disabled until we configure it via INI)
|
||||
uint8_t default_mod_mapping [8] = {
|
||||
0x1,
|
||||
0x2,
|
||||
0x4,
|
||||
0x8,
|
||||
0x10,
|
||||
0x20,
|
||||
0x40,
|
||||
0x80
|
||||
};
|
||||
uint8_t modifiers = 0;
|
||||
for(i=0; i<8; i++)
|
||||
if (m & (0x01<<i)) modifiers |= default_mod_mapping[i];
|
||||
m = modifiers;
|
||||
}
|
||||
uint8_t default_mod_mapping [8] = {
|
||||
0x1,
|
||||
0x2,
|
||||
0x4,
|
||||
0x8,
|
||||
0x10,
|
||||
0x20,
|
||||
0x40,
|
||||
0x80
|
||||
};
|
||||
uint8_t modifiers = 0;
|
||||
for(i=0; i<8; i++)
|
||||
if (m & (0x01<<i)) modifiers |= default_mod_mapping[i];
|
||||
m = modifiers;
|
||||
}
|
||||
|
||||
// modifier keys are used as buttons in emu mode
|
||||
if(emu_mode != EMU_NONE) {
|
||||
@ -1642,8 +1643,12 @@ void user_io_kbd(unsigned char m, unsigned char *k, uint8_t priority) {
|
||||
}
|
||||
}
|
||||
|
||||
for(i=0;i<6;i++)
|
||||
for(i=0;i<6;i++) {
|
||||
pressed[i] = k[i];
|
||||
keycodes[i] = keycode(pressed[i]);
|
||||
}
|
||||
OsdKeyboardSet(m, keycodes);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user