ok it works lol

This commit is contained in:
Alex Janka 2022-02-22 20:11:49 +11:00
parent d6a755bb74
commit cbe2e07969
3 changed files with 159 additions and 43 deletions

34
Cargo.lock generated
View file

@ -19,6 +19,15 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]]
name = "bincode"
version = "1.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
dependencies = [
"serde",
]
[[package]]
name = "bitflags"
version = "1.3.2"
@ -86,12 +95,6 @@ dependencies = [
"hashbrown",
]
[[package]]
name = "itoa"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35"
[[package]]
name = "lazy_static"
version = "1.4.0"
@ -161,12 +164,6 @@ dependencies = [
"proc-macro2",
]
[[package]]
name = "ryu"
version = "1.0.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73b4b750c782965c211b42f022f59af1fbceabdd026623714f104152f1ec149f"
[[package]]
name = "serde"
version = "1.0.136"
@ -187,17 +184,6 @@ dependencies = [
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.79"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8e8d9fa5c3b304765ce1fd9c4c8a3de2c8db365a5b91be52f186efc675681d95"
dependencies = [
"itoa",
"ryu",
"serde",
]
[[package]]
name = "strsim"
version = "0.10.0"
@ -219,9 +205,9 @@ dependencies = [
name = "telemetry"
version = "0.1.0"
dependencies = [
"bincode",
"clap",
"serde",
"serde_json",
]
[[package]]

View file

@ -8,4 +8,4 @@ edition = "2021"
[dependencies]
clap = { version = "3.1.1", features = ["derive"] }
serde = { version = "1.0.136", features = ["derive"] }
serde_json = "1.0.79"
bincode = "1.3.3"

View file

@ -1,17 +1,120 @@
use std::net;
use std::net::UdpSocket;
use bincode;
use clap::Parser;
use serde::{Deserialize, Serialize};
#[derive(Parser, Debug)]
#[clap(author, version, about, long_about = None)]
struct Args {
#[clap(short, long, default_value = "")]
folder: String,
#[clap(short, long, default_value_t = 9999)]
port: i32,
#[clap(short, long)]
verbose: bool,
#[clap(short, long)]
errors: bool,
}
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize, Debug)]
struct Telemetry {
is_race_on: bool,
time_stamp_ms: u64,
// is_race_on: i32,
// timestamp_ms: u32,
// engine_max_rpm: f32,
// engine_idle_rpm: f32,
// current_engine_rpm: f32,
// acceleration_x: f32,
// acceleration_y: f32,
// acceleration_z: f32,
// velocity_x: f32,
// velocity_y: f32,
// velocity_z: f32,
// angular_velocity_x: f32,
// angular_velocity_y: f32,
// angular_velocity_z: f32,
// yaw: f32,
// pitch: f32,
// roll: f32,
// normalized_suspension_travel_front_left: f32,
// normalized_suspension_travel_front_right: f32,
// normalized_suspension_travel_rear_left: f32,
// normalized_suspension_travel_rear_right: f32,
// tire_slip_ratio_front_left: f32,
// tire_slip_ratio_front_right: f32,
// tire_slip_ratio_rear_left: f32,
// tire_slip_ratio_rear_right: f32,
// wheel_rotation_speed_front_left: f32,
// wheel_rotation_speed_front_right: f32,
// wheel_rotation_speed_rear_left: f32,
// wheel_rotation_speed_rear_right: f32,
// wheel_on_rumble_strip_front_left: i32,
// wheel_on_rumble_strip_front_right: i32,
// wheel_on_rumble_strip_rear_left: i32,
// wheel_on_rumble_strip_rear_right: i32,
// wheel_in_puddle_depth_front_left: f32,
// wheel_in_puddle_depth_front_right: f32,
// wheel_in_puddle_depth_rear_left: f32,
// wheel_in_puddle_depth_rear_right: f32,
// surface_rumble_front_left: f32,
// surface_rumble_front_right: f32,
// surface_rumble_rear_left: f32,
// surface_rumble_rear_right: f32,
// tire_slip_angle_front_left: f32,
// tire_slip_angle_front_right: f32,
// tire_slip_angle_rear_left: f32,
// tire_slip_angle_rear_right: f32,
// tire_combined_slip_front_left: f32,
// tire_combined_slip_front_right: f32,
// tire_combined_slip_rear_left: f32,
// tire_combined_slip_rear_right: f32,
// suspension_travel_meters_front_left: f32,
// suspension_travel_meters_front_right: f32,
// suspension_travel_meters_rear_left: f32,
// suspension_travel_meters_rear_right: f32,
// car_ordinal: i32,
// car_class: i32,
// car_performance_index: i32,
// drivetrain_type: i32,
// num_cylinders: i32,
// horizon_placeholder1: u32,
// horizon_placeholder2: u32,
// horizon_placeholder3: u32,
// position_x: f32,
// position_y: f32,
// position_z: f32,
// speed: f32,
// power: f32,
// torque: f32,
// tire_temp_front_left: f32,
// tire_temp_front_right: f32,
// tire_temp_rear_left: f32,
// tire_temp_rear_right: f32,
// boost: f32,
// fuel: f32,
// distance_traveled: f32,
// best_lap: f32,
// last_lap: f32,
// current_lap: f32,
// current_race_time: f32,
// lap_number: u16,
// race_position: u8,
// accel: u8,
// brake: u8,
// clutch: u8,
// hand_brake: u8,
// gear: u8,
// steer: i8,
// normalized_driving_line: i8,
// normalized_ai_brake_difference: i8,
// BORDER
is_race_on: i32,
time_stamp_ms: u32,
engine_max_rpm: f32,
engine_idle_rpm: f32,
current_engine_rpm: f32,
@ -68,14 +171,14 @@ struct Telemetry {
drivetrai32ype: i32,
num_cylinders: i32,
car_type: i32,
unknown1: i8,
unknown2: i8,
unknown3: i8,
unknown4: i8,
unknown5: i8,
unknown6: i8,
unknown7: i8,
unknown8: i8,
unknown1: u8,
unknown2: u8,
unknown3: u8,
unknown4: u8,
unknown5: u8,
unknown6: u8,
unknown7: u8,
unknown8: u8,
car_ordinal: i32,
position_x: f32,
position_y: f32,
@ -95,19 +198,46 @@ struct Telemetry {
current_lap: f32,
current_race_time: f32,
lap_number: i16,
race_position: i8,
accel: i8,
brake: i8,
clutch: i8,
handbrake: i8,
gear: i8,
race_position: u8,
accel: u8,
brake: u8,
clutch: u8,
handbrake: u8,
gear: u8,
steer: i8,
normalized_driving_line: i8,
normalized_ai_brake_difference: i8,
}
fn listen(socket: &net::UdpSocket, mut buffer: &mut [u8]) -> usize {
let (number_of_bytes, _) = socket.recv_from(&mut buffer).expect("no data received");
number_of_bytes
}
fn main() {
let args = Args::parse();
let ip = format!("0.0.0.0:{}", args.port.to_string());
if args.verbose {
if args.folder != "" {
println!("Folder: {}", args.folder);
} else {
println!("No folder specified - not saving logs");
}
}
let socket = UdpSocket::bind(ip).expect("couldnt bind");
let mut buf = [0; 500];
while listen(&socket, &mut buf) != 0 {
let deserialised: Telemetry = bincode::deserialize(&buf).expect("couldnt deser");
if deserialised.current_engine_rpm == 0.0 {
continue;
}
if args.verbose {
println!(
"Gear: {}, RPM: {}",
deserialised.gear, deserialised.current_engine_rpm
);
}
}
}