Files
DroidDeck/tools/dirt-ws2/README.md
The412Banner 8a7022fc14 feat(dual-screen): bottom-screen Dashboard with downloads, notifications, screenshots, Steam chat and In-game stats (#1920)
A Dashboard mode for the second screen of dual-screen handhelds (developed on a Retroid Pocket Duo), the default on dual-screen devices. It opens on Chat at each Steam start and switches to In-game stats when a game starts.

- Downloads: Steam downloads and updates (SD-card libraries too), shader caches and DroidDeck store downloads.
- Notifications: other apps' notifications once access is allowed, kept in memory only.
- Screenshots: a game screenshot without the overlay, and a gallery of DroidDeck's and Steam's screenshots.
- Chat & voice: mic and game volume buttons, and Steam's web chat signed in with the Steam client's own session.
- In-game stats: FPS, CPU, GPU, RAM and battery plus the running game or Steam client type, and a racing dash from Codemasters, Forza and OutGauge games' data output, with War Thunder and Elite Dangerous layouts; speed in km/h or mph.
- Send dashboard data: turns a Codemasters game's data output on for the dash (per game or Automatic) and keeps the original setting to put back.
- DiRT 3 / DiRT Showdown: with their data output on they stop with error 10038 at race end; a ws2_32.dll stand-in (tools/dirt-ws2) is swapped into the prefix while the game runs, skipped on DroidDeck-Proton 11-11.10 which has the fix built in. Same behaviour as DiRTTelemetryErrorFix by RoccoC, based on Carsten Gottschling's fix.

About "telemetry": here it means a racing game's own live driving data (speed, gear, rpm, pedals), not app analytics. For In-game stats no information leaves the device and nothing is shared: the game sends its data to 127.0.0.1 on the same device, DroidDeck only listens there while the page is open and keeps the numbers in memory just long enough to draw them. DroidDeck sends no data about the user or their use of the app; logs leave the device only when the user taps Share logs.
2026-11-01 02:36:57 +00:00

1.3 KiB

DiRT 3 / DiRT Showdown ws2_32 stand-in

DiRT 3 (dirt3_game.exe) and DiRT Showdown (showdown.exe, showdown_avx.exe) close their motion telemetry UDP socket at the end of a race, and when leaving Joyride, but keep calling sendto() on it. sendto() fails with WSAENOTSOCK and the game stops with "sendto failed with error 10038". The same happens on Windows.

ws2_32.dll here is a 32-bit stand-in: every export jumps to the same-ordinal export of Wine's own ws2_32.dll; only a sendto() that fails with 10038 reports 0 bytes sent instead. Same behaviour as DiRTTelemetryErrorFix by RoccoC (MIT), based on the original fix by Carsten Gottschling.

Wine loads ws2_32 as a KnownDLL, so a copy beside the game is ignored. droiddeck-game-env puts the stand-in in place of the prefix's syswow64/ws2_32.dll for these games while their telemetry output is on, adds WINEDLLOVERRIDES=ws2_32=n,b, and puts Wine's file back when the game exits. It skips the swap when the game's Proton already has the fix in its own ws2_32.dll (DroidDeck-Proton patch dirt-telemetry-sendto-closed-socket.patch).

build.sh OUT builds it with clang, lld and llvm-dlltool and checks its exports against ws2_32-exports.txt (taken from Wine 11's ws2_32.dll).