Skip to content

Escape / hardware specific commands #165

@MmAaXx500

Description

@MmAaXx500

For now, my intention with creating this issue is to document the available DirectInput Escape commands. In the future, it would be good to have them implemented in wine to provide better user experience.

The DirectInput API provides a way to execute hardware specific commands. These are the IDirectInputDevice8::Escape and IDirectInputEffect::Escape methods.

To collect them (and many other DInput related information) I made a tool called DInput Detour, that's what I used to debug RaceRoom Racing Experience in issue #39 and discovered these commands.

So far, not so much effort went into figuring out what these do and what other commands are available. They are presented as RRRE used them.

If anyone wants to figure out the commands or create an experimental implementation in Wine, I’m definitely open to it.

Command 0x1004

Description

Get the current range of the wheel

The returned value is the current range of the wheel in degrees. 900° in the example.

Logs

sent  pesc: dwSize: 40, dwCommand: 0x1004, lpvInBuffer: { null }, cbInBuffer 0, lpvOutBuffer: { 00 00 00 00 }, cbOutBuffer: 4
recvd pesc: dwSize: 40, dwCommand: 0x1004, lpvInBuffer: { null }, cbInBuffer 0, lpvOutBuffer: { 84 03 00 00 }, cbOutBuffer: 4

Command 0x1005

Description

Set the range of the wheel

Sent value is the range of the wheel in degrees. 450° in the example.

Logs

sent  pesc: dwSize: 40, dwCommand: 0x1005, lpvInBuffer: { c2 01 00 00 }, cbInBuffer 4, lpvOutBuffer: { null }, cbOutBuffer: 0
recvd pesc: dwSize: 40, dwCommand: 0x1005, lpvInBuffer: { c2 01 00 00 }, cbInBuffer 4, lpvOutBuffer: { null }, cbOutBuffer: 0

Command 0x1009

Description

Get the maximum supported range of the wheel

The returned value is the maximum range in degrees supported by the wheel. 1080° in the example

Logs

sent  pesc: dwSize: 40, dwCommand: 0x1009, lpvInBuffer: { null }, cbInBuffer 0, lpvOutBuffer: { 00 00 00 00 }, cbOutBuffer: 4
recvd pesc: dwSize: 40, dwCommand: 0x1009, lpvInBuffer: { null }, cbInBuffer 0, lpvOutBuffer: { 38 04 00 00 }, cbOutBuffer: 4

Command 0x1015

Description

Almost certain that this sets (at least) the global Based on the wheel's feeling in RRRE it's the damper force strength in percent. 40% in the example

Logs

sent  pesc: dwSize: 40, dwCommand: 0x1015, lpvInBuffer: { null }, cbInBuffer 0, lpvOutBuffer: { 00 00 00 00 }, cbOutBuffer: 4
recvd pesc: dwSize: 40, dwCommand: 0x1015, lpvInBuffer: { null }, cbInBuffer 0, lpvOutBuffer: { 28 00 00 00 }, cbOutBuffer: 4

Command 0x1023

Description

No idea

Logs

sent  pesc: dwSize: 40, dwCommand: 0x1023, lpvInBuffer: { null }, cbInBuffer 0, lpvOutBuffer: { null }, cbOutBuffer: 0
recvd pesc: dwSize: 40, dwCommand: 0x1023, lpvInBuffer: { null }, cbInBuffer 0, lpvOutBuffer: { null }, cbOutBuffer: 0

Command 0x101f

Description

No clue, maybe some sort of status information

Logs

sent  pesc: dwSize: 40, dwCommand: 0x101f, lpvInBuffer: { null }, cbInBuffer 0, lpvOutBuffer: { 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 }, cbOutBuffer: 20
recvd pesc: dwSize: 40, dwCommand: 0x101f, lpvInBuffer: { null }, cbInBuffer 0, lpvOutBuffer: { 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 }, cbOutBuffer: 20

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions