diff --git a/common.mk b/common.mk index bef00a3c..09561cba 100644 --- a/common.mk +++ b/common.mk @@ -54,6 +54,11 @@ ifdef SLEEP_LED_ENABLE OPT_DEFS += -DNO_SUSPEND_POWER_DOWN endif +ifdef BREATHING_LED_ENABLE + SRC += $(COMMON_DIR)/breathing_led.c + OPT_DEFS += -DBREATHING_LED_ENABLE +endif + ifdef BACKLIGHT_ENABLE SRC += $(COMMON_DIR)/backlight.c OPT_DEFS += -DBACKLIGHT_ENABLE diff --git a/common/breathing_led.c b/common/breathing_led.c new file mode 100644 index 00000000..4e4822f8 --- /dev/null +++ b/common/breathing_led.c @@ -0,0 +1,73 @@ +#include +#include +#include "led.h" +#include "breathing_led.h" +#include "debug.h" + +#define BREATHING_LED_TIMER_TOP F_CPU/256 + +static uint8_t breathing_led_duration = 0; + +void breathing_led_init(void) +{ + /* Timer3 setup */ + /* CTC mode */ + TCCR3B |= (1<>8)&0xff; + OCR3AL = BREATHING_LED_TIMER_TOP&0xff; + SREG = sreg; +} + +void breathing_led_enable(void) +{ + /* Enable Compare Match Interrupt */ + TIMSK3 |= (1< breathing_led_duration) { + step = 0; + breathing_led_set_raw(pgm_read_byte(&breathing_table[index])); + index++; + } +} diff --git a/common/breathing_led.h b/common/breathing_led.h new file mode 100644 index 00000000..b3a9e775 --- /dev/null +++ b/common/breathing_led.h @@ -0,0 +1,25 @@ +#ifndef BREATHING_LED_H +#define BREATHING_LED_H + + +#ifdef BREATHING_LED_ENABLE + +void breathing_led_init(void); +void breathing_led_enable(void); +void breathing_led_disable(void); +void breathing_led_toggle(void); +void breathing_led_set_duration(uint8_t dur); +void breathing_led_set_raw(uint8_t raw); + +#else + +#define breathing_led_init() +#define breathing_led_enable() +#define breathing_led_disable() +#define breathing_led_toggle() +#define breathing_led_set_duration() +#define breathing_led_set_raw() + +#endif + +#endif diff --git a/common/keyboard.c b/common/keyboard.c index 933eb780..29155cfe 100644 --- a/common/keyboard.c +++ b/common/keyboard.c @@ -81,6 +81,10 @@ void keyboard_init(void) backlight_init(); #endif +#ifdef BREATHING_LED_ENABLE + breathing_led_init(); +#endif + #ifdef KEYMAP_EX_ENABLE keymap_ex_init(); #endif