From 7811eaf91c08168951e95cf4e560903cb67b0246 Mon Sep 17 00:00:00 2001 From: Andy Killorin <37423245+Speedy6451@users.noreply.github.com> Date: Sun, 30 Mar 2025 01:06:29 -0400 Subject: [PATCH] disconnect button --- interface/src/gui.rs | 8 +++++++- interface/src/lib.rs | 3 +++ interface/src/main.rs | 11 +++++++++-- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/interface/src/gui.rs b/interface/src/gui.rs index 09884bd..09f1a1e 100644 --- a/interface/src/gui.rs +++ b/interface/src/gui.rs @@ -6,7 +6,7 @@ use image::ImageFormat; use tokio::{runtime::Runtime, sync::{mpsc, watch::{self, Receiver}}}; use egui_toast::{Toast, Toasts}; -use crate::{auto::Configurable, auto_impl::CONFIGS, storage::StorageManager, POWER_THRESHOLD}; +use crate::{auto::Configurable, auto_impl::CONFIGS, storage::StorageManager, POWER_THRESHOLD, RECONNECT}; pub const GUI: OnceCell = OnceCell::new(); @@ -105,6 +105,12 @@ impl eframe::App for GUI { egui::CentralPanel::default().show(ctx, |ui| { ui.heading("Cruise Control"); + if !RECONNECT.load(Ordering::Acquire) { + if ui.button("disconnect").clicked() { + RECONNECT.store(true, Ordering::Release); + } + } + if let Some(ref command) = self.data.borrow().last_command { ui.label(format!("sending {command:?}")); } diff --git a/interface/src/lib.rs b/interface/src/lib.rs index 237d105..e6c0a5b 100644 --- a/interface/src/lib.rs +++ b/interface/src/lib.rs @@ -1,5 +1,7 @@ #![feature(iter_collect_into)] +use std::sync::atomic::AtomicBool; + use atomic_float::AtomicF32; use gui::DEFAULT_VOLUME_THRESHOLD; @@ -11,3 +13,4 @@ pub mod storage; pub const POWER_THRESHOLD: AtomicF32 = AtomicF32::new(DEFAULT_VOLUME_THRESHOLD); +pub static RECONNECT: AtomicBool = AtomicBool::new(false); diff --git a/interface/src/main.rs b/interface/src/main.rs index 1e651b0..9bf7060 100644 --- a/interface/src/main.rs +++ b/interface/src/main.rs @@ -1,9 +1,9 @@ use std::{fmt::format, ops::ControlFlow, path::Path, result, sync::{atomic::{AtomicBool, Ordering}, Arc}, thread::{self, sleep}, time::Duration}; -use anyhow::{Context, Ok, Result}; +use anyhow::{anyhow, Context, Ok, Result}; use atomic_float::AtomicF32; use directories::ProjectDirs; -use interface::{auto::{get_confs, Auto, AutoInterface}, auto_impl::{self, CONFIGS}, combatlog::{combat_logger, CombatData}, storage::StorageManager, POWER_THRESHOLD}; +use interface::{auto::{get_confs, Auto, AutoInterface}, auto_impl::{self, CONFIGS}, combatlog::{combat_logger, CombatData}, storage::StorageManager, POWER_THRESHOLD, RECONNECT}; use common::{ControlPacket, TelemetryPacket}; use cpal::traits::{DeviceTrait, HostTrait, StreamTrait}; use egui_toast::{Toast, ToastKind}; @@ -117,6 +117,7 @@ fn main() -> Result<()> { break; }; } + let _ = data_sender.send(GUIData { telemetry: None, last_command: None }); } }); @@ -237,6 +238,12 @@ async fn controller(mut notes: broadcast::Receiver, controller: Owned gui.send_modify(|gui| gui.last_command = Some(control)); GUI.get().map(|c| c.request_repaint()); + + if RECONNECT.load(Ordering::Acquire) { + RECONNECT.store(false, Ordering::Release); + return Ok(()); + } + } }