Use PlayStation 2 input accessories that cheap "PS2 to USB" dongles don't recognize by dumping gamepad input into UDP packets.
(Tested only on Linux)
- Set up PS2SDK
- Run
make
- Set up OPL networking within OPL and save;
- Copy the ELF to somewhere accessible (e.g.: MC1:/APPS/JOYSRV.ELF);
- Configure FMCB shortcuts.
There must be a UDP listener at:
- Same IP as configured in OPL;
- The port for SMB in OPL plus 1024:
- If you used the default port 445, it'll direct UDP towards port 1469.
- Capable of parsing and creating input in the system.
Expect 71 bytes per datagram. The last byte will always be a '\n'. Therefore looking like:
1006200079FFFF8080808000000000000000000000000000000000000000000000005A - DualShock 2
2002200041FFFF0000000000000000000000000000000000000000000000000000005A - 2011 generic Dance Mat
After converting the trimmed hex string into a ByteArray:
- 1st byte: where is the controller connected
- 1st nibble: Controller connected to port 1 or 2
- 2nd nibble: [unused] The slot of the multitap that the gamepad is connected to
- 2nd byte: Pad state. Usable if either 2 or 6; unusable otherwise (documentation on PAD_STATE_*)
- 3rd byte: Pad read status. Usable if non-zero; unusable otherwise (documentation on padRead())
- 4th to 35th byte: struct pad_button_status
- 4th byte:
u8 ok- zero is good - 5th byte:
u8 mode- ??? - 6th and 7th bytes:
u16le btns- bit array for digital input for buttons; 1 = released, 0 = pressed.- The field itself stores little endian, but here I show big endian for clarity:
0x0001-0b0000000000000001- PAD_SELECT0x0002-0b0000000000000010- PAD_L30x0004-0b0000000000000100- PAD_R30x0008-0b0000000000001000- PAD_START0x0010-0b0000000000010000- PAD_UP0x0020-0b0000000000100000- PAD_RIGHT0x0040-0b0000000001000000- PAD_DOWN0x0080-0b0000000010000000- PAD_LEFT0x0100-0b0000000100000000- PAD_L20x0200-0b0000001000000000- PAD_R20x0400-0b0000010000000000- PAD_L10x0800-0b0000100000000000- PAD_R10x1000-0b0001000000000000- PAD_TRIANGLE0x2000-0b0010000000000000- PAD_CIRCLE0x4000-0b0100000000000000- PAD_CROSS0x8000-0b1000000000000000- PAD_SQUARE
- 8th byte:
u8 rjoy_h-00=left, FF=right, 80=neutral- Right analog stick - 9th byte:
u8 rjoy_v-00=up,__ FF=down,_ 80=neutral- Right analog stick - 10th byte:
u8 ljoy_h-00=left, FF=right, 80=neutral- Left analog stick - 11th byte:
u8 ljoy_v-00=up,__ FF=down,_ 80=neutral- Left analog stick - 12th byte:
u8 right_p- Pressure senstivity for right directional -00=released, FF=full pressure - 13th byte:
u8 left_p- Pressure senstivity for left directional -00=released, FF=full pressure - 14th byte:
u8 up_p- Pressure senstivity for up directional -00=released, FF=full pressure - 15th byte:
u8 down_p- Pressure senstivity for down directional -00=released, FF=full pressure - 16th byte:
u8 triangle_p- Pressure senstivity for triangle -00=released, FF=full pressure - 17th byte:
u8 circle_p- Pressure senstivity for circle -00=released, FF=full pressure - 18th byte:
u8 cross_p- Pressure senstivity for cross -00=released, FF=full pressure - 19th byte:
u8 square_p- Pressure senstivity for circle -00=released, FF=full pressure - 20th byte:
u8 l1_p- Pressure senstivity for L1 -00=released, FF=full pressure - 21th byte:
u8 r1_p- Pressure senstivity for R1 -00=released, FF=full pressure - 22th byte:
u8 l2_p- Pressure senstivity for L2 -00=released, FF=full pressure - 23th byte:
u8 r2_p- Pressure senstivity for R2 -00=released, FF=full pressure - 24th to 35th byte - ???
- 4th byte: