Index: firmware/App/Modes/ModePostGenDialysate.c =================================================================== diff -u --- firmware/App/Modes/ModePostGenDialysate.c (revision 0) +++ firmware/App/Modes/ModePostGenDialysate.c (revision 25792f5c501f0c092e2b95d53e627b2e809f3c5c) @@ -0,0 +1,185 @@ +/************************************************************************** +* +* Copyright (c) 2025-2025 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file ModePostGenDialysate.c +* +* @author (last) Vinayakam Mani +* @date (last) 18-Apr-2025 +* +* @author (original) Vinayakam Mani +* @date (original) 18-Apr-2025 +* +***************************************************************************/ + +#include "ConcentratePumps.h" +#include "DialysatePumps.h" +#include "Heaters.h" +#include "ModePostGenDialysate.h" +#include "Messaging.h" +#include "OperationModes.h" +#include "TaskGeneral.h" +#include "Utilities.h" +#include "Valves.h" + +/** + * @addtogroup DDPostGenDialysateMode + * @{ + */ + +// ********** private definitions ********** + +/// Interval (ms/task time) at which the post-treatment state data is published on the CAN bus. +#define POST_GEN_DIALYSATE_DATA_PUB_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) + +// ********** private data ********** + +static DD_POST_GEN_DAILYSATE_STATE_T postGenDialysateState; ///< Currently active post gen dialysate state. +static U32 postGenDialysatePublishTimerCounter; ///< PostGen Dialysate data broadcast timer counter used to schedule when to transmit data. +static OVERRIDE_U32_T postGenDialysateModePublishInterval; ///< Interval (in task intervals) at which to publish post-gen dialysate mode data to CAN bus. + +// ********** private function prototypes ********** + +static void publishPostGenDialysateState( void ); +static DD_POST_GEN_DAILYSATE_STATE_T handlePostGenDialysateStartState( void ); + +/*********************************************************************//** + * @brief + * The initPostGenDialysateMode function initializes the Post Generation + * Dialysate Mode unit. + * @details \b Inputs : none + * @details \b Outputs: Post-Gen Dialysate mode unit initialized + * @return none + *************************************************************************/ +void initPostGenDialysateMode( void ) +{ + postGenDialysateState = DD_POST_GEN_DIALYSATE_STATE_START; + postGenDialysateModePublishInterval.data = POST_GEN_DIALYSATE_DATA_PUB_INTERVAL; + postGenDialysateModePublishInterval.ovData = POST_GEN_DIALYSATE_DATA_PUB_INTERVAL; + postGenDialysateModePublishInterval.ovInitData = 0; + postGenDialysateModePublishInterval.override = OVERRIDE_RESET; +} + +/*********************************************************************//** + * @brief + * The transitionToPostGenDialysateMode function prepares for transition + * to Post-Gen Dialysate mode from generate dialysate or pre-gen mode + * @details \b Inputs: none + * @details \b Outputs: none + * @return initial state + *************************************************************************/ +U32 transitionToPostGenDialysateMode( void ) +{ + initPostGenDialysateMode(); + setCurrentSubState( NO_SUB_STATE ); + + return postGenDialysateState; +} + +/*********************************************************************//** + * @brief + * The execPostGenDialysateMode function executes the Post-Gen Dialysate mode + * state machine. + * @details \b Inputs: none + * @details \b Outputs: Post-Gen Dialysate mode state machine executed + * @return current state of Post-Gen Dialysate Mode + *************************************************************************/ +U32 execPostGenDialysateMode( void ) +{ + // execute current post-gen dialysate state + switch ( postGenDialysateState ) + { + case DD_POST_GEN_DIALYSATE_STATE_START: + postGenDialysateState = handlePostGenDialysateStartState(); + break; + + case DD_POST_GEN_DIALYSATE_STATE_COMPLETE: + // TODO : handle post gen dialysate complete state + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_POST_GEND_MODE_INVALID_EXEC_STATE, postGenDialysateState ) + break; + } + + publishPostGenDialysateState(); + + return postGenDialysateState; +} + +/*********************************************************************//** + * @brief + * The getCurrentPostGenDialysateState function returns the current state + * of the Post-Gen Dialysate mode. + * @details \b Inputs: postGenDialysateState + * @details \b Outputs: none + * @return current state of PostGenDialysate mode + *************************************************************************/ +DD_POST_GEN_DAILYSATE_STATE_T getCurrentPostGenDialysateState( void ) +{ + return postGenDialysateState; +} + +/*********************************************************************//** + * @brief + * The handlePostGenDialysateStartState function handles the post gen dialysate + * start state. + * @details \b Inputs: none + * @details \b Outputs: none + * @return current state of PostGenDialysate mode + *************************************************************************/ +static DD_POST_GEN_DAILYSATE_STATE_T handlePostGenDialysateStartState( void ) +{ + //TODO: define start state + return postGenDialysateState; +} + +/*********************************************************************//** + * @brief + * The publishPostGenDialysateState function publishes Post-Generation dialysate + * mode data. + * @details Inputs: postGenDialysatePublishTimerCounter, postGenDialysateModePublishInterval + * @details Outputs: postGenDialysatePublishTimerCounter + * @return none + *************************************************************************/ +static void publishPostGenDialysateState( void ) +{ + // publish data at periodic interval + if ( ++postGenDialysatePublishTimerCounter >= getU32OverrideValue( &postGenDialysateModePublishInterval ) ) + { + POST_GEN_DIALYSATE_STATE_DATA_T postGenDialysateData; + + postGenDialysateData.postGenDialysateExecState = postGenDialysateState; + + broadcastData( MSG_ID_DD_POST_GEN_DIALYSATE_STATE_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&postGenDialysateData, sizeof( POST_GEN_DIALYSATE_STATE_DATA_T ) ); + postGenDialysatePublishTimerCounter = 0; + } +} + + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testDDPostGenDialysateDataPublishIntervalOverride function overrides the + * DD post generate dialysate mode data publish interval. + * @details \b Inputs: postGenDialysateModePublishInterval + * @details \b Outputs: postGenDialysateModePublishInterval + * @param Override message from Dialin which includes the interval + * (in ms) to override the DD post generate dialysate data publish interval to. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testDDPostGenDialysateDataPublishIntervalOverride( MESSAGE_T *message ) +{ + BOOL result = u32BroadcastIntervalOverride( message, &postGenDialysateModePublishInterval, TASK_GENERAL_INTERVAL ); + + return result; +} + +/**@}*/ Index: firmware/App/Modes/ModePostGenDialysate.h =================================================================== diff -u --- firmware/App/Modes/ModePostGenDialysate.h (revision 0) +++ firmware/App/Modes/ModePostGenDialysate.h (revision 25792f5c501f0c092e2b95d53e627b2e809f3c5c) @@ -0,0 +1,51 @@ +/************************************************************************** +* +* Copyright (c) 2025-2025 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file ModePostGenDialysate.h +* +* @author (last) Vinayakam Mani +* @date (last) 17-Apr-2025 +* +* @author (original) Vinayakam Mani +* @date (original) 17-Apr-2025 +* +***************************************************************************/ + +#ifndef __MODE_POST_GEN_DIALYSATE_H__ +#define __MODE_POST_GEN_DIALYSATE_H__ + +#include "DDCommon.h" +#include "DDDefs.h" + +/** + * @defgroup DDPostGenDialysateMode DDPostGenDialysateMode + * @brief PostGen Dialysate mode unit. Manages PostGen Dialysate mode functions via a state machine. + * + * @addtogroup DDPostGenDialysateMode + * @{ + */ + +// ********** public definitions ********** + +/// PostGen dialysate mode data structure +typedef struct +{ + U32 postGenDialysateExecState; ///< Post Generate dialysate execution state +} POST_GEN_DIALYSATE_STATE_DATA_T; + +// ********** public function prototypes ********** + +void initPostGenDialysateMode( void ); // initialize this unit +U32 transitionToPostGenDialysateMode( void ); // prepares for transition to post gen dialysate mode +U32 execPostGenDialysateMode( void ); // execute the post gen dilaysate mode state machine (call from OperationModes) +DD_POST_GEN_DAILYSATE_STATE_T getCurrentPostGenDialysateState( void ); // get the current state of the post gen dialysate mode. + +BOOL testDDPostGenDialysateDataPublishIntervalOverride( MESSAGE_T *message ); // post gen dialysate publish override request + +/**@}*/ + +#endif Index: firmware/App/Modes/ModePreGenDialysate.c =================================================================== diff -u --- firmware/App/Modes/ModePreGenDialysate.c (revision 0) +++ firmware/App/Modes/ModePreGenDialysate.c (revision 25792f5c501f0c092e2b95d53e627b2e809f3c5c) @@ -0,0 +1,185 @@ +/************************************************************************** +* +* Copyright (c) 2025-2025 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file ModePreGenDialysate.c +* +* @author (last) Vinayakam Mani +* @date (last) 17-Apr-2025 +* +* @author (original) Vinayakam Mani +* @date (original) 17-Apr-2025 +* +***************************************************************************/ + +#include "ConcentratePumps.h" +#include "DialysatePumps.h" +#include "Heaters.h" +#include "ModePreGenDialysate.h" +#include "Messaging.h" +#include "OperationModes.h" +#include "TaskGeneral.h" +#include "Utilities.h" +#include "Valves.h" + +/** + * @addtogroup DDPreGenDialysateMode + * @{ + */ + +// ********** private definitions ********** + +/// Interval (ms/task time) at which the pre-treatment state data is published on the CAN bus. +#define PRE_GEN_DIALYSATE_DATA_PUB_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) + +// ********** private data ********** + +static DD_PRE_GEN_DAILYSATE_STATE_T preGenDialysateState; ///< Currently active pre-gen dialysate state. +static U32 preGenDialysatePublishTimerCounter; ///< Pre-Gen Dialysate data broadcast timer counter used to schedule when to transmit data. +static OVERRIDE_U32_T preGenDialysateModePublishInterval; ///< Interval (in task intervals) at which to publish pre-gen dialysate mode data to CAN bus. + +// ********** private function prototypes ********** + +static void publishPreGenDialysateState( void ); +static DD_PRE_GEN_DAILYSATE_STATE_T handlePreGenDialysateFillCompleteCheckState( void ); + +/*********************************************************************//** + * @brief + * The initPreGenDialysateMode function initializes the Pre-Generation + * Dialysate Mode unit. + * @details \b Inputs : none + * @details \b Outputs: Pre-Gen Dialysate mode unit initialized + * @return none + *************************************************************************/ +void initPreGenDialysateMode( void ) +{ + preGenDialysateState = DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK; + preGenDialysateModePublishInterval.data = PRE_GEN_DIALYSATE_DATA_PUB_INTERVAL; + preGenDialysateModePublishInterval.ovData = PRE_GEN_DIALYSATE_DATA_PUB_INTERVAL; + preGenDialysateModePublishInterval.ovInitData = 0; + preGenDialysateModePublishInterval.override = OVERRIDE_RESET; +} + +/*********************************************************************//** + * @brief + * The transitionToPreGenDialysateMode function prepares for transition + * to Pre-Gen Dialysate mode from standby mode. + * @details \b Inputs: none + * @details \b Outputs: none + * @return initial state + *************************************************************************/ +U32 transitionToPreGenDialysateMode( void ) +{ + initPreGenDialysateMode(); + setCurrentSubState( NO_SUB_STATE ); + + return preGenDialysateState; +} + +/*********************************************************************//** + * @brief + * The execPreGenDialysateMode function executes the Pre-Gen Dialysate mode + * state machine. + * @details \b Inputs: none + * @details \b Outputs: Pre-Gen Dialysate mode state machine executed + * @return current state of Pre-Gen Dialysate Mode + *************************************************************************/ +U32 execPreGenDialysateMode( void ) +{ + // execute current pre-gen dialysate state + switch ( preGenDialysateState ) + { + case DD_PRE_GEN_DIALYSATE_HYD_CHAMBER_FILL_CHECK: + preGenDialysateState = handlePreGenDialysateFillCompleteCheckState(); + break; + + case DD_PRE_GEN_DIALYSATE_WAIT_FOR_GEND: + // TODO : handle wait for Gen dialysate + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DD_SOFTWARE_FAULT, SW_FAULT_ID_PRE_GEND_MODE_INVALID_EXEC_STATE, preGenDialysateState ) + break; + } + + publishPreGenDialysateState(); + + return preGenDialysateState; +} + +/*********************************************************************//** + * @brief + * The getCurrentPreGenDialysateState function returns the current state + * of the Pre-Gen Dialysate mode. + * @details \b Inputs: preGenDialysateState + * @details \b Outputs: none + * @return current state of PreGenDialysate mode + *************************************************************************/ +DD_PRE_GEN_DAILYSATE_STATE_T getCurrentPreGenDialysateState( void ) +{ + return preGenDialysateState; +} + +/*********************************************************************//** + * @brief + * The handlePreGenDialysateFillCompleteCheckState function checks the + * hydrochamber fill and transition to next state. + * @details \b Inputs: none + * @details \b Outputs: none + * @return current state of PreGenDialysate mode + *************************************************************************/ +static DD_PRE_GEN_DAILYSATE_STATE_T handlePreGenDialysateFillCompleteCheckState( void ) +{ + //TODO: define hydroblock fill complete process + return preGenDialysateState; +} + +/*********************************************************************//** + * @brief + * The publishPreGenDialysateState function publishes Pre-Generation dialysate + * mode data. + * @details Inputs: preGenDialysatePublishTimerCounter, preGenDialysateModePublishInterval + * @details Outputs: preGenDialysatePublishTimerCounter + * @return none + *************************************************************************/ +static void publishPreGenDialysateState( void ) +{ + // publish data at periodic interval + if ( ++preGenDialysatePublishTimerCounter >= getU32OverrideValue( &preGenDialysateModePublishInterval ) ) + { + PRE_GEN_DIALYSATE_STATE_DATA_T preGenDialysateData; + + preGenDialysateData.preGenDialysateExecState = preGenDialysateState; + + broadcastData( MSG_ID_DD_PRE_GEN_DIALYSATE_STATE_DATA, COMM_BUFFER_OUT_CAN_DD_BROADCAST, (U08*)&preGenDialysateData, sizeof( PRE_GEN_DIALYSATE_STATE_DATA_T ) ); + preGenDialysatePublishTimerCounter = 0; + } +} + + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/*********************************************************************//** + * @brief + * The testDDPreGenDialysateDataPublishIntervalOverride function overrides the + * DD pre generate dialysate mode data publish interval. + * @details \b Inputs: preGenDialysateModePublishInterval + * @details \b Outputs: preGenDialysateModePublishInterval + * @param Override message from Dialin which includes the interval + * (in ms) to override the DD pre generate dialysate data publish interval to. + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testDDPreGenDialysateDataPublishIntervalOverride( MESSAGE_T *message ) +{ + BOOL result = u32BroadcastIntervalOverride( message, &preGenDialysateModePublishInterval, TASK_GENERAL_INTERVAL ); + + return result; +} + +/**@}*/ Index: firmware/App/Modes/ModePreGenDialysate.h =================================================================== diff -u --- firmware/App/Modes/ModePreGenDialysate.h (revision 0) +++ firmware/App/Modes/ModePreGenDialysate.h (revision 25792f5c501f0c092e2b95d53e627b2e809f3c5c) @@ -0,0 +1,51 @@ +/************************************************************************** +* +* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* +* THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN +* WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. +* +* @file ModePreGenDialysate.h +* +* @author (last) Vinayakam Mani +* @date (last) 17-Apr-2025 +* +* @author (original) Vinayakam Mani +* @date (original) 17-Apr-2025 +* +***************************************************************************/ + +#ifndef __MODE_PRE_GEN_DIALYSATE_H__ +#define __MODE_PRE_GEN_DIALYSATE_H__ + +#include "DDCommon.h" +#include "DDDefs.h" + +/** + * @defgroup DDPreGenDialysateMode DDPreGenDialysateMode + * @brief PreGen Dialysate mode unit. Manages PreGen Dialysate mode functions via a state machine. + * + * @addtogroup DDPreGenDialysateMode + * @{ + */ + +// ********** public definitions ********** + +/// Pre-Gen dialysate mode data structure +typedef struct +{ + U32 preGenDialysateExecState; ///< Pre Generate dialysate execution state +} PRE_GEN_DIALYSATE_STATE_DATA_T; + +// ********** public function prototypes ********** + +void initPreGenDialysateMode( void ); // initialize this unit +U32 transitionToPreGenDialysateMode( void ); // prepares for transition to pre-gen dialysate mode +U32 execPreGenDialysateMode( void ); // execute the pre-gen dilaysate mode state machine (call from OperationModes) +DD_PRE_GEN_DAILYSATE_STATE_T getCurrentPreGenDialysateState( void ); // get the current state of the pre-gen dialysate mode. + +BOOL testDDPreGenDialysateDataPublishIntervalOverride( MESSAGE_T *message ); // pre-gen dialysate publish override request + +/**@}*/ + +#endif