Difference between revisions of "Network API"
(→Send report) |
|||
(8 intermediate revisions by the same user not shown) | |||
Line 66: | Line 66: | ||
Use this request to update the axes of the remote GIMX instance.<br > | 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. | The [[Controller_Maps|Controller Maps]] page describes the axes and the value ranges corresponding to each controller type. | ||
Line 81: | Line 80: | ||
| 2 || | | 2 || | ||
{| class="wikitable" style="text-align: center;" | {| class="wikitable" style="text-align: center;" | ||
− | + | |bit 7 | |
− | + | |bit 6 | |
− | + | |bit 5 | |
− | + | |bit 4 | |
− | + | |bit 3 | |
− | + | |bit 2 | |
− | + | |bit 1 | |
− | + | |bit 0 | |
|- | |- | ||
|0 for rel_axis<br /> | |0 for rel_axis<br /> | ||
1 for abs_axis | 1 for abs_axis | ||
− | |colspan="7"|axis index<br /> | + | |colspan="7"|axis index<br />X for abs_axis_X or rel_axis_X |
|} | |} | ||
|- | |- | ||
− | | 3-6 || axis value | + | | 3-6 || axis value (network byte order, see below) |
|- | |- | ||
| ... || repeat 2 and 3-6 for each axis to update | | ... || 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.<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= | =Protocol for versions up to 6.11= |
Latest revision as of 21:49, 28 August 2019
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.
Contents
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.
byte | value |
0 | 0x00 |
1 | 0x00 |
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.
byte | value | ||||||||||||||||
0 | 0x01 | ||||||||||||||||
1 | number of axes to follow | ||||||||||||||||
2 |
| ||||||||||||||||
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.
byte | value |
0 | 0x11 |
1 | 0x00 |
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.
byte | value |
0 | 0xff |
1 | 0x9C = 156 |
2-5 | axis 0 |
6-9 | axis 1 |
... | |
158-161 | axis 39 (changed in GIMX 6.10) |