Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 46 additions & 57 deletions components/leds/format.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,22 +31,27 @@ 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);

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,
});
}
}

Expand All @@ -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,
});
}
}

Expand All @@ -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,
});
}
}

Expand All @@ -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,
});
}
}

Expand All @@ -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,
});
}
}

Expand All @@ -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);
}
}
}
Expand Down Expand Up @@ -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);
}
}
}
Expand Down Expand Up @@ -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);
}
}
}
Expand All @@ -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);
}
}
}
Expand Down
Loading