forked from qmk/qmk_firmware
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move Ergodox EZ RGB Light code to custom driver (qmk#7309)
* Move Ergodox EZ RGB code to custom driver Also implements full addressing of Ergodox EZ's LED Strip, as written by seebs Co-authored-by: Seebs <[email protected]> * Make Clipping range accessible for custom drivers * Remove RGBW_BB_TWI from driver and docs * Revert changes to clipping range support * Use just rgblight_set instead of full custom driver * Convert to i2c_master commands * Rename rgblight driver and clean up includes
- Loading branch information
Showing
5 changed files
with
120 additions
and
132 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
/* | ||
* light weight WS2812 lib V2.0b | ||
* | ||
* Controls WS2811/WS2812/WS2812B RGB-LEDs | ||
* Author: Tim ([email protected]) | ||
* | ||
* Jan 18th, 2014 v2.0b Initial Version | ||
* Nov 29th, 2015 v2.3 Added SK6812RGBW support | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 2 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
*/ | ||
#ifdef RGBLIGHT_ENABLE | ||
|
||
# include "ws2812.c" | ||
# include "ergodox_ez.h" | ||
|
||
extern rgblight_config_t rgblight_config; | ||
|
||
/* | ||
* Forward declare internal functions | ||
* | ||
* The functions take a byte-array and send to the data output as WS2812 bitstream. | ||
* The length is the number of bytes to send - three per LED. | ||
*/ | ||
|
||
void ws2812_sendarray(uint8_t *array, uint16_t length); | ||
void ws2812_sendarray_mask(uint8_t *array, uint16_t length, uint8_t pinmask); | ||
|
||
|
||
|
||
|
||
void rgblight_set(void) { | ||
if (!rgblight_config.enable) { | ||
for (uint8_t i = 0; i < RGBLED_NUM; i++) { | ||
led[i].r = 0; | ||
led[i].g = 0; | ||
led[i].b = 0; | ||
#ifdef RGBW | ||
led[i].w = 0; | ||
#endif | ||
} | ||
} | ||
|
||
|
||
uint8_t led_num = RGBLED_NUM; | ||
i2c_init(); | ||
i2c_start(0x84, ERGODOX_EZ_I2C_TIMEOUT); | ||
int i = 0; | ||
# if defined(ERGODOX_LED_30) | ||
// prevent right-half code from trying to bitbang all 30 | ||
// so with 30 LEDs, we count from 29 to 15 here, and the | ||
// other half does 0 to 14. | ||
led_num = RGBLED_NUM / 2; | ||
for (i = led_num + led_num - 1; i >= led_num; --i) | ||
# elif defined(ERGODOX_LED_15_MIRROR) | ||
for (i = 0; i < led_num; ++i) | ||
# else // ERGDOX_LED_15 non-mirrored | ||
for (i = led_num - 1; i >= 0; --i) | ||
# endif | ||
{ | ||
uint8_t *data = (uint8_t *)(led + i); | ||
i2c_write(*data++, ERGODOX_EZ_I2C_TIMEOUT); | ||
i2c_write(*data++, ERGODOX_EZ_I2C_TIMEOUT); | ||
i2c_write(*data++, ERGODOX_EZ_I2C_TIMEOUT); | ||
#ifdef RGBW | ||
i2c_write(*data++, ERGODOX_EZ_I2C_TIMEOUT); | ||
#endif | ||
} | ||
i2c_stop(); | ||
|
||
ws2812_setleds(led, RGBLED_NUM); | ||
} | ||
|
||
|
||
#endif // RGBLIGHT_ENABLE |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
#pragma once | ||
|
||
#if !defined(ERGODOX_LED_15) && !defined(ERGODOX_LED_30) | ||
// if no value is defined, assume previous behavior | ||
// # define ERGODOX_LED_15 | ||
// # define ERGODOX_LED_30 | ||
# define ERGODOX_LED_15_MIRROR | ||
#endif | ||
|
||
#if (defined(ERGODOX_LED_30) + defined(ERGODOX_LED_15) + defined(ERGODOX_LED_15_MIRROR)) != 1 | ||
# error "You must only define one of the ERGODOX_LED options." | ||
#endif | ||
|
||
#ifdef ERGODOX_LED_30 | ||
// If using 30 LEDs, then define that many | ||
# define RGBLED_NUM 30 // Number of LEDs | ||
#else | ||
// If not, then only define 15 | ||
# define RGBLED_NUM 15 // Number of LEDs | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters