From ff6e971f626f68eaf0240cc9396d5c83a8b2573e Mon Sep 17 00:00:00 2001 From: 4yn <4yn@users.noreply.github.com> Date: Wed, 16 Mar 2022 20:05:04 +0800 Subject: [PATCH] add disable air strings option --- src-slider_io/src/config.rs | 19 +++++++++++-------- src-slider_io/src/context.rs | 4 ++-- src-slider_io/src/device/config.rs | 16 ++++++---------- src-slider_io/src/device/hid.rs | 12 +++++++++++- src/App.svelte | 25 +++++++++++++++++++++---- 5 files changed, 51 insertions(+), 25 deletions(-) diff --git a/src-slider_io/src/config.rs b/src-slider_io/src/config.rs index c4fc5a1..a8086e1 100644 --- a/src-slider_io/src/config.rs +++ b/src-slider_io/src/config.rs @@ -30,12 +30,14 @@ impl Config { Self::from_str( r#"{ "deviceMode": "none", - "devicePolling": "100", "outputMode": "none", "ledMode": "none", + "disableAirStrings": false, + "divaSerialPort": "COM1", + "divaBrightness": 63, "keyboardSensitivity": 20, - "outputWebsocketUrl": "localhost:3000", "outputPolling": "100", + "outputWebsocketUrl": "localhost:3000", "ledSensitivity": 20, "ledWebsocketUrl": "localhost:3001", "ledSerialPort": "COM5" @@ -55,12 +57,13 @@ impl Config { } pub fn load() -> Self { - Self::load_saved() - .or_else(|| { - warn!("Config loading from file failed, using default"); - Some(Self::default()) - }) - .unwrap() + let t = Self::load_saved(); + warn!("{:?}", t); + t.or_else(|| { + warn!("Config loading from file failed, using default"); + Some(Self::default()) + }) + .unwrap() } pub fn save(&self) -> Option<()> { diff --git a/src-slider_io/src/context.rs b/src-slider_io/src/context.rs index 186c9e7..fdc0e56 100644 --- a/src-slider_io/src/context.rs +++ b/src-slider_io/src/context.rs @@ -50,13 +50,13 @@ impl Context { BrokenithmJob::new(&state, ground_only, lights_enabled), )), ), - DeviceMode::Hardware { spec } => ( + DeviceMode::Hardware { spec, disable_air } => ( { let timer = LoopTimer::new(); timers.push(("d", timer.fork())); Some(ThreadWorker::new( "device", - HidJob::from_config(&state, spec), + HidJob::from_config(&state, spec, disable_air), timer, )) }, diff --git a/src-slider_io/src/device/config.rs b/src-slider_io/src/device/config.rs index 7a1324f..6c51fd9 100644 --- a/src-slider_io/src/device/config.rs +++ b/src-slider_io/src/device/config.rs @@ -12,6 +12,7 @@ pub enum DeviceMode { None, Hardware { spec: HardwareSpec, + disable_air: bool, }, Brokenithm { ground_only: bool, @@ -29,31 +30,26 @@ impl DeviceMode { "none" => DeviceMode::None, "tasoller-one" => DeviceMode::Hardware { spec: HardwareSpec::TasollerOne, + disable_air: v["disableAirStrings"].as_bool()?, }, "tasoller-two" => DeviceMode::Hardware { spec: HardwareSpec::TasollerTwo, + disable_air: v["disableAirStrings"].as_bool()?, }, "yuancon" => DeviceMode::Hardware { spec: HardwareSpec::Yuancon, + disable_air: v["disableAirStrings"].as_bool()?, }, "diva" => DeviceMode::DivaSlider { port: v["divaSerialPort"].as_str()?.to_string(), brightness: u8::try_from(v["divaBrightness"].as_i64()?).ok()?, }, "brokenithm" => DeviceMode::Brokenithm { - ground_only: false, + ground_only: v["disableAirStrings"].as_bool()?, lights_enabled: false, }, "brokenithm-led" => DeviceMode::Brokenithm { - ground_only: false, - lights_enabled: true, - }, - "brokenithm-ground" => DeviceMode::Brokenithm { - ground_only: true, - lights_enabled: false, - }, - "brokenithm-ground-led" => DeviceMode::Brokenithm { - ground_only: true, + ground_only: v["disableAirStrings"].as_bool()?, lights_enabled: true, }, _ => return None, diff --git a/src-slider_io/src/device/hid.rs b/src-slider_io/src/device/hid.rs index 78f35c0..40bdfbd 100644 --- a/src-slider_io/src/device/hid.rs +++ b/src-slider_io/src/device/hid.rs @@ -32,6 +32,7 @@ pub struct HidJob { pid: u16, read_endpoint: u8, led_endpoint: u8, + disable_air: bool, read_callback: HidReadCallback, read_buf: Buffer, @@ -51,6 +52,7 @@ impl HidJob { pid: u16, read_endpoint: u8, led_endpoint: u8, + disable_air: bool, read_callback: HidReadCallback, led_type: WriteType, led_callback: HidLedCallback, @@ -61,6 +63,7 @@ impl HidJob { pid, read_endpoint, led_endpoint, + disable_air, read_callback, read_buf: Buffer::new(), last_read_buf: Buffer::new(), @@ -71,7 +74,7 @@ impl HidJob { } } - pub fn from_config(state: &SliderState, spec: &HardwareSpec) -> Self { + pub fn from_config(state: &SliderState, spec: &HardwareSpec, disable_air: &bool) -> Self { match spec { HardwareSpec::TasollerOne => Self::new( state.clone(), @@ -79,6 +82,7 @@ impl HidJob { 0x2333, 0x84, 0x03, + *disable_air, |buf, input| { if buf.len != 11 { return; @@ -121,6 +125,7 @@ impl HidJob { 0x2333, 0x84, 0x03, + *disable_air, |buf, input| { if buf.len != 36 { return; @@ -157,6 +162,7 @@ impl HidJob { 0x2001, 0x81, 0x02, + *disable_air, |buf, input| { if buf.len != 34 { return; @@ -246,6 +252,10 @@ impl ThreadJob for HidJob { work = true; let mut input_handle = self.state.input.lock(); (self.read_callback)(&self.read_buf, input_handle.deref_mut()); + + if self.disable_air { + input_handle.air.fill(0); + } swap(&mut self.read_buf, &mut self.last_read_buf); } } diff --git a/src/App.svelte b/src/App.svelte index 8656fe5..4ac5c4d 100644 --- a/src/App.svelte +++ b/src/App.svelte @@ -10,6 +10,7 @@ let outputMode = "none"; let ledMode = "none"; + let disableAirStrings = false; let divaSerialPort = "COM1"; let divaBrightness = 63; let keyboardSensitivity = 20; @@ -58,6 +59,7 @@ outputMode = payload.outputMode || "none"; ledMode = payload.ledMode || "none"; + disableAirStrings = payload.disableAirStrings || false; divaSerialPort = payload.divaSerialPort || "COM1"; divaBrightness = payload.divaBrightness || 63; keyboardSensitivity = payload.keyboardSensitivity || 20; @@ -101,12 +103,14 @@ async function setConfig() { console.log("Updating config"); + console.log(disableAirStrings); await emit( "setConfig", JSON.stringify({ deviceMode, outputMode, ledMode, + disableAirStrings, divaSerialPort, divaBrightness, keyboardSensitivity, @@ -170,13 +174,26 @@ - - + {#if deviceMode.slice(0, 8) === "tasoller" || deviceMode.slice(0, 7) === "yuancon" || deviceMode.slice(0, 10) === "brokenithm"} +
+
+
+ + + + +
+
+ {/if} {#if deviceMode.slice(0, 10) === "brokenithm"}