pumpitupdev / pumptools

A collection of tools to run Pump It Up games.
The Unlicense
22 stars 7 forks source link

patch/piuio hook not compatible with MK3 games IO polling patterns #47

Open voidderef opened 2 years ago

voidderef commented 2 years ago

Bug report

Description

The current piuio patch module is designed to abstract the typical, and i thought only, polling pattern of modern pump games which is 8 usb control calls to execute a full IO refresh cycle. To simplify the pumptools piuio API and not having to bother with this in API implementations that do not support sensor cycling, this is not exposed and abstracted in patch/piuio.

However, this is apparently not compatible with the MK3 linux ports. These seem to implement different IO polling patterns which do not following the, so for, known pattern the entire patch/piuio implementation relies on.

The result is weird IO behavior to unresponsiveness on some, but not all MK3 games.

Apparently OBG and newer are showing expected sensor cycling 0-3.

1st and 2nd however show different polling patterns.

Pattern 1

M][2022/6/28-0:6:41:874][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:41:890][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:41:906][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:5][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:6][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:42:23][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:42:39][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:39][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:40][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:6:42:40][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:6:42:40][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:40][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:43][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:6:42:43][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:6:42:43][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:43][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:59][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:60][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:60][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:76][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:42:92][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:42:108][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:108][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:109][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:6:42:109][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:6:42:109][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:109][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:126][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:6:42:126][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:6:42:126][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:126][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:143][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:143][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:143][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:160][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:42:176][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:42:192][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:192][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:193][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:6:42:193][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:6:42:193][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:193][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:42:210][patch-piuio][piuio.c:180] Write Sensor # 2

Pattern 2

[M][2022/6/28-0:6:46:164][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:46:181][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:46:196][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:197][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:197][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:6:46:197][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:6:46:197][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:197][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:214][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:6:46:214][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:6:46:214][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:214][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:230][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:230][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:230][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:247][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:46:264][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:46:279][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:280][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:280][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:6:46:280][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:6:46:280][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:280][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:297][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:6:46:297][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:6:46:297][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:297][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:314][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:314][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:314][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:6:46:330][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:46:348][patch-piuio][piuio.c:180] Write Sensor # 0

Pattern 3

Apparently title screen

[M][2022/6/28-0:6:58:30][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:46][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:63][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:80][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:97][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:113][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:130][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:146][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:163][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:179][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:196][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:212][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:229][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:245][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:262][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:278][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:295][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:312][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:329][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:345][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:362][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:378][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:6:58:395][patch-piuio][piuio.c:180] Write Sensor # 0

Pattern 4

[M][2022/6/28-0:7:57:253][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:253][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:7:57:270][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:270][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:7:57:287][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:287][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:7:57:303][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:303][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:7:57:320][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:320][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:7:57:336][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:336][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:7:57:353][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:353][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:7:57:369][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:369][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:7:57:386][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:386][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:7:57:402][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:402][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:7:57:419][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:419][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:7:57:436][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:436][patch-piuio][piuio.c:180] Write Sensor # 0
[M][2022/6/28-0:7:57:453][patch-piuio][piuio.c:180] Write Sensor # 2
[M][2022/6/28-0:7:57:453][patch-piuio][piuio.c:180] Write Sensor # 0

Pattern 5

[M][2022/6/28-0:7:59:822][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:822][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:839][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:839][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:839][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:839][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:855][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:856][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:856][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:856][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:872][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:872][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:872][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:872][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:889][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:889][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:889][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:889][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:906][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:906][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:906][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:906][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:922][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:922][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:922][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:922][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:939][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:939][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:939][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:939][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:956][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:7:59:956][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:7:59:956][patch-piuio][piuio.c:180] Write Sensor # 1

Pattern 6

[M][2022/6/28-0:8:1:490][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:491][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:491][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:507][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:507][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:507][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:507][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:524][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:524][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:524][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:524][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:540][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:541][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:541][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:541][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:557][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:557][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:557][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:557][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:574][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:574][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:574][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:574][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:591][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:591][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:591][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:591][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:607][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:607][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:607][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:607][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:624][patch-piuio][piuio.c:180] Write Sensor # 1
[M][2022/6/28-0:8:1:624][patch-piuio][piuio.c:180] Write Sensor # 3
[M][2022/6/28-0:8:1:624][patch-piuio][piuio.c:180] Write Sensor # 1

Affected games and versions

MK3 linux ports

Pumptools versions tested

Pumptools build Jun 28 2022 00:03:23 gitrev d8a745d

OS and hardware specs

voidderef commented 2 years ago

Since this seems to only affect 1st and 2nd which already have at least one dedicated feature switch to fix some stuff, this could be another one enabling IO polling on every call instead of only every 4th call: https://github.com/pumpitupdev/pumptools/blob/d8a745d6e317acb675c5620bf0a99a7ca126aede/src/main/hook/patch/piuio.c#L186

Also noting that the idea of maybe rolling this back and exposing the sensor mask is in conflict with any piuio implementation that is agnostic to sensor cycling which is a pure piuio hardware thing. For example, lxio implements that on firmware level and all sensor data is retrieved with a single usb call.

voidderef commented 2 years ago

Another note: To enhance debugging, we should add some metrics to measure the poll rate. Have a feature switch to output that to the console every X seconds.