Wiimote calibration (F10 in OSD).

This commit is contained in:
sorgelig
2019-05-19 02:44:28 +08:00
parent 414861e3bf
commit a406686f4a
4 changed files with 133 additions and 1 deletions

View File

@@ -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