mirror of
https://github.com/CalcProgrammer1/OpenRGB.git
synced 2026-05-24 22:45:55 -04:00
Initial NZXT Smart Device V2 fan controller. Use a thread to process fan updates to avoid locking up the dialog.
This commit is contained in:
55
Controllers/NZXTHue2Controller/FanController_NZXTHue2.cpp
Normal file
55
Controllers/NZXTHue2Controller/FanController_NZXTHue2.cpp
Normal file
@@ -0,0 +1,55 @@
|
||||
/*-----------------------------------------*\
|
||||
| FanController_NZXTHue2.cpp |
|
||||
| |
|
||||
| Generic Fan Interface for NZXT Hue 2 |
|
||||
| (Smart Device V2, Fan & RGB) controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 6/22/2020 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#include "FanController_NZXTHue2.h"
|
||||
|
||||
FanController_NZXTHue2::FanController_NZXTHue2(NZXTHue2Controller* hue2_ptr)
|
||||
{
|
||||
hue2 = hue2_ptr;
|
||||
|
||||
name = "NZXT Hue 2 Device";
|
||||
description = "NZXT Hue 2 Device";
|
||||
version = hue2->GetFirmwareVersion();
|
||||
|
||||
for(std::size_t fan_index = 0; fan_index < hue2->GetNumFanChannels(); fan_index++)
|
||||
{
|
||||
fan new_fan;
|
||||
|
||||
hue2->UpdateStatus();
|
||||
|
||||
new_fan.name = "NZXT Fan ";
|
||||
new_fan.name.append(std::to_string(fan_index + 1));
|
||||
new_fan.speed_min = 0;
|
||||
new_fan.speed_max = 100;
|
||||
new_fan.speed_cmd = hue2->GetFanCommand(fan_index);
|
||||
new_fan.rpm_rdg = hue2->GetFanRPM(fan_index);
|
||||
|
||||
fans.push_back(new_fan);
|
||||
}
|
||||
|
||||
UpdateControl();
|
||||
}
|
||||
|
||||
void FanController_NZXTHue2::UpdateControl()
|
||||
{
|
||||
for(std::size_t fan_index = 0; fan_index < fans.size(); fan_index++)
|
||||
{
|
||||
hue2->SendFan(fan_index, 0, fans[fan_index].speed_cmd);
|
||||
}
|
||||
}
|
||||
|
||||
void FanController_NZXTHue2::UpdateReading()
|
||||
{
|
||||
hue2->UpdateStatus();
|
||||
|
||||
for(std::size_t fan_index = 0; fan_index < fans.size(); fan_index++)
|
||||
{
|
||||
fans[fan_index].rpm_rdg = hue2->GetFanRPM(fan_index);
|
||||
}
|
||||
}
|
||||
24
Controllers/NZXTHue2Controller/FanController_NZXTHue2.h
Normal file
24
Controllers/NZXTHue2Controller/FanController_NZXTHue2.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*-----------------------------------------*\
|
||||
| FanController_NZXTHue2.h |
|
||||
| |
|
||||
| Generic Fan Interface for NZXT Hue 2 |
|
||||
| (Smart Device V2, Fan & RGB) controller |
|
||||
| |
|
||||
| Adam Honse (CalcProgrammer1) 6/22/2020 |
|
||||
\*-----------------------------------------*/
|
||||
|
||||
#pragma once
|
||||
#include "FanController.h"
|
||||
#include "NZXTHue2Controller.h"
|
||||
|
||||
class FanController_NZXTHue2 : public FanController
|
||||
{
|
||||
public:
|
||||
FanController_NZXTHue2(NZXTHue2Controller* hue2_ptr);
|
||||
|
||||
void UpdateControl();
|
||||
void UpdateReading();
|
||||
|
||||
private:
|
||||
NZXTHue2Controller* hue2;
|
||||
};
|
||||
@@ -249,7 +249,7 @@ void NZXTHue2Controller::UpdateStatus()
|
||||
unsigned char usb_buf[64];
|
||||
unsigned int ret_val = 0;
|
||||
|
||||
if(false)//num_fan_channels > 0)
|
||||
if(num_fan_channels > 0)
|
||||
{
|
||||
/*-----------------------------------------------------*\
|
||||
| Zero out buffer |
|
||||
|
||||
@@ -12,6 +12,8 @@
|
||||
#include <hidapi.h>
|
||||
#include "Detector.h"
|
||||
#include "NZXTHue2Controller.h"
|
||||
#include "FanController.h"
|
||||
#include "FanController_NZXTHue2.h"
|
||||
#include "RGBController.h"
|
||||
#include "RGBController_NZXTHue2.h"
|
||||
|
||||
@@ -45,6 +47,13 @@ static void spawn_hue(hid_device_info* info, const std::string& name, int rgb_ch
|
||||
rgb_controller->name = name;
|
||||
|
||||
ResourceManager::get()->RegisterRGBController(rgb_controller);
|
||||
|
||||
if(fan_channels > 0)
|
||||
{
|
||||
FanController_NZXTHue2* fan_controller = new FanController_NZXTHue2(controller);
|
||||
fan_controller->name = name;
|
||||
ResourceManager::get()->RegisterFanController(fan_controller);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,30 @@
|
||||
#include "OpenRGBFanPage.h"
|
||||
#include <QTimer>
|
||||
#include "OpenRGBFanPage.h"
|
||||
|
||||
using namespace Ui;
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <Windows.h>
|
||||
#endif
|
||||
|
||||
#ifdef __APPLE__
|
||||
#include <unistd.h>
|
||||
|
||||
static void Sleep(unsigned int milliseconds)
|
||||
{
|
||||
usleep(1000 * milliseconds);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef __linux__
|
||||
#include <unistd.h>
|
||||
|
||||
static void Sleep(unsigned int milliseconds)
|
||||
{
|
||||
usleep(1000 * milliseconds);
|
||||
}
|
||||
#endif
|
||||
|
||||
OpenRGBFanPage::OpenRGBFanPage(FanController *dev, QWidget *parent) :
|
||||
QFrame(parent),
|
||||
ui(new Ui::OpenRGBFanPageUi)
|
||||
@@ -14,6 +36,8 @@ OpenRGBFanPage::OpenRGBFanPage(FanController *dev, QWidget *parent) :
|
||||
\*-----------------------------------------------------*/
|
||||
device = dev;
|
||||
|
||||
FanUpdateThread = new std::thread(&OpenRGBFanPage::FanUpdateThreadFunction, this);
|
||||
|
||||
QTimer *timer = new QTimer(this);
|
||||
connect(timer, &QTimer::timeout, this, QOverload<>::of(&OpenRGBFanPage::UpdateRPM));
|
||||
timer->start(1000);
|
||||
@@ -36,6 +60,16 @@ OpenRGBFanPage::~OpenRGBFanPage()
|
||||
delete ui;
|
||||
}
|
||||
|
||||
void OpenRGBFanPage::FanUpdateThreadFunction()
|
||||
{
|
||||
while(1)
|
||||
{
|
||||
device->UpdateControl();
|
||||
device->UpdateReading();
|
||||
Sleep(1000);
|
||||
}
|
||||
}
|
||||
|
||||
void OpenRGBFanPage::UpdateRPM()
|
||||
{
|
||||
/*-----------------------------------------------------*\
|
||||
@@ -43,8 +77,6 @@ void OpenRGBFanPage::UpdateRPM()
|
||||
\*-----------------------------------------------------*/
|
||||
unsigned int selected_fan = (unsigned int)ui->FanBox->currentIndex();
|
||||
|
||||
device->UpdateReading();
|
||||
|
||||
ui->RPMValue->setText(QString::number(device->fans[selected_fan].rpm_rdg));
|
||||
}
|
||||
|
||||
@@ -76,6 +108,4 @@ void OpenRGBFanPage::on_SpeedSlider_valueChanged(int /* value */)
|
||||
unsigned int speed_cmd = ui->SpeedSlider->value();
|
||||
|
||||
device->fans[selected_fan].speed_cmd = speed_cmd;
|
||||
|
||||
device->UpdateControl();
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "FanController.h"
|
||||
|
||||
#include <QFrame>
|
||||
#include <thread>
|
||||
|
||||
namespace Ui {
|
||||
class OpenRGBFanPage;
|
||||
@@ -17,7 +18,8 @@ class Ui::OpenRGBFanPage : public QFrame
|
||||
public:
|
||||
explicit OpenRGBFanPage(FanController *dev, QWidget *parent = nullptr);
|
||||
~OpenRGBFanPage();
|
||||
|
||||
|
||||
void FanUpdateThreadFunction();
|
||||
void SetDevice(unsigned char red, unsigned char green, unsigned char blue);
|
||||
void SetCustomMode();
|
||||
void UpdateDevice();
|
||||
@@ -34,6 +36,8 @@ private:
|
||||
Ui::OpenRGBFanPageUi *ui;
|
||||
FanController *device;
|
||||
|
||||
std::thread* FanUpdateThread;
|
||||
|
||||
signals:
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user