Fixes and improvements in joystick code.
This commit is contained in:
6
input.c
6
input.c
@@ -546,8 +546,8 @@ static void joy_digital(int num, uint16_t mask, char press, int bnum)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (press) joy[num] |= (char)mask;
|
||||
else joy[num] &= ~(char)mask;
|
||||
if (press) joy[num] |= mask;
|
||||
else joy[num] &= ~mask;
|
||||
user_io_digital_joystick(num, joy[num]);
|
||||
}
|
||||
}
|
||||
@@ -697,7 +697,7 @@ static void input_cb(struct input_event *ev, int dev)
|
||||
{
|
||||
if (ev->code == input[dev].map[i])
|
||||
{
|
||||
joy_digital((user_io_get_kbdemu() != EMU_JOY0) ? 0 : 1, 1 << i, ev->value, i);
|
||||
joy_digital((user_io_get_kbdemu() == EMU_JOY0) ? 0 : 1, 1 << i, ev->value, i);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
4
menu.c
4
menu.c
@@ -948,12 +948,12 @@ void HandleUI(void)
|
||||
for (int n = 0; n < 12; n++)
|
||||
{
|
||||
substrcpy(joy_bnames[n], p, n+1);
|
||||
printf("joy_bname = %s\n", joy_bnames[n]);
|
||||
//printf("joy_bname = %s\n", joy_bnames[n]);
|
||||
if(!joy_bnames[n][0]) break;
|
||||
joy_bcount++;
|
||||
}
|
||||
|
||||
printf("joy_bcount = %d\n", joy_bcount);
|
||||
//printf("joy_bcount = %d\n", joy_bcount);
|
||||
}
|
||||
|
||||
i++;
|
||||
|
||||
87
user_io.c
87
user_io.c
@@ -159,6 +159,59 @@ static void user_io_read_core_name()
|
||||
iprintf("Core name is \"%s\"\n", core_name);
|
||||
}
|
||||
|
||||
static void set_kbd_led(unsigned char led, bool on)
|
||||
{
|
||||
if (led & HID_LED_CAPS_LOCK)
|
||||
{
|
||||
if (!(keyboard_leds & KBD_LED_CAPS_CONTROL)) set_kbdled(led, on);
|
||||
caps_status = on;
|
||||
}
|
||||
|
||||
if (led & HID_LED_NUM_LOCK)
|
||||
{
|
||||
if (!(keyboard_leds & KBD_LED_NUM_CONTROL)) set_kbdled(led, on);
|
||||
num_status = on;
|
||||
}
|
||||
|
||||
if (led & HID_LED_SCROLL_LOCK)
|
||||
{
|
||||
if (!(keyboard_leds & KBD_LED_SCRL_CONTROL)) set_kbdled(led, on);
|
||||
scrl_status = on;
|
||||
}
|
||||
}
|
||||
|
||||
static int joy_force = 0;
|
||||
|
||||
static void parse_config()
|
||||
{
|
||||
// check if core has a config string
|
||||
core_type_8bit_with_config_string = (user_io_8bit_get_string(0) != NULL);
|
||||
|
||||
// set core name. This currently only sets a name for the 8 bit cores
|
||||
user_io_read_core_name();
|
||||
|
||||
joy_force = 0;
|
||||
if (core_type_8bit_with_config_string)
|
||||
{
|
||||
int i = 2;
|
||||
char *p;
|
||||
do {
|
||||
p = user_io_8bit_get_string(i);
|
||||
printf("*** %d: %s\n", i, p);
|
||||
if (i && p && p[0])
|
||||
{
|
||||
if (p[0] == 'J' && p[1] == '1')
|
||||
{
|
||||
joy_force = 1;
|
||||
emu_mode = EMU_JOY0;
|
||||
set_kbd_led(HID_LED_NUM_LOCK, true);
|
||||
}
|
||||
}
|
||||
i++;
|
||||
} while (p);
|
||||
}
|
||||
}
|
||||
|
||||
void user_io_detect_core_type()
|
||||
{
|
||||
char *name;
|
||||
@@ -218,11 +271,7 @@ void user_io_detect_core_type()
|
||||
// SD card implementation
|
||||
user_io_sd_set_config();
|
||||
|
||||
// check if core has a config string
|
||||
core_type_8bit_with_config_string = (user_io_8bit_get_string(0) != NULL);
|
||||
|
||||
// set core name. This currently only sets a name for the 8 bit cores
|
||||
user_io_read_core_name();
|
||||
parse_config();
|
||||
|
||||
// send a reset
|
||||
user_io_8bit_set_status(UIO_STATUS_RESET, UIO_STATUS_RESET);
|
||||
@@ -777,27 +826,6 @@ void user_io_send_buttons(char force)
|
||||
}
|
||||
}
|
||||
|
||||
static void set_kbd_led(unsigned char led, bool on)
|
||||
{
|
||||
if (led & HID_LED_CAPS_LOCK)
|
||||
{
|
||||
if (!(keyboard_leds & KBD_LED_CAPS_CONTROL)) set_kbdled(led, on);
|
||||
caps_status = on;
|
||||
}
|
||||
|
||||
if (led & HID_LED_NUM_LOCK)
|
||||
{
|
||||
if (!(keyboard_leds & KBD_LED_NUM_CONTROL)) set_kbdled(led, on);
|
||||
num_status = on;
|
||||
}
|
||||
|
||||
if (led & HID_LED_SCROLL_LOCK)
|
||||
{
|
||||
if (!(keyboard_leds & KBD_LED_SCRL_CONTROL)) set_kbdled(led, on);
|
||||
scrl_status = on;
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t diskled_timer = 0;
|
||||
uint32_t diskled_is_on = 0;
|
||||
void __inline diskled_on()
|
||||
@@ -1862,7 +1890,7 @@ void user_io_kbd(unsigned char m, unsigned char *k, unsigned short vid, unsigned
|
||||
switch (code ^ NUM_LOCK_TOGGLE)
|
||||
{
|
||||
case 1:
|
||||
emu_mode = EMU_MOUSE;
|
||||
if(!joy_force) emu_mode = EMU_MOUSE;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
@@ -1874,11 +1902,12 @@ void user_io_kbd(unsigned char m, unsigned char *k, unsigned short vid, unsigned
|
||||
break;
|
||||
|
||||
case 4:
|
||||
emu_mode = EMU_NONE;
|
||||
if (!joy_force) emu_mode = EMU_NONE;
|
||||
break;
|
||||
|
||||
default:
|
||||
emu_mode = (emu_mode + 1) & 3;
|
||||
if (joy_force) emu_mode = (emu_mode == EMU_JOY0) ? EMU_JOY1 : EMU_JOY0;
|
||||
else emu_mode = (emu_mode + 1) & 3;
|
||||
break;
|
||||
}
|
||||
if(emu_mode == EMU_MOUSE || emu_mode == EMU_JOY0) set_kbd_led(HID_LED_NUM_LOCK, true);
|
||||
|
||||
Reference in New Issue
Block a user