C
Qt Quick Ultralite multitask Example
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
#pragma once
#include <qul/singleton.h>
#include <qul/property.h>
#include <qul/eventqueue.h>
#include <qul/signal.h>
#ifdef DESKTOP
#include <qul/timer.h>
#endif
enum class HardwareEventId { LedCycleCount, FanRotationPeriod };
struct HardwareEvent
{
HardwareEventId id;
int data;
};
class HardwareControl : public Qul::Singleton<HardwareControl>
{
public:
HardwareControl();
Qul::Property<int> fanSpeed;
Qul::Property<int> ledCycleCount;
Qul::Signal<void(int rotationPeriod)> fanRotationPeriodChanged;
void updateSpeed(int newSpeed);
private:
void updateLedSpeed();
void updateFanSpeed();
#ifdef DESKTOP
int speedToLedToggleInterval(int speed) { return speed > 0 ? (350 / speed) : 0; }
void ledToggle();
Qul::Timer ledCycleTimer;
#endif
};
class HardwareControlEventQueue : public Qul::EventQueue<HardwareEvent>
{
void onEvent(const HardwareEvent &event) override;
};