~ruther/CTU-FEE-B0B35APO-Semestral-project

0827a594c1c820a33325ea2aefc619381504a71c — František Boháček 3 years ago 9f289a5
fix: rgb leds memory offset
2 files changed, 15 insertions(+), 8 deletions(-)

M lib-pheripherals/include/mzapo_rgb_led.h
M lib-pheripherals/src/mzapo_rgb_led.c
M lib-pheripherals/include/mzapo_rgb_led.h => lib-pheripherals/include/mzapo_rgb_led.h +7 -2
@@ 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

M lib-pheripherals/src/mzapo_rgb_led.c => lib-pheripherals/src/mzapo_rgb_led.c +8 -6
@@ 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);
}

Do not follow this link