Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
65 changes: 60 additions & 5 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ impl<I2C: I2c> Emc230x<I2C> {
/// Get the number of poles for the selected fan (used in RPM calculations)
pub fn fan_poles(&self, sel: FanSelect) -> Result<u8, Error> {
self.valid_fan(sel)?;
Ok(self.poles[sel.0 as usize])
Ok(self.poles[sel.0 as usize - 1])
}

/// Set the number of poles for the selected fan (used in RPM calculations)
Expand All @@ -290,7 +290,7 @@ impl<I2C: I2c> Emc230x<I2C> {
/// happen as well.
pub fn set_fan_poles(&mut self, sel: FanSelect, poles: u8) -> Result<(), Error> {
self.valid_fan(sel)?;
self.poles[sel.0 as usize] = poles;
self.poles[sel.0 as usize - 1] = poles;
Ok(())
}

Expand Down Expand Up @@ -636,9 +636,8 @@ mod tests {
));

self.transactions.push(I2cTransaction::write_read(
EMC2301_I2C_ADDR,
vec![FanConfiguration1::fan_address(FanSelect(1))
.expect("Could not set fan address")],
self.address,
vec![FanConfiguration1::fan_address(select).expect("Could not set fan address")],
vec![default_cfg.into()],
));
}
Expand Down Expand Up @@ -850,6 +849,62 @@ mod tests {
i2c.done();
}

#[tokio::test]
async fn emc2305_duty_cycle_fan5() {
let mut expectations =
Emc230xExpectationBuilder::new(EMC230X_I2C_ADDR_0, ProductId::Emc2305);
expectations.duty_cycle(FanSelect(5), 75);
let expectations = expectations.build();

let i2c = I2cMock::new(&expectations);
let mut dev = Emc230x::new(i2c, EMC230X_I2C_ADDR_0)
.await
.expect("Could not create device");

let result = dev
.duty_cycle(FanSelect(5))
.await
.expect("Could not get duty cycle for fan 5");
assert_eq!(75, result);

let mut i2c = dev.release();
i2c.done();
}

#[tokio::test]
async fn emc2305_rpm_fan5() {
let expected_rpm: u16 = 1000;
let mut expectations =
Emc230xExpectationBuilder::new(EMC230X_I2C_ADDR_0, ProductId::Emc2305);
expectations.rpm(FanSelect(5), expected_rpm);
let expectations = expectations.build();

let i2c = I2cMock::new(&expectations);
let mut dev = Emc230x::new(i2c, EMC230X_I2C_ADDR_0)
.await
.expect("Could not create device");

let result = dev
.rpm(FanSelect(5))
.await
.expect("Could not get RPM for fan 5");

let range = std::ops::Range {
start: expected_rpm as f64 * 0.99,
end: expected_rpm as f64 * 1.01,
};
assert!(
range.contains(&(result as f64)),
"RPM was out of expected range; Expected: {} in Range: {:?} Got: {}",
expected_rpm,
range,
result
);

let mut i2c = dev.release();
i2c.done();
}

#[tokio::test]
async fn valid_fan() {
let expectations = Emc230xExpectationBuilder::new(EMC2301_I2C_ADDR, ProductId::Emc2301);
Expand Down
Loading