many fixes
This commit is contained in:
parent
820ba97b76
commit
c742d364e4
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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() });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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 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.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);
|
||||
}
|
||||
}
|
||||
|
||||
self.dx=0; self.dy=0; self.wheel=0; self.last_buttons=self.buttons;
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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"
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user