From 8570091df8502833a0f9ea664526cb72b858f989 Mon Sep 17 00:00:00 2001 From: 4yn Date: Sun, 30 Jan 2022 17:22:55 +0800 Subject: [PATCH] basic logging --- src-tauri/Cargo.lock | 41 +++++++++++++++++++++++++ src-tauri/Cargo.toml | 2 ++ src-tauri/src/bin/test_usb.rs | 6 +++- src-tauri/src/main.rs | 10 +++++-- src-tauri/src/slider_io/config.rs | 11 ++++--- src-tauri/src/slider_io/device.rs | 48 ++++++++++++++++++++---------- src-tauri/src/slider_io/manager.rs | 4 ++- 7 files changed, 98 insertions(+), 24 deletions(-) diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index ad9ff5a..3b56bf9 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -126,6 +126,17 @@ dependencies = [ "wildmatch", ] +[[package]] +name = "atty" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8" +dependencies = [ + "hermit-abi", + "libc", + "winapi", +] + [[package]] name = "autocfg" version = "1.0.1" @@ -788,6 +799,19 @@ dependencies = [ "syn", ] +[[package]] +name = "env_logger" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b2cf0344971ee6c64c31be0d530793fba457d322dfec2810c453d0ef228f9c3" +dependencies = [ + "atty", + "humantime", + "log", + "regex", + "termcolor", +] + [[package]] name = "fastrand" version = "1.7.0" @@ -1334,6 +1358,12 @@ version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eee9694f83d9b7c09682fdb32213682939507884e5bcf227be9aff5d644b90dc" +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + [[package]] name = "ico" version = "0.1.0" @@ -2764,6 +2794,8 @@ name = "slidershim" version = "0.1.0" dependencies = [ "directories", + "env_logger", + "log", "palette", "rusb", "serde", @@ -3210,6 +3242,15 @@ dependencies = [ "utf-8", ] +[[package]] +name = "termcolor" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dfed899f0eb03f32ee8c6a0aabdb8a7949659e3466561fc0adf54e26d88c5f4" +dependencies = [ + "winapi-util", +] + [[package]] name = "thin-slice" version = "0.1.1" diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 867e4ae..efc213f 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -22,6 +22,8 @@ rusb = "0.9.0" palette = "0.6.0" winapi = "0.3.9" directories = "4.0.1" +log = "0.4.14" +env_logger = "0.9.0" [features] default = [ "custom-protocol" ] diff --git a/src-tauri/src/bin/test_usb.rs b/src-tauri/src/bin/test_usb.rs index 65fced9..f25db88 100644 --- a/src-tauri/src/bin/test_usb.rs +++ b/src-tauri/src/bin/test_usb.rs @@ -5,6 +5,10 @@ use std::io; use slidershim::slider_io::{Config, Manager}; fn main() { + env_logger::Builder::new() + .filter_level(log::LevelFilter::Debug) + .init(); + // let config = Config::from_str( // r#"{ // "deviceMode": "yuancon", @@ -17,7 +21,7 @@ fn main() { let config = Config::from_str( r#"{ - "deviceMode": "yuancon", + "deviceMode": "tasoller-two", "outputMode": "kb-32-tasoller", "keyboardSensitivity": 50, "ledMode": "reactive-8", diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs index 91902e7..f837e21 100644 --- a/src-tauri/src/main.rs +++ b/src-tauri/src/main.rs @@ -9,6 +9,9 @@ mod slider_io; use std::sync::{Arc, Mutex}; +use env_logger; +use log::info; + use tauri::{ AppHandle, CustomMenuItem, Event, Manager, Runtime, SystemTray, SystemTrayEvent, SystemTrayMenu, }; @@ -26,9 +29,10 @@ fn quit_app() { } fn main() { + env_logger::init(); + let config = Arc::new(Mutex::new(Some(slider_io::Config::default()))); { - println!("Saving"); config.lock().unwrap().as_ref().unwrap().save(); } @@ -67,7 +71,7 @@ fn main() { let config_clone = Arc::clone(&config); app.listen_global("heartbeat", move |e| { let config_handle = config_clone.lock().unwrap(); - println!("Heartbeat {}", config_handle.as_ref().unwrap().raw.as_str()); + info!("Heartbeat received"); app_handle .emit_all( "showConfig", @@ -79,7 +83,7 @@ fn main() { let config_clone = Arc::clone(&config); app.listen_global("setConfig", move |event| { let payload = event.payload().unwrap(); - println!("Setting config to {}", payload); + info!("Config applied {}", payload); if let Some(new_config) = slider_io::Config::from_str(payload) { let mut config_handle = config_clone.lock().unwrap(); config_handle.replace(new_config); diff --git a/src-tauri/src/slider_io/config.rs b/src-tauri/src/slider_io/config.rs index 109207c..e323480 100644 --- a/src-tauri/src/slider_io/config.rs +++ b/src-tauri/src/slider_io/config.rs @@ -1,6 +1,8 @@ -use directories::ProjectDirs; use std::{convert::TryFrom, fs, path::PathBuf}; +use log::info; + +use directories::ProjectDirs; use serde_json::Value; #[derive(Debug, Clone)] @@ -148,9 +150,8 @@ impl Config { if !config_path.exists() { return None; } - println!("Found saved"); + info!("Config file found at {:?}", config_path); let mut saved_data = fs::read_to_string(config_path.as_path()).ok()?; - println!("Loaded saved {}", saved_data); return Self::from_str(saved_data.as_str()); } @@ -161,10 +162,12 @@ impl Config { } pub fn save(&self) -> Option<()> { + info!("Config saving..."); let config_path = Self::get_saved_path()?; - println!("Saving to {:?}", config_path); + info!("Config saving to {:?}", config_path); fs::write(config_path.as_path(), self.raw.as_str()).unwrap(); + info!("Config saved"); Some(()) } } diff --git a/src-tauri/src/slider_io/device.rs b/src-tauri/src/slider_io/device.rs index ecee069..e63091b 100644 --- a/src-tauri/src/slider_io/device.rs +++ b/src-tauri/src/slider_io/device.rs @@ -1,9 +1,12 @@ use std::{ error, ops::{Deref, DerefMut}, + thread, time::Duration, }; +use log::{error, info}; + use rusb::{self, DeviceHandle, GlobalContext}; use crate::slider_io::{ @@ -182,11 +185,21 @@ impl HidDeviceJob { } fn setup_impl(&mut self) -> Result<(), Box> { - let mut handle = rusb::open_device_with_vid_pid(self.vid, self.pid).unwrap(); + info!("Device finding vid {} pid {}", self.vid, self.pid); + let handle = rusb::open_device_with_vid_pid(self.vid, self.pid); + if handle.is_none() { + error!("Could not find device"); + } + let mut handle = handle.unwrap(); + info!("Device found {:?}", handle); + if handle.kernel_driver_active(0).unwrap_or(false) { + info!("Device detaching kernel driver"); handle.detach_kernel_driver(0)?; } + info!("Device setting configuration"); handle.set_active_configuration(1)?; + info!("Device claiming interface"); handle.claim_interface(0)?; self.handle = Some(handle); Ok(()) @@ -217,24 +230,29 @@ impl Job for HidDeviceJob { // Led loop { - let mut led_state_handle = self.state.led_state.lock().unwrap(); - if led_state_handle.dirty { - (self.led_callback)(&mut self.led_buf, led_state_handle.deref()); - led_state_handle.dirty = false; - if self.led_buf.len != 0 { - let res = (match self.led_write_type { - WriteType::Bulk => handle.write_bulk(self.led_endpoint, &self.led_buf.data, TIMEOUT), - WriteType::Interrupt => { - handle.write_interrupt(self.led_endpoint, &self.led_buf.data, TIMEOUT) - } - }) - .unwrap_or(0); - if res == self.led_buf.len + 1 { - self.led_buf.len = 0; + { + let mut led_state_handle = self.state.led_state.lock().unwrap(); + if led_state_handle.dirty { + (self.led_callback)(&mut self.led_buf, led_state_handle.deref()); + led_state_handle.dirty = false; + } + } + + if self.led_buf.len != 0 { + let res = (match self.led_write_type { + WriteType::Bulk => handle.write_bulk(self.led_endpoint, &self.led_buf.data, TIMEOUT), + WriteType::Interrupt => { + handle.write_interrupt(self.led_endpoint, &self.led_buf.data, TIMEOUT) } + }) + .unwrap_or(0); + if res == self.led_buf.len + 1 { + self.led_buf.len = 0; } } } + + // thread::sleep(Duration::from_millis(10)); } fn teardown(&mut self) { diff --git a/src-tauri/src/slider_io/manager.rs b/src-tauri/src/slider_io/manager.rs index 50fd35b..7f28061 100644 --- a/src-tauri/src/slider_io/manager.rs +++ b/src-tauri/src/slider_io/manager.rs @@ -1,3 +1,5 @@ +use log::info; + use crate::slider_io::{ config::Config, controller_state::FullState, device::HidDeviceJob, led::LedJob, output::KeyboardOutputJob, worker::Worker, @@ -18,7 +20,7 @@ impl Manager { let output_worker = Worker::new(KeyboardOutputJob::new(&state, &config.output_mode)); let led_worker = Worker::new(LedJob::new(&state, &config.led_mode)); - println!("Starting manager with config: {:?}", config); + info!("Starting manager with config: {:?}", config); Self { state,