From 9a078b0933e2b8cec00c27706c27466e283c1f5e Mon Sep 17 00:00:00 2001 From: Maxwell Beck Date: Sat, 28 Jun 2025 21:56:21 -0500 Subject: Run forever --- src/main.rs | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 2f9b232..75ebcbd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,8 @@ use std::{collections::HashSet, pin::pin, time::Duration}; use bluer::{ - Adapter, AdapterEvent, Device, DiscoveryFilter, DiscoveryTransport, Session, Uuid, - gatt::remote::Characteristic, + Adapter, AdapterEvent, Device, DeviceEvent, DeviceProperty, DiscoveryFilter, + DiscoveryTransport, Session, Uuid, gatt::remote::Characteristic, }; use evdev::{ AbsInfo, AbsoluteAxisCode, AttributeSet, EventType, InputEvent, KeyCode, PropType, @@ -94,6 +94,8 @@ async fn run(adapter: &Adapter) -> bluer::Result<()> { eprintln!("DBG connecting"); remote.connect().await?; + let mut remote_events = pin!(remote.events().await?); + let chars = RemoteCharateristics::get(&remote).await?; let mut touch_stream = pin!(chars.touch.notify().await?); let mut button_stream = pin!(chars.button.notify().await?); @@ -133,8 +135,14 @@ async fn run(adapter: &Adapter) -> bluer::Result<()> { let mut tx = 0f32; let mut ty = 0f32; let mut touch = 0; - loop { + + 'main: loop { select! { + ev = remote_events.next() => { + if let Some(DeviceEvent::PropertyChanged(DeviceProperty::Connected(false))) = ev { + break 'main; + } + } ev = touch_stream.next() => { let ev = ev.unwrap(); let touch_next = if ev[3] > 0 { 1 } else { 0 }; @@ -205,6 +213,8 @@ async fn run(adapter: &Adapter) -> bluer::Result<()> { }, }; } + + Ok(()) } #[tokio::main(flavor = "current_thread")] @@ -212,9 +222,9 @@ async fn main() -> bluer::Result<()> { let session = Session::new().await?; let adapter = session.default_adapter().await?; - if let Err(e) = run(&adapter).await { - eprintln!("ERR {e}"); + loop { + if let Err(e) = run(&adapter).await { + eprintln!("ERR {e}"); + } } - - Ok(()) } -- cgit 1.4.1