1
0
Fork 0

updates rgblight implementation, makes non-timer stuff compatible with audio

This commit is contained in:
Jack Humbert 2016-07-07 11:33:32 -04:00
parent ad43d450ca
commit 57e08eb8ba
17 changed files with 160 additions and 74 deletions

View file

@ -19,12 +19,16 @@
// Setleds for standard RGB
void inline ws2812_setleds(struct cRGB *ledarray, uint16_t leds)
{
ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin));
// ws2812_setleds_pin(ledarray,leds, _BV(ws2812_pin));
ws2812_setleds_pin(ledarray,leds, _BV(RGB_DI_PIN & 0xF));
}
void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pinmask)
{
ws2812_DDRREG |= pinmask; // Enable DDR
// ws2812_DDRREG |= pinmask; // Enable DDR
// new universal format (DDR)
_SFR_IO8((RGB_DI_PIN >> 4) + 1) |= pinmask;
ws2812_sendarray_mask((uint8_t*)ledarray,leds+leds+leds,pinmask);
_delay_us(50);
}
@ -32,14 +36,17 @@ void inline ws2812_setleds_pin(struct cRGB *ledarray, uint16_t leds, uint8_t pin
// Setleds for SK6812RGBW
void inline ws2812_setleds_rgbw(struct cRGBW *ledarray, uint16_t leds)
{
ws2812_DDRREG |= _BV(ws2812_pin); // Enable DDR
ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(ws2812_pin));
// ws2812_DDRREG |= _BV(ws2812_pin); // Enable DDR
// new universal format (DDR)
_SFR_IO8((RGB_DI_PIN >> 4) + 1) |= _BV(RGB_DI_PIN & 0xF);
ws2812_sendarray_mask((uint8_t*)ledarray,leds<<2,_BV(RGB_DI_PIN & 0xF));
_delay_us(80);
}
void ws2812_sendarray(uint8_t *data,uint16_t datlen)
{
ws2812_sendarray_mask(data,datlen,_BV(ws2812_pin));
ws2812_sendarray_mask(data,datlen,_BV(RGB_DI_PIN & 0xF));
}
/*
@ -108,8 +115,10 @@ void inline ws2812_sendarray_mask(uint8_t *data,uint16_t datlen,uint8_t maskhi)
uint8_t curbyte,ctr,masklo;
uint8_t sreg_prev;
masklo =~maskhi&ws2812_PORTREG;
maskhi |= ws2812_PORTREG;
// masklo =~maskhi&ws2812_PORTREG;
// maskhi |= ws2812_PORTREG;
masklo =~maskhi&_SFR_IO8((RGB_DI_PIN >> 4) + 2);
maskhi |= _SFR_IO8((RGB_DI_PIN >> 4) + 2);
sreg_prev=SREG;
cli();
@ -173,7 +182,7 @@ w_nop16
" dec %0 \n\t" // '1' [+2] '0' [+2]
" brne loop%=\n\t" // '1' [+3] '0' [+4]
: "=&d" (ctr)
: "r" (curbyte), "I" (_SFR_IO_ADDR(ws2812_PORTREG)), "r" (maskhi), "r" (masklo)
: "r" (curbyte), "I" (_SFR_IO_ADDR(_SFR_IO8((RGB_DI_PIN >> 4) + 2))), "r" (maskhi), "r" (masklo)
);
}

View file

@ -146,7 +146,9 @@ void rgblight_init(void) {
}
eeconfig_debug_rgblight(); // display current eeprom values
rgblight_timer_init(); // setup the timer
#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
rgblight_timer_init(); // setup the timer
#endif
if (rgblight_config.enable) {
rgblight_mode(rgblight_config.mode);
@ -192,14 +194,19 @@ void rgblight_mode(uint8_t mode) {
eeconfig_update_rgblight(rgblight_config.raw);
xprintf("rgblight mode: %u\n", rgblight_config.mode);
if (rgblight_config.mode == 1) {
rgblight_timer_disable();
#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
rgblight_timer_disable();
#endif
} else if (rgblight_config.mode >=2 && rgblight_config.mode <=23) {
// MODE 2-5, breathing
// MODE 6-8, rainbow mood
// MODE 9-14, rainbow swirl
// MODE 15-20, snake
// MODE 21-23, knight
rgblight_timer_enable();
#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
rgblight_timer_enable();
#endif
}
rgblight_sethsv(rgblight_config.hue, rgblight_config.sat, rgblight_config.val);
}
@ -211,7 +218,10 @@ void rgblight_toggle(void) {
if (rgblight_config.enable) {
rgblight_mode(rgblight_config.mode);
} else {
rgblight_timer_disable();
#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
rgblight_timer_disable();
#endif
_delay_ms(50);
rgblight_set();
}
@ -328,6 +338,9 @@ void rgblight_set(void) {
}
}
#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
// Animation timer -- AVR Timer3
void rgblight_timer_init(void) {
static uint8_t rgblight_timer_is_init = 0;
@ -503,3 +516,5 @@ void rgblight_effect_knight(uint8_t interval) {
}
}
#endif

View file

@ -1,8 +1,11 @@
#ifndef RGBLIGHT_H
#define RGBLIGHT_H
#ifndef RGBLIGHT_MODES
#define RGBLIGHT_MODES 23
#if !defined(AUDIO_ENABLE) && defined(RGBLIGHT_TIMER)
#define RGBLIGHT_MODES 23
#else
#define RGBLIGHT_MODES 1
#endif
#ifndef RGBLIGHT_EFFECT_SNAKE_LENGTH