| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 | #include "common.h"#include "led.h"#include <driver/ledc.h>/* * Note: the Arduino HAL doesn't handle low frequencies, because it * seems to insist on using a high frequency clock source... */#define LED_PIN_BASE 2void led_set(int led, enum led_mode mode){    static const struct {	uint32_t freq;	uint32_t duty;    } led_modes[] = {	{ 1, 0 },		/* Off */	{ 1, 1 << 12 },		/* On */	{ 2, 1 << 11 },		/* Medium blink (2 Hz) */	{ 1, 1 << 11 },		/* Slow blink (1 Hz) */	{ 4, 1 << 11 }		/* Fast blink (4 Hz) */    };    ledc_channel_config_t channel_config = {	.speed_mode            = LEDC_LOW_SPEED_MODE,	.hpoint                = 0,	.flags.output_invert   = 0,	.intr_type             = LEDC_INTR_DISABLE,	.channel               = led,	.timer_sel             = led,	.gpio_num              = led + LED_PIN_BASE,	.duty                  = led_modes[mode].duty    };    ledc_timer_config_t timer_config = {	.speed_mode            = LEDC_LOW_SPEED_MODE,	.duty_resolution       = 12,	.clk_cfg               = LEDC_USE_REF_TICK,	.timer_num             = led,	.freq_hz               = led_modes[mode].freq    };    ledc_timer_config(&timer_config);    ledc_channel_config(&channel_config);}void led_init(void){    for (int led = 0; led < 3; led++)	led_set(led, LED_OFF);}
 |