updates rgblight implementation, makes non-timer stuff compatible with audio
This commit is contained in:
		
							parent
							
								
									ad43d450ca
								
							
						
					
					
						commit
						57e08eb8ba
					
				
					 17 changed files with 160 additions and 74 deletions
				
			
		| 
						 | 
				
			
			@ -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)
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue