From 44e0df5d51faaff40447fc1945248be5b22bb2d3 Mon Sep 17 00:00:00 2001 From: Jonas Arnold Date: Thu, 17 Nov 2022 16:08:47 +0100 Subject: [PATCH] changed NUM_FLAPS handling in multi-splitflap --- ADIS_tinyK22_SplitFlap/source/application.c | 6 +-- .../source/multi-splitflap.c | 42 +++++++++---------- .../source/multi-splitflap.h | 4 +- ADIS_tinyK22_SplitFlap/source/shell.c | 6 +-- ADIS_tinyK22_SplitFlap/source/shell.h | 2 +- 5 files changed, 30 insertions(+), 30 deletions(-) diff --git a/ADIS_tinyK22_SplitFlap/source/application.c b/ADIS_tinyK22_SplitFlap/source/application.c index ba04c78..adced2d 100644 --- a/ADIS_tinyK22_SplitFlap/source/application.c +++ b/ADIS_tinyK22_SplitFlap/source/application.c @@ -48,7 +48,7 @@ void App_Init(void){ LED_blue = McuLED_InitLed(&config); configureSplitflaps(); - MultiSplitFlap_Init(NUM_SF_USED); + MultiSplitFlap_Init(); MultiSplitFlap_AddFlap(splitflap[0]); #if (NUM_SF_USED > 1) MultiSplitFlap_AddFlap(splitflap[1]); @@ -271,7 +271,7 @@ void configureSplitflaps(void){ /* create config instance for splitflap 2 */ SF_Config_t sf2Config; - sf2Config.setupIdentifier = 1; + sf2Config.setupIdentifier = 2; sf2Config.hardwareIdentifier = 20; // default value sf2Config.magSensorConfig = magSensor2Config; sf2Config.motorConfig = motor2Config; @@ -310,7 +310,7 @@ void configureSplitflaps(void){ /* create config instance for splitflap 3 */ SF_Config_t sf3Config; - sf3Config.setupIdentifier = 1; + sf3Config.setupIdentifier = 3; sf3Config.hardwareIdentifier = 20; // default value sf3Config.magSensorConfig = magSensor3Config; sf3Config.motorConfig = motor3Config; diff --git a/ADIS_tinyK22_SplitFlap/source/multi-splitflap.c b/ADIS_tinyK22_SplitFlap/source/multi-splitflap.c index 9808133..e523b76 100644 --- a/ADIS_tinyK22_SplitFlap/source/multi-splitflap.c +++ b/ADIS_tinyK22_SplitFlap/source/multi-splitflap.c @@ -15,22 +15,17 @@ /* vars */ static dict_t **flapDict; static uint8_t addedFlaps = 0; -static const uint8_t BYTES_PER_KEY = 3; -static char* flapKeys[10]; // TODO improve - -/* function declarations */ -void initFlapKeys(uint8_t numberOfFlaps); +static char flapKeys[] = {'1', '2', '3', '4', '5', '6', '7', '8', '9'}; // TODO improve /**********************/ /* INIT / DEINIT */ /**********************/ -void MultiSplitFlap_Init(uint8_t numFlaps){ +void MultiSplitFlap_Init(){ addedFlaps = 0; flapDict = dictAlloc(); ((dict_t*)flapDict)->key=NULL; ((dict_t*)flapDict)->value=NULL; ((dict_t*)flapDict)->next=NULL; - initFlapKeys(numFlaps); } void MultiSplitFlap_Deinit(void){ @@ -43,18 +38,19 @@ void MultiSplitFlap_Deinit(void){ /**********************/ void MultiSplitFlap_AddFlap(SF_Handle_t splitflap){ McuLog_info("Adding split flap to multi splitflap combination..."); - addItem(flapDict, flapKeys[addedFlaps], (SF_Handle_t*)splitflap); - McuLog_info("Added flap nr. %i/%i.", addedFlaps+1, NUM_FLAPS); + addItem(flapDict, &flapKeys[addedFlaps], (SF_Handle_t*)splitflap); + McuLog_info("Added flap nr. %i/%i.", addedFlaps+1, NUM_MAX_AMOUNT_FLAPS); addedFlaps++; } bool MultiSplitFlap_MoveAllToZeroPosition(void){ + uint8_t numCurrentlyAddedSplitflaps = MultiSplitFlap_GetAmountOfAddedSplitFlaps(); McuLog_info("MultiSplitFlap_MoveAllToZeroPosition: Initializing split flap motors."); // start all inits - for (uint8_t num = 0; num < NUM_FLAPS; ++num) { + for (uint8_t num = 0; num < numCurrentlyAddedSplitflaps; ++num) { // get handle - SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, flapKeys[num])); + SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, &flapKeys[num])); // start init SF_MoveMotorToZeroPositionAsync(sfHandle); } @@ -65,9 +61,9 @@ bool MultiSplitFlap_MoveAllToZeroPosition(void){ initSuccess = true; vTaskDelay(pdMS_TO_TICKS(50)); // check each splitflap if it is finished with init - for (uint8_t num = 0; num < NUM_FLAPS; ++num) { + for (uint8_t num = 0; num < numCurrentlyAddedSplitflaps; ++num) { // get handle - SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, flapKeys[num])); + SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, &flapKeys[num])); // check if init done if(SF_IS_RDY_TO_MOVE(sfHandle) == false){ initSuccess = false; @@ -84,10 +80,11 @@ bool MultiSplitFlap_MoveAllToZeroPosition(void){ } bool MultiSplitFlap_Display(char sentence[]){ + uint8_t numCurrentlyAddedSplitflaps = MultiSplitFlap_GetAmountOfAddedSplitFlaps(); // Start movements - for (uint8_t num = 0; num < NUM_FLAPS; ++num) { + for (uint8_t num = 0; num < numCurrentlyAddedSplitflaps; ++num) { // get handle - SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, flapKeys[num])); + SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, &flapKeys[num])); char letter = sentence[num]; SF_MoveToFlapAsync(sfHandle, letter); McuLog_info("Multi splitflap: Commanded Flap nr. %i to letter '%c'.", num+1, letter); @@ -101,8 +98,9 @@ bool MultiSplitFlap_Display(char sentence[]){ done = true; // default is successful // go through all splitflaps - for (uint8_t num = 0; num < NUM_FLAPS; ++num) { - SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, flapKeys[num])); + + for (uint8_t num = 0; num < numCurrentlyAddedSplitflaps; ++num) { + SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, &flapKeys[num])); if(SF_GetCurrentState(sfHandle) == SF_STATE_MOVING){ done = false; } @@ -114,7 +112,7 @@ bool MultiSplitFlap_Display(char sentence[]){ bool MultiSplitFlap_SetHardwareIdentifier(SetupIdentifier_t id, HardwareIdentifier_t hwId){ // number too high (not that many split flaps can be added to the combination) - if(id >= NUM_FLAPS){ + if(id >= NUM_MAX_AMOUNT_FLAPS){ McuLog_error("MultiSplitFlap_SetHardwareIdentifier failed because splitflap with setup id <%i> cannot exist.", id); return false; } @@ -130,7 +128,7 @@ bool MultiSplitFlap_SetHardwareIdentifier(SetupIdentifier_t id, HardwareIdentifi } // get handle - SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, flapKeys[id])); + SF_Handle_t sfHandle = (SF_Handle_t)(getItem(*flapDict, &flapKeys[id])); // set hardware identifier SF_SetHardwareIdentifier(sfHandle, hwId); // log @@ -146,16 +144,18 @@ uint8_t MultiSplitFlap_GetAmountOfAddedSplitFlaps(void){ /**********************/ /* INTERNAL FUNCTIONS */ /**********************/ +/* UNUSED void initFlapKeys(uint8_t numberOfFlaps){ for (uint8_t i = 0; i < numberOfFlaps; ++i) { - /* get a memory place for the key */ + get a memory place for the key #if SPLITFLAP_CONFIG_USE_FREERTOS_HEAP flapKeys[i] = pvPortMalloc(sizeof(BYTES_PER_KEY)); #else if((flapKeys[i] = malloc(BYTES_PER_KEY)) == NULL){ McuLog_error("Reserving memory for flap num. %i failed!:", i); } - sprintf(flapKeys[i], "%i", i); #endif + sprintf(flapKeys[i], "%i", i); } } +*/ diff --git a/ADIS_tinyK22_SplitFlap/source/multi-splitflap.h b/ADIS_tinyK22_SplitFlap/source/multi-splitflap.h index 40f2eb6..a2ee288 100644 --- a/ADIS_tinyK22_SplitFlap/source/multi-splitflap.h +++ b/ADIS_tinyK22_SplitFlap/source/multi-splitflap.h @@ -10,11 +10,11 @@ #include "splitflap.h" -#define NUM_FLAPS 2 // Number of flaps that can be added to the combination +#define NUM_MAX_AMOUNT_FLAPS 9 // Number of flaps that can be added to the combination /* initialize dictionary. * numFlaps: Amount of flaps to be used*/ -void MultiSplitFlap_Init(uint8_t numFlaps); +void MultiSplitFlap_Init(); /* de-initialize: deallocate memory etc. */ void MultiSplitFlap_Deinit(void); diff --git a/ADIS_tinyK22_SplitFlap/source/shell.c b/ADIS_tinyK22_SplitFlap/source/shell.c index e6fe6cc..bc4aea7 100644 --- a/ADIS_tinyK22_SplitFlap/source/shell.c +++ b/ADIS_tinyK22_SplitFlap/source/shell.c @@ -51,7 +51,7 @@ static uint8_t ParseCommand(const uint8_t *cmd, bool *handled, McuShell_ConstStd cmd += sizeof(SHELL_CMD_IDENTIFY_SF)-1; if(McuUtility_xatoi(&cmd, &setupId) == ERR_OK){ // validate param - if(setupId > NUM_FLAPS){ + if(setupId > NUM_MAX_AMOUNT_FLAPS){ return ERR_FAILED; } }else{ @@ -77,9 +77,9 @@ static uint8_t ParseCommand(const uint8_t *cmd, bool *handled, McuShell_ConstStd vQueueShellCmd(shellCmd); }else if(McuUtility_strncmp((char*)cmd,SHELL_CMD_DISPLAY_STRING_SF,sizeof(SHELL_CMD_DISPLAY_STRING_SF)-1) == 0){ *handled = TRUE; - Shell_cmd_s shellCmd = {.shellCmd = Shell_Display_String_SF, .numberOfParams = NUM_FLAPS, .params = {0}}; + Shell_cmd_s shellCmd = {.shellCmd = Shell_Display_String_SF, .numberOfParams = NUM_MAX_AMOUNT_FLAPS, .params = {0}}; cmd += sizeof(SHELL_CMD_DISPLAY_STRING_SF)-1; - if(SHELL_stringToInt32ArrayForSFCMD(&cmd, shellCmd.params, NUM_FLAPS) != ERR_OK){ + if(SHELL_stringToInt32ArrayForSFCMD(&cmd, shellCmd.params, NUM_MAX_AMOUNT_FLAPS) != ERR_OK){ return ERR_FAILED; } vQueueShellCmd(shellCmd); diff --git a/ADIS_tinyK22_SplitFlap/source/shell.h b/ADIS_tinyK22_SplitFlap/source/shell.h index 09cb3d7..ba8a82c 100644 --- a/ADIS_tinyK22_SplitFlap/source/shell.h +++ b/ADIS_tinyK22_SplitFlap/source/shell.h @@ -29,7 +29,7 @@ typedef enum ShellCmd { typedef struct ShellCmd_s { Shell_cmd_t shellCmd; int32_t numberOfParams; - int32_t params[NUM_FLAPS]; + int32_t params[NUM_MAX_AMOUNT_FLAPS]; }Shell_cmd_s;