Wiimote calibration (F10 in OSD).
This commit is contained in:
53
input.cpp
53
input.cpp
@@ -998,6 +998,8 @@ typedef struct
|
||||
uint8_t has_kbdmap;
|
||||
uint8_t kbdmap[256];
|
||||
|
||||
uint16_t guncal[4];
|
||||
|
||||
int accx, accy;
|
||||
int quirk;
|
||||
|
||||
@@ -1242,6 +1244,24 @@ void finish_map_setting(int dismiss)
|
||||
}
|
||||
}
|
||||
|
||||
void input_lightgun_cal(uint16_t *cal)
|
||||
{
|
||||
FileSaveConfig("wiimote_cal.cfg", cal, 4 * sizeof(uint16_t));
|
||||
for (int i = 0; i < NUMDEV; i++)
|
||||
{
|
||||
if (input[i].quirk == QUIRK_WIIMOTE) memcpy(input[i].guncal, cal, sizeof(input[i].guncal));
|
||||
}
|
||||
}
|
||||
|
||||
int input_has_lightgun()
|
||||
{
|
||||
for (int i = 0; i < NUMDEV; i++)
|
||||
{
|
||||
if (input[i].quirk == QUIRK_WIIMOTE) return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint16_t get_map_vid()
|
||||
{
|
||||
return (mapping && mapping_dev >= 0) ? input[mapping_dev].vid : 0;
|
||||
@@ -2330,6 +2350,11 @@ int input_test(int getchar)
|
||||
else
|
||||
{
|
||||
input[n].quirk = QUIRK_WIIMOTE;
|
||||
input[n].guncal[0] = 0;
|
||||
input[n].guncal[1] = 767;
|
||||
input[n].guncal[2] = 1;
|
||||
input[n].guncal[3] = 1023;
|
||||
FileLoadConfig("wiimote_cal.cfg", input[n].guncal, 4 * sizeof(uint16_t));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2465,7 +2490,6 @@ int input_test(int getchar)
|
||||
input[dev].lightgun = 0;
|
||||
if (absinfo.maximum == 1023 || absinfo.maximum == 767)
|
||||
{
|
||||
if (user_io_osd_is_visible()) continue;
|
||||
if (ev.code == 16)
|
||||
{
|
||||
ev.value = absinfo.maximum - ev.value;
|
||||
@@ -2597,6 +2621,33 @@ int input_test(int getchar)
|
||||
}
|
||||
}
|
||||
|
||||
if (ev.type == EV_ABS && input[i].quirk == QUIRK_WIIMOTE && input[dev].lightgun)
|
||||
{
|
||||
menu_lightgun_cb(ev.type, ev.code, ev.value);
|
||||
|
||||
// don't pass IR tracking to OSD
|
||||
if (user_io_osd_is_visible()) continue;
|
||||
|
||||
if (!ev.code)
|
||||
{
|
||||
absinfo.minimum = input[i].guncal[2];
|
||||
absinfo.maximum = input[i].guncal[3];
|
||||
}
|
||||
else
|
||||
{
|
||||
absinfo.minimum = input[i].guncal[0];
|
||||
absinfo.maximum = input[i].guncal[1];
|
||||
}
|
||||
}
|
||||
|
||||
if (ev.type == EV_KEY && user_io_osd_is_visible())
|
||||
{
|
||||
if (input[i].quirk == QUIRK_WIIMOTE)
|
||||
{
|
||||
if (menu_lightgun_cb(ev.type, ev.code, ev.value)) continue;
|
||||
}
|
||||
}
|
||||
|
||||
if(!noabs) input_cb(&ev, &absinfo, i);
|
||||
|
||||
//sumulate digital directions from analog
|
||||
|
||||
Reference in New Issue
Block a user