diff --git a/components/leds/format.c b/components/leds/format.c index fef639d9..6d1d5e5e 100644 --- a/components/leds/format.c +++ b/components/leds/format.c @@ -31,6 +31,13 @@ unsigned leds_format_count(size_t len, enum leds_format format, unsigned group) } } +static inline void set_leds_pixels(struct leds *leds, unsigned i, struct leds_format_params params, struct leds_color color) +{ + for (unsigned j = 0; j < params.segment; j++) { + leds->pixels[params.offset + i * params.segment + j] = color; + } +} + void leds_set_format_rgb(struct leds *leds, const uint8_t *data, size_t len, struct leds_format_params params) { uint8_t parameter = leds_parameter_default(leds); @@ -38,15 +45,13 @@ void leds_set_format_rgb(struct leds *leds, const uint8_t *data, size_t len, str LOG_DEBUG("len=%u offset=%u count=%u segment=%u", len, params.offset, params.count, params.segment); for (unsigned i = 0; i < params.count && len >= (i + 1) * 3; i++) { - for (unsigned j = 0; j < params.segment; j++) { - leds->pixels[params.offset + i * params.segment + j] = (struct leds_color) { - .r = data[i * 3 + 0], - .g = data[i * 3 + 1], - .b = data[i * 3 + 2], - - .parameter = parameter, - }; - } + set_leds_pixels(leds, i, params, (struct leds_color) { + .r = data[i * 3 + 0], + .g = data[i * 3 + 1], + .b = data[i * 3 + 2], + + .parameter = parameter, + }); } } @@ -57,15 +62,13 @@ void leds_set_format_bgr(struct leds *leds, const uint8_t *data, size_t len, str LOG_DEBUG("len=%u offset=%u count=%u segment=%u", len, params.offset, params.count, params.segment); for (unsigned i = 0; i < params.count && len >= (i + 1) * 3; i++) { - for (unsigned j = 0; j < params.segment; j++) { - leds->pixels[params.offset + i * params.segment + j] = (struct leds_color) { - .b = data[i * 3 + 0], - .g = data[i * 3 + 1], - .r = data[i * 3 + 2], - - .parameter = parameter, - }; - } + set_leds_pixels(leds, i, params, (struct leds_color) { + .b = data[i * 3 + 0], + .g = data[i * 3 + 1], + .r = data[i * 3 + 2], + + .parameter = parameter, + }); } } @@ -76,15 +79,13 @@ void leds_set_format_grb(struct leds *leds, const uint8_t *data, size_t len, str LOG_DEBUG("len=%u offset=%u count=%u segment=%u", len, params.offset, params.count, params.segment); for (unsigned i = 0; i < params.count && len >= (i + 1) * 3; i++) { - for (unsigned j = 0; j < params.segment; j++) { - leds->pixels[params.offset + i * params.segment + j] = (struct leds_color) { - .g = data[i * 3 + 0], - .r = data[i * 3 + 1], - .b = data[i * 3 + 2], - - .parameter = parameter, - }; - } + set_leds_pixels(leds, i, params, (struct leds_color) { + .g = data[i * 3 + 0], + .r = data[i * 3 + 1], + .b = data[i * 3 + 2], + + .parameter = parameter, + }); } } @@ -96,15 +97,13 @@ void leds_set_format_rgba(struct leds *leds, const uint8_t *data, size_t len, st LOG_DEBUG("len=%u offset=%u count=%u segment=%u", len, params.offset, params.count, params.segment); for (unsigned i = 0; i < params.count && len >= (i + 1) * 4; i++) { - for (unsigned j = 0; j < params.segment; j++) { - leds->pixels[params.offset + i * params.segment + j] = (struct leds_color) { - .r = data[i * 4 + 0], - .g = data[i * 4 + 1], - .b = data[i * 4 + 2], - - .dimmer = (parameter == LEDS_PARAMETER_DIMMER) ? data[i * 4 + 3] : parameter_default, - }; - } + set_leds_pixels(leds, i, params, (struct leds_color) { + .r = data[i * 4 + 0], + .g = data[i * 4 + 1], + .b = data[i * 4 + 2], + + .dimmer = (parameter == LEDS_PARAMETER_DIMMER) ? data[i * 4 + 3] : parameter_default, + }); } } @@ -116,15 +115,13 @@ void leds_set_format_rgbw(struct leds *leds, const uint8_t *data, size_t len, st LOG_DEBUG("len=%u offset=%u count=%u segment=%u", len, params.offset, params.count, params.segment); for (unsigned i = 0; i < params.count && len >= (i + 1) * 4; i++) { - for (unsigned j = 0; j < params.segment; j++) { - leds->pixels[params.offset + i * params.segment + j] = (struct leds_color) { - .r = data[i * 4 + 0], - .g = data[i * 4 + 1], - .b = data[i * 4 + 2], - - .white = (parameter == LEDS_PARAMETER_WHITE) ? data[i * 4 + 3] : parameter_default, - }; - } + set_leds_pixels(leds, i, params, (struct leds_color) { + .r = data[i * 4 + 0], + .g = data[i * 4 + 1], + .b = data[i * 4 + 2], + + .white = (parameter == LEDS_PARAMETER_WHITE) ? data[i * 4 + 3] : parameter_default, + }); } } @@ -151,9 +148,7 @@ void leds_set_format_rgbxi(struct leds *leds, const uint8_t *data, size_t len, s uint8_t intensity = data[off++]; struct leds_color pixel_color = leds_color_intensity(group_color, parameter_type, intensity); - for (unsigned j = 0; j < params.segment; j++) { - leds->pixels[params.offset + (g * params.group + i) * params.segment + j] = pixel_color; - } + set_leds_pixels(leds, (g * params.group + i), params, pixel_color); } } } @@ -181,9 +176,7 @@ void leds_set_format_bgrxi(struct leds *leds, const uint8_t *data, size_t len, s uint8_t intensity = data[off++]; struct leds_color pixel_color = leds_color_intensity(group_color, parameter_type, intensity); - for (unsigned j = 0; j < params.segment; j++) { - leds->pixels[params.offset + (g * params.group + i) * params.segment + j] = pixel_color; - } + set_leds_pixels(leds, (g * params.group + i), params, pixel_color); } } } @@ -211,9 +204,7 @@ void leds_set_format_grbxi(struct leds *leds, const uint8_t *data, size_t len, s uint8_t intensity = data[off++]; struct leds_color pixel_color = leds_color_intensity(group_color, parameter_type, intensity); - for (unsigned j = 0; j < params.segment; j++) { - leds->pixels[params.offset + (g * params.group + i) * params.segment + j] = pixel_color; - } + set_leds_pixels(leds, (g * params.group + i), params, pixel_color); } } } @@ -240,9 +231,7 @@ void leds_set_format_rgbwxi(struct leds *leds, const uint8_t *data, size_t len, uint8_t intensity = data[off++]; struct leds_color pixel_color = leds_color_intensity(group_color, parameter_type, intensity); - for (unsigned j = 0; j < params.segment; j++) { - leds->pixels[params.offset + (g * params.group + i) * params.segment + j] = pixel_color; - } + set_leds_pixels(leds, (g * params.group + i), params, pixel_color); } } }