use oxigdal_embedded::config::presets;
use oxigdal_embedded::prelude::*;
static POOL: StaticPool<4096> = StaticPool::new();
fn process_coordinates() -> Result<f32> {
let point1 = MinimalCoordinate::new(10.0, 20.0);
let point2 = MinimalCoordinate::new(13.0, 24.0);
let distance = point1.distance_to(&point2);
let bounds = MinimalBounds::new(0.0, 0.0, 100.0, 100.0);
if bounds.contains(&point1) {
Ok(distance)
} else {
Err(EmbeddedError::OutOfBounds { index: 0, max: 0 })
}
}
fn demonstrate_memory_pool() -> Result<()> {
let _ptr1 = POOL.allocate(256, 8)?;
let _ptr2 = POOL.allocate(512, 16)?;
let used = POOL.used();
let _available = POOL.available();
if used == 0 {
return Err(EmbeddedError::AllocationFailed);
}
Ok(())
}
#[cfg(feature = "low-power")]
fn demonstrate_power_management() -> Result<()> {
use oxigdal_embedded::power::{PowerManager, PowerMode};
let pm = PowerManager::new();
pm.request_mode(PowerMode::Balanced)?;
pm.request_mode(PowerMode::LowPower)?;
Ok(())
}
fn demonstrate_sync() -> Result<()> {
let counter = AtomicCounter::new(0);
counter.increment();
counter.increment();
if counter.get() != 2 {
return Err(EmbeddedError::InvalidState);
}
Ok(())
}
fn main() {
let _config = presets::esp32();
println!("Running minimal usage example");
match process_coordinates() {
Ok(distance) => {
println!("Distance: {}", distance);
}
Err(e) => {
eprintln!("Error processing coordinates: {:?}", e);
}
}
match demonstrate_memory_pool() {
Ok(()) => println!("Memory pool demo succeeded"),
Err(e) => eprintln!("Memory pool demo failed: {:?}", e),
}
#[cfg(feature = "low-power")]
match demonstrate_power_management() {
Ok(()) => println!("Power management demo succeeded"),
Err(e) => eprintln!("Power management demo failed: {:?}", e),
}
match demonstrate_sync() {
Ok(()) => println!("Sync demo succeeded"),
Err(e) => eprintln!("Sync demo failed: {:?}", e),
}
println!("All demonstrations completed");
}