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 <FreeRTOS.h>
#include <task.h>
#include <queue.h>
#include <board_utils/led.h>
#include <limits>
void Led_Thread(void *argument)
{
(void) argument;
uint32_t speed = 1;
uint32_t newSpeed = 0;
int ledCycleCount = 0;
bool ledOn = false;
HardwareEvent ledEvent;
while (true) {
const TickType_t ticks = speed > 0 ? (350 / (portTICK_PERIOD_MS * speed)) : portMAX_DELAY;
if (xTaskNotifyWait(0, std::numeric_limits<uint32_t>::max(), &newSpeed, ticks) == pdTRUE) {
speed = newSpeed;
}
BoardUtils::toggleLED();
if (ledOn) {
ledCycleCount++;
ledCycleCount = ledCycleCount < 0 ? 0 : ledCycleCount;
}
ledOn = !ledOn;
ledEvent.id = HardwareEventId::LedCycleCount;
ledEvent.data = ledCycleCount;
postEventsToUI(ledEvent);
taskYIELD();
}
}