use anyhow::Result;
use rust_patlite_beacon::{AsyncBeacon, Beacon, LedColor, LedPattern};
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<()> {
println!("Opening beacon device...");
let beacon = Beacon::open()?;
beacon.set_light(LedColor::Blue, LedPattern::Pattern1)?;
let async_beacon = AsyncBeacon::new(beacon);
println!("Example 1: Simple wait for touch");
println!("Please press the touch sensor...");
async_beacon.wait_for_touch().await?;
println!("Touch detected!");
println!("\nExample 2: Wait with callback to show state");
println!("Press the touch sensor again...");
async_beacon.wait_for_touch_with_callback(|state| {
println!("Sensor state: {}", if state { "PRESSED" } else { "RELEASED" });
}).await?;
println!("\nExample 3: Poll sensor for 5 seconds");
let start = std::time::Instant::now();
async_beacon.poll_touch_sensor(|state| {
println!("Polling... state: {}", if state { "PRESSED" } else { "RELEASED" });
start.elapsed() < Duration::from_secs(5)
}, Duration::from_millis(100)).await?;
println!("\nAll examples completed!");
Ok(())
}