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, OpKind};
use ble_ledly::device::Device;
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!("--- Found characteristics for device {}: ---", light);
for characteristic in light.characteristics().unwrap().iter() {
println!(
"\tUuid: {:?}, Type: {:?}",
characteristic.uuid, characteristic.properties
);
}
println!("--- Filtered characteristics for device {}: ---", light);
let char_kind_filter = OpKind::Write | OpKind::WriteWithoutResponse;
for characteristic in light
.characteristics_by_type(char_kind_filter)
.unwrap()
.iter()
{
println!(
"\tUuid: {:?}, Type: {:?}",
characteristic.uuid, characteristic.properties
);
}
let chosen = light.characteristics_by_type(char_kind_filter).unwrap();
println!("\nChosen {:?}\n", chosen.get(0));
light.set_write_char(&chosen.get(0).unwrap());
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(())
}