From 0827a594c1c820a33325ea2aefc619381504a71c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Thu, 17 Jun 2021 23:54:37 +0200 Subject: [PATCH] fix: rgb leds memory offset --- lib-pheripherals/include/mzapo_rgb_led.h | 9 +++++++-- lib-pheripherals/src/mzapo_rgb_led.c | 14 ++++++++------ 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/lib-pheripherals/include/mzapo_rgb_led.h b/lib-pheripherals/include/mzapo_rgb_led.h index b073710..b500da3 100644 --- a/lib-pheripherals/include/mzapo_rgb_led.h +++ b/lib-pheripherals/include/mzapo_rgb_led.h @@ -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 diff --git a/lib-pheripherals/src/mzapo_rgb_led.c b/lib-pheripherals/src/mzapo_rgb_led.c index 788adba..d426401 100644 --- a/lib-pheripherals/src/mzapo_rgb_led.c +++ b/lib-pheripherals/src/mzapo_rgb_led.c @@ -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); } -- 2.48.1