hardware: Add device_variant method

This commit is contained in:
Vicki Pfau 2025-03-11 17:05:37 -07:00
parent 7a04e45dca
commit b1dc04daa8

View file

@ -68,20 +68,22 @@ pub(crate) async fn steam_deck_variant() -> Result<SteamDeckVariant> {
} }
pub(crate) async fn device_type() -> Result<DeviceType> { pub(crate) async fn device_type() -> Result<DeviceType> {
Ok(device_variant().await?.0)
}
pub(crate) async fn device_variant() -> Result<(DeviceType, String)> {
let sys_vendor = fs::read_to_string(path(SYS_VENDOR_PATH)).await?; let sys_vendor = fs::read_to_string(path(SYS_VENDOR_PATH)).await?;
let product_name = fs::read_to_string(path(PRODUCT_NAME_PATH)).await?; let product_name = fs::read_to_string(path(PRODUCT_NAME_PATH)).await?;
let product_name = product_name.trim_end();
let board_name = fs::read_to_string(path(BOARD_NAME_PATH)).await?; let board_name = fs::read_to_string(path(BOARD_NAME_PATH)).await?;
Ok( let board_name = board_name.trim_end();
match ( Ok(match (sys_vendor.trim_end(), product_name, board_name) {
sys_vendor.trim_end(), ("LENOVO", "83L3" | "83N6" | "83Q2" | "83Q3", _) => {
product_name.trim_end(), (DeviceType::LegionGoS, product_name.to_string())
board_name.trim_end(), }
) { ("Valve", _, "Jupiter" | "Galileo") => (DeviceType::SteamDeck, board_name.to_string()),
("LENOVO", "83L3" | "83N6" | "83Q2" | "83Q3", _) => DeviceType::LegionGoS, _ => (DeviceType::Unknown, String::from("unknown")),
("Valve", _, "Jupiter" | "Galileo") => DeviceType::SteamDeck, })
_ => DeviceType::Unknown,
},
)
} }
pub(crate) struct FanControl { pub(crate) struct FanControl {
@ -188,6 +190,7 @@ pub mod test {
.await .await
.expect("create_dir_all"); .expect("create_dir_all");
assert!(steam_deck_variant().await.is_err()); assert!(steam_deck_variant().await.is_err());
assert!(device_variant().await.is_err());
write(crate::path(SYS_VENDOR_PATH), "LENOVO\n") write(crate::path(SYS_VENDOR_PATH), "LENOVO\n")
.await .await
@ -202,7 +205,10 @@ pub mod test {
steam_deck_variant().await.unwrap(), steam_deck_variant().await.unwrap(),
SteamDeckVariant::Unknown SteamDeckVariant::Unknown
); );
assert_eq!(device_type().await.unwrap(), DeviceType::Unknown); assert_eq!(
device_variant().await.unwrap(),
(DeviceType::Unknown, String::from("unknown"))
);
write(crate::path(PRODUCT_NAME_PATH), "83L3\n") write(crate::path(PRODUCT_NAME_PATH), "83L3\n")
.await .await
@ -211,7 +217,10 @@ pub mod test {
steam_deck_variant().await.unwrap(), steam_deck_variant().await.unwrap(),
SteamDeckVariant::Unknown SteamDeckVariant::Unknown
); );
assert_eq!(device_type().await.unwrap(), DeviceType::LegionGoS); assert_eq!(
device_variant().await.unwrap(),
(DeviceType::LegionGoS, String::from("83L3"))
);
write(crate::path(PRODUCT_NAME_PATH), "83N6\n") write(crate::path(PRODUCT_NAME_PATH), "83N6\n")
.await .await
@ -220,7 +229,10 @@ pub mod test {
steam_deck_variant().await.unwrap(), steam_deck_variant().await.unwrap(),
SteamDeckVariant::Unknown SteamDeckVariant::Unknown
); );
assert_eq!(device_type().await.unwrap(), DeviceType::LegionGoS); assert_eq!(
device_variant().await.unwrap(),
(DeviceType::LegionGoS, String::from("83N6"))
);
write(crate::path(PRODUCT_NAME_PATH), "83Q2\n") write(crate::path(PRODUCT_NAME_PATH), "83Q2\n")
.await .await
@ -229,7 +241,10 @@ pub mod test {
steam_deck_variant().await.unwrap(), steam_deck_variant().await.unwrap(),
SteamDeckVariant::Unknown SteamDeckVariant::Unknown
); );
assert_eq!(device_type().await.unwrap(), DeviceType::LegionGoS); assert_eq!(
device_variant().await.unwrap(),
(DeviceType::LegionGoS, String::from("83Q2"))
);
write(crate::path(PRODUCT_NAME_PATH), "83Q3\n") write(crate::path(PRODUCT_NAME_PATH), "83Q3\n")
.await .await
@ -238,7 +253,10 @@ pub mod test {
steam_deck_variant().await.unwrap(), steam_deck_variant().await.unwrap(),
SteamDeckVariant::Unknown SteamDeckVariant::Unknown
); );
assert_eq!(device_type().await.unwrap(), DeviceType::LegionGoS); assert_eq!(
device_variant().await.unwrap(),
(DeviceType::LegionGoS, String::from("83Q3"))
);
write(crate::path(SYS_VENDOR_PATH), "Valve\n") write(crate::path(SYS_VENDOR_PATH), "Valve\n")
.await .await
@ -253,7 +271,10 @@ pub mod test {
steam_deck_variant().await.unwrap(), steam_deck_variant().await.unwrap(),
SteamDeckVariant::Jupiter SteamDeckVariant::Jupiter
); );
assert_eq!(device_type().await.unwrap(), DeviceType::SteamDeck); assert_eq!(
device_variant().await.unwrap(),
(DeviceType::SteamDeck, String::from("Jupiter"))
);
write(crate::path(BOARD_NAME_PATH), "Galileo\n") write(crate::path(BOARD_NAME_PATH), "Galileo\n")
.await .await
@ -265,7 +286,10 @@ pub mod test {
steam_deck_variant().await.unwrap(), steam_deck_variant().await.unwrap(),
SteamDeckVariant::Galileo SteamDeckVariant::Galileo
); );
assert_eq!(device_type().await.unwrap(), DeviceType::SteamDeck); assert_eq!(
device_variant().await.unwrap(),
(DeviceType::SteamDeck, String::from("Galileo"))
);
write(crate::path(BOARD_NAME_PATH), "Neptune\n") write(crate::path(BOARD_NAME_PATH), "Neptune\n")
.await .await
@ -274,7 +298,10 @@ pub mod test {
steam_deck_variant().await.unwrap(), steam_deck_variant().await.unwrap(),
SteamDeckVariant::Unknown SteamDeckVariant::Unknown
); );
assert_eq!(device_type().await.unwrap(), DeviceType::Unknown); assert_eq!(
device_variant().await.unwrap(),
(DeviceType::Unknown, String::from("unknown"))
);
} }
#[test] #[test]