|
|
(37 intermediate revisions by the same user not shown)
|
Line 1: |
Line 1: |
− | It's possible to make a GIMX instance listen for UDP packets coming from a specific port.<br />
| + | This page describes how to talk to a GIMX instance that is listening for UDP packets on a specific port.<br /> |
− | See the "--src IP:port" argument on the [[Command_line#General_gimx_options|Command line page]]. | + | See the "--src IP:port" argument on the [[Command_line#General_gimx_options|Command line page]] to learn how to start such a GIMX instance. |
| | | |
− | The packet format is the following: | + | =Protocol starting from version 7.1= |
| + | |
| + | One problem with the earlier protocol was that backward compatibility was broken each time a new axis was added to the controller map.<br /> |
| + | The new protocol allows to send any number of axis values. |
| + | |
| + | ==Get controller type== |
| + | |
| + | Use this request for getting the controller type of the remote GIMX instance. |
| + | |
| + | {| class="wikitable" style="text-align: center;" |
| + | |+Request |
| + | | byte || value |
| + | |- |
| + | | |
| + | |- |
| + | | 0 || 0x00 |
| + | |- |
| + | | 1 || 0x00 |
| + | |} |
| + | |
| + | {| class="wikitable" style="text-align: center;" |
| + | |+Answer |
| + | | byte || value |
| + | |- |
| + | | |
| + | |- |
| + | | 0 || 0x00 |
| + | |- |
| + | | 1 || 0x01 |
| + | |- |
| + | | 2 || value |
| + | |} |
| | | |
| {| class="wikitable" style="text-align: center;" | | {| class="wikitable" style="text-align: center;" |
− | | byte 0 || 0xff | + | |value || type |
| + | |- |
| + | | |
| + | |- |
| + | | 0x00 || JOYSTICK |
| + | |- |
| + | | 0x01 || 360 PAD |
| + | |- |
| + | | 0x02 || SIXAXIS |
| + | |- |
| + | | 0x05 || DS4 |
| + | |- |
| + | | 0x06 || Xbox One PAD |
| + | |- |
| + | | 0x07 || T300RS PS4 |
| + | |- |
| + | | 0x08 || G27 PS3 |
| |- | | |- |
− | | byte 1 || 0x7c = 124 | + | | 0x09 || G29 PS4 |
| |- | | |- |
− | | byte 2-5 || axis 0 | + | | 0x0A || DF PS2 (Driving Force) |
| + | |- |
| + | | 0x0B || DFP PS2 (Driving Force Pro) |
| + | |- |
| + | | 0x0C || GTF PS2 (GT Force) |
| + | |} |
| + | |
| + | ==Send report== |
| + | |
| + | Use this request to update the axes of the remote GIMX instance.<br > |
| + | The [[Controller_Maps|Controller Maps]] page describes the axes and the value ranges corresponding to each controller type. |
| + | |
| + | {| class="wikitable" style="text-align: center;" |
| + | |+Report |
| + | | byte || value |
| |- | | |- |
− | | byte 6-9 || axis 1 | + | | |
| |- | | |- |
− | | byte 10-13 || axis 2 | + | | 0 || 0x01 |
| |- | | |- |
− | | byte 14-17 || axis 3 | + | | 1 || number of axes to follow |
| |- | | |- |
− | | byte 18-21 || axis 4 | + | | 2 || |
| + | {| class="wikitable" style="text-align: center;" |
| + | |bit 7 |
| + | |bit 6 |
| + | |bit 5 |
| + | |bit 4 |
| + | |bit 3 |
| + | |bit 2 |
| + | |bit 1 |
| + | |bit 0 |
| |- | | |- |
− | | byte 22-25 || axis 5 | + | |0 for rel_axis<br /> |
| + | 1 for abs_axis |
| + | |colspan="7"|axis index<br />X for abs_axis_X or rel_axis_X |
| + | |} |
| |- | | |- |
− | | byte 26-29 || axis 6 | + | | 3-6 || axis value (network byte order, see below) |
| |- | | |- |
− | | byte 30-33 || axis 7 | + | | ... || repeat 2 and 3-6 for each axis to update |
| |- | | |- |
− | | byte 34-37 || axis 8 | + | |} |
| + | |
| + | To compute the axis value, take the int value stored as two's complement, and store it using the network byte order, which is big endian.<br /> |
| + | Examples: |
| + | * -32767 = 0xffff8001 => value = 0xff, 0xff, 0x80, 0x01 |
| + | * -127 = 0xffffff81 => value = 0xff, 0xff, 0xff, 0x81 |
| + | * -1 = 0xffffffff => value = 0xff, 0xff, 0xff, 0xff |
| + | * 0 = 0x00000000 => value = 0x00, 0x00, 0x00, 0x00 |
| + | * 1 = 0x00000001 => value = 0x00, 0x00, 0x00, 0x01 |
| + | * 127 = 0x0000007f => value = 0x00, 0x00, 0x00, 0x7f |
| + | * 32767 = 0x00007fff => value = 0x00, 0x00, 0x7f, 0xff |
| + | |
| + | =Python source code example= |
| + | |
| + | A python source code example is available here: https://github.com/matlo/gimx-network-client |
| + | |
| + | =Protocol for versions up to 6.11= |
| + | |
| + | <div class="mw-collapsible mw-collapsed"> |
| + | |
| + | ==Get controller type== |
| + | |
| + | It's possible to send a packet to get the controller type from the remote GIMX. |
| + | |
| + | {| class="wikitable" style="text-align: center;" |
| + | |+Request |
| + | | byte || value |
| |- | | |- |
− | | byte 38-41 || axis 9 | + | | |
| |- | | |- |
− | | byte 42-45 || axis 10 | + | | 0 || 0x11 |
| |- | | |- |
− | | byte 46-49 || axis 11 | + | | 1 || 0x00 |
| + | |} |
| + | |
| + | {| class="wikitable" style="text-align: center;" |
| + | |+Answer |
| + | | byte || value |
| |- | | |- |
− | | byte 50-53 || axis 12 | + | | |
| |- | | |- |
− | | byte 54-57 || axis 13 | + | | 0 || 0x11 |
| |- | | |- |
− | | byte 58-61 || axis 14 | + | | 1 || 0x01 |
| |- | | |- |
− | | byte 65-65 || axis 15 | + | | 2 || value |
| + | |} |
| + | |
| + | {| class="wikitable" style="text-align: center;" |
| + | |value || type |
| |- | | |- |
− | | byte 66-69 || axis 16 | + | | |
| |- | | |- |
− | | byte 72-75 || axis 17 | + | | 0x00 || JOYSTICK |
| |- | | |- |
− | | byte 76-79 || axis 18 | + | | 0x01 || 360 PAD |
| |- | | |- |
− | | byte 80-83 || axis 19 | + | | 0x02 || SIXAXIS |
| |- | | |- |
− | | byte 84-87 || axis 20 | + | | 0x05 || DS4 |
| |- | | |- |
− | | byte 88-91 || axis 21 | + | | 0x07 || T300RS PS4 |
| |- | | |- |
− | | byte 92-95 || axis 22 | + | | 0x08 || G27 PS3 |
| |- | | |- |
− | | byte 96-99 || axis 23 | + | | 0x09 || G29 PS4 |
| + | |} |
| + | |
| + | ==Send report== |
| + | |
| + | All axes are signed integers. |
| + | |
| + | The [[Controller_Maps|Controller Maps]] page describes the axes and the value ranges corresponding to each controller type. |
| + | |
| + | {| class="wikitable" style="text-align: center;" |
| + | |+Report |
| + | | byte || value |
| |- | | |- |
− | | byte 100-103 || axis 24 | + | | |
| |- | | |- |
− | | byte 104-107 || axis 25 | + | | 0 || 0xff |
| |- | | |- |
− | | byte 108-111 || axis 26 | + | | 1 || 0x9C = 156 |
| |- | | |- |
− | | byte 112-115 || axis 27 | + | | 2-5 || axis 0 |
| |- | | |- |
− | | byte 116-119 || axis 28 | + | | 6-9 || axis 1 |
| |- | | |- |
− | | byte 120-123 || axis 29 | + | | ... || |
| |- | | |- |
− | | byte 124-127 || axis 30 | + | | 158-161 || axis 39 (changed in GIMX 6.10) |
| |} | | |} |
| + | |
| + | </div> |
This page describes how to talk to a GIMX instance that is listening for UDP packets on a specific port.
See the "--src IP:port" argument on the Command line page to learn how to start such a GIMX instance.
Protocol starting from version 7.1
One problem with the earlier protocol was that backward compatibility was broken each time a new axis was added to the controller map.
The new protocol allows to send any number of axis values.
Get controller type
Use this request for getting the controller type of the remote GIMX instance.
Request
byte |
value
|
|
0 |
0x00
|
1 |
0x00
|
Answer
byte |
value
|
|
0 |
0x00
|
1 |
0x01
|
2 |
value
|
value |
type
|
|
0x00 |
JOYSTICK
|
0x01 |
360 PAD
|
0x02 |
SIXAXIS
|
0x05 |
DS4
|
0x06 |
Xbox One PAD
|
0x07 |
T300RS PS4
|
0x08 |
G27 PS3
|
0x09 |
G29 PS4
|
0x0A |
DF PS2 (Driving Force)
|
0x0B |
DFP PS2 (Driving Force Pro)
|
0x0C |
GTF PS2 (GT Force)
|
Send report
Use this request to update the axes of the remote GIMX instance.
The Controller Maps page describes the axes and the value ranges corresponding to each controller type.
Report
byte |
value
|
|
0 |
0x01
|
1 |
number of axes to follow
|
2 |
bit 7
|
bit 6
|
bit 5
|
bit 4
|
bit 3
|
bit 2
|
bit 1
|
bit 0
|
0 for rel_axis
1 for abs_axis
|
axis index X for abs_axis_X or rel_axis_X
|
|
3-6 |
axis value (network byte order, see below)
|
... |
repeat 2 and 3-6 for each axis to update
|
To compute the axis value, take the int value stored as two's complement, and store it using the network byte order, which is big endian.
Examples:
- -32767 = 0xffff8001 => value = 0xff, 0xff, 0x80, 0x01
- -127 = 0xffffff81 => value = 0xff, 0xff, 0xff, 0x81
- -1 = 0xffffffff => value = 0xff, 0xff, 0xff, 0xff
- 0 = 0x00000000 => value = 0x00, 0x00, 0x00, 0x00
- 1 = 0x00000001 => value = 0x00, 0x00, 0x00, 0x01
- 127 = 0x0000007f => value = 0x00, 0x00, 0x00, 0x7f
- 32767 = 0x00007fff => value = 0x00, 0x00, 0x7f, 0xff
Python source code example
A python source code example is available here: https://github.com/matlo/gimx-network-client
Protocol for versions up to 6.11
Get controller type
It's possible to send a packet to get the controller type from the remote GIMX.
Request
byte |
value
|
|
0 |
0x11
|
1 |
0x00
|
Answer
byte |
value
|
|
0 |
0x11
|
1 |
0x01
|
2 |
value
|
value |
type
|
|
0x00 |
JOYSTICK
|
0x01 |
360 PAD
|
0x02 |
SIXAXIS
|
0x05 |
DS4
|
0x07 |
T300RS PS4
|
0x08 |
G27 PS3
|
0x09 |
G29 PS4
|
Send report
All axes are signed integers.
The Controller Maps page describes the axes and the value ranges corresponding to each controller type.
Report
byte |
value
|
|
0 |
0xff
|
1 |
0x9C = 156
|
2-5 |
axis 0
|
6-9 |
axis 1
|
... |
|
158-161 |
axis 39 (changed in GIMX 6.10)
|