Skip to content

Commit

Permalink
Add LED configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
valletw committed Apr 22, 2024
1 parent 9abe291 commit 9162add
Show file tree
Hide file tree
Showing 6 changed files with 161 additions and 2 deletions.
6 changes: 6 additions & 0 deletions include/board_cfg.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,9 @@
#define BOARD_IO_LED_BT 1
#define BOARD_IO_LED_SOFT 10
#define BOARD_IO_IR_RX 3

#define BOARD_LED_FREQUENCY 120
#define BOARD_LED_DUTY_CYCLE 25
#define BOARD_LED_CHANNEL_WIFI 0
#define BOARD_LED_CHANNEL_BT 1
#define BOARD_LED_CHANNEL_SOFT 2
27 changes: 27 additions & 0 deletions include/led.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/*
* MIT License
* Copyright (c) 2024 William Vallet
*/

typedef enum
{
WIFI_NOT_CONNECTED = 0,
WIFI_CONNECTED
} led_wifi_t;

typedef enum
{
BT_NOT_CONNECTED = 0,
BT_CONNECTED
} led_bt_t;

typedef enum
{
SOFT_OFF = 0,
SOFT_ON
} led_soft_t;

extern void led_init(void);
extern void led_wifi_set(led_wifi_t value);
extern void led_bt_set(led_bt_t value);
extern void led_soft_set(led_soft_t value);
2 changes: 1 addition & 1 deletion src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
idf_component_register(
SRCS
main.c board.c
main.c board.c led.c
)
6 changes: 6 additions & 0 deletions src/board.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

#include "board.h"
#include "board_cfg.h"
#include "led.h"
#include "esp_err.h"
#include "driver/gpio.h"

Expand All @@ -29,4 +30,9 @@ void board_initialise(void)
ESP_ERROR_CHECK(gpio_set_intr_type(BOARD_IO_IR_RX, GPIO_INTR_NEGEDGE));
ESP_ERROR_CHECK(gpio_wakeup_enable(BOARD_IO_IR_RX, GPIO_INTR_NEGEDGE));
ESP_ERROR_CHECK(gpio_intr_enable(BOARD_IO_IR_RX));
// LEDs configuration.
led_init();
led_wifi_set(WIFI_NOT_CONNECTED);
led_bt_set(BT_NOT_CONNECTED);
led_soft_set(SOFT_OFF);
}
117 changes: 117 additions & 0 deletions src/led.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
/*
* MIT License
* Copyright (c) 2024 William Vallet
*/

#include "board_cfg.h"
#include "led.h"
#include "esp_err.h"
#include "driver/ledc.h"
#include <stdint.h>

#define LED_SPEED LEDC_LOW_SPEED_MODE
#define LED_TIMER LEDC_TIMER_0
#define LED_DUTY_RES LEDC_TIMER_8_BIT
#define LED_DUTY_RES_VAL 8u

static inline uint32_t led_duty_format(uint32_t percent)
{
return (((1u << LED_DUTY_RES_VAL) - 1u) * 100) / percent;
}

void led_init(void)
{
ledc_timer_config_t timer_cfg = {
.speed_mode = LED_SPEED,
.duty_resolution = LED_DUTY_RES,
.timer_num = LED_TIMER,
.freq_hz = BOARD_LED_FREQUENCY,
.clk_cfg = LEDC_AUTO_CLK,
.deconfigure = false
};
ledc_channel_config_t wifi_cfg = {
.gpio_num = BOARD_IO_LED_WIFI,
.speed_mode = LED_SPEED,
.channel = BOARD_LED_CHANNEL_WIFI,
.intr_type = LEDC_INTR_DISABLE,
.timer_sel = LED_TIMER,
.duty = 0,
.hpoint = 0
};
ledc_channel_config_t bt_cfg = {
.gpio_num = BOARD_IO_LED_BT,
.speed_mode = LED_SPEED,
.channel = BOARD_LED_CHANNEL_BT,
.intr_type = LEDC_INTR_DISABLE,
.timer_sel = LED_TIMER,
.duty = 0,
.hpoint = 0
};
ledc_channel_config_t soft_cfg = {
.gpio_num = BOARD_IO_LED_SOFT,
.speed_mode = LED_SPEED,
.channel = BOARD_LED_CHANNEL_SOFT,
.intr_type = LEDC_INTR_DISABLE,
.timer_sel = LED_TIMER,
.duty = 0,
.hpoint = 0
};
ESP_ERROR_CHECK(ledc_timer_config(&timer_cfg));
ESP_ERROR_CHECK(ledc_channel_config(&wifi_cfg));
ESP_ERROR_CHECK(ledc_channel_config(&bt_cfg));
ESP_ERROR_CHECK(ledc_channel_config(&soft_cfg));
}

void led_wifi_set(led_wifi_t value)
{
switch (value)
{
case WIFI_NOT_CONNECTED:
ledc_set_duty_and_update(LED_SPEED, BOARD_LED_CHANNEL_WIFI, 0, 0);
break;
case WIFI_CONNECTED:
ledc_set_duty_and_update(
LED_SPEED, BOARD_LED_CHANNEL_WIFI,
led_duty_format(BOARD_LED_DUTY_CYCLE), 0);
break;
default:
// Nothing to do.
break;
}
}

void led_bt_set(led_bt_t value)
{
switch (value)
{
case BT_NOT_CONNECTED:
ledc_set_duty_and_update(LED_SPEED, BOARD_LED_CHANNEL_BT, 0, 0);
break;
case BT_CONNECTED:
ledc_set_duty_and_update(
LED_SPEED, BOARD_LED_CHANNEL_BT,
led_duty_format(BOARD_LED_DUTY_CYCLE), 0);
break;
default:
// Nothing to do.
break;
}
}

void led_soft_set(led_soft_t value)
{
switch (value)
{
case SOFT_OFF:
ledc_set_duty_and_update(LED_SPEED, BOARD_LED_CHANNEL_SOFT, 0, 0);
break;
case SOFT_ON:
ledc_set_duty_and_update(
LED_SPEED, BOARD_LED_CHANNEL_SOFT,
led_duty_format(BOARD_LED_DUTY_CYCLE), 0);
break;
default:
// Nothing to do.
break;
}
}
5 changes: 4 additions & 1 deletion src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
*/

#include "board.h"
#include "led.h"
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
Expand Down Expand Up @@ -39,9 +40,11 @@ void app_main(void)
(chip_info.features & CHIP_FEATURE_BLE) ? " BLE" : "",
(chip_info.features & CHIP_FEATURE_IEEE802154) ? " IEEE-802.15.4" : "");
// Process.
led_soft_t led_soft = SOFT_ON;
while (1)
{
led_soft_set(led_soft);
led_soft = (led_soft == SOFT_ON) ? SOFT_OFF : SOFT_ON;
vTaskDelay(1000 / portTICK_PERIOD_MS);
printf(".");
}
}

0 comments on commit 9162add

Please sign in to comment.