#define AXISTYPE_SLIDER 3
#define AXISTYPE_DIAL 4
+#define MAX_ACQUIRE_ATTEMPTS 10
+
struct didata {
int type;
int acquired;
int vid, pid, mi;
int connection;
+ int acquireattempts;
LPDIRECTINPUTDEVICE8 lpdi;
HANDLE rawinput;
HIDP_CAPS hidcaps;
}
unacquire (lpdi, _T("mouse"));
+ did->acquireattempts = MAX_ACQUIRE_ATTEMPTS;
if (did->connection == DIDC_DX && lpdi) {
setcoop (&di_mouse[num], flags ? (DISCL_FOREGROUND | DISCL_EXCLUSIVE) : (DISCL_BACKGROUND | DISCL_NONEXCLUSIVE), _T("mouse"));
dipdw.diph.dwSize = sizeof (DIPROPDWORD);
}
if (!lpdi || did->connection != DIDC_DX)
continue;
+ if (did->acquireattempts <= 0)
+ continue;
elements = DI_BUFFER;
hr = IDirectInputDevice8_GetDeviceData (lpdi, sizeof (DIDEVICEOBJECTDATA), didod, &elements, 0);
if (SUCCEEDED (hr) || hr == DI_BUFFEROVERFLOW) {
}
}
} else if (hr == DIERR_INPUTLOST) {
- acquire (lpdi, _T("mouse"));
+ if (!acquire (lpdi, _T("mouse")))
+ did->acquireattempts--;
} else if (did->acquired && hr == DIERR_NOTACQUIRED) {
- acquire (lpdi, _T("mouse"));
+ if (!acquire (lpdi, _T("mouse")))
+ did->acquireattempts--;
}
IDirectInputDevice8_Poll (lpdi);
}
lpdi = di_keyboard[num].lpdi;
unacquire (lpdi, _T("keyboard"));
+ di_keyboard[num].acquireattempts = MAX_ACQUIRE_ATTEMPTS;
//lock_kb ();
setcoop (&di_keyboard[num], DISCL_NOWINKEY | DISCL_FOREGROUND | DISCL_EXCLUSIVE, _T("keyboard"));
continue;
kb_do_refresh &= ~(1 << i);
}
+ if (did->acquireattempts <= 0)
+ continue;
elements = DI_KBBUFFER;
hr = IDirectInputDevice8_GetDeviceData (lpdi, sizeof (DIDEVICEOBJECTDATA), didod, &elements, 0);
if ((SUCCEEDED (hr) || hr == DI_BUFFEROVERFLOW) && (isfocus () || istest)) {
}
}
} else if (hr == DIERR_INPUTLOST) {
- acquire_kb (i, 0);
+ if (!acquire_kb (i, 0))
+ did->acquireattempts--;
kb_do_refresh |= 1 << i;
} else if (did->acquired && hr == DIERR_NOTACQUIRED) {
- acquire_kb (i, 0);
+ if (!acquire_kb (i, 0))
+ did->acquireattempts--;
}
IDirectInputDevice8_Poll (lpdi);
}
lpdi = did->lpdi;
if (!lpdi || did->connection != DIDC_DX)
continue;
+ if (did->acquireattempts <= 0)
+ continue;
elements = DI_BUFFER;
hr = IDirectInputDevice8_GetDeviceData (lpdi, sizeof (DIDEVICEOBJECTDATA), didod, &elements, 0);
if ((SUCCEEDED (hr) || hr == DI_BUFFEROVERFLOW) && (isfocus () || istest)) {
}
} else if (hr == DIERR_INPUTLOST) {
- acquire (lpdi, _T("joystick"));
+ if (!acquire (lpdi, _T("joystick")))
+ did->acquireattempts--;
} else if (did->acquired && hr == DIERR_NOTACQUIRED) {
- acquire (lpdi, _T("joystick"));
+ if (!acquire (lpdi, _T("joystick")))
+ did->acquireattempts--;
}
IDirectInputDevice8_Poll (lpdi);
}
}
lpdi = di_joystick[num].lpdi;
unacquire (lpdi, _T("joystick"));
+ di_joystick[num].acquireattempts = MAX_ACQUIRE_ATTEMPTS;
if (di_joystick[num].connection == DIDC_DX && lpdi) {
setcoop (&di_joystick[num], flags ? (DISCL_FOREGROUND | DISCL_EXCLUSIVE) : (DISCL_BACKGROUND | DISCL_NONEXCLUSIVE), _T("joystick"));
memset (&dipdw, 0, sizeof (dipdw));