@@ 11,9 11,14 @@ typedef enum {
#ifdef __cplusplus
extern "C" {
#endif
+ typedef struct {
+ uint8_t blue;
+ uint8_t green;
+ uint8_t red;
+ } __attribute__((__packed__)) rgb_led_pixel_t;
typedef struct {
- volatile raw_pixel_onebit_t *mem_base;
+ volatile rgb_led_pixel_t *mem_base;
} mzapo_rgb_led_t;
mzapo_rgb_led_t rgb_led_create(unsigned char *mem_base);
@@ 24,7 29,7 @@ extern "C" {
void rgb_led_set_green(mzapo_rgb_led_t *rgb_led, mzapo_rgb_leds_t id);
void rgb_led_set_blue(mzapo_rgb_led_t *rgb_led, mzapo_rgb_leds_t id);
- raw_pixel_onebit_t rgb_led_get(mzapo_rgb_led_t *rgb_led, mzapo_rgb_leds_t id);
+ rgb_led_pixel_t rgb_led_get(mzapo_rgb_led_t *rgb_led, mzapo_rgb_leds_t id);
void rgb_led_clear(mzapo_rgb_led_t *rgb_led, mzapo_rgb_leds_t id);
#ifdef __cplusplus
@@ 3,7 3,7 @@
mzapo_rgb_led_t rgb_led_create(unsigned char *mem_base) {
mzapo_rgb_led_t rgb_led = {
- .mem_base = (volatile raw_pixel_onebit_t*)mem_base,
+ .mem_base = (volatile rgb_led_pixel_t*)mem_base,
};
return rgb_led;
@@ 12,9 12,10 @@ mzapo_rgb_led_t rgb_led_create(unsigned char *mem_base) {
void rgb_led_set(mzapo_rgb_led_t *rgb_led, mzapo_rgb_leds_t id, uint8_t r,
uint8_t g, uint8_t b) {
if (rgb_led->mem_base != NULL) {
- (rgb_led->mem_base + id)->red = r;
- (rgb_led->mem_base + id)->green = g;
- (rgb_led->mem_base + id)->blue = b;
+ rgb_led_pixel_t *pixel = (rgb_led_pixel_t*)((void *)rgb_led->mem_base + id * 4);
+ (pixel)->red = r;
+ (pixel)->green = g;
+ (pixel)->blue = b;
}
}
@@ 28,9 29,10 @@ void rgb_led_set_blue(mzapo_rgb_led_t *rgb_led, mzapo_rgb_leds_t id) {
rgb_led_set(rgb_led, id, 0, 0, 255);
}
-raw_pixel_onebit_t rgb_led_get(mzapo_rgb_led_t *rgb_led, mzapo_rgb_leds_t id) {
- return *(rgb_led->mem_base + id);
+rgb_led_pixel_t rgb_led_get(mzapo_rgb_led_t *rgb_led, mzapo_rgb_leds_t id) {
+ return *(rgb_led_pixel_t*)(((void*)rgb_led->mem_base + id * 4));
}
+
void rgb_led_clear(mzapo_rgb_led_t *rgb_led, mzapo_rgb_leds_t id) {
rgb_led_set(rgb_led, id, 0, 0, 0);
}