From b5105ed096ccd71cc267ca68d29e46dee30a4584 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Mon, 1 Mar 2021 12:58:06 -0600 Subject: [PATCH] Add Fan Controller for FanBus Devices --- .../FanBusController/FanBusController.cpp | 25 +++++++++++ .../FanBusController/FanBusController.h | 7 ++- .../FanBusControllerDetect.cpp | 5 +++ .../FanBusController/FanController_FanBus.cpp | 43 +++++++++++++++++++ .../FanBusController/FanController_FanBus.h | 24 +++++++++++ 5 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 Controllers/FanBusController/FanController_FanBus.cpp create mode 100644 Controllers/FanBusController/FanController_FanBus.h diff --git a/Controllers/FanBusController/FanBusController.cpp b/Controllers/FanBusController/FanBusController.cpp index a184178a..fcaea973 100644 --- a/Controllers/FanBusController/FanBusController.cpp +++ b/Controllers/FanBusController/FanBusController.cpp @@ -34,6 +34,31 @@ std::string FanBusController::GetLocation() return(location_string); } +unsigned char FanBusController::GetFanPWM() +{ + unsigned char fan_pwm; + + fan_pwm = bus->read(dev, 0x01); + + return(fan_pwm); +} + +unsigned short FanBusController::GetFanRPM() +{ + unsigned char fan_rpm_low; + unsigned char fan_rpm_high; + + fan_rpm_low = bus->read(dev, 0x02); + fan_rpm_high = bus->read(dev, 0x03); + + return((fan_rpm_high << 8) | fan_rpm_low); +} + +void FanBusController::SetFanPWM(unsigned char fan_pwm) +{ + bus->write(dev, 0x01, fan_pwm); +} + void FanBusController::SetLEDs(std::vector colors) { for(unsigned int led_idx = 0; led_idx < 4; led_idx++) diff --git a/Controllers/FanBusController/FanBusController.h b/Controllers/FanBusController/FanBusController.h index 894ed13d..e3ef889a 100644 --- a/Controllers/FanBusController/FanBusController.h +++ b/Controllers/FanBusController/FanBusController.h @@ -21,9 +21,12 @@ public: FanBusController(FanBusInterface* bus_ptr, unsigned char dev_addr); ~FanBusController(); - std::string GetLocation(); + std::string GetLocation(); - void SetLEDs(std::vector colors); + unsigned char GetFanPWM(); + unsigned short GetFanRPM(); + void SetFanPWM(unsigned char fan_pwm); + void SetLEDs(std::vector colors); private: std::string port_name; diff --git a/Controllers/FanBusController/FanBusControllerDetect.cpp b/Controllers/FanBusController/FanBusControllerDetect.cpp index f8ae4be3..aeb8d607 100644 --- a/Controllers/FanBusController/FanBusControllerDetect.cpp +++ b/Controllers/FanBusController/FanBusControllerDetect.cpp @@ -11,6 +11,7 @@ #include "Detector.h" #include "FanBusController.h" +#include "FanController_FanBus.h" #include "RGBController_FanBus.h" #include "SettingsManager.h" @@ -45,6 +46,10 @@ void DetectFanBusControllers() RGBController_FanBus* rgb_controller = new RGBController_FanBus(controller); ResourceManager::get()->RegisterRGBController(rgb_controller); + + FanController_FanBus* fan_controller = new FanController_FanBus(controller); + + ResourceManager::get()->RegisterFanController(fan_controller); } } } diff --git a/Controllers/FanBusController/FanController_FanBus.cpp b/Controllers/FanBusController/FanController_FanBus.cpp new file mode 100644 index 00000000..f25a3148 --- /dev/null +++ b/Controllers/FanBusController/FanController_FanBus.cpp @@ -0,0 +1,43 @@ +/*-----------------------------------------*\ +| FanController_FanBus.cpp | +| | +| Generic Fan Interface for FanBus | +| controller | +| | +| Adam Honse (CalcProgrammer1) 3/1/2020 | +\*-----------------------------------------*/ + +#include "FanController_FanBus.h" + +FanController_FanBus::FanController_FanBus(FanBusController* controller_ptr) +{ + controller = controller_ptr; + + name = "FanBus Device"; + description = "FanBus Device"; + location = controller->GetLocation(); + + fan new_fan; + + new_fan.name = "FanBus Fan"; + new_fan.speed_min = 0; + new_fan.speed_max = 255; + new_fan.speed_cmd = controller->GetFanPWM(); + new_fan.rpm_rdg = controller->GetFanRPM(); + + fans.push_back(new_fan); +} + +void FanController_FanBus::UpdateControl() +{ + controller->SetFanPWM(fans[0].speed_cmd); +} + +void FanController_FanBus::UpdateReading() +{ + unsigned short rpm; + + rpm = controller->GetFanRPM(); + + fans[0].rpm_rdg = rpm; +} \ No newline at end of file diff --git a/Controllers/FanBusController/FanController_FanBus.h b/Controllers/FanBusController/FanController_FanBus.h new file mode 100644 index 00000000..48744a0a --- /dev/null +++ b/Controllers/FanBusController/FanController_FanBus.h @@ -0,0 +1,24 @@ +/*-----------------------------------------*\ +| FanController_FanBus.h | +| | +| Generic Fan Interface for FanBus | +| controller | +| | +| Adam Honse (CalcProgrammer1) 3/1/2020 | +\*-----------------------------------------*/ + +#pragma once +#include "FanController.h" +#include "FanBusController.h" + +class FanController_FanBus : public FanController +{ +public: + FanController_FanBus(FanBusController* controller_ptr); + + void UpdateControl(); + void UpdateReading(); + +private: + FanBusController* controller; +};