Ryan 1 week ago
committed by GitHub
parent
commit
549d9eff02
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
4 changed files with 67 additions and 26 deletions
  1. +39
    -8
      docs/apa102_driver.md
  2. +17
    -6
      drivers/led/apa102.c
  3. +3
    -12
      drivers/led/apa102.h
  4. +8
    -0
      quantum/rgblight/rgblight_drivers.c

+ 39
- 8
docs/apa102_driver.md View File

@ -26,20 +26,51 @@ Add the following to your `config.h`:
## API :id=api
### `void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds)`
### `void apa102_init(void)` :id=api-apa102-init
Send RGB data to the APA102 LED chain.
Initialize the LED driver. This function should be called first.
#### Arguments :id=api-apa102-setleds-arguments
---
### `void apa102_set_color(uint16_t index, uint8_t red, uint8_t green, uint8_t blue)` :id=api-apa102-set-color
Set the color of a single LED. This function does not immediately update the LEDs; call `apa102_flush()` after you are finished.
#### Arguments :id=api-apa102-set-color-arguments
- `uint16_t index`
The LED index in the APA102 chain.
- `uint8_t red`
The red value to set.
- `uint8_t green`
The green value to set.
- `uint8_t blue`
The blue value to set.
---
### `void apa102_set_color_all(uint8_t red, uint8_t green, uint8_t blue)` :id=api-apa102-set-color-all
Set the color of all LEDs.
#### Arguments :id=api-apa102-set-color-all-arguments
- `uint8_t red`
The red value to set.
- `uint8_t green`
The green value to set.
- `uint8_t blue`
The blue value to set.
---
### `void apa102_flush(void)` :id=api-apa102-flush
- `rgb_led_t *start_led`
A pointer to the LED array.
- `uint16_t num_leds`
The length of the LED array.
Flush the PWM values to the LED chain.
---
### `void apa102_set_brightness(uint8_t brightness)`
### `void apa102_set_brightness(uint8_t brightness)` :id=api-apa102-set-brightness
Set the global brightness.


+ 17
- 6
drivers/led/apa102.c View File

@ -53,7 +53,8 @@
io_wait; \
} while (0)
uint8_t apa102_led_brightness = APA102_DEFAULT_BRIGHTNESS;
rgb_led_t apa102_leds[APA102_LED_COUNT];
uint8_t apa102_led_brightness = APA102_DEFAULT_BRIGHTNESS;
static void apa102_send_byte(uint8_t byte) {
APA102_SEND_BIT(byte, 7);
@ -121,14 +122,24 @@ void apa102_init(void) {
gpio_set_pin_output(APA102_CI_PIN);
}
void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds) {
rgb_led_t *end = start_led + num_leds;
void apa102_set_color(uint16_t index, uint8_t red, uint8_t green, uint8_t blue) {
apa102_leds[index].r = red;
apa102_leds[index].g = green;
apa102_leds[index].b = blue;
}
void apa102_set_color_all(uint8_t red, uint8_t green, uint8_t blue) {
for (uint16_t i = 0; i < APA102_LED_COUNT; i++) {
apa102_set_color(i, red, green, blue);
}
}
void apa102_flush(void) {
apa102_start_frame();
for (rgb_led_t *led = start_led; led < end; led++) {
apa102_send_frame(led->r, led->g, led->b, apa102_led_brightness);
for (uint8_t i = 0; i < APA102_LED_COUNT; i++) {
apa102_send_frame(apa102_leds[i].r, apa102_leds[i].g, apa102_leds[i].b, apa102_led_brightness);
}
apa102_end_frame(num_leds);
apa102_end_frame(APA102_LED_COUNT);
}
void apa102_set_brightness(uint8_t brightness) {


+ 3
- 12
drivers/led/apa102.h View File

@ -32,17 +32,8 @@
#define APA102_MAX_BRIGHTNESS 31
void apa102_init(void);
/* User Interface
*
* Input:
* start_led: An array of GRB data describing the LED colors
* num_leds: The number of LEDs to write
*
* The functions will perform the following actions:
* - Set the data-out pin as output
* - Send out the LED data
*/
void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds);
void apa102_set_color(uint16_t index, uint8_t red, uint8_t green, uint8_t blue);
void apa102_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
void apa102_flush(void);
void apa102_set_brightness(uint8_t brightness);

+ 8
- 0
quantum/rgblight/rgblight_drivers.c View File

@ -14,6 +14,14 @@ const rgblight_driver_t rgblight_driver = {
#elif defined(RGBLIGHT_APA102)
# include "apa102.h"
// Temporary shim
static void apa102_setleds(rgb_led_t *ledarray, uint16_t number_of_leds) {
for (uint16_t i = 0; i < number_of_leds; i++) {
apa102_set_color(i, ledarray[i].r, ledarray[i].g, ledarray[i].b);
}
apa102_flush();
}
const rgblight_driver_t rgblight_driver = {
.init = apa102_init,
.setleds = apa102_setleds,


Loading…
Cancel
Save