From 0b5e04393a83cd367408c26a3e94c1077376de59 Mon Sep 17 00:00:00 2001 From: James Lademann Date: Sat, 10 Jan 2026 12:54:01 +0000 Subject: [PATCH] Add slash support for additional ga403 2025 models --- rog-slash/src/data.rs | 68 +++++++++++++++++++++++-------------------- rog-slash/src/usb.rs | 29 +++++++++--------- 2 files changed, 53 insertions(+), 44 deletions(-) diff --git a/rog-slash/src/data.rs b/rog-slash/src/data.rs index f7414754..f4240e5d 100644 --- a/rog-slash/src/data.rs +++ b/rog-slash/src/data.rs @@ -12,12 +12,13 @@ use crate::usb::{PROD_ID1, PROD_ID1_STR, PROD_ID2, PROD_ID2_STR}; #[derive(Default, Debug, Copy, Clone, PartialEq, Eq, Deserialize, Serialize)] pub enum SlashType { - GA403, - GA403W, - GA605, - GU605, - GU605C, - G614F, + GA403_2024, + GA403_2025, + GA605_2024, + GA605_2025, + GU605_2024, + GU605_2025, + G614_2025, #[default] Unsupported, } @@ -25,24 +26,26 @@ pub enum SlashType { impl SlashType { pub const fn prod_id(&self) -> u16 { match self { - SlashType::GA403W => PROD_ID2, - SlashType::GA403 => PROD_ID1, - SlashType::GA605 => PROD_ID2, - SlashType::GU605 => PROD_ID1, - SlashType::GU605C => PROD_ID2, - SlashType::G614F => PROD_ID2, + SlashType::GA403_2025 => PROD_ID2, + SlashType::GA403_2024 => PROD_ID1, + SlashType::GA605_2025 => PROD_ID2, + SlashType::GA605_2024 => PROD_ID2, + SlashType::GU605_2025 => PROD_ID2, + SlashType::GU605_2024 => PROD_ID1, + SlashType::G614_2025 => PROD_ID2, SlashType::Unsupported => 0, } } pub const fn prod_id_str(&self) -> &str { match self { - SlashType::GA403W => PROD_ID2_STR, - SlashType::GA403 => PROD_ID1_STR, - SlashType::GA605 => PROD_ID2_STR, - SlashType::GU605 => PROD_ID1_STR, - SlashType::GU605C => PROD_ID2_STR, - SlashType::G614F => PROD_ID2_STR, + SlashType::GA403_2025 => PROD_ID2_STR, + SlashType::GA403_2024 => PROD_ID1_STR, + SlashType::GA605_2025 => PROD_ID2_STR, + SlashType::GA605_2024 => PROD_ID2_STR, + SlashType::GU605_2025 => PROD_ID2_STR, + SlashType::GU605_2024 => PROD_ID1_STR, + SlashType::G614_2025 => PROD_ID2_STR, SlashType::Unsupported => "", } } @@ -50,17 +53,19 @@ impl SlashType { pub fn from_dmi() -> Self { let board_name = DMIID::new().unwrap_or_default().board_name.to_uppercase(); if board_name.contains("G614F") { - SlashType::G614F - } else if board_name.contains("GA403W") { - SlashType::GA403W + SlashType::G614_2025 + } else if ["GA403W", "GA403UH", "GA403UM", "GA403UP"].iter().any(|s| board_name.contains(s)) { + SlashType::GA403_2025 } else if board_name.contains("GA403") { - SlashType::GA403 + SlashType::GA403_2024 + } else if board_name.contains("GA605K") { + SlashType::GA605_2025 } else if board_name.contains("GA605") { - SlashType::GA605 + SlashType::GA605_2024 } else if board_name.contains("GU605C") { - SlashType::GU605C + SlashType::GU605_2025 } else if board_name.contains("GU605") { - SlashType::GU605 + SlashType::GU605_2024 } else { SlashType::Unsupported } @@ -72,12 +77,13 @@ impl FromStr for SlashType { fn from_str(s: &str) -> std::result::Result { Ok(match s.to_uppercase().as_str() { - "GA403W" => Self::GA403W, - "GA403" => Self::GA403, - "GA605" => Self::GA605, - "GU605C" => Self::GU605C, - "GU605" => Self::GU605, - "G614FR" => Self::G614F, + "GA403_2025" => Self::GA403_2025, + "GA403_2024" => Self::GA403_2024, + "GA605_2025" => Self::GA605_2025, + "GA605_2024" => Self::GA605_2024, + "GU605_2025" => Self::GU605_2025, + "GU605_2024" => Self::GU605_2024, + "G614_2025" => Self::G614_2025, _ => Self::Unsupported, }) } diff --git a/rog-slash/src/usb.rs b/rog-slash/src/usb.rs index ad0afc22..f78d79ce 100644 --- a/rog-slash/src/usb.rs +++ b/rog-slash/src/usb.rs @@ -39,17 +39,19 @@ pub fn get_slash_type() -> SlashType { .unwrap_or_default(); let board_name = dmi.board_name.to_uppercase(); if board_name.contains("G614F") { - SlashType::G614F - } else if board_name.contains("GA403W") { - SlashType::GA403W + SlashType::G614_2025 + } else if ["GA403W", "GA403UH", "GA403UM", "GA403UP"].iter().any(|s| board_name.contains(s)) { + SlashType::GA403_2025 } else if board_name.contains("GA403") { - SlashType::GA403 + SlashType::GA403_2024 + } else if board_name.contains("GA605K") { + SlashType::GA605_2025 } else if board_name.contains("GA605") { - SlashType::GA605 + SlashType::GA605_2024 } else if board_name.contains("GU605C") { - SlashType::GU605C + SlashType::GU605_2025 } else if board_name.contains("GU605") { - SlashType::GU605 + SlashType::GU605_2024 } else { SlashType::Unsupported } @@ -57,12 +59,13 @@ pub fn get_slash_type() -> SlashType { pub const fn report_id(slash_type: SlashType) -> u8 { match slash_type { - SlashType::GA403W => REPORT_ID_19B6, - SlashType::GA403 => REPORT_ID_193B, - SlashType::GA605 => REPORT_ID_19B6, - SlashType::G614F => REPORT_ID_19B6, - SlashType::GU605 => REPORT_ID_193B, - SlashType::GU605C => REPORT_ID_19B6, + SlashType::GA403_2025 => REPORT_ID_19B6, + SlashType::GA403_2024 => REPORT_ID_193B, + SlashType::GA605_2025 => REPORT_ID_19B6, + SlashType::GA605_2024 => REPORT_ID_19B6, + SlashType::GU605_2025 => REPORT_ID_19B6, + SlashType::GU605_2024 => REPORT_ID_193B, + SlashType::G614_2025 => REPORT_ID_19B6, SlashType::Unsupported => REPORT_ID_19B6, } }