From 0b5a39468c7377737e604dd8b75c041275474d71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Fri, 18 Jun 2021 20:05:37 +0200 Subject: [PATCH] refactor: put all pheripherals to one object --- lib-pheripherals/include/mzapo_pheripherals.h | 11 ++++++ lib-pheripherals/src/mzapo_pheripherals.c | 39 +++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/lib-pheripherals/include/mzapo_pheripherals.h b/lib-pheripherals/include/mzapo_pheripherals.h index 253bd49ff41329ca88565fa18df6ffe6635a32c2..33e024ed9cc8771a737adef9147651ebb8c370cf 100644 --- a/lib-pheripherals/include/mzapo_pheripherals.h +++ b/lib-pheripherals/include/mzapo_pheripherals.h @@ -10,6 +10,12 @@ #ifdef __cplusplus extern "C" { #endif + typedef struct { + display_t *display; + mzapo_rgb_led_t *rgb_leds; + mzapo_ledstrip_t *ledstrip; + void **knobs; + } mzapo_pheripherals_t; mzapo_ledstrip_t mzapo_create_ledstrip(); mzapo_rgb_led_t mzapo_create_rgb_led(); @@ -17,6 +23,11 @@ extern "C" { void *mzapo_get_knobs_address(); + mzapo_pheripherals_t mzapo_pheripherals_create(mzapo_ledstrip_t *ledstrip, mzapo_rgb_led_t *rgb_led, display_t *display, void **mzapo_knobs_address); + bool mzapo_check_pheripherals(mzapo_ledstrip_t *ledstrip, + mzapo_rgb_led_t *rgb_led, display_t *display, + void **mzapo_knobs_address); + #ifdef __cplusplus } /* extern "C"*/ #endif diff --git a/lib-pheripherals/src/mzapo_pheripherals.c b/lib-pheripherals/src/mzapo_pheripherals.c index 7a1586d91f06ac0fe46d94978e1103d4c3de6762..075cfe08e4435ced6cee2ed0bb1177ce40f1d86c 100644 --- a/lib-pheripherals/src/mzapo_pheripherals.c +++ b/lib-pheripherals/src/mzapo_pheripherals.c @@ -47,3 +47,42 @@ void *mzapo_get_knobs_address() { return pheripherals_base; } + +mzapo_pheripherals_t mzapo_pheripherals_create(mzapo_ledstrip_t *ledstrip, + mzapo_rgb_led_t *rgb_led, display_t *display, + void **mzapo_knobs_address) { + mzapo_pheripherals_t pheripherals = { + .display = display, + .rgb_leds = rgb_led, + .ledstrip = ledstrip, + .knobs = mzapo_knobs_address + }; + + return pheripherals; +} + +bool mzapo_check_pheripherals(mzapo_ledstrip_t *ledstrip, + mzapo_rgb_led_t *rgb_led, display_t *display, + void **mzapo_knobs_address) { + #ifdef COMPUTER + return true; + #endif + + if (ledstrip != NULL && ledstrip->mem_base == NULL) { + return false; + } + + if (rgb_led != NULL && rgb_led->mem_base == NULL) { + return false; + } + + if (display != NULL && display->data.base_address == NULL) { + return false; + } + + if (mzapo_knobs_address != NULL && *mzapo_knobs_address == NULL) { + return false; + } + + return true; +}