Skip to content
This repository has been archived by the owner on Dec 20, 2022. It is now read-only.
/ f1-api Public archive

A Rust implementation of the telemetry API provided by Codemasters's F1 video games

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT
Notifications You must be signed in to change notification settings

jdno/f1-api

Repository files navigation

F1 API

rust Coverage Version License

A Rust implementation of the telemetry APIs of modern F1 video games.

This project implements a client library for the telemetry APIs that are provided by the current generation of F1 video games by Codemasters. The library is written in Rust, using tokio for async networking.

Built withand 🦀 as part of the Nord SDK.

Getting Started

Most of the library deals with the low-level details of receiving and decoding the packets that the F1 games sent. The only piece users need to interact with is the F1 struct and its high-level interface.

use std::net::{IpAddr, SocketAddr};

use f1_api::F1;
use f1_api::packet::Packet::{
    Event, Lap, Motion, Participants, Session, Setup, Status, Telemetry
};
use tokio_stream::StreamExt;

#[tokio::main]
async fn main() {
    let ip_address = IpAddr::from([0, 0, 0, 0]);
    let port = 20777;
    let socket = SocketAddr::new(ip_address, port);

    let mut stream = F1::stream(socket).unwrap();

    while let Some(packet) = stream.next().await {
        match packet {
            Event(_) => println!("Received an Event packet"),
            Lap(_) => println!("Received a Lap packet"),
            Motion(_) => println!("Received a Motion packet"),
            Participants(_) => println!("Received a Participants packet"),
            Session(_) => println!("Received a Session packet"),
            Setup(_) => println!("Received aaSetup packet"),
            Status(_) => println!("Received a Status packet"),
            Telemetry(_) => println!("Received a Telemetry packet"),
        }
    }
}

F1::stream is an asynchronous function that returns a stream of incoming packets, and the recommended way to interface with the f1-api crate.

Examples

The examples folder contains examples that show how to use this library. For example, the code in the Getting Started section can be run with the following command:

cargo run --example readme

A more complex example is the cli, which uses the library to analyse incoming packets and print interesting information about the state of the game to the terminal. It can be run with:

cargo run --example cli

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

About

A Rust implementation of the telemetry API provided by Codemasters's F1 video games

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Packages

No packages published

Languages