| Crates.io | acc_shared_memory_rs |
| lib.rs | acc_shared_memory_rs |
| version | 0.8.0 |
| created_at | 2025-05-29 05:33:29.257546+00 |
| updated_at | 2025-06-05 11:03:21.181141+00 |
| description | Rust library for reading Assetto Corsa Competizione shared memory |
| homepage | https://gitlab.com/ai-projects219/race-engineer/acc-shared-memory-rust |
| repository | https://gitlab.com/ai-projects219/race-engineer/acc-shared-memory-rust |
| max_upload_size | |
| id | 1693516 |
| size | 157,426 |
A Rust library for reading Assetto Corsa Competizione (ACC) shared memory telemetry data. This is a port of the Python acc_shared_memory library with full feature parity and additional type safety.
Add this to your Cargo.toml:
[dependencies]
acc_shared_memory_rs = "0.1.0"
# Enable serde support (optional)
acc_shared_memory_rs = { version = "0.1.0", features = ["serde"] }
use acc_shared_memory_rs::{ACCSharedMemory, ACCError};
fn main() -> Result<(), ACCError> {
let mut acc = ACCSharedMemory::new()?;
loop {
if let Some(data) = acc.read_shared_memory()? {
println!("Speed: {:.1} km/h, RPM: {}",
data.physics.speed_kmh,
data.physics.rpm);
}
std::thread::sleep(std::time::Duration::from_millis(16)); // ~60fps
}
}
The library provides three main data structures:
See the linked documentation files above for a full list of fields and their descriptions.
use acc_shared_memory_rs::ACCSharedMemory;
let mut acc = ACCSharedMemory::new()?;
loop {
if let Some(data) = acc.read_shared_memory()? {
// Physics data
println!("Speed: {:.1} km/h", data.physics.speed_kmh);
println!("RPM: {} / {}", data.physics.rpm, data.statics.max_rpm);
// Session info
println!("Lap: {} / {}",
data.graphics.completed_lap,
data.graphics.number_of_laps);
// Tyre temperatures
let tyres = &data.physics.tyre_core_temp;
println!("Tyre temps: FL:{:.0}° FR:{:.0}° RL:{:.0}° RR:{:.0}°",
tyres.front_left, tyres.front_right,
tyres.rear_left, tyres.rear_right);
}
}
if let Some(data) = acc.read_shared_memory()? {
let remaining_laps = data.graphics.number_of_laps - data.graphics.completed_lap;
let fuel_needed = remaining_laps as f32 * data.graphics.fuel_per_lap;
if data.physics.fuel < fuel_needed {
println!("Pit stop required! Need {:.1}L more fuel",
fuel_needed - data.physics.fuel);
}
}
if let Some(data) = acc.read_shared_memory()? {
match data.graphics.rain_intensity {
AccRainIntensity::NoRain => println!("Dry conditions"),
AccRainIntensity::LightRain => println!("Light rain - consider wet tyres"),
AccRainIntensity::HeavyRain => println!("Heavy rain - wet tyres required"),
_ => println!("Rain: {}", data.graphics.rain_intensity),
}
}
The library provides comprehensive error handling:
match acc.read_shared_memory() {
Ok(Some(data)) => {
// Process telemetry data
}
Ok(None) => {
// No new data (normal when car is stationary)
}
Err(ACCError::SharedMemoryNotAvailable) => {
println!("ACC is not running");
}
Err(e) => {
eprintln!("Error: {}", e);
}
}
Requires Windows and the Windows SDK for shared memory access.
# Build the library
cargo build --release
# Run examples
cargo run --example basic_telemetry
cargo run --example simple_test
# Run tests
cargo test
This project is licensed under the MIT License - see the LICENSE file for details.
acc_shared_memory library