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;
};