apa102: cleanups (#22826)
parent
e5203f86e2
commit
b3f55cb5b2
|
@ -55,55 +55,25 @@
|
||||||
|
|
||||||
uint8_t apa102_led_brightness = APA102_DEFAULT_BRIGHTNESS;
|
uint8_t apa102_led_brightness = APA102_DEFAULT_BRIGHTNESS;
|
||||||
|
|
||||||
void static apa102_start_frame(void);
|
static void apa102_send_byte(uint8_t byte) {
|
||||||
void static apa102_end_frame(uint16_t num_leds);
|
APA102_SEND_BIT(byte, 7);
|
||||||
|
APA102_SEND_BIT(byte, 6);
|
||||||
void static apa102_send_frame(uint8_t red, uint8_t green, uint8_t blue, uint8_t brightness);
|
APA102_SEND_BIT(byte, 5);
|
||||||
void static apa102_send_byte(uint8_t byte);
|
APA102_SEND_BIT(byte, 4);
|
||||||
|
APA102_SEND_BIT(byte, 3);
|
||||||
void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds) {
|
APA102_SEND_BIT(byte, 2);
|
||||||
rgb_led_t *end = start_led + num_leds;
|
APA102_SEND_BIT(byte, 1);
|
||||||
|
APA102_SEND_BIT(byte, 0);
|
||||||
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);
|
|
||||||
}
|
|
||||||
apa102_end_frame(num_leds);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void static apa102_init(void) {
|
static void apa102_start_frame(void) {
|
||||||
setPinOutput(APA102_DI_PIN);
|
|
||||||
setPinOutput(APA102_CI_PIN);
|
|
||||||
|
|
||||||
writePinLow(APA102_DI_PIN);
|
|
||||||
writePinLow(APA102_CI_PIN);
|
|
||||||
}
|
|
||||||
|
|
||||||
void apa102_set_brightness(uint8_t brightness) {
|
|
||||||
if (brightness > APA102_MAX_BRIGHTNESS) {
|
|
||||||
apa102_led_brightness = APA102_MAX_BRIGHTNESS;
|
|
||||||
} else if (brightness < 0) {
|
|
||||||
apa102_led_brightness = 0;
|
|
||||||
} else {
|
|
||||||
apa102_led_brightness = brightness;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void static apa102_send_frame(uint8_t red, uint8_t green, uint8_t blue, uint8_t brightness) {
|
|
||||||
apa102_send_byte(0b11100000 | brightness);
|
|
||||||
apa102_send_byte(blue);
|
|
||||||
apa102_send_byte(green);
|
|
||||||
apa102_send_byte(red);
|
|
||||||
}
|
|
||||||
|
|
||||||
void static apa102_start_frame(void) {
|
|
||||||
apa102_init();
|
apa102_init();
|
||||||
for (uint16_t i = 0; i < 4; i++) {
|
for (uint16_t i = 0; i < 4; i++) {
|
||||||
apa102_send_byte(0);
|
apa102_send_byte(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void static apa102_end_frame(uint16_t num_leds) {
|
static void apa102_end_frame(uint16_t num_leds) {
|
||||||
// This function has been taken from: https://github.com/pololu/apa102-arduino/blob/master/APA102.h
|
// This function has been taken from: https://github.com/pololu/apa102-arduino/blob/master/APA102.h
|
||||||
// and adapted. The code is MIT licensed. I think thats compatible?
|
// and adapted. The code is MIT licensed. I think thats compatible?
|
||||||
//
|
//
|
||||||
|
@ -136,13 +106,37 @@ void static apa102_end_frame(uint16_t num_leds) {
|
||||||
apa102_init();
|
apa102_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
void static apa102_send_byte(uint8_t byte) {
|
static void apa102_send_frame(uint8_t red, uint8_t green, uint8_t blue, uint8_t brightness) {
|
||||||
APA102_SEND_BIT(byte, 7);
|
apa102_send_byte(0b11100000 | brightness);
|
||||||
APA102_SEND_BIT(byte, 6);
|
apa102_send_byte(blue);
|
||||||
APA102_SEND_BIT(byte, 5);
|
apa102_send_byte(green);
|
||||||
APA102_SEND_BIT(byte, 4);
|
apa102_send_byte(red);
|
||||||
APA102_SEND_BIT(byte, 3);
|
}
|
||||||
APA102_SEND_BIT(byte, 2);
|
|
||||||
APA102_SEND_BIT(byte, 1);
|
void apa102_init(void) {
|
||||||
APA102_SEND_BIT(byte, 0);
|
setPinOutput(APA102_DI_PIN);
|
||||||
|
setPinOutput(APA102_CI_PIN);
|
||||||
|
|
||||||
|
writePinLow(APA102_DI_PIN);
|
||||||
|
writePinLow(APA102_CI_PIN);
|
||||||
|
}
|
||||||
|
|
||||||
|
void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds) {
|
||||||
|
rgb_led_t *end = start_led + num_leds;
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
apa102_end_frame(num_leds);
|
||||||
|
}
|
||||||
|
|
||||||
|
void apa102_set_brightness(uint8_t brightness) {
|
||||||
|
if (brightness > APA102_MAX_BRIGHTNESS) {
|
||||||
|
apa102_led_brightness = APA102_MAX_BRIGHTNESS;
|
||||||
|
} else if (brightness < 0) {
|
||||||
|
apa102_led_brightness = 0;
|
||||||
|
} else {
|
||||||
|
apa102_led_brightness = brightness;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
|
|
||||||
#define APA102_MAX_BRIGHTNESS 31
|
#define APA102_MAX_BRIGHTNESS 31
|
||||||
|
|
||||||
extern uint8_t apa102_led_brightness;
|
void apa102_init(void);
|
||||||
|
|
||||||
/* User Interface
|
/* User Interface
|
||||||
*
|
*
|
||||||
|
@ -44,4 +44,5 @@ extern uint8_t apa102_led_brightness;
|
||||||
* - Send out the LED data
|
* - Send out the LED data
|
||||||
*/
|
*/
|
||||||
void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds);
|
void apa102_setleds(rgb_led_t *start_led, uint16_t num_leds);
|
||||||
|
|
||||||
void apa102_set_brightness(uint8_t brightness);
|
void apa102_set_brightness(uint8_t brightness);
|
||||||
|
|
Loading…
Reference in New Issue