diff options
author | Drashna Jaelre <drashna@live.com> | 2019-11-09 07:51:39 -0800 |
---|---|---|
committer | Joel Challis <git@zvecr.com> | 2019-11-09 15:51:39 +0000 |
commit | 60e4921378d879eed110f801328e9642f35fa1e9 (patch) | |
tree | 9bb36017ba58e7aedbcfee9db0bba1a3bc466359 /drivers/avr/ws2812.c | |
parent | 78205e64a7053746b1491c0d39dbb300a55f3248 (diff) | |
download | qmk_firmware-60e4921378d879eed110f801328e9642f35fa1e9.tar.gz qmk_firmware-60e4921378d879eed110f801328e9642f35fa1e9.zip |
Unify RGB and RGBW commands (#7297)
* Fix unicode in comments
Co-Authored-By: fauxpark <fauxpark@gmail.com>
* Remove separate RGBW implementation for a unified function
* Set White to 0 in RGBW LEDs
This is just to get this working, later, proper brightness can be handled elsewhere.
* Use us instead of nanoseconds(?) since it renders correctly on web
* Remove RGBW function from arm/ws2812.h
* Remove RGBW function from arm/ws2812.c
* Formatting changes
* Add doc info
Diffstat (limited to 'drivers/avr/ws2812.c')
-rw-r--r-- | drivers/avr/ws2812.c | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/drivers/avr/ws2812.c b/drivers/avr/ws2812.c index 5c733c4ab..dc7e8d48a 100644 --- a/drivers/avr/ws2812.c +++ b/drivers/avr/ws2812.c | |||
@@ -36,7 +36,6 @@ | |||
36 | void ws2812_sendarray(uint8_t *array, uint16_t length); | 36 | void ws2812_sendarray(uint8_t *array, uint16_t length); |
37 | void ws2812_sendarray_mask(uint8_t *array, uint16_t length, uint8_t pinmask); | 37 | void ws2812_sendarray_mask(uint8_t *array, uint16_t length, uint8_t pinmask); |
38 | 38 | ||
39 | |||
40 | #ifdef RGBW_BB_TWI | 39 | #ifdef RGBW_BB_TWI |
41 | 40 | ||
42 | // Port for the I2C | 41 | // Port for the I2C |
@@ -146,16 +145,6 @@ void inline ws2812_setleds(LED_TYPE *ledarray, uint16_t leds) { | |||
146 | } | 145 | } |
147 | 146 | ||
148 | void inline ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t leds, uint8_t pinmask) { | 147 | void inline ws2812_setleds_pin(LED_TYPE *ledarray, uint16_t leds, uint8_t pinmask) { |
149 | // ws2812_DDRREG |= pinmask; // Enable DDR | ||
150 | // new universal format (DDR) | ||
151 | _SFR_IO8((RGB_DI_PIN >> 4) + 1) |= pinmask; | ||
152 | |||
153 | ws2812_sendarray_mask((uint8_t *)ledarray, leds + leds + leds, pinmask); | ||
154 | _delay_us(50); | ||
155 | } | ||
156 | |||
157 | // Setleds for SK6812RGBW | ||
158 | void inline ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t leds) { | ||
159 | #ifdef RGBW_BB_TWI | 148 | #ifdef RGBW_BB_TWI |
160 | uint8_t sreg_prev, twcr_prev; | 149 | uint8_t sreg_prev, twcr_prev; |
161 | sreg_prev = SREG; | 150 | sreg_prev = SREG; |
@@ -176,15 +165,18 @@ void inline ws2812_setleds_rgbw(LED_TYPE *ledarray, uint16_t leds) { | |||
176 | SREG = sreg_prev; | 165 | SREG = sreg_prev; |
177 | TWCR = twcr_prev; | 166 | TWCR = twcr_prev; |
178 | #endif | 167 | #endif |
179 | 168 | // ws2812_DDRREG |= pinmask; // Enable DDR | |
180 | // ws2812_DDRREG |= _BV(ws2812_pin); // Enable DDR | ||
181 | // new universal format (DDR) | 169 | // new universal format (DDR) |
182 | _SFR_IO8((RGB_DI_PIN >> 4) + 1) |= _BV(RGB_DI_PIN & 0xF); | 170 | _SFR_IO8((RGB_DI_PIN >> 4) + 1) |= pinmask; |
183 | 171 | ||
184 | ws2812_sendarray_mask((uint8_t *)ledarray, leds << 2, _BV(RGB_DI_PIN & 0xF)); | 172 | ws2812_sendarray_mask((uint8_t *)ledarray, leds * sizeof(LED_TYPE), pinmask); |
185 | 173 | ||
186 | #ifndef RGBW_BB_TWI | 174 | #ifndef RGBW_BB_TWI |
175 | # ifdef RGBW | ||
187 | _delay_us(80); | 176 | _delay_us(80); |
177 | # else | ||
178 | _delay_us(50); | ||
179 | # endif | ||
188 | #endif | 180 | #endif |
189 | } | 181 | } |
190 | 182 | ||