Compare commits
8 Commits
42043bcd55
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| b7895d61c6 | |||
| 77d9a22419 | |||
| 392a03a23d | |||
| e796ff3663 | |||
| de58e2d472 | |||
| 314b281c03 | |||
| 5253dc1df6 | |||
| 4bdedbc110 |
@@ -60,6 +60,9 @@
|
||||
<layout class="QGridLayout" name="gridLayout_9">
|
||||
<item row="1" column="1">
|
||||
<widget class="QSlider" name="monitorMaxBrightnessSlider">
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
@@ -74,6 +77,9 @@
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QSlider" name="monitorMinBrightnessSlider">
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
@@ -117,6 +123,9 @@
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<widget class="QSlider" name="monitorBrightnessSlider">
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
@@ -160,6 +169,9 @@
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QSlider" name="monitorOverallMinBrightnessSlider">
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
@@ -184,6 +196,9 @@
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QSlider" name="monitorOverallMaxBrightnessSlider">
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
@@ -243,6 +258,9 @@
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QSlider" name="monitorOverallBrightnessSlider">
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#include <QAbstractButton>
|
||||
#include <QCloseEvent>
|
||||
#include <QGroupBox>
|
||||
#include <QSlider>
|
||||
@@ -18,7 +19,7 @@
|
||||
#include "sensor_driver.hpp"
|
||||
#include "utils.hpp"
|
||||
|
||||
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
|
||||
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent), m_mtx(QMutex::RecursionMode::Recursive)
|
||||
{
|
||||
qDebug(ltr("Creating main window"));
|
||||
|
||||
@@ -28,6 +29,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
|
||||
enumMonitors();
|
||||
|
||||
setupMonitorsTab();
|
||||
setupSensorsTab();
|
||||
|
||||
setupTrayIcon();
|
||||
|
||||
@@ -52,6 +54,8 @@ void MainWindow::closeEvent(QCloseEvent* event)
|
||||
|
||||
void MainWindow::enumSensors()
|
||||
{
|
||||
m_sensors.clear();
|
||||
|
||||
auto sensors = enumerateSensors();
|
||||
|
||||
for(auto& sensor: sensors) {
|
||||
@@ -116,12 +120,15 @@ void MainWindow::setupMonitorsTab()
|
||||
{
|
||||
connect(m_ui.monitorDropdown, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &MainWindow::updateCurrentMonitorGUI);
|
||||
connect(m_ui.monitorEnumerateButton, &QAbstractButton::clicked, [this](bool) { enumMonitors(); });
|
||||
connect(m_ui.monitorResetButton, &QAbstractButton::clicked, [this](bool) { resetAllMonitorSettings(); });
|
||||
|
||||
setupLimitsSlider();
|
||||
setupOverallLimitsSlider();
|
||||
|
||||
setupBrightness();
|
||||
setupOverallBrightness();
|
||||
|
||||
resetAllMonitorSettings();
|
||||
}
|
||||
|
||||
void MainWindow::setupLimitsSlider()
|
||||
@@ -214,6 +221,11 @@ void MainWindow::setupOverallBrightness()
|
||||
});
|
||||
}
|
||||
|
||||
void MainWindow::setupSensorsTab()
|
||||
{
|
||||
m_ui.tabs->removeTab(1);
|
||||
}
|
||||
|
||||
void MainWindow::setupTrayIcon()
|
||||
{
|
||||
loadIcons();
|
||||
@@ -265,6 +277,13 @@ void MainWindow::setupCallbackTimer()
|
||||
qDebug(ltr("Callback timer started"));
|
||||
}
|
||||
|
||||
void MainWindow::resetAllMonitorSettings()
|
||||
{
|
||||
m_ui.monitorOverallMinBrightnessSlider->setValue(0);
|
||||
m_ui.monitorOverallMaxBrightnessSlider->setValue(100);
|
||||
m_ui.monitorOverallOverrideCheck->setCheckState(Qt::CheckState::Unchecked);
|
||||
}
|
||||
|
||||
void MainWindow::updateCurrentMonitorGUI(int index)
|
||||
{
|
||||
if(index == -1) {
|
||||
@@ -340,6 +359,12 @@ void MainWindow::updateState()
|
||||
|
||||
bool MainWindow::setMonitorBrightness(float& brightness)
|
||||
{
|
||||
constexpr auto hysteresis = [](const auto& lowThreshold, const auto& highThreshold, const auto& currentValue, const auto& newValue) {
|
||||
if(newValue > highThreshold || newValue < lowThreshold)
|
||||
return newValue;
|
||||
return currentValue;
|
||||
};
|
||||
|
||||
if(m_monitors.empty()) {
|
||||
return false;
|
||||
}
|
||||
@@ -348,6 +373,28 @@ bool MainWindow::setMonitorBrightness(float& brightness)
|
||||
bool allMonitorsSameBrightness = true;
|
||||
|
||||
for(size_t i = 0; i < m_monitors.size(); ++i) {
|
||||
const auto updateMonitorBrightness = [&] {
|
||||
const auto brightnessRange = m_monitors[i].maxBrightness - m_monitors[i].minBrightness;
|
||||
const auto hysteresisDelta = m_monitors[i].manualOverride ? 0.f : m_monitors[i].HYSTERESIS_THRESHOLD * brightnessRange;
|
||||
const auto lowThreshold = std::clamp(m_monitors[i].prevBrightness - hysteresisDelta, m_monitors[i].minBrightness, m_monitors[i].maxBrightness);
|
||||
const auto highThreshold = std::clamp(m_monitors[i].prevBrightness + hysteresisDelta, m_monitors[i].minBrightness, m_monitors[i].maxBrightness);
|
||||
if(hysteresis(lowThreshold, highThreshold, m_monitors[i].prevBrightness, m_monitors[i].brightness) != m_monitors[i].prevBrightness) {
|
||||
qDebug(ltr("Setting monitor %1 brightness from %2 to %3")
|
||||
.arg(i)
|
||||
.arg(m_monitors[i].prevBrightness, 0, 'f', 2)
|
||||
.arg(m_monitors[i].brightness, 0, 'f', 2));
|
||||
m_monitors[i].prevBrightness = m_monitors[i].brightness;
|
||||
return m_monitors[i].driver.setBrightness(m_monitors[i].brightness);
|
||||
}
|
||||
else {
|
||||
qDebug(ltr("Hysteresis prevented setting monitor %1 brightness from %2 to %3")
|
||||
.arg(i)
|
||||
.arg(m_monitors[i].prevBrightness, 0, 'f', 2)
|
||||
.arg(m_monitors[i].brightness, 0, 'f', 2));
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
if(!std::isnan(brightness) && !m_monitors[i].manualOverride) {
|
||||
m_monitors[i].brightness = brightness;
|
||||
}
|
||||
@@ -358,7 +405,7 @@ bool MainWindow::setMonitorBrightness(float& brightness)
|
||||
allMonitorsSameBrightness = false;
|
||||
}
|
||||
|
||||
if(!m_monitors[i].driver.setBrightness(m_monitors[i].brightness)) {
|
||||
if(!updateMonitorBrightness()) {
|
||||
errorOccurred = true;
|
||||
}
|
||||
else if(m_ui.monitorDropdown->currentIndex() == static_cast<int>(i)) {
|
||||
|
||||
@@ -40,9 +40,13 @@ class MainWindow : public QMainWindow {
|
||||
void setupBrightness();
|
||||
void setupOverallBrightness();
|
||||
|
||||
void setupSensorsTab();
|
||||
|
||||
void setupTrayIcon();
|
||||
void setupCallbackTimer();
|
||||
|
||||
void resetAllMonitorSettings();
|
||||
|
||||
void updateCurrentMonitorGUI(int index);
|
||||
|
||||
void updateState();
|
||||
@@ -71,10 +75,13 @@ class MainWindow : public QMainWindow {
|
||||
};
|
||||
|
||||
struct MonitorData {
|
||||
static constexpr auto HYSTERESIS_THRESHOLD = 0.05f;
|
||||
|
||||
Monitor driver;
|
||||
float minBrightness;
|
||||
float maxBrightness;
|
||||
float brightness;
|
||||
float prevBrightness;
|
||||
bool manualOverride;
|
||||
};
|
||||
|
||||
|
||||
@@ -56,7 +56,7 @@ Found DFU: [0483:df11] ver=2200, devnum=57, cfg=1, intf=0, path="2-13.2.2", alt=
|
||||
Found DFU: [0483:df11] ver=2200, devnum=57, cfg=1, intf=0, path="2-13.2.2", alt=0, name="@Internal Flash /0x08000000/032*0001Kg", serial="FFFFFFFEFFFF"
|
||||
```
|
||||
|
||||
The firmware can then be flashing using:
|
||||
The firmware can then be flashed using:
|
||||
|
||||
```console
|
||||
$ dfu-util -a 0 -s 0x08000000 -D AdaptiveBrightnessFirmware.bin
|
||||
|
||||
Reference in New Issue
Block a user