This might have impact on different types of data other than a window set for STRING, but I will worry about that later on
ESDI
ESDI stands for "ESilva Desktop Interface" iirc, or "rAcElaBs aT hOmE"
This tool collects data from popular racing simulators (for now), to pass it to peripherals (or a peripheral, only made one so far). This is the currently available peripheral: CDashDisplay.
If anyone finds this project useful for anything at all it would be pretty cool. My main goal is to learn and have some fun.
Currently it can read from a .ibt file or live telemetry from iRacing.
It can only be ran from the terminal:
go run . offline -p <port> -i <ibt-file>

or to view the live data:
go run . live -p <port>
Games implemented so far:
Games being implemented:
- BeamNG.drive using the gobngsdk
Games to be implemented:
Roadmap
- Implement the interface for a data source
- Finish implementing BeamNG
- Configuration of the peripherals via ESDI
- Detection of the display
- Fuel Calculator
- LapTime Calculator
- A very long list useful stuff like flags, position, more info about other drivers, track conditions and so on so forth
- Dynamic data packets
- More roadmap entries
- Telemetry analysis tool
- Better user interface
Todos
- Make the program report what its doing as the window title
\x1b]0;TITLE\x07Quicker than I thought. Just have to maintain it - Add a way to check the unit of a given variable Expand on this concept by creating conversions for those units
- Remove all the
slog.loggerpassing and struct members and just configureslog.Loggeronce and use the default. Or think of something better - Do all the
NOTEs andBUGs - Whats common among the providers? Should abstract whats common
- Whats common with all the "streams" I have? Should abstract whats common
Development
Mockservers
To mock BeamNG.drive, I built
BeaMNGMockOg (should have though longer
about the name).
You create a recording by launching the BeamNG and then launching the mockserver with:
BeamNGMockOg record -a 127.0.0.1 -p 4443 -o output.bin.
To replay the recording:
BeamNGMockOg replay [--loop] -a 127.0.0.1 -p 4443 -i input.bin
Troubleshooting
Can't see BeamNG data coming through
Use, for example, tcpdump -i any udp port <port> -X to check if any data is available.
Debugging
Freezes:
Using delve:
- Launch Terminal1 with
dlv debug . --headless --listen=:2345 -- tui - Launch Terminal2 and connect to with with
dlv connect :2345 - Type
continueonto Terminal2 and go to Terminal1 to use the application normally until it hangs. - Go back to Terminal2 to and do a
Ctrl+cto capture the state and then check what went wrong by looking at thegoroutinesfor example.
pprof:
go tool pprof http://localhost:8001/debug/pprof/mutex- type
topto view the summary - type
webto view a graph version
- type
Shameless begging
Hey, doesn't hurt to try, its free either way: Buy me a coffee!