Test parse card0, move checking vendor
This commit is contained in:
parent
2b3a41cb9b
commit
408b5864cd
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -13,7 +13,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "amdfand"
|
name = "amdfand"
|
||||||
version = "1.0.3"
|
version = "1.0.4"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"gumdrop",
|
"gumdrop",
|
||||||
"log",
|
"log",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "amdfand"
|
name = "amdfand"
|
||||||
version = "1.0.3"
|
version = "1.0.4"
|
||||||
edition = "2018"
|
edition = "2018"
|
||||||
description = "AMDGPU fan control service"
|
description = "AMDGPU fan control service"
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
use crate::{AmdFanError, CONFIG_PATH, ROOT_DIR};
|
use crate::{AmdFanError, CONFIG_PATH};
|
||||||
use log::LevelFilter;
|
use log::LevelFilter;
|
||||||
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
use serde::{Deserialize, Deserializer, Serialize, Serializer};
|
||||||
use std::fmt::Formatter;
|
use std::fmt::Formatter;
|
||||||
use std::io::ErrorKind;
|
use std::io::ErrorKind;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone)]
|
#[derive(Debug, Copy, Clone, PartialEq)]
|
||||||
pub struct Card(pub u32);
|
pub struct Card(pub u32);
|
||||||
|
|
||||||
impl std::fmt::Display for Card {
|
impl std::fmt::Display for Card {
|
||||||
@ -24,19 +24,10 @@ impl FromStr for Card {
|
|||||||
if value.len() < 5 {
|
if value.len() < 5 {
|
||||||
return Err(AmdFanError::InputTooShort);
|
return Err(AmdFanError::InputTooShort);
|
||||||
}
|
}
|
||||||
let card = value[4..]
|
value[4..]
|
||||||
.parse::<u32>()
|
.parse::<u32>()
|
||||||
.map_err(|e| AmdFanError::InvalidSuffix(format!("{:?}", e)))
|
.map_err(|e| AmdFanError::InvalidSuffix(format!("{:?}", e)))
|
||||||
.map(|n| Card(n))?;
|
.map(|n| Card(n))
|
||||||
std::fs::read_to_string(format!("{}/{}/device/vendor", ROOT_DIR, card))
|
|
||||||
.map_err(|_| AmdFanError::FailedReadVendor)
|
|
||||||
.and_then(|vendor| {
|
|
||||||
if vendor.trim() == "0x1002" {
|
|
||||||
Ok(card)
|
|
||||||
} else {
|
|
||||||
Err(AmdFanError::NotAmdCard)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,6 +284,32 @@ pub fn load_config() -> std::io::Result<Config> {
|
|||||||
Ok(config)
|
Ok(config)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod parse_config {
|
||||||
|
use super::*;
|
||||||
|
use serde::Deserialize;
|
||||||
|
|
||||||
|
#[derive(Deserialize, PartialEq, Debug)]
|
||||||
|
pub struct Foo {
|
||||||
|
card: Card,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_card0() {
|
||||||
|
assert_eq!("card0".parse::<Card>(), Ok(Card(0)))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_card1() {
|
||||||
|
assert_eq!("card1".parse::<Card>(), Ok(Card(1)))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn toml_card0() {
|
||||||
|
assert_eq!(toml::from_str("card = 'card0'"), Ok(Foo { card: Card(0) }))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod speed_for_temp {
|
mod speed_for_temp {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
15
src/main.rs
15
src/main.rs
@ -12,6 +12,7 @@ static CONFIG_PATH: &str = "/etc/amdfand/config.toml";
|
|||||||
static ROOT_DIR: &str = "/sys/class/drm";
|
static ROOT_DIR: &str = "/sys/class/drm";
|
||||||
static HW_MON_DIR: &str = "device/hwmon";
|
static HW_MON_DIR: &str = "device/hwmon";
|
||||||
|
|
||||||
|
#[derive(Debug, PartialEq)]
|
||||||
pub enum AmdFanError {
|
pub enum AmdFanError {
|
||||||
InvalidPrefix,
|
InvalidPrefix,
|
||||||
InputTooShort,
|
InputTooShort,
|
||||||
@ -93,6 +94,19 @@ impl HwMon {
|
|||||||
.unwrap_or_default()
|
.unwrap_or_default()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_amd(&self) -> bool {
|
||||||
|
std::fs::read_to_string(format!("{}/{}/device/vendor", ROOT_DIR, self.card))
|
||||||
|
.map_err(|_| AmdFanError::FailedReadVendor)
|
||||||
|
.map(|vendor| {
|
||||||
|
if vendor.trim() == "0x1002" {
|
||||||
|
true
|
||||||
|
} else {
|
||||||
|
false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.unwrap_or_default()
|
||||||
|
}
|
||||||
|
|
||||||
pub fn set_manual(&self) -> std::io::Result<()> {
|
pub fn set_manual(&self) -> std::io::Result<()> {
|
||||||
self.write("pwm1_enable", 1)
|
self.write("pwm1_enable", 1)
|
||||||
}
|
}
|
||||||
@ -255,6 +269,7 @@ fn controllers(config: &Config, filter: bool) -> std::io::Result<Vec<CardControl
|
|||||||
.is_some()
|
.is_some()
|
||||||
})
|
})
|
||||||
.map(|card| CardController::new(card).unwrap())
|
.map(|card| CardController::new(card).unwrap())
|
||||||
|
.filter(|controller| !filter || controller.hw_mon.is_amd())
|
||||||
.filter(|reader| {
|
.filter(|reader| {
|
||||||
!filter
|
!filter
|
||||||
|| reader
|
|| reader
|
||||||
|
Loading…
Reference in New Issue
Block a user