PHF000-Firmware/drivers/led/led.c

47 lines
1.5 KiB
C

#include "led.h"
#include <zephyr/sys/printk.h>
/* Device tree bindings */
#define LED0_NODE DT_ALIAS(led0)
#define LED1_NODE DT_ALIAS(led1)
static const struct gpio_dt_spec led0 = GPIO_DT_SPEC_GET(LED0_NODE, gpios);
static const struct gpio_dt_spec led1 = GPIO_DT_SPEC_GET(LED1_NODE, gpios);
static struct k_timer led0_timer;
static struct k_timer led1_timer;
static void led0_timer_handler(struct k_timer *dummy) { gpio_pin_toggle_dt(&led0); }
static void led1_timer_handler(struct k_timer *dummy) { gpio_pin_toggle_dt(&led1); }
void led_init(void) {
if (!device_is_ready(led0.port) || !device_is_ready(led1.port)) {
printk("LED devices not ready\n");
return;
}
gpio_pin_configure_dt(&led0, GPIO_OUTPUT_INACTIVE);
gpio_pin_configure_dt(&led1, GPIO_OUTPUT_INACTIVE);
k_timer_init(&led0_timer, led0_timer_handler, NULL);
k_timer_init(&led1_timer, led1_timer_handler, NULL);
}
void led_set(int led_id, int state) {
if (led_id == 0) gpio_pin_set_dt(&led0, state);
else if (led_id == 1) gpio_pin_set_dt(&led1, state);
}
void led_toggle(int led_id) {
if (led_id == 0) gpio_pin_toggle_dt(&led0);
else if (led_id == 1) gpio_pin_toggle_dt(&led1);
}
void led_start_blink(int led_id, int interval_ms) {
if (led_id == 0) k_timer_start(&led0_timer, K_MSEC(interval_ms), K_MSEC(interval_ms));
else if (led_id == 1) k_timer_start(&led1_timer, K_MSEC(interval_ms), K_MSEC(interval_ms));
}
void led_stop_blink(int led_id) {
if (led_id == 0) k_timer_stop(&led0_timer);
else if (led_id == 1) k_timer_stop(&led1_timer);
}