From ea054fc0d3d0b8ce42c0c87e541896bbde391b1f Mon Sep 17 00:00:00 2001 From: Simon Frei Date: Fri, 30 Sep 2022 14:06:42 +0200 Subject: [PATCH] add dictionary for splitflap flaps --- ADIS_tinyK22_SplitFlap/source/lib/dict.c | 59 +++++++++++++++++++ ADIS_tinyK22_SplitFlap/source/lib/dict.h | 29 +++++++++ ADIS_tinyK22_SplitFlap/source/platform.c | 3 + ADIS_tinyK22_SplitFlap/source/splitflap.c | 52 ++++++++++++++++ ADIS_tinyK22_SplitFlap/source/splitflap.h | 6 ++ .../source/splitflap_flaps.h | 55 +++++++++++++++++ 6 files changed, 204 insertions(+) create mode 100644 ADIS_tinyK22_SplitFlap/source/lib/dict.c create mode 100644 ADIS_tinyK22_SplitFlap/source/lib/dict.h create mode 100644 ADIS_tinyK22_SplitFlap/source/splitflap_flaps.h diff --git a/ADIS_tinyK22_SplitFlap/source/lib/dict.c b/ADIS_tinyK22_SplitFlap/source/lib/dict.c new file mode 100644 index 0000000..04c08cb --- /dev/null +++ b/ADIS_tinyK22_SplitFlap/source/lib/dict.c @@ -0,0 +1,59 @@ +/* + * dict.c + * + * Created on: 30 Sep 2022 + * Author: simon + */ + +#include "dict.h" + +dict_t** dictAlloc(void){ + return malloc(sizeof(dict_t)); +} + +void dictDealoc(dict_t** dict){ + free(dict); +} + +void* getItem(dict_t* dict, char* key){ + dict_t *ptr; + for(ptr =dict; ptr !=NULL; ptr=ptr->next){ + if(strcmp(ptr->key, key) == 0){ + return ptr->value; + } + } + return NULL; +} + +void delItem(dict_t** dict, char* key){ + dict_t *ptr, *prev; + for(ptr=*dict, prev=NULL; ptr!=NULL; prev=ptr, ptr=ptr->next){ + if(strcmp(ptr->key, key) == 0){ // key match? + if(ptr->next != NULL){ // not at end of dict? + if(prev == NULL){ + *dict = ptr->next; // item is first one in dict + }else{ + prev->next = ptr->next; // not first and last -> set to next + } + }else if(prev != NULL){ + prev->next = NULL; // at end, delete last item + }else{ + *dict=NULL; // first and last -> only one item in dict + } + } + free(ptr->key); + free(ptr); + } +} + +void addItem(dict_t** dict, char* key, void* value){ + delItem(dict, key); // if item already exists delete it! + dict_t *d = malloc(sizeof(struct dict_t_struct)); // new dict + d->key = malloc(strlen(key)+1); + // set values + strcpy(d->key, key); + d->value = value; + d->next = *dict; + // item at first pos + *dict=d; +} diff --git a/ADIS_tinyK22_SplitFlap/source/lib/dict.h b/ADIS_tinyK22_SplitFlap/source/lib/dict.h new file mode 100644 index 0000000..8231377 --- /dev/null +++ b/ADIS_tinyK22_SplitFlap/source/lib/dict.h @@ -0,0 +1,29 @@ +/* + * dict.h + * + * Created on: 30 Sep 2022 + * Author: simon + */ + +#ifndef LIB_DICT_H_ +#define LIB_DICT_H_ + +#include "string.h" + +typedef struct dict_t_struct { + char *key; + void *value; + struct dict_t_struct *next; +} dict_t; + +dict_t** dictAlloc(void); + +void dictDealoc(dict_t** dict); + +void* getItem(dict_t* dict, char* key); + +void delItem(dict_t** dict, char* key); + +void addItem(dict_t** dict, char* key, void* value); + +#endif /* LIB_DICT_H_ */ diff --git a/ADIS_tinyK22_SplitFlap/source/platform.c b/ADIS_tinyK22_SplitFlap/source/platform.c index 8081321..08a015a 100644 --- a/ADIS_tinyK22_SplitFlap/source/platform.c +++ b/ADIS_tinyK22_SplitFlap/source/platform.c @@ -11,6 +11,7 @@ #include "McuLED.h" #include "McuGPIO.h" #include "McuULN2003.h" +#include "splitflap.h" void PL_Init(void){ McuLib_Init(); @@ -18,10 +19,12 @@ void PL_Init(void){ McuGPIO_Init(); McuLED_Init(); McuULN2003_Init(); + SF_InitConfig(); } void PL_Deinit(void){ + SF_DeInitConfig(); McuULN2003_Deinit(); McuLED_Deinit(); McuGPIO_Deinit(); diff --git a/ADIS_tinyK22_SplitFlap/source/splitflap.c b/ADIS_tinyK22_SplitFlap/source/splitflap.c index ff75b82..b0a40df 100644 --- a/ADIS_tinyK22_SplitFlap/source/splitflap.c +++ b/ADIS_tinyK22_SplitFlap/source/splitflap.c @@ -1,4 +1,5 @@ /* +#include * splitflap.c * * Created on: 29.09.2022 @@ -9,6 +10,57 @@ #include "McuULN2003.h" #include #include "McuWait.h" +#include "lib/dict.h" +#include "splitflap_flaps.h" + +static dict_t **splitFlapDict; + +void SF_InitConfig(void){ + splitFlapDict = dictAlloc(); + addItem(splitFlapDict, SF_A, 0); + addItem(splitFlapDict, SF_B, 0); + addItem(splitFlapDict, SF_C, 0); + addItem(splitFlapDict, SF_D, 0); + addItem(splitFlapDict, SF_E, 0); + addItem(splitFlapDict, SF_F, 0); + addItem(splitFlapDict, SF_G, 0); + addItem(splitFlapDict, SF_H, 0); + addItem(splitFlapDict, SF_J, 0); + addItem(splitFlapDict, SF_K, 0); + addItem(splitFlapDict, SF_L, 0); + addItem(splitFlapDict, SF_M, 0); + addItem(splitFlapDict, SF_N, 0); + addItem(splitFlapDict, SF_O, 0); + addItem(splitFlapDict, SF_P, 0); + addItem(splitFlapDict, SF_Q, 0); + addItem(splitFlapDict, SF_R, 0); + addItem(splitFlapDict, SF_S, 0); + addItem(splitFlapDict, SF_T, 0); + addItem(splitFlapDict, SF_U, 0); + addItem(splitFlapDict, SF_V, 0); + addItem(splitFlapDict, SF_W, 0); + addItem(splitFlapDict, SF_X, 0); + addItem(splitFlapDict, SF_Y, 0); + addItem(splitFlapDict, SF_Z, 0); + addItem(splitFlapDict, SF_0, 0); + addItem(splitFlapDict, SF_1, 0); + addItem(splitFlapDict, SF_2, 0); + addItem(splitFlapDict, SF_3, 0); + addItem(splitFlapDict, SF_4, 0); + addItem(splitFlapDict, SF_5, 0); + addItem(splitFlapDict, SF_6, 0); + addItem(splitFlapDict, SF_7, 0); + addItem(splitFlapDict, SF_8, 0); + addItem(splitFlapDict, SF_9, 0); + addItem(splitFlapDict, SF_EXCLAMATION, 0); + addItem(splitFlapDict, SF_QUESTION, 0); + addItem(splitFlapDict, SF_COLON, 0); + addItem(splitFlapDict, SF_SPACE, 0); +} + +void SF_DeInitConfig(void){ + dictDealoc(splitFlapDict); +} SF_Handle_t SF_Init(SF_Config_t* instance, int id){ SF_t* splitflap; diff --git a/ADIS_tinyK22_SplitFlap/source/splitflap.h b/ADIS_tinyK22_SplitFlap/source/splitflap.h index 51db6db..0e796ad 100644 --- a/ADIS_tinyK22_SplitFlap/source/splitflap.h +++ b/ADIS_tinyK22_SplitFlap/source/splitflap.h @@ -35,6 +35,12 @@ typedef struct { /****** FUNCTIONS ******/ +/* initializes dictonary with splitflap flaps position */ +void SF_InitConfig(void); + +/* free splitflap flaps dictionary */ +void SF_DeInitConfig(void); + /* split flap initialization * only pass configured types, they do not need to be initialized. * Initialization will be made inside the SF_Init method */ diff --git a/ADIS_tinyK22_SplitFlap/source/splitflap_flaps.h b/ADIS_tinyK22_SplitFlap/source/splitflap_flaps.h new file mode 100644 index 0000000..94e843f --- /dev/null +++ b/ADIS_tinyK22_SplitFlap/source/splitflap_flaps.h @@ -0,0 +1,55 @@ +/* + * splitflap_display.h + * + * Created on: 30 Sep 2022 + * Author: simon + */ + +#ifndef SPLITFLAP_FLAPS_H_ +#define SPLITFLAP_FLAPS_H_ + +#include +#define SF_A (char*)'A' +#define SF_B (char*)'B' +#define SF_C (char*)'C' +#define SF_D (char*)'D' +#define SF_E (char*)'E' +#define SF_F (char*)'F' +#define SF_G (char*)'G' +#define SF_H (char*)'H' +#define SF_I (char*)'I' +#define SF_J (char*)'J' +#define SF_K (char*)'K' +#define SF_L (char*)'L' +#define SF_M (char*)'M' +#define SF_N (char*)'N' +#define SF_O (char*)'O' +#define SF_P (char*)'P' +#define SF_Q (char*)'Q' +#define SF_R (char*)'R' +#define SF_S (char*)'S' +#define SF_T (char*)'T' +#define SF_U (char*)'U' +#define SF_V (char*)'V' +#define SF_W (char*)'W' +#define SF_X (char*)'X' +#define SF_Y (char*)'Y' +#define SF_Z (char*)'Z' +#define SF_0 (char*)'0' +#define SF_1 (char*)'1' +#define SF_2 (char*)'2' +#define SF_3 (char*)'3' +#define SF_4 (char*)'4' +#define SF_5 (char*)'5' +#define SF_6 (char*)'6' +#define SF_7 (char*)'7' +#define SF_8 (char*)'8' +#define SF_9 (char*)'9' +#define SF_EXCLAMATION (char*)'!' +#define SF_QUESTION (char*)'?' +#define SF_COLON (char*)':' +#define SF_SPACE (char*)' ' + + + +#endif /* SPLITFLAP_FLAPS_H_ */