many fixes
This commit is contained in:
parent
820ba97b76
commit
c742d364e4
@ -136,8 +136,8 @@ impl InputAggregator {
|
|||||||
} else {
|
} else {
|
||||||
tracing::info!("🧙 magic chord - freeing devices 🪄 EXPELLIARMUS!!! 🔓🕊️");
|
tracing::info!("🧙 magic chord - freeing devices 🪄 EXPELLIARMUS!!! 🔓🕊️");
|
||||||
}
|
}
|
||||||
for k in &mut self.keyboards { k.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); }
|
for m in &mut self.mice { m.set_grab(self.released); m.set_send(self.released); }
|
||||||
self.released = !self.released;
|
self.released = !self.released;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,6 +13,7 @@ pub struct KeyboardAggregator {
|
|||||||
dev: Device,
|
dev: Device,
|
||||||
tx: Sender<KeyboardReport>,
|
tx: Sender<KeyboardReport>,
|
||||||
dev_mode: bool,
|
dev_mode: bool,
|
||||||
|
sending_disabled: bool,
|
||||||
pressed_keys: HashSet<KeyCode>,
|
pressed_keys: HashSet<KeyCode>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,13 +24,17 @@ static SEQ: AtomicU32 = AtomicU32::new(0);
|
|||||||
impl KeyboardAggregator {
|
impl KeyboardAggregator {
|
||||||
pub fn new(dev: Device, dev_mode: bool, tx: Sender<KeyboardReport>) -> Self {
|
pub fn new(dev: Device, dev_mode: bool, tx: Sender<KeyboardReport>) -> Self {
|
||||||
let _ = dev.set_nonblocking(true);
|
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) {
|
pub fn set_grab(&mut self, grab: bool) {
|
||||||
let _ = if grab { self.dev.grab() } else { self.dev.ungrab() };
|
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) {
|
pub fn process_events(&mut self) {
|
||||||
// --- first fetch, then log (avoids aliasing borrow) ---
|
// --- first fetch, then log (avoids aliasing borrow) ---
|
||||||
let events: Vec<InputEvent> = match self.dev.fetch_events() {
|
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.
|
// Generate a local sequence number for debugging/log-merge only.
|
||||||
let id = SEQ.fetch_add(1, Ordering::Relaxed);
|
let id = SEQ.fetch_add(1, Ordering::Relaxed);
|
||||||
if self.dev_mode { debug!(seq = id, ?report, "kbd"); }
|
if self.dev_mode { debug!(seq = id, ?report, "kbd"); }
|
||||||
let _ = self.tx.send(KeyboardReport {
|
if !self.sending_disabled {
|
||||||
data: report.to_vec()
|
let _ = self.tx.send(KeyboardReport { data: report.to_vec() });
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -13,6 +13,7 @@ pub struct MouseAggregator {
|
|||||||
dev: Device,
|
dev: Device,
|
||||||
tx: Sender<MouseReport>,
|
tx: Sender<MouseReport>,
|
||||||
dev_mode: bool,
|
dev_mode: bool,
|
||||||
|
sending_disabled: bool,
|
||||||
next_send: Instant,
|
next_send: Instant,
|
||||||
|
|
||||||
buttons: u8,
|
buttons: u8,
|
||||||
@ -24,7 +25,7 @@ pub struct MouseAggregator {
|
|||||||
|
|
||||||
impl MouseAggregator {
|
impl MouseAggregator {
|
||||||
pub fn new(dev: Device, dev_mode: bool, tx: Sender<MouseReport>) -> Self {
|
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() } }
|
#[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() };
|
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) {
|
pub fn process_events(&mut self) {
|
||||||
let evts: Vec<InputEvent> = match self.dev.fetch_events() {
|
let evts: Vec<InputEvent> = match self.dev.fetch_events() {
|
||||||
Ok(it) => it.collect(),
|
Ok(it) => it.collect(),
|
||||||
@ -77,10 +82,15 @@ impl MouseAggregator {
|
|||||||
self.wheel as u8,
|
self.wheel as u8,
|
||||||
];
|
];
|
||||||
|
|
||||||
if let Err(broadcast::error::SendError(_)) =
|
if !self.sending_disabled {
|
||||||
self.tx.send(MouseReport { data: pkt.to_vec() })
|
if let Err(broadcast::error::SendError(_)) =
|
||||||
{ if self.dev_mode { warn!("❌ no HID receiver (mouse)"); } }
|
self.tx.send(MouseReport { data: pkt.to_vec() })
|
||||||
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;
|
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]
|
[Service]
|
||||||
ExecStart=/usr/local/bin/lesavka-server
|
ExecStart=/usr/local/bin/lesavka-server
|
||||||
Restart=always
|
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
|
Environment=RUST_BACKTRACE=1
|
||||||
Restart=always
|
Restart=always
|
||||||
RestartSec=5
|
RestartSec=5
|
||||||
|
|||||||
@ -15,7 +15,7 @@ tonic-reflection = "0.13"
|
|||||||
anyhow = "1.0"
|
anyhow = "1.0"
|
||||||
lesavka_common = { path = "../common" }
|
lesavka_common = { path = "../common" }
|
||||||
tracing = { version = "0.1", features = ["std"] }
|
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"
|
tracing-appender = "0.2"
|
||||||
libc = "0.2"
|
libc = "0.2"
|
||||||
futures-util = "0.3"
|
futures-util = "0.3"
|
||||||
|
|||||||
@ -38,12 +38,27 @@ fn init_tracing() -> anyhow::Result<WorkerGuard> {
|
|||||||
.open("/tmp/lesavka-server.log")?;
|
.open("/tmp/lesavka-server.log")?;
|
||||||
let (file_writer, guard) = tracing_appender::non_blocking(file);
|
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()
|
tracing_subscriber::registry()
|
||||||
.with(EnvFilter::try_from_default_env()
|
.with(env_filter)
|
||||||
.unwrap_or_else(|_| EnvFilter::new("lesavka_server=info")))
|
.with(
|
||||||
.with(fmt::layer().with_target(true).with_thread_ids(true))
|
fmt::layer()
|
||||||
.with(fmt::layer().with_writer(file_writer).with_ansi(false))
|
.with_target(true)
|
||||||
|
.with_thread_ids(true),
|
||||||
|
)
|
||||||
|
.with(
|
||||||
|
fmt::layer()
|
||||||
|
.with_writer(file_writer)
|
||||||
|
.with_ansi(false)
|
||||||
|
.with_target(true)
|
||||||
|
.with_level(true),
|
||||||
|
)
|
||||||
.init();
|
.init();
|
||||||
|
tracing::info!("📜 effective RUST_LOG = \"{}\"", filter_str);
|
||||||
Ok(guard)
|
Ok(guard)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user