diff --git a/ADIS_tinyK22_SplitFlap/source/application.c b/ADIS_tinyK22_SplitFlap/source/application.c index d18d4da..8b11fef 100644 --- a/ADIS_tinyK22_SplitFlap/source/application.c +++ b/ADIS_tinyK22_SplitFlap/source/application.c @@ -55,20 +55,6 @@ void App_Init(void){ static void App_Task(void* pv){ McuLog_info("Application Task starting"); - bool initSuccess = MultiSplitFlap_MoveAllToZeroPosition(); - -#ifndef APP_DEBUG - if(initSuccess == false) - { - // end here - for(;;) {} - } -#else - // fake set to ready - ((SF_t*)splitflap0)->state = SF_STATE_READY; - ((SF_t*)splitflap1)->state = SF_STATE_READY; -#endif - QueueHandle_t cmdQueueHandle = SHELL_GetShellCmdQueueHandle();; Shell_cmd_s cmd; char* sentence; @@ -94,7 +80,6 @@ static void App_Task(void* pv){ McuLog_error("Invalid String to Display"); } break; - case Shell_Powerof_rpi: default: McuLog_error("Not implemented command recieved in App_Task. Command Id was <%i>", (int)cmd.shellCmd); break; @@ -125,7 +110,7 @@ static void App_Task(void* pv){ /* SINGLE SPLIT FLAP TESTING */ // go through the following letters - char* letters[] = {"J", "O", "N", "A", "S", "!"}; + Flap_t letters[] = {'J', 'O', 'N', 'A', 'S', '!'}; //char* letters[] = { " ", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", // "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", // "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", @@ -200,7 +185,7 @@ void configureSplitflaps(void){ /* create config instance for splitflap 0 */ SF_Config_t sf0Config; sf0Config.setupIdentifier = 0; - sf0Config.hardwareIdentifier = 4; + sf0Config.hardwareIdentifier = 10; // default value sf0Config.magSensorConfig = magSensor0Config; sf0Config.motorConfig = motor0Config; @@ -237,7 +222,7 @@ void configureSplitflaps(void){ /* create config instance for splitflap 0 */ SF_Config_t sf1Config; sf1Config.setupIdentifier = 1; - sf1Config.hardwareIdentifier = 22; + sf1Config.hardwareIdentifier = 20; // default value sf1Config.magSensorConfig = magSensor1Config; sf1Config.motorConfig = motor1Config; diff --git a/ADIS_tinyK22_SplitFlap/source/platform.h b/ADIS_tinyK22_SplitFlap/source/platform.h index d668bf0..1079c2d 100644 --- a/ADIS_tinyK22_SplitFlap/source/platform.h +++ b/ADIS_tinyK22_SplitFlap/source/platform.h @@ -9,7 +9,6 @@ #define PLATFORM_H_ /* SETTINGS */ -//#define APP_DEBUG #define PL_CONFIG_USE_NVMC (1) #define PL_CONFIG_USE_MININI (1 && PL_CONFIG_USE_NVMC) diff --git a/ADIS_tinyK22_SplitFlap/source/splitflap.c b/ADIS_tinyK22_SplitFlap/source/splitflap.c index befcec6..2dd6110 100644 --- a/ADIS_tinyK22_SplitFlap/source/splitflap.c +++ b/ADIS_tinyK22_SplitFlap/source/splitflap.c @@ -20,6 +20,7 @@ #include "McuUtility.h" #include "McuLib.h" #include "MotOffsetTable.h" +#include "nvmc.h" #define FLAP_QUEUE_LENGTH (5) /* number of elements in queue */ #define FLAP_QUEUE_SELEM_SIZE (sizeof(Flap_t)) /* size of element */ @@ -48,12 +49,20 @@ SF_Handle_t SF_Init(SF_Config_t* config){ FLAP_QUEUE_SELEM_SIZE); splitflap->id = config->setupIdentifier; // copy setup identifier splitflap->hwId = config->hardwareIdentifier; // copy hardware identifier -#ifndef APP_DEBUG // when not debugging => set to "not initialized" - splitflap->state = SF_STATE_NOT_READY; -#else // when debugging => set to "initialized" - splitflap->state = SF_STATE_READY; + splitflap->state = SF_STATE_NOT_READY; // set to "not initialized" +#if PL_CONFIG_USE_NVMC + int16_t hwIdFromNvmc = -1; + // if there exists a hw id in the NVMC and it is valid + if(NVMC_GetStepperID(config->setupIdentifier, &hwIdFromNvmc) == ERR_OK && hwIdFromNvmc >= 0){ + splitflap->hwId = hwIdFromNvmc; // use this + } else{ + McuLog_warn("SF_Init: No or invalid HwId found in NVMC for SplitFlap <%i>, storing default ID.", splitflap->id); + // save default stepper id from code to NVMC + if(NVMC_SetStepperID(config->setupIdentifier, config->hardwareIdentifier) != ERR_OK){ + McuLog_error("SF_Init: Failed to save hardware ID in NVMC for SplitFlap ID <%i>", config->setupIdentifier); + } + } #endif - // check if queue was created if(splitflap->flapQueue == NULL){ McuLog_error("Flap queue creation failed for Splitflap <%i>", splitflap->id); @@ -111,6 +120,7 @@ bool SF_MoveMotorToZeroPosition(SF_Handle_t instance){ if(MotOffset_Get(((SF_t*)instance)->hwId, &offsetSteps) == ERR_OK){ McuLog_info("SF_MoveMotorToZeroPosition found offsetSteps=%i for Splitflap <%i> with hwId=%i", offsetSteps, ((SF_t*)instance)->id, ((SF_t*)instance)->hwId); } + // check if positive offset! if(offsetSteps < 0){ McuLog_info("SF_MoveMotorToZeroPosition found negative offset for Splitflap with hwId=%i. Offset set to zero.", ((SF_t*)instance)->hwId); @@ -262,6 +272,11 @@ void SF_MoveToFlapAsync(SF_Handle_t instance, Flap_t flap){ void SF_SetHardwareIdentifier(SF_Handle_t instance, HardwareIdentifier_t identifier){ ((SF_t*)instance)->hwId = identifier; +#if PL_CONFIG_USE_NVMC // update hardwareid in NVMC if used + if(NVMC_SetStepperID(((SF_t*)instance)->id, identifier) != ERR_OK){ + McuLog_error("SF_SetHardwareIdentifier: Failed to update hardware ID in NVMC for SplitFlap ID <%i>", ((SF_t*)instance)->id); + } +#endif } int32_t SF_GetMotorPosition(SF_Handle_t instance){