C

Qt Quick Ultralite multitask Example

// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial

#include "fan_thread.h"
#include "qul_thread.h"

#include "hardwarecontrol.h"

#include "platforminterface/log.h"

static struct k_msgq fanControlQueue;

void initFanControlQueue()
{
    static char fanControlBuffer[10 * sizeof(int)];
    k_msgq_init(&fanControlQueue, fanControlBuffer, sizeof(int), 10);
}

struct k_msgq *getFanControlQueue()
{
    return &fanControlQueue;
}

void FanControl_Thread(void *arg1, void *arg2, void *arg3)
{
    (void) arg1;
    (void) arg2;
    (void) arg3;

    int newSpeed;
    HardwareEvent fanEvent;

    while (true) {
        if (k_msgq_get(&fanControlQueue, &newSpeed, K_FOREVER) == 0) {
            int rotationPeriod = newSpeed == 0 ? 0 : 5000 / (newSpeed * 3);
            fanEvent.id = HardwareEventId::FanRotationPeriod;
            fanEvent.data = rotationPeriod;
            postEventsToUI(fanEvent);
        }
    }
}