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__