Compare commits
12
Commits
v1.0
...
962dc6ab95
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
962dc6ab95 | ||
|
|
d88dc95a44 | ||
|
|
e43629d0c0 | ||
|
|
1e3596a230 | ||
|
|
4bb32f0bd0 | ||
|
|
eb18ab9f1e | ||
|
|
2253a25011 | ||
|
|
d1d2d4ae0a | ||
|
|
19d73640c7 | ||
|
|
927c318f54 | ||
|
|
ab8b1bfbbe | ||
|
|
d3d80a2062 |
No files matched your search
@@ -5,8 +5,8 @@
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#include <QCloseEvent>
|
||||
#include <QGroupBox>
|
||||
#include <QSlider>
|
||||
#include <QtDebug>
|
||||
#include <QtGlobal>
|
||||
|
||||
@@ -20,10 +20,10 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
|
||||
qDebug(ltr("Creating main window"));
|
||||
|
||||
m_ui.setupUi(this);
|
||||
auto slider = m_ui.centralWidget->findChild<QGroupBox*>("groupBox")->findChild<QSlider*>("horizontalSlider");
|
||||
m_manualBrightnessSlider = m_ui.centralWidget->findChild<QGroupBox*>("groupBox")->findChild<QSlider*>("horizontalSlider");
|
||||
|
||||
if(slider) {
|
||||
connect(slider, &QSlider::valueChanged, [this](int value) {
|
||||
if(m_manualBrightnessSlider) {
|
||||
connect(m_manualBrightnessSlider, &QSlider::valueChanged, [this](int value) {
|
||||
const auto mappedBrightness = utils::map(value, 0, 100, 0.f, 1.f);
|
||||
const auto newBrightness = std::clamp(mappedBrightness, 0.f, 1.f);
|
||||
qDebug(ltr("Overriding brightness with %1").arg(newBrightness));
|
||||
@@ -52,7 +52,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
|
||||
m_visibility = !m_visibility;
|
||||
});
|
||||
m_trayIconMenu->addSeparator();
|
||||
m_trayIconMenu->addAction(tr("Quit"), this, &QWidget::close);
|
||||
m_trayIconMenu->addAction(tr("Quit"), this, &QCoreApplication::quit);
|
||||
|
||||
qDebug(ltr("Tray icon context menu initialized"));
|
||||
|
||||
@@ -60,13 +60,19 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
|
||||
m_trayIcon->setIcon(*m_errorIcon);
|
||||
m_trayIcon->setContextMenu(m_trayIconMenu);
|
||||
m_trayIcon->show();
|
||||
m_trayIcon->setToolTip(tr("AdaptiveBrightness"));
|
||||
connect(m_trayIcon, &QSystemTrayIcon::activated, this, &MainWindow::trayIconClicked);
|
||||
|
||||
qDebug(ltr("Tray icon initialized"));
|
||||
}
|
||||
|
||||
m_timer = new QTimer(this);
|
||||
connect(m_timer, &QTimer::timeout, this, &MainWindow::updateState);
|
||||
m_timer->start(1000);
|
||||
m_timerThread = new QThread(this);
|
||||
m_timer = new QTimer(nullptr);
|
||||
m_timer->setInterval(1000);
|
||||
m_timer->moveToThread(m_timerThread);
|
||||
m_timerThread->connect(m_timer, &QTimer::timeout, this, &MainWindow::updateState, Qt::DirectConnection);
|
||||
m_timer->connect(m_timerThread, SIGNAL(started()), SLOT(start()));
|
||||
m_timerThread->start();
|
||||
|
||||
qDebug(ltr("Tray icon update timer started"));
|
||||
|
||||
@@ -77,6 +83,17 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
|
||||
MainWindow::~MainWindow()
|
||||
{
|
||||
qDebug(ltr("Destroying main window"));
|
||||
|
||||
m_timerThread->quit();
|
||||
if(!m_timerThread->wait()) {
|
||||
qCritical(ltr("Timer thread did not terminate cleanly"));
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::closeEvent(QCloseEvent* event)
|
||||
{
|
||||
m_showHideAction->activate(QAction::Trigger);
|
||||
event->ignore();
|
||||
}
|
||||
|
||||
void MainWindow::loadIcons()
|
||||
@@ -179,4 +196,19 @@ void MainWindow::updateState()
|
||||
else if(m_trayIcon) {
|
||||
m_trayIcon->setIcon(*m_errorIcon);
|
||||
}
|
||||
|
||||
if(m_trayIcon) {
|
||||
m_trayIcon->setToolTip(tr("AdaptiveBrightness - %1%").arg(m_brightness * 100, 0, 'f', 0));
|
||||
}
|
||||
|
||||
if(m_manualBrightnessSlider) {
|
||||
m_manualBrightnessSlider->setValue(utils::map(m_brightness, 0.f, 1.f, 0, 100));
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::trayIconClicked(QSystemTrayIcon::ActivationReason reason)
|
||||
{
|
||||
if(reason == QSystemTrayIcon::ActivationReason::Trigger) {
|
||||
m_showHideAction->trigger();
|
||||
}
|
||||
}
|
||||
@@ -8,7 +8,9 @@
|
||||
#include <QIcon>
|
||||
#include <QMainWindow>
|
||||
#include <QMenu>
|
||||
#include <QSlider>
|
||||
#include <QSystemTrayIcon>
|
||||
#include <QThread>
|
||||
#include <QTimer>
|
||||
|
||||
#include "monitor.hpp"
|
||||
@@ -24,10 +26,14 @@ class MainWindow : public QMainWindow {
|
||||
~MainWindow();
|
||||
|
||||
private:
|
||||
void closeEvent(QCloseEvent* event) override;
|
||||
|
||||
void loadIcons();
|
||||
|
||||
void updateState();
|
||||
|
||||
void trayIconClicked(QSystemTrayIcon::ActivationReason reason);
|
||||
|
||||
Ui::AdaptiveBrightnessClass m_ui;
|
||||
|
||||
std::array<std::unique_ptr<QIcon>, 9> m_noSensorStateIcons;
|
||||
@@ -39,8 +45,11 @@ class MainWindow : public QMainWindow {
|
||||
QMenu* m_trayIconMenu = nullptr;
|
||||
QSystemTrayIcon* m_trayIcon = nullptr;
|
||||
|
||||
QThread* m_timerThread = nullptr;
|
||||
QTimer* m_timer = nullptr;
|
||||
|
||||
QSlider* m_manualBrightnessSlider = nullptr;
|
||||
|
||||
float m_brightness = 0.5f;
|
||||
|
||||
std::vector<Sensor> m_sensors;
|
||||
|
||||
@@ -19,6 +19,8 @@ extern BOOL enumMonitorsCallback(HMONITOR, HDC, LPRECT, LPARAM);
|
||||
class Monitor {
|
||||
public:
|
||||
Monitor() = delete;
|
||||
Monitor(const Monitor&) = delete;
|
||||
Monitor(Monitor&& other) noexcept;
|
||||
~Monitor();
|
||||
|
||||
bool setBrightness(float percentage);
|
||||
@@ -36,8 +38,8 @@ class Monitor {
|
||||
|
||||
friend BOOL detail::enumMonitorsCallback(HMONITOR, HDC, LPRECT, LPARAM);
|
||||
|
||||
const HMONITOR m_hMonitor;
|
||||
const PhysicalMonitor m_physicalMonitor;
|
||||
HMONITOR m_hMonitor;
|
||||
PhysicalMonitor m_physicalMonitor;
|
||||
|
||||
std::optional<std::pair<DWORD, DWORD>> m_brightnessRange;
|
||||
bool m_errorOccurred = false;
|
||||
|
||||
@@ -28,14 +28,14 @@ static BOOL enumMonitorsCallback(HMONITOR hMonitor, [[maybe_unused]] HDC hDC, [[
|
||||
}
|
||||
|
||||
for(const auto& physicalMonitor: physicalMonitors) {
|
||||
const auto monitor = Monitor(hMonitor, physicalMonitor);
|
||||
auto monitor = Monitor(hMonitor, physicalMonitor);
|
||||
|
||||
if(monitor.hasBrightnessCapability()) {
|
||||
qInfo(ltr("Found brightness capable monitor '%1' with handle '0x%2' and physical handle '0x%3'")
|
||||
.arg(monitor.m_physicalMonitor.name)
|
||||
.arg(reinterpret_cast<qulonglong>(monitor.m_hMonitor), 0, 16)
|
||||
.arg(reinterpret_cast<qulonglong>(monitor.m_physicalMonitor.handle), 0, 16));
|
||||
monitors.push_back(monitor);
|
||||
monitors.push_back(std::move(monitor));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -15,14 +15,15 @@
|
||||
#include "log_tr.hpp"
|
||||
#include "utils.hpp"
|
||||
|
||||
Monitor::Monitor(HMONITOR hMonitor, PHYSICAL_MONITOR physicalMonitor)
|
||||
: m_hMonitor(hMonitor)
|
||||
, m_physicalMonitor(physicalMonitor.hPhysicalMonitor, physicalMonitor.szPhysicalMonitorDescription)
|
||||
Monitor::Monitor(Monitor&& other) noexcept
|
||||
: m_hMonitor(other.m_hMonitor)
|
||||
, m_physicalMonitor(other.m_physicalMonitor)
|
||||
, m_brightnessRange(other.m_brightnessRange)
|
||||
, m_errorOccurred(other.m_errorOccurred)
|
||||
{
|
||||
qDebug(ltr("Creating monitor '%1' with handle '0x%2' and physical handle '0x%3'")
|
||||
.arg(m_physicalMonitor.name)
|
||||
.arg(reinterpret_cast<qulonglong>(m_hMonitor), 0, 16)
|
||||
.arg(reinterpret_cast<qulonglong>(m_physicalMonitor.handle), 0, 16));
|
||||
other.m_hMonitor = 0;
|
||||
other.m_physicalMonitor.name.clear();
|
||||
other.m_physicalMonitor.handle = 0;
|
||||
}
|
||||
|
||||
Monitor::~Monitor()
|
||||
@@ -31,6 +32,14 @@ Monitor::~Monitor()
|
||||
.arg(m_physicalMonitor.name)
|
||||
.arg(reinterpret_cast<qulonglong>(m_hMonitor), 0, 16)
|
||||
.arg(reinterpret_cast<qulonglong>(m_physicalMonitor.handle), 0, 16));
|
||||
|
||||
if(m_physicalMonitor.handle && !DestroyPhysicalMonitor(m_physicalMonitor.handle)) {
|
||||
qCritical(ltr("Error occurred while destroying monitor '%1' with handle '0x%2' and physical handle '0x%3', error: %4")
|
||||
.arg(m_physicalMonitor.name)
|
||||
.arg(reinterpret_cast<qulonglong>(m_hMonitor), 0, 16)
|
||||
.arg(reinterpret_cast<qulonglong>(m_physicalMonitor.handle), 0, 16)
|
||||
.arg(getLastErrorString()));
|
||||
}
|
||||
}
|
||||
|
||||
bool Monitor::setBrightness(float percentage)
|
||||
@@ -107,6 +116,16 @@ Monitor::operator bool() const
|
||||
return !m_errorOccurred;
|
||||
}
|
||||
|
||||
Monitor::Monitor(HMONITOR hMonitor, PHYSICAL_MONITOR physicalMonitor)
|
||||
: m_hMonitor(hMonitor)
|
||||
, m_physicalMonitor(physicalMonitor.hPhysicalMonitor, physicalMonitor.szPhysicalMonitorDescription)
|
||||
{
|
||||
qDebug(ltr("Creating monitor '%1' with handle '0x%2' and physical handle '0x%3'")
|
||||
.arg(m_physicalMonitor.name)
|
||||
.arg(reinterpret_cast<qulonglong>(m_hMonitor), 0, 16)
|
||||
.arg(reinterpret_cast<qulonglong>(m_physicalMonitor.handle), 0, 16));
|
||||
}
|
||||
|
||||
bool Monitor::hasBrightnessCapability() const
|
||||
{
|
||||
qDebug(ltr("Getting capabilities of monitor '%1' with handle '0x%2' and physical handle '0x%3'")
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -83,7 +83,7 @@ class VirtualComPort {
|
||||
return hcdc->TxState != 0;
|
||||
};
|
||||
|
||||
#ifndef NDEBUG
|
||||
#ifdef INFO_LEDS
|
||||
HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, GPIO_PIN_RESET);
|
||||
#endif
|
||||
@@ -98,7 +98,7 @@ class VirtualComPort {
|
||||
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, const_cast<uint8_t*>(m_usbAsyncTxBuffer.data), m_usbAsyncTxBuffer.size);
|
||||
USBD_CDC_TransmitPacket(&hUsbDeviceFS);
|
||||
|
||||
#ifndef NDEBUG
|
||||
#ifdef INFO_LEDS
|
||||
HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, GPIO_PIN_SET);
|
||||
#endif
|
||||
}
|
||||
@@ -116,7 +116,7 @@ class VirtualComPort {
|
||||
|
||||
static int8_t CdcInit()
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
#ifdef INFO_LEDS
|
||||
HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, GPIO_PIN_SET);
|
||||
@@ -129,7 +129,7 @@ class VirtualComPort {
|
||||
|
||||
static int8_t CdcDeInit()
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
#ifdef INFO_LEDS
|
||||
HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_RESET);
|
||||
HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(BLUE_LED_GPIO_Port, BLUE_LED_Pin, GPIO_PIN_SET);
|
||||
@@ -196,7 +196,7 @@ class VirtualComPort {
|
||||
|
||||
static int8_t CdcReceive([[maybe_unused]] uint8_t* buf, uint32_t* length)
|
||||
{
|
||||
#ifndef NDEBUG
|
||||
#ifdef INFO_LEDS
|
||||
HAL_GPIO_WritePin(GREEN_LED_GPIO_Port, GREEN_LED_Pin, GPIO_PIN_SET);
|
||||
HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_RESET);
|
||||
#endif
|
||||
@@ -208,7 +208,7 @@ class VirtualComPort {
|
||||
rxHandler(m_usbAsyncRxBuffer.data[i]);
|
||||
}
|
||||
|
||||
#ifndef NDEBUG
|
||||
#ifdef INFO_LEDS
|
||||
HAL_GPIO_WritePin(RED_LED_GPIO_Port, RED_LED_Pin, GPIO_PIN_SET);
|
||||
#endif
|
||||
return USBD_OK;
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -21,9 +21,9 @@ TARGET = AdaptiveBrightnessFirmware
|
||||
# building variables
|
||||
######################################
|
||||
# debug build?
|
||||
DEBUG = 1
|
||||
DEBUG = 0
|
||||
# optimization
|
||||
OPT = -Og
|
||||
OPT = -Os
|
||||
|
||||
|
||||
#######################################
|
||||
@@ -126,12 +126,14 @@ AS_DEFS =
|
||||
# C defines
|
||||
C_DEFS = \
|
||||
-DUSE_HAL_DRIVER \
|
||||
-DSTM32F042x6
|
||||
-DSTM32F042x6 \
|
||||
-DINFO_LEDS
|
||||
|
||||
# C++ defines
|
||||
CXX_DEFS = \
|
||||
-DUSE_HAL_DRIVER \
|
||||
-DSTM32F042x6
|
||||
-DSTM32F042x6 \
|
||||
-DINFO_LEDS
|
||||
|
||||
|
||||
# AS includes
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loaded 100 of 119 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user