summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMaxwell Beck <max@rastertail.net>2025-06-28 21:56:21 -0500
committerMaxwell Beck <max@rastertail.net>2025-06-28 21:56:21 -0500
commit9a078b0933e2b8cec00c27706c27466e283c1f5e (patch)
tree4ae748bc75bc944a2cded4d95ba0973b30729364 /src
parentb05bdd6b1b5f99327f0e7779b54dfc03725767e5 (diff)
Run forever HEAD main
Diffstat (limited to 'src')
-rw-r--r--src/main.rs24
1 files changed, 17 insertions, 7 deletions
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(())
 }