Now UT2004 start, but the mouse does not work or ?
Still some problem with the mouse buffer on getdevicedata.But it does
not freze any longer.
Modified: trunk/reactos/lib/dinput/mouse.c
_____
Modified: trunk/reactos/lib/dinput/mouse.c
--- trunk/reactos/lib/dinput/mouse.c 2005-03-12 21:26:29 UTC (rev
13982)
+++ trunk/reactos/lib/dinput/mouse.c 2005-03-12 22:10:11 UTC (rev
13983)
@@ -849,6 +849,7 @@
* GetDeviceState : gets buffered input data.
*/
+
static HRESULT WINAPI SysMouseAImpl_GetDeviceData(LPDIRECTINPUTDEVICE8A
iface,
DWORD dodsize,
LPDIDEVICEOBJECTDATA
dod,
@@ -861,15 +862,37 @@
#ifdef __REACTOS__
static int last_event=0;
const int size = sizeof(DIDEVICEOBJECTDATA) * 1;
-static count=0;
+int count=0;
+DWORD count_ent=0;
static DWORD time=0;
+static int save_x;
+static int save_y;
+static int save_z;
+static int save_b0;
+static int save_b1;
+static int save_b2;
+static int save_b3;
+static int save_b4;
+static int save_b5;
+static int save_b6;
+int calc;
#endif
TRACE("(%p)->(dods=%ld,entries=%ld,fl=0x%08lx)\n",This,dodsize,*entries,
flags);
#ifdef __REACTOS__
-if (flags == DIGDD_PEEK ) getmousesvalue(iface);
+save_x = This->m_state.lX;
+save_y = This->m_state.lY;
+save_z = This->m_state.lZ;
+save_b0 = This->m_state.rgbButtons[0];
+save_b1 = This->m_state.rgbButtons[1];
+save_b2 = This->m_state.rgbButtons[2];
+save_b3 = This->m_state.rgbButtons[3];
+save_b4 = This->m_state.rgbButtons[4];
+save_b5 = This->m_state.rgbButtons[5];
+save_b6 = This->m_state.rgbButtons[6];
+getmousesvalue(iface);
#endif
// windows does not get any data if
@@ -889,9 +912,7 @@
#ifdef __REACTOS__
- if (dodsize == sizeof(DIDEVICEOBJECTDATA_DX3)) {
-
FIXME("This is broken in Tribes, need right implant of the
buffer!!!!!!!!\n");
@@ -901,84 +922,94 @@
time = GetTickCount();
if (*entries == 0) return DIERR_INVALIDPARAM;
+
+ for (count=0;count<*entries;count++) {
+
+ if (save_x != This->m_state.lX) {
+ dod[count].dwOfs = DIMOFS_X;
+ dod[count].dwData = This->m_state.lX -
This->offset_array[0];
+ dod[count].dwTimeStamp = time +1;
+ dod[count].dwSequence = last_event++;
+ count_ent++;
+ }
- if (*entries == 1) {
- dod[0].dwOfs = DIMOFS_X;
- dod[0].dwData = This->m_state.lX;
- dod[0].dwTimeStamp = time +1;
- dod[0].dwSequence = last_event++;
- }
+ if (save_y != This->m_state.lY) {
+ dod[count].dwOfs = DIMOFS_Y;
+ dod[count].dwData = This->m_state.lY;
+ dod[count].dwTimeStamp = time +1;
+ dod[count].dwSequence = last_event++;
+ count_ent++;
+ }
+ if (save_z != This->m_state.lZ) {
+ dod[count].dwOfs = DIMOFS_Z;
+ dod[count].dwData = This->m_state.lZ;
+ dod[count].dwTimeStamp = time +1;
+ dod[count].dwSequence = last_event++;
+ count_ent++;
+ }
- if (*entries == 2) {
- dod[1].dwOfs = DIMOFS_Y;
- dod[1].dwData = This->m_state.lY;
- dod[1].dwTimeStamp = time +1;
- dod[1].dwSequence = last_event++;
- }
+ if (save_b0 != This->m_state.rgbButtons[0]) {
+ dod[count].dwOfs = DIMOFS_BUTTON0;
+ dod[count].dwData = This->m_state.rgbButtons[0];
+ dod[count].dwTimeStamp = time +1;
+ dod[count].dwSequence = last_event++;
+ count_ent++;
+ }
- if (*entries == 3) {
- dod[2].dwOfs = DIMOFS_2;
- dod[2].dwData = This->m_state.lZ;
- dod[2].dwTimeStamp = time +1;
- dod[2].dwSequence = last_event++;
- }
+ if (save_b1 != This->m_state.rgbButtons[1]) {
+ dod[count].dwOfs = DIMOFS_BUTTON1;
+ dod[count].dwData = This->m_state.rgbButtons[1];
+ dod[count].dwTimeStamp = time +1;
+ dod[count].dwSequence = last_event++;
+ count_ent++;
+ }
- if (*entries == 4) {
- dod[3].dwOfs = DIMOFS_BUTTON0;
- dod[3].dwData = This->m_state.rgbButtons[0];
- dod[3].dwTimeStamp = time +1;
- dod[3].dwSequence = last_event++;
- }
+ if (save_b2 != This->m_state.rgbButtons[2]) {
+ dod[count].dwOfs = DIMOFS_BUTTON2;
+ dod[count].dwData = This->m_state.rgbButtons[2];
+ dod[count].dwTimeStamp = time +1;
+ dod[count].dwSequence = last_event++;
+ count_ent++;
+ }
- if (*entries == 5) {
- dod[4].dwOfs = DIMOFS_BUTTON1;
- dod[4].dwData = This->m_state.rgbButtons[1];
- dod[4].dwTimeStamp = time +1;
- dod[4].dwSequence = last_event++;
- }
+ if (save_b3 != This->m_state.rgbButtons[3]) {
+ dod[count].dwOfs = DIMOFS_BUTTON3;
+ dod[count].dwData = This->m_state.rgbButtons[3];
+ dod[count].dwTimeStamp = time +1;
+ dod[count].dwSequence = last_event++;
+ count_ent++;
+ }
- if (*entries == 6) {
- dod[5].dwOfs = DIMOFS_BUTTON2;
- dod[5].dwData = This->m_state.rgbButtons[2];
- dod[5].dwTimeStamp = time +1;
- dod[5].dwSequence = last_event++;
- }
+ if (save_b4 != This->m_state.rgbButtons[4]) {
+ dod[count].dwOfs = DIMOFS_BUTTON4;
+ dod[count].dwData = This->m_state.rgbButtons[4];
+ dod[count].dwTimeStamp = time +1;
+ dod[count].dwSequence = last_event++;
+ count_ent++;
+ }
- if (*entries == 7) {
- dod[6].dwOfs = DIMOFS_BUTTON3;
- dod[6].dwData = This->m_state.rgbButtons[3];
- dod[6].dwTimeStamp = time +1;
- dod[6].dwSequence = last_event++;
- }
+ if (save_b5 != This->m_state.rgbButtons[5]) {
+ dod[count].dwOfs = DIMOFS_BUTTON5;
+ dod[count].dwData = This->m_state.rgbButtons[5];
+ dod[count].dwTimeStamp = time +1;
+ dod[count].dwSequence = last_event++;
+ count_ent++;
+ }
- if (*entries == 8) {
- dod[7].dwOfs = DIMOFS_BUTTON4;
- dod[7].dwData = This->m_state.rgbButtons[4];
- dod[7].dwTimeStamp = time +1;
- dod[7].dwSequence = last_event++;
- }
+ if (save_b6 != This->m_state.rgbButtons[6]) {
+ dod[count].dwOfs = DIMOFS_BUTTON6;
+ dod[count].dwData = This->m_state.rgbButtons[6];
+ dod[count].dwTimeStamp = time +1;
+ dod[count].dwSequence = last_event++;
+ count_ent++;
+ }
- if (*entries == 9) {
- dod[8].dwOfs = DIMOFS_BUTTON5;
- dod[8].dwData = This->m_state.rgbButtons[5];
- dod[8].dwTimeStamp = time +1;
- dod[8].dwSequence = last_event++;
- }
+ } // end for
- if (*entries == 10) {
- dod[9].dwOfs = DIMOFS_BUTTON6;
- dod[9].dwData = This->m_state.rgbButtons[6];
- dod[9].dwTimeStamp = time +1;
- dod[9].dwSequence = last_event++;
- }
- }
+*entries = count_ent;
+
- else {
- ERR("Wrong structure size !\n");
- return DIERR_INVALIDPARAM;
- }
- //LeaveCriticalSection(&(This->crit));
#endif
#ifndef __REACTOS__
Show replies by date