diff --git a/src/lib.rs b/src/lib.rs index bcc61d2..0d3d23f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,36 +1,36 @@ +mod additional_rfactor; #[allow(warnings)] mod rfactor_structs; use std::{fs::File, path::Path}; +use additional_rfactor::*; use anyhow::Result; use memmap2::Mmap; - -const MM_TELEMETRY_FILE_NAME: &str = "$rFactor2SMMP_Telemetry$"; -const MM_SCORING_FILE_NAME: &str = "$rFactor2SMMP_Scoring$"; -const MM_RULES_FILE_NAME: &str = "$rFactor2SMMP_Rules$"; -const MM_FORCE_FEEDBACK_FILE_NAME: &str = "$rFactor2SMMP_ForceFeedback$"; -const MM_GRAPHICS_FILE_NAME: &str = "$rFactor2SMMP_Graphics$"; -const MM_PITINFO_FILE_NAME: &str = "$rFactor2SMMP_PitInfo$"; -const MM_WEATHER_FILE_NAME: &str = "$rFactor2SMMP_Weather$"; -const MM_EXTENDED_FILE_NAME: &str = "$rFactor2SMMP_Extended$"; - -const MM_HWCONTROL_FILE_NAME: &str = "$rFactor2SMMP_HWControl$"; -const MM_HWCONTROL_LAYOUT_VERSION: u32 = 1; - -const MM_WEATHER_CONTROL_FILE_NAME: &str = "$rFactor2SMMP_WeatherControl$"; -const MM_WEATHER_CONTROL_LAYOUT_VERSION: u32 = 1; - -const MM_RULES_CONTROL_FILE_NAME: &str = "$rFactor2SMMP_RulesControl$"; -const MM_RULES_CONTROL_LAYOUT_VERSION: u32 = 1; - -const MM_PLUGIN_CONTROL_FILE_NAME: &str = "$rFactor2SMMP_PluginControl$"; +use rfactor_structs::TelemInfoV01; const RFACTOR_SHM_FILE: &str = "/dev/shm"; -pub fn test_read() -> Result<()> { - let file = File::open(Path::new(RFACTOR_SHM_FILE).join(MM_TELEMETRY_FILE_NAME))?; - let mmap = unsafe { Mmap::map(&file)? }; - - Ok(()) +pub struct TelemetryReader { + _telemetry_file: File, + shm: Mmap, +} + +impl TelemetryReader { + pub fn new() -> Result { + let file = File::open(Path::new(RFACTOR_SHM_FILE).join(MM_TELEMETRY_FILE_NAME))?; + let mmap = unsafe { Mmap::map(&file)? }; + + Ok(Self { + _telemetry_file: file, + shm: mmap, + }) + } + + pub fn query_telemetry(&self) -> Result> { + let telemetry = rF2Telemetry::try_from(&self.shm[0..rF2Telemetry::SIZE])?; + let vehicles = telemetry.vehicles(); + + Ok(vehicles.to_vec()) + } }