Skip to content

Commit

Permalink
README improved again
Browse files Browse the repository at this point in the history
  • Loading branch information
geeooff committed Mar 20, 2024
1 parent 6441ea5 commit 9b279ff
Showing 1 changed file with 19 additions and 36 deletions.
55 changes: 19 additions & 36 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,28 @@
# Forza Data Web
# Forza Data (Web)

Forza Motorsport and Horizon Data-Out feature receiver web application, and some debug tools.
Forza Motorsport and Forza Horizon real time telemetry receiver programs, with some utility tools.

Based on Turn10 official documentation:
https://support.forzamotorsport.net/hc/en-us/articles/21742934024211-Forza-Motorsport-Data-Out-Documentation

## Objectives
## Supported features

The idea behind this Web Application was to provide web visitor access to Forza Motorsport or Forza Horizon telemetry from live, or recorded, game session.
Only a console program is available at this moment. It displays live data at 60 Hz.

Game data reading is made by a Web backend, parsed and routed via WebSocket to an rich UI Web Interface to provide real-time data on a game session.

Several game sessions can be read at same time by the backend, and, of course, several web users can read the same game session data.

## Progress

For the moment, game data can be observed using a simple console.
![image](docs/assets/screenshots/console.png)

Samples can be recorded using the sample recorder program, and will be playable later.
Data can be recorded using a sample recorder program, and will be replayable at a later date.

No Web interface for the moment, only a placeholder razor app.
Web UI will be supported later, when core functionalities are stable.
It should leverage [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API), most probably from [SignalR](https://dotnet.microsoft.com/en-us/apps/aspnet/signalr), to receive live or previously-recorded data at 60 Hz.

## Protocol compatibility

### Sled vs Car Dash

_Sled_ data was initially for SimRacing motion platforms, so it has barely more than just movement data.
_Sled_ data is for SimRacing motion platforms, so it contains motion values and a few other ones.

_Car Dash_ extends _Sled data_ with dashboard related metrics, like speed, gear, accelerator, brake, etc.
_Car Dash_ extends _Sled_ data with car-dashboard related metrics, eg. speed, power, torque, gear, lap times, etc.

To see all available data fields, please have a look on the data structure files:
- [Sled structure](Core/ForzaSledDataStruct.cs)
Expand All @@ -39,15 +34,15 @@ To see all available data fields, please have a look on the data structure files

| Game | Sled | Car Dash | Horizon extras | Motorsport extras |
|-------------------------|----------|----------|----------------|-------------------|
| Forza Motorsport 7 | Yes | Yes | N/A | N/A³ |
| Forza Horizon 4 | Yes¹ | Yes | Partial² | N/A |
| Forza Horizon 5 | Yes¹ | Yes | Partial² | N/A |
| Forza Motorsport (2023) | Yes | Yes | N/A | Yes |
| Forza Motorsport 7 | Yes | Yes | N/A | N/A[^3] |
| Forza Horizon 4 | Yes[^1] | Yes | Partial[^2] | N/A |
| Forza Horizon 5 | Yes[^1] | Yes | Partial[^2] | N/A |
| Forza Motorsport (2023) | Yes | Yes | N/A | Yes[^4] |

1. Forza Horizon enforces Car Dash data type
2. Forza Horizon extra data is not documented. Only the car category (from community assumptions) is decoded. Thanks to them !
3. Forza Motorsport extra data was introduced in 2023 edition, FM7 doesn't emit such data
4. Forza Motorsport (2023) extra data exposes tire wear and track ID
[^1]: Forza Horizon enforces Car Dash data type
[^2]: Forza Horizon extra data is not documented. Only the car category (from community assumptions) is decoded. Thanks to them !
[^3]: Forza Motorsport extra data was introduced in 2023 edition, FM7 doesn't emit such data
[^4]: Forza Motorsport (2023) extra data exposes tire wear and track ID

## How to run

Expand Down Expand Up @@ -77,7 +72,7 @@ Start the game on your Windows computer or your Xbox.
Go to game options and look for _Data Out_ options :
1. `Data Out IP Address` : enter the IP Address of **the computer that will run the console program**
2. `Data Out IP Port` : enter the network port you want to **listen on this computer** (1024 to 65535)
3. `Data Out Packet Format` : choose **Sled** (if available) or **Car Dash**
3. `Data Out Packet Format` : if available, choose **Car Dash** (recommended) or **Sled**
4. `Data Out` : set to **ON**

### How to run the console program
Expand All @@ -102,8 +97,6 @@ dotnet run --server 192.168.0.100 --port 7777

The console will show `RACE` or `PAUSE` in the top left corner if race is on or not.

![image](docs/assets/screenshots/console.png)

_Note_ : To quit the program just hit `CTRL+C` or `CTRL+Break`.

### How to record a sample
Expand All @@ -127,13 +120,3 @@ dotnet run --server 192.168.0.100 --port 7777 --output sample.bin

_Note_ : If you want to quit the recorder program, just hit `CTRL+C` or `CTRL+Break`.
The output file will be deleted if no data is received.

### Replay a sample (_Work in progress_)

I'm working on replaying samples, both for the console app and the web app.

### Web UI (_Work in progress_)

I will work on the Web UI when core functionalities will be stable.

Web UI should leverage [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API), most probably from [SignalR](https://dotnet.microsoft.com/en-us/apps/aspnet/signalr), to receive live or previously-recorded data at 60 Hz.

0 comments on commit 9b279ff

Please sign in to comment.