use ble_ledly::capability::color::*;
use ble_ledly::capability::light::*;
use ble_ledly::communication_protocol::GenericRGB;
use ble_ledly::Controller;
use ble_ledly::device::LedDevice;
use ble_ledly::device::Device;
use ble_ledly::device::{CharKind, UuidKind};
use std::error::Error;
use std::time::Duration;
use tokio::time;
#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
let mut controller = Controller::<LedDevice>::new().await?;
let led_devices = controller.device_discovery().await?;
for device in led_devices.iter() {
println!("Found device: {}", device);
}
let lights: Vec<LedDevice> = led_devices
.into_iter()
.filter(|device| device.name.contains("QHM-"))
.collect();
controller.connect_with_devices(lights).await?;
let protocol = GenericRGB::default();
let connected_lights = controller.list();
for light in connected_lights.iter_mut() {
println!("-- Manipulating light {} --", light);
light.set_char(&CharKind::Write, &UuidKind::Uuid16(0xFFD9))?;
println!("Turning light on...");
light.turn_on(&protocol).await?;
println!("Setting color...");
light.color(&protocol, 255, 0, 0).await?;
time::sleep(Duration::from_millis(800)).await;
light.color(&protocol, 0, 255, 0).await?;
time::sleep(Duration::from_millis(800)).await;
light.color(&protocol, 0, 0, 255).await?;
time::sleep(Duration::from_millis(800)).await;
println!("Turning light off...");
light.turn_off(&protocol).await?;
}
Ok(())
}