From ab558792a07d02c7e7c6fb2f2f357e9031927bec Mon Sep 17 00:00:00 2001 From: Oussama Ghorbel Date: Mon, 8 Apr 2019 16:38:46 +0200 Subject: [PATCH] gryphon-led-module: modify transmission routine according to SK9822 spec --- gryphon-led-module/src/sk9822.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/gryphon-led-module/src/sk9822.c b/gryphon-led-module/src/sk9822.c index 7bbb2de54..ef5cd42c7 100644 --- a/gryphon-led-module/src/sk9822.c +++ b/gryphon-led-module/src/sk9822.c @@ -56,31 +56,27 @@ int sk9822_set_color_str(struct sk9822_leds *sk9822, const char *hex) int sk9822_update(struct sk9822_leds *sk9822) { uint16_t i; - uint8_t *rawarray = (uint8_t *)sk9822->led_colors; uint16_t led_count = sk9822->led_count; - sk9822_bb_write(sk9822, 0x00); // Start Frame + // Start Frame + sk9822_bb_write(sk9822, 0x00); sk9822_bb_write(sk9822, 0x00); sk9822_bb_write(sk9822, 0x00); sk9822_bb_write(sk9822, 0x00); - for (i = 0; i < (led_count*3); i += 3) { + for (i = 0; i < led_count; i++) { + cRGB *p = &sk9822->led_colors[i]; sk9822_bb_write(sk9822, 0xe0+sk9822->led_brightness); // Maximum global brightness - sk9822_bb_write(sk9822, rawarray[i+0]); - sk9822_bb_write(sk9822, rawarray[i+1]); - sk9822_bb_write(sk9822, rawarray[i+2]); + sk9822_bb_write(sk9822, p->b); + sk9822_bb_write(sk9822, p->g); + sk9822_bb_write(sk9822, p->r); } - // Reset frame - Only needed for SK9822, has no effect on APA102 - sk9822_bb_write(sk9822, 0x00); - sk9822_bb_write(sk9822, 0x00); - sk9822_bb_write(sk9822, 0x00); - sk9822_bb_write(sk9822, 0x00); - - // End frame: 8+8*(leds >> 4) clock cycles - for (i = 0; i < led_count; i += 16) { - sk9822_bb_write(sk9822, 0xff); // 8 more clock cycles - } + // End frame + sk9822_bb_write(sk9822, 0xff); + sk9822_bb_write(sk9822, 0xff); + sk9822_bb_write(sk9822, 0xff); + sk9822_bb_write(sk9822, 0xff); return 0; }