#include #include #include "logger.h" #include "hat_spi.h" #include "sk6812.h" int sk6812_init(struct sk6812_ctx *ctx, struct hat_spi_ctx *hat_ctx, uint8_t strip_id, uint32_t num_modules) { ctx->hat_ctx = hat_ctx; ctx->num_modules = num_modules; ctx->strip_id = strip_id; ctx->pixeldata = malloc(4*num_modules * sizeof(ctx->pixeldata[0])); if(!ctx->pixeldata) { LOG(LVL_ERR, "sk6812: malloc for pixeldata failed."); return -1; } return 0; } void sk6812_shutdown(struct sk6812_ctx *ctx) { free(ctx->pixeldata); } void sk6812_set_colour(struct sk6812_ctx *ctx, uint32_t module, uint8_t red, uint8_t green, uint8_t blue, uint8_t white) { // despite the info in the datasheet, red and green are swapped :/ ctx->pixeldata[4*module + 0] = green; ctx->pixeldata[4*module + 1] = red; ctx->pixeldata[4*module + 2] = blue; ctx->pixeldata[4*module + 3] = white; } int sk6812_send_update(struct sk6812_ctx *ctx) { return hat_spi_set_data(ctx->hat_ctx, ctx->strip_id, ctx->num_modules*4, ctx->pixeldata); }