C

Qt Quick Ultralite multitask Example

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

#include <bsp/esp-bsp.h>
#include <driver/ledc.h>

namespace BoardUtils {
void initLED()
{
    gpio_num_t gpio_r = (gpio_num_t) BSP_PMOD1_IO3;
    gpio_num_t gpio_g = (gpio_num_t) BSP_PMOD1_IO4;
    gpio_num_t gpio_b = (gpio_num_t) BSP_PMOD1_IO8;

    ledc_timer_config_t ledc_timer = {.speed_mode = LEDC_LOW_SPEED_MODE,
                                      .duty_resolution = LEDC_TIMER_8_BIT,
                                      .timer_num = LEDC_TIMER_0,
                                      .freq_hz = 8192,
                                      .clk_cfg = LEDC_AUTO_CLK};
    ESP_ERROR_CHECK(ledc_timer_config(&ledc_timer));

    ledc_channel_config_t ledc_channel_red = {.gpio_num = gpio_r,
                                              .speed_mode = LEDC_LOW_SPEED_MODE,
                                              .channel = LEDC_CHANNEL_0,
                                              .intr_type = LEDC_INTR_DISABLE,
                                              .timer_sel = LEDC_TIMER_0,
                                              .duty = 0,
                                              .hpoint = 0};
    ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel_red));

    ledc_channel_config_t ledc_channel_green = {.gpio_num = gpio_g,
                                                .speed_mode = LEDC_LOW_SPEED_MODE,
                                                .channel = LEDC_CHANNEL_3,
                                                .intr_type = LEDC_INTR_DISABLE,
                                                .timer_sel = LEDC_TIMER_0,
                                                .duty = 0,
                                                .hpoint = 0};
    ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel_green));

    ledc_channel_config_t ledc_channel_blue = {.gpio_num = gpio_b,
                                               .speed_mode = LEDC_LOW_SPEED_MODE,
                                               .channel = LEDC_CHANNEL_2,
                                               .intr_type = LEDC_INTR_DISABLE,
                                               .timer_sel = LEDC_TIMER_0,
                                               .duty = 0,
                                               .hpoint = 0};
    ESP_ERROR_CHECK(ledc_channel_config(&ledc_channel_blue));
}

static bool ledOn = false;

void toggleLED()
{
    uint8_t r = ledOn ? 0 : 180;
    uint8_t g = ledOn ? 0 : 180;
    uint8_t b = ledOn ? 0 : 180;

    ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0, r);
    ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_3, g);
    ledc_set_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_2, b);
    ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_0);
    ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_3);
    ledc_update_duty(LEDC_LOW_SPEED_MODE, LEDC_CHANNEL_2);

    ledOn = !ledOn;
}
} // namespace BoardUtils