From fcc241cb170fdfc2ade20584f148832d2b45e3bd Mon Sep 17 00:00:00 2001 From: Flowie Date: Tue, 1 Jul 2025 10:19:03 +0300 Subject: [PATCH 1/2] if device found, automatically create sinks and link them with arctis nova 7 sink (by default) --- .../src-tauri/src/headsets/steelseries/mod.rs | 2 +- PenguinWave/src-tauri/src/lib.rs | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/PenguinWave/src-tauri/src/headsets/steelseries/mod.rs b/PenguinWave/src-tauri/src/headsets/steelseries/mod.rs index f50321f..f75ddee 100644 --- a/PenguinWave/src-tauri/src/headsets/steelseries/mod.rs +++ b/PenguinWave/src-tauri/src/headsets/steelseries/mod.rs @@ -1,6 +1,6 @@ pub mod arctis_nova_7; pub const VENDOR_ID: u16 = 0x1038; pub const VENDOR_NAME: &str = "SteelSeries"; - +pub const SINK_NAME: &str = "alsa_output.usb-SteelSeries_Arctis_Nova_7-00.analog-stereo"; pub const DATA_REQUEST: [u8; 2] = [0x00, 0xb0]; pub const CHATMIX_MIDDLE: i32 = 64; diff --git a/PenguinWave/src-tauri/src/lib.rs b/PenguinWave/src-tauri/src/lib.rs index 55e8fb4..7068814 100644 --- a/PenguinWave/src-tauri/src/lib.rs +++ b/PenguinWave/src-tauri/src/lib.rs @@ -9,6 +9,8 @@ use crate::utils::hardware_utils::*; use crate::utils::state::AppStateManager; use serde::{Deserialize, Serialize}; use tauri::{Manager}; +use crate::event::{CHAT_SINK, GAME_SINK}; +use crate::headsets::steelseries; #[tauri::command] fn greet(name: &str) -> String { @@ -34,6 +36,23 @@ fn greet(name: &str) -> String { name, device_count ); + // Verify if game/chat sinks exist, if not create them and link with the devices + + if let Ok(sinks) = PipeWireManager::list_sinks() { + if !sinks.contains(&GAME_SINK.to_string()) && !sinks.contains(&CHAT_SINK.to_string()) + { + let game_sink_id = PipeWireManager::create_virtual_sink(&GAME_SINK.to_string(), &GAME_SINK.to_string()); + let chat_sink_id = PipeWireManager::create_virtual_sink(&CHAT_SINK.to_string(), &CHAT_SINK.to_string()); + + if let (Ok(_), Ok(_)) = (game_sink_id, chat_sink_id) { + let _ = PipeWireManager::link_ports(&format!("{}:monitor_FL", CHAT_SINK), &format!("{}:playback_FL", steelseries::SINK_NAME)); + let _ = PipeWireManager::link_ports(&format!("{}:monitor_FL", CHAT_SINK), &format!("{}:playback_FR", steelseries::SINK_NAME)); + let _ = PipeWireManager::link_ports(&format!("{}:monitor_FL", GAME_SINK), &format!("{}:playback_FL", steelseries::SINK_NAME)); + let _ = PipeWireManager::link_ports(&format!("{}:monitor_FL", GAME_SINK), &format!("{}:playback_FR", steelseries::SINK_NAME)); + } + }; + } + for (i, device_list) in devices.iter().enumerate() { let battery = device_list.device.request_battery(); let chatmix = device_list.device.request_chatmix(); From e73c8216c912fec8566a517e8cf70591f44e3791 Mon Sep 17 00:00:00 2001 From: Flowie Date: Tue, 1 Jul 2025 11:01:37 +0300 Subject: [PATCH 2/2] additional build script to succesfuly deploy on linux --- PenguinWave/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PenguinWave/package.json b/PenguinWave/package.json index c9d969e..62abef7 100644 --- a/PenguinWave/package.json +++ b/PenguinWave/package.json @@ -7,7 +7,8 @@ "dev": "vite", "build": "tsc && vite build", "preview": "vite preview", - "tauri": "tauri" + "tauri": "tauri", + "tauri:build": "ARCH=x86_64 NO_STRIP=1 npx tauri build" }, "dependencies": { "@tauri-apps/api": "^2",