many fixes

This commit is contained in:
Brad Stein 2025-06-28 18:51:13 -05:00
parent 820ba97b76
commit c742d364e4
6 changed files with 47 additions and 17 deletions

View File

@ -136,8 +136,8 @@ impl InputAggregator {
} else {
tracing::info!("🧙 magic chord - freeing devices 🪄 EXPELLIARMUS!!! 🔓🕊️");
}
for k in &mut self.keyboards { k.set_grab(self.released); }
for m in &mut self.mice { m.set_grab(self.released); }
for k in &mut self.keyboards { k.set_grab(self.released); k.set_send(self.released); }
for m in &mut self.mice { m.set_grab(self.released); m.set_send(self.released); }
self.released = !self.released;
}
}

View File

@ -13,6 +13,7 @@ pub struct KeyboardAggregator {
dev: Device,
tx: Sender<KeyboardReport>,
dev_mode: bool,
sending_disabled: bool,
pressed_keys: HashSet<KeyCode>,
}
@ -23,13 +24,17 @@ static SEQ: AtomicU32 = AtomicU32::new(0);
impl KeyboardAggregator {
pub fn new(dev: Device, dev_mode: bool, tx: Sender<KeyboardReport>) -> Self {
let _ = dev.set_nonblocking(true);
Self { dev, tx, dev_mode, pressed_keys: HashSet::new()}
Self { dev, tx, dev_mode, sending_disabled: false, pressed_keys: HashSet::new()}
}
pub fn set_grab(&mut self, grab: bool) {
let _ = if grab { self.dev.grab() } else { self.dev.ungrab() };
}
pub fn set_send(&mut self, send: bool) {
self.sending_disabled = !send;
}
pub fn process_events(&mut self) {
// --- first fetch, then log (avoids aliasing borrow) ---
let events: Vec<InputEvent> = match self.dev.fetch_events() {
@ -55,9 +60,9 @@ impl KeyboardAggregator {
// Generate a local sequence number for debugging/log-merge only.
let id = SEQ.fetch_add(1, Ordering::Relaxed);
if self.dev_mode { debug!(seq = id, ?report, "kbd"); }
let _ = self.tx.send(KeyboardReport {
data: report.to_vec()
});
if !self.sending_disabled {
let _ = self.tx.send(KeyboardReport { data: report.to_vec() });
}
}
}

View File

@ -13,6 +13,7 @@ pub struct MouseAggregator {
dev: Device,
tx: Sender<MouseReport>,
dev_mode: bool,
sending_disabled: bool,
next_send: Instant,
buttons: u8,
@ -24,7 +25,7 @@ pub struct MouseAggregator {
impl MouseAggregator {
pub fn new(dev: Device, dev_mode: bool, tx: Sender<MouseReport>) -> Self {
Self { dev, tx, dev_mode, next_send: Instant::now(), buttons:0, last_buttons:0, dx:0, dy:0, wheel:0 }
Self { dev, tx, dev_mode, sending_disabled: false, next_send: Instant::now(), buttons:0, last_buttons:0, dx:0, dy:0, wheel:0 }
}
#[inline] fn slog(&self, f: impl FnOnce()) { if self.dev_mode { f() } }
@ -32,6 +33,10 @@ impl MouseAggregator {
let _ = if grab { self.dev.grab() } else { self.dev.ungrab() };
}
pub fn set_send(&mut self, send: bool) {
self.sending_disabled = !send;
}
pub fn process_events(&mut self) {
let evts: Vec<InputEvent> = match self.dev.fetch_events() {
Ok(it) => it.collect(),
@ -77,10 +82,15 @@ impl MouseAggregator {
self.wheel as u8,
];
if !self.sending_disabled {
if let Err(broadcast::error::SendError(_)) =
self.tx.send(MouseReport { data: pkt.to_vec() })
{ if self.dev_mode { warn!("❌ no HID receiver (mouse)"); } }
else if self.dev_mode { debug!("📤 mouse {:?}", pkt) }
{
if self.dev_mode { warn!("❌ no HID receiver (mouse)"); }
} else if self.dev_mode {
debug!("📤 mouse {:?}", pkt);
}
}
self.dx=0; self.dy=0; self.wheel=0; self.last_buttons=self.buttons;
}

View File

@ -105,7 +105,7 @@ After=network.target lesavka-core.service
[Service]
ExecStart=/usr/local/bin/lesavka-server
Restart=always
Environment=RUST_LOG=lesavka_server::video=trace,lesavka_server::usb_gadget=info,lesavka_server=info
Environment=RUST_LOG=lesavka_server::video=trace,lesavka_server::usb_gadget=debug
Environment=RUST_BACKTRACE=1
Restart=always
RestartSec=5

View File

@ -15,7 +15,7 @@ tonic-reflection = "0.13"
anyhow = "1.0"
lesavka_common = { path = "../common" }
tracing = { version = "0.1", features = ["std"] }
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt", "ansi"] }
tracing-appender = "0.2"
libc = "0.2"
futures-util = "0.3"

View File

@ -38,12 +38,27 @@ fn init_tracing() -> anyhow::Result<WorkerGuard> {
.open("/tmp/lesavka-server.log")?;
let (file_writer, guard) = tracing_appender::non_blocking(file);
let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| {
EnvFilter::new("lesavka_server=info,lesavka_server::video=warn")
});
let filter_str = env_filter.to_string();
tracing_subscriber::registry()
.with(EnvFilter::try_from_default_env()
.unwrap_or_else(|_| EnvFilter::new("lesavka_server=info")))
.with(fmt::layer().with_target(true).with_thread_ids(true))
.with(fmt::layer().with_writer(file_writer).with_ansi(false))
.with(env_filter)
.with(
fmt::layer()
.with_target(true)
.with_thread_ids(true),
)
.with(
fmt::layer()
.with_writer(file_writer)
.with_ansi(false)
.with_target(true)
.with_level(true),
)
.init();
tracing::info!("📜 effective RUST_LOG = \"{}\"", filter_str);
Ok(guard)
}