C
Qt Quick Ultralite multitask Example
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial
#include "led_thread.h"
#include "qul_thread.h"
#include "led.h"
static struct k_msgq ledControlQueue;
void initLedControlQueue()
{
static int ledControlQueueData;
k_msgq_init(&ledControlQueue, (char *) &ledControlQueueData, sizeof(int), 1);
}
struct k_msgq *getLedControlQueue()
{
return &ledControlQueue;
}
void Led_Thread(void *arg1, void *arg2, void *arg3)
{
(void) arg1;
(void) arg2;
(void) arg3;
uint32_t speed = 1;
uint32_t newSpeed = 0;
int ledCycleCount = 0;
bool ledOn = false;
HardwareEvent ledEvent;
while (true) {
const k_timeout_t ticks = speed > 0 ? K_MSEC(350 / speed) : K_FOREVER;
if (k_msgq_get(&ledControlQueue, &newSpeed, ticks) == 0) {
speed = newSpeed;
}
BoardUtils::toggleLED();
if (ledOn) {
ledCycleCount++;
ledCycleCount = ledCycleCount < 0 ? 0 : ledCycleCount;
}
ledOn = !ledOn;
ledEvent.id = HardwareEventId::LedCycleCount;
ledEvent.data = ledCycleCount;
postEventsToUI(ledEvent);
k_yield();
}
}