6 Commits

4 changed files with 64 additions and 3 deletions

View File

@@ -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>

View File

@@ -19,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"));
@@ -29,6 +29,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
enumMonitors();
setupMonitorsTab();
setupSensorsTab();
setupTrayIcon();
@@ -53,6 +54,8 @@ void MainWindow::closeEvent(QCloseEvent* event)
void MainWindow::enumSensors()
{
m_sensors.clear();
auto sensors = enumerateSensors();
for(auto& sensor: sensors) {
@@ -124,6 +127,8 @@ void MainWindow::setupMonitorsTab()
setupBrightness();
setupOverallBrightness();
resetAllMonitorSettings();
}
void MainWindow::setupLimitsSlider()
@@ -216,6 +221,11 @@ void MainWindow::setupOverallBrightness()
});
}
void MainWindow::setupSensorsTab()
{
m_ui.tabs->removeTab(1);
}
void MainWindow::setupTrayIcon()
{
loadIcons();
@@ -349,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;
}
@@ -357,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;
}
@@ -367,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)) {

View File

@@ -40,6 +40,8 @@ class MainWindow : public QMainWindow {
void setupBrightness();
void setupOverallBrightness();
void setupSensorsTab();
void setupTrayIcon();
void setupCallbackTimer();
@@ -73,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;
};

View File

@@ -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