Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
1d314d54
Commit
1d314d54
authored
Dec 12, 2006
by
Vitaliy Margolen
Committed by
Alexandre Julliard
Dec 12, 2006
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
dinput: Move joystick user data format into base class.
parent
3446caab
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
19 additions
and
89 deletions
+19
-89
joystick_linux.c
dlls/dinput/joystick_linux.c
+0
-0
joystick_linuxinput.c
dlls/dinput/joystick_linuxinput.c
+19
-89
No files found.
dlls/dinput/joystick_linux.c
View file @
1d314d54
This diff is collapsed.
Click to expand it.
dlls/dinput/joystick_linuxinput.c
View file @
1d314d54
...
@@ -136,7 +136,6 @@ struct JoystickImpl
...
@@ -136,7 +136,6 @@ struct JoystickImpl
int
joyfd
;
int
joyfd
;
LPDIDATAFORMAT
df
;
DIJOYSTATE2
js
;
DIJOYSTATE2
js
;
/* Force feedback variables */
/* Force feedback variables */
...
@@ -389,26 +388,13 @@ static JoystickImpl *alloc_device(REFGUID rguid, const void *jvt, IDirectInputIm
...
@@ -389,26 +388,13 @@ static JoystickImpl *alloc_device(REFGUID rguid, const void *jvt, IDirectInputIm
}
}
fake_current_js_state
(
newDevice
);
fake_current_js_state
(
newDevice
);
/* wine uses DIJOYSTATE2 as it's internal format so copy
/* wine uses DIJOYSTATE2 as it's internal format */
* the already defined format c_dfDIJoystick2 */
newDevice
->
base
.
data_format
.
wine_df
=
&
c_dfDIJoystick2
;
newDevice
->
df
=
HeapAlloc
(
GetProcessHeap
(),
0
,
c_dfDIJoystick2
.
dwSize
);
if
(
newDevice
->
df
==
0
)
goto
FAILED
;
CopyMemory
(
newDevice
->
df
,
&
c_dfDIJoystick2
,
c_dfDIJoystick2
.
dwSize
);
/* copy default objects */
newDevice
->
df
->
rgodf
=
HeapAlloc
(
GetProcessHeap
(),
0
,
c_dfDIJoystick2
.
dwNumObjs
*
c_dfDIJoystick2
.
dwObjSize
);
if
(
newDevice
->
df
->
rgodf
==
0
)
goto
FAILED
;
CopyMemory
(
newDevice
->
df
->
rgodf
,
c_dfDIJoystick2
.
rgodf
,
c_dfDIJoystick2
.
dwNumObjs
*
c_dfDIJoystick2
.
dwObjSize
);
/* create the default transform filter */
/* create the default transform filter */
if
(
create_DataFormat
(
&
c_dfDIJoystick2
,
newDevice
->
df
,
&
newDevice
->
base
.
data_format
)
==
DI_OK
)
if
(
create_DataFormat
(
&
c_dfDIJoystick2
,
&
c_dfDIJoystick2
,
&
newDevice
->
base
.
data_format
)
==
DI_OK
)
return
newDevice
;
return
newDevice
;
FAILED:
HeapFree
(
GetProcessHeap
(),
0
,
newDevice
->
df
->
rgodf
);
HeapFree
(
GetProcessHeap
(),
0
,
newDevice
->
df
);
HeapFree
(
GetProcessHeap
(),
0
,
newDevice
);
HeapFree
(
GetProcessHeap
(),
0
,
newDevice
);
return
NULL
;
return
NULL
;
}
}
...
@@ -502,10 +488,6 @@ static ULONG WINAPI JoystickAImpl_Release(LPDIRECTINPUTDEVICE8A iface)
...
@@ -502,10 +488,6 @@ static ULONG WINAPI JoystickAImpl_Release(LPDIRECTINPUTDEVICE8A iface)
/* Free the data queue */
/* Free the data queue */
HeapFree
(
GetProcessHeap
(),
0
,
This
->
base
.
data_queue
);
HeapFree
(
GetProcessHeap
(),
0
,
This
->
base
.
data_queue
);
/* Free the DataFormat */
HeapFree
(
GetProcessHeap
(),
0
,
This
->
df
->
rgodf
);
HeapFree
(
GetProcessHeap
(),
0
,
This
->
df
);
/* release the data transform filter */
/* release the data transform filter */
release_DataFormat
(
&
This
->
base
.
data_format
);
release_DataFormat
(
&
This
->
base
.
data_format
);
...
@@ -516,55 +498,6 @@ static ULONG WINAPI JoystickAImpl_Release(LPDIRECTINPUTDEVICE8A iface)
...
@@ -516,55 +498,6 @@ static ULONG WINAPI JoystickAImpl_Release(LPDIRECTINPUTDEVICE8A iface)
}
}
/******************************************************************************
/******************************************************************************
* SetDataFormat : the application can choose the format of the data
* the device driver sends back with GetDeviceState.
*/
static
HRESULT
WINAPI
JoystickAImpl_SetDataFormat
(
LPDIRECTINPUTDEVICE8A
iface
,
LPCDIDATAFORMAT
df
)
{
JoystickImpl
*
This
=
(
JoystickImpl
*
)
iface
;
TRACE
(
"(this=%p,%p)
\n
"
,
This
,
df
);
if
(
df
==
NULL
)
{
WARN
(
"invalid pointer
\n
"
);
return
E_POINTER
;
}
if
(
df
->
dwSize
!=
sizeof
(
*
df
))
{
WARN
(
"invalid argument
\n
"
);
return
DIERR_INVALIDPARAM
;
}
_dump_DIDATAFORMAT
(
df
);
if
(
This
->
joyfd
!=-
1
)
{
WARN
(
"acquired
\n
"
);
return
DIERR_ACQUIRED
;
}
HeapFree
(
GetProcessHeap
(),
0
,
This
->
df
->
rgodf
);
HeapFree
(
GetProcessHeap
(),
0
,
This
->
df
);
release_DataFormat
(
&
This
->
base
.
data_format
);
/* Store the new data format */
This
->
df
=
HeapAlloc
(
GetProcessHeap
(),
0
,
df
->
dwSize
);
if
(
This
->
df
==
NULL
)
{
return
DIERR_OUTOFMEMORY
;
}
memcpy
(
This
->
df
,
df
,
df
->
dwSize
);
This
->
df
->
rgodf
=
HeapAlloc
(
GetProcessHeap
(),
0
,
df
->
dwNumObjs
*
df
->
dwObjSize
);
if
(
This
->
df
->
rgodf
==
NULL
)
{
HeapFree
(
GetProcessHeap
(),
0
,
This
->
df
);
return
DIERR_OUTOFMEMORY
;
}
memcpy
(
This
->
df
->
rgodf
,
df
->
rgodf
,
df
->
dwNumObjs
*
df
->
dwObjSize
);
return
create_DataFormat
(
&
c_dfDIJoystick2
,
This
->
df
,
&
This
->
base
.
data_format
);
}
/******************************************************************************
* Acquire : gets exclusive control of the joystick
* Acquire : gets exclusive control of the joystick
*/
*/
static
HRESULT
WINAPI
JoystickAImpl_Acquire
(
LPDIRECTINPUTDEVICE8A
iface
)
static
HRESULT
WINAPI
JoystickAImpl_Acquire
(
LPDIRECTINPUTDEVICE8A
iface
)
...
@@ -574,9 +507,6 @@ static HRESULT WINAPI JoystickAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
...
@@ -574,9 +507,6 @@ static HRESULT WINAPI JoystickAImpl_Acquire(LPDIRECTINPUTDEVICE8A iface)
TRACE
(
"(this=%p)
\n
"
,
This
);
TRACE
(
"(this=%p)
\n
"
,
This
);
if
(
This
->
df
==
NULL
)
{
return
DIERR_INVALIDPARAM
;
}
res
=
IDirectInputDevice2AImpl_Acquire
(
iface
);
res
=
IDirectInputDevice2AImpl_Acquire
(
iface
);
if
(
res
==
DI_OK
)
{
if
(
res
==
DI_OK
)
{
if
(
-
1
==
(
This
->
joyfd
=
open
(
This
->
joydev
->
device
,
O_RDWR
)))
{
if
(
-
1
==
(
This
->
joyfd
=
open
(
This
->
joydev
->
device
,
O_RDWR
)))
{
...
@@ -910,12 +840,12 @@ static HRESULT WINAPI JoystickAImpl_SetProperty(LPDIRECTINPUTDEVICE8A iface,
...
@@ -910,12 +840,12 @@ static HRESULT WINAPI JoystickAImpl_SetProperty(LPDIRECTINPUTDEVICE8A iface,
if
(
ph
->
dwHow
==
DIPH_DEVICE
)
{
if
(
ph
->
dwHow
==
DIPH_DEVICE
)
{
int
i
;
int
i
;
TRACE
(
"proprange(%d,%d) all
\n
"
,
pr
->
lMin
,
pr
->
lMax
);
TRACE
(
"proprange(%d,%d) all
\n
"
,
pr
->
lMin
,
pr
->
lMax
);
for
(
i
=
0
;
i
<
This
->
df
->
dwNumObjs
;
i
++
)
{
for
(
i
=
0
;
i
<
This
->
base
.
data_format
.
user_
df
->
dwNumObjs
;
i
++
)
{
This
->
wantmin
[
i
]
=
pr
->
lMin
;
This
->
wantmin
[
i
]
=
pr
->
lMin
;
This
->
wantmax
[
i
]
=
pr
->
lMax
;
This
->
wantmax
[
i
]
=
pr
->
lMax
;
}
}
}
else
{
}
else
{
int
obj
=
find_property
(
This
->
df
,
ph
);
int
obj
=
find_property
(
This
->
base
.
data_format
.
user_
df
,
ph
);
TRACE
(
"proprange(%d,%d) obj=%d
\n
"
,
pr
->
lMin
,
pr
->
lMax
,
obj
);
TRACE
(
"proprange(%d,%d) obj=%d
\n
"
,
pr
->
lMin
,
pr
->
lMax
,
obj
);
if
(
obj
>=
0
)
{
if
(
obj
>=
0
)
{
This
->
wantmin
[
obj
]
=
pr
->
lMin
;
This
->
wantmin
[
obj
]
=
pr
->
lMin
;
...
@@ -930,11 +860,11 @@ static HRESULT WINAPI JoystickAImpl_SetProperty(LPDIRECTINPUTDEVICE8A iface,
...
@@ -930,11 +860,11 @@ static HRESULT WINAPI JoystickAImpl_SetProperty(LPDIRECTINPUTDEVICE8A iface,
if
(
ph
->
dwHow
==
DIPH_DEVICE
)
{
if
(
ph
->
dwHow
==
DIPH_DEVICE
)
{
int
i
;
int
i
;
TRACE
(
"deadzone(%d) all
\n
"
,
pd
->
dwData
);
TRACE
(
"deadzone(%d) all
\n
"
,
pd
->
dwData
);
for
(
i
=
0
;
i
<
This
->
df
->
dwNumObjs
;
i
++
)
{
for
(
i
=
0
;
i
<
This
->
base
.
data_format
.
user_
df
->
dwNumObjs
;
i
++
)
{
This
->
deadz
[
i
]
=
pd
->
dwData
;
This
->
deadz
[
i
]
=
pd
->
dwData
;
}
}
}
else
{
}
else
{
int
obj
=
find_property
(
This
->
df
,
ph
);
int
obj
=
find_property
(
This
->
base
.
data_format
.
user_
df
,
ph
);
TRACE
(
"deadzone(%d) obj=%d
\n
"
,
pd
->
dwData
,
obj
);
TRACE
(
"deadzone(%d) obj=%d
\n
"
,
pd
->
dwData
,
obj
);
if
(
obj
>=
0
)
{
if
(
obj
>=
0
)
{
This
->
deadz
[
obj
]
=
pd
->
dwData
;
This
->
deadz
[
obj
]
=
pd
->
dwData
;
...
@@ -1093,9 +1023,9 @@ static HRESULT WINAPI JoystickAImpl_EnumObjects(
...
@@ -1093,9 +1023,9 @@ static HRESULT WINAPI JoystickAImpl_EnumObjects(
if
((
user_offset
=
lxinput_to_user_offset
(
This
,
EV_ABS
,
i
))
==
-
1
)
{
if
((
user_offset
=
lxinput_to_user_offset
(
This
,
EV_ABS
,
i
))
==
-
1
)
{
continue
;
continue
;
}
}
user_object
=
offset_to_object
(
This
->
df
,
user_offset
);
user_object
=
offset_to_object
(
This
->
base
.
data_format
.
user_
df
,
user_offset
);
ddoi
.
dwType
=
This
->
df
->
rgodf
[
user_object
].
dwType
&
0x00ffffff
;
ddoi
.
dwType
=
This
->
base
.
data_format
.
user_
df
->
rgodf
[
user_object
].
dwType
&
0x00ffffff
;
ddoi
.
dwOfs
=
This
->
df
->
rgodf
[
user_object
].
dwOfs
;
ddoi
.
dwOfs
=
This
->
base
.
data_format
.
user_
df
->
rgodf
[
user_object
].
dwOfs
;
/* Linux event force feedback supports only (and always) x and y axes */
/* Linux event force feedback supports only (and always) x and y axes */
if
(
i
==
ABS_X
||
i
==
ABS_Y
)
{
if
(
i
==
ABS_X
||
i
==
ABS_Y
)
{
if
(
This
->
joydev
->
has_ff
)
if
(
This
->
joydev
->
has_ff
)
...
@@ -1118,9 +1048,9 @@ static HRESULT WINAPI JoystickAImpl_EnumObjects(
...
@@ -1118,9 +1048,9 @@ static HRESULT WINAPI JoystickAImpl_EnumObjects(
if
((
user_offset
=
lxinput_to_user_offset
(
This
,
EV_ABS
,
ABS_HAT0X
+
i
))
==
-
1
)
{
if
((
user_offset
=
lxinput_to_user_offset
(
This
,
EV_ABS
,
ABS_HAT0X
+
i
))
==
-
1
)
{
continue
;
continue
;
}
}
user_object
=
offset_to_object
(
This
->
df
,
user_offset
);
user_object
=
offset_to_object
(
This
->
base
.
data_format
.
user_
df
,
user_offset
);
ddoi
.
dwType
=
This
->
df
->
rgodf
[
user_object
].
dwType
&
0x00ffffff
;
ddoi
.
dwType
=
This
->
base
.
data_format
.
user_
df
->
rgodf
[
user_object
].
dwType
&
0x00ffffff
;
ddoi
.
dwOfs
=
This
->
df
->
rgodf
[
user_object
].
dwOfs
;
ddoi
.
dwOfs
=
This
->
base
.
data_format
.
user_
df
->
rgodf
[
user_object
].
dwOfs
;
sprintf
(
ddoi
.
tszName
,
"%d-POV"
,
i
);
sprintf
(
ddoi
.
tszName
,
"%d-POV"
,
i
);
_dump_OBJECTINSTANCEA
(
&
ddoi
);
_dump_OBJECTINSTANCEA
(
&
ddoi
);
if
(
lpCallback
(
&
ddoi
,
lpvRef
)
!=
DIENUM_CONTINUE
)
{
if
(
lpCallback
(
&
ddoi
,
lpvRef
)
!=
DIENUM_CONTINUE
)
{
...
@@ -1143,9 +1073,9 @@ static HRESULT WINAPI JoystickAImpl_EnumObjects(
...
@@ -1143,9 +1073,9 @@ static HRESULT WINAPI JoystickAImpl_EnumObjects(
if
((
user_offset
=
lxinput_to_user_offset
(
This
,
EV_KEY
,
btncount
))
==
-
1
)
{
if
((
user_offset
=
lxinput_to_user_offset
(
This
,
EV_KEY
,
btncount
))
==
-
1
)
{
continue
;
continue
;
}
}
user_object
=
offset_to_object
(
This
->
df
,
user_offset
);
user_object
=
offset_to_object
(
This
->
base
.
data_format
.
user_
df
,
user_offset
);
ddoi
.
dwType
=
This
->
df
->
rgodf
[
user_object
].
dwType
&
0x00ffffff
;
ddoi
.
dwType
=
This
->
base
.
data_format
.
user_
df
->
rgodf
[
user_object
].
dwType
&
0x00ffffff
;
ddoi
.
dwOfs
=
This
->
df
->
rgodf
[
user_object
].
dwOfs
;
ddoi
.
dwOfs
=
This
->
base
.
data_format
.
user_
df
->
rgodf
[
user_object
].
dwOfs
;
sprintf
(
ddoi
.
tszName
,
"%d-Button"
,
btncount
);
sprintf
(
ddoi
.
tszName
,
"%d-Button"
,
btncount
);
btncount
++
;
btncount
++
;
_dump_OBJECTINSTANCEA
(
&
ddoi
);
_dump_OBJECTINSTANCEA
(
&
ddoi
);
...
@@ -1192,7 +1122,7 @@ static HRESULT WINAPI JoystickAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface,
...
@@ -1192,7 +1122,7 @@ static HRESULT WINAPI JoystickAImpl_GetProperty(LPDIRECTINPUTDEVICE8A iface,
switch
(
LOWORD
(
rguid
))
{
switch
(
LOWORD
(
rguid
))
{
case
(
DWORD
)
DIPROP_RANGE
:
{
case
(
DWORD
)
DIPROP_RANGE
:
{
LPDIPROPRANGE
pr
=
(
LPDIPROPRANGE
)
pdiph
;
LPDIPROPRANGE
pr
=
(
LPDIPROPRANGE
)
pdiph
;
int
obj
=
find_property
(
This
->
df
,
pdiph
);
int
obj
=
find_property
(
This
->
base
.
data_format
.
user_
df
,
pdiph
);
if
(
obj
>=
0
)
{
if
(
obj
>=
0
)
{
pr
->
lMin
=
This
->
joydev
->
havemin
[
obj
];
pr
->
lMin
=
This
->
joydev
->
havemin
[
obj
];
pr
->
lMax
=
This
->
joydev
->
havemax
[
obj
];
pr
->
lMax
=
This
->
joydev
->
havemax
[
obj
];
...
@@ -1555,7 +1485,7 @@ static const IDirectInputDevice8AVtbl JoystickAvt =
...
@@ -1555,7 +1485,7 @@ static const IDirectInputDevice8AVtbl JoystickAvt =
JoystickAImpl_Unacquire
,
JoystickAImpl_Unacquire
,
JoystickAImpl_GetDeviceState
,
JoystickAImpl_GetDeviceState
,
IDirectInputDevice2AImpl_GetDeviceData
,
IDirectInputDevice2AImpl_GetDeviceData
,
Joystick
AImpl_SetDataFormat
,
IDirectInputDevice2
AImpl_SetDataFormat
,
IDirectInputDevice2AImpl_SetEventNotification
,
IDirectInputDevice2AImpl_SetEventNotification
,
IDirectInputDevice2AImpl_SetCooperativeLevel
,
IDirectInputDevice2AImpl_SetCooperativeLevel
,
IDirectInputDevice2AImpl_GetObjectInfo
,
IDirectInputDevice2AImpl_GetObjectInfo
,
...
@@ -1597,7 +1527,7 @@ static const IDirectInputDevice8WVtbl JoystickWvt =
...
@@ -1597,7 +1527,7 @@ static const IDirectInputDevice8WVtbl JoystickWvt =
XCAST
(
Unacquire
)
JoystickAImpl_Unacquire
,
XCAST
(
Unacquire
)
JoystickAImpl_Unacquire
,
XCAST
(
GetDeviceState
)
JoystickAImpl_GetDeviceState
,
XCAST
(
GetDeviceState
)
JoystickAImpl_GetDeviceState
,
XCAST
(
GetDeviceData
)
IDirectInputDevice2AImpl_GetDeviceData
,
XCAST
(
GetDeviceData
)
IDirectInputDevice2AImpl_GetDeviceData
,
XCAST
(
SetDataFormat
)
Joystick
AImpl_SetDataFormat
,
XCAST
(
SetDataFormat
)
IDirectInputDevice2
AImpl_SetDataFormat
,
XCAST
(
SetEventNotification
)
IDirectInputDevice2AImpl_SetEventNotification
,
XCAST
(
SetEventNotification
)
IDirectInputDevice2AImpl_SetEventNotification
,
XCAST
(
SetCooperativeLevel
)
IDirectInputDevice2AImpl_SetCooperativeLevel
,
XCAST
(
SetCooperativeLevel
)
IDirectInputDevice2AImpl_SetCooperativeLevel
,
IDirectInputDevice2WImpl_GetObjectInfo
,
IDirectInputDevice2WImpl_GetObjectInfo
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment