Index: firmware/App/Modes/FPModes/FPOperationModes.c =================================================================== diff -u -r5398b91c33e6fd39a74dbe132e50120965ef4107 -rd18ed8a1064006f220e75096c723077dda62b500 --- firmware/App/Modes/FPModes/FPOperationModes.c (.../FPOperationModes.c) (revision 5398b91c33e6fd39a74dbe132e50120965ef4107) +++ firmware/App/Modes/FPModes/FPOperationModes.c (.../FPOperationModes.c) (revision d18ed8a1064006f220e75096c723077dda62b500) @@ -1,17 +1,17 @@ /************************************************************************** * -* Copyright (c) 2024-2024 Diality Inc. - All Rights Reserved. +* Copyright (c) 2025-2026 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 FPOperationModes.c * -* @author (last) Sean -* @date (last) 15-Nov-2024 +* @author (last) “rkallala” +* @date (last) 15-Jan-2026 * -* @author (original) Sean -* @date (original) 15-Nov-2024 +* @author (original) Michael Garthwaite +* @date (original) 08-Sep-2025 * ***************************************************************************/ @@ -35,6 +35,8 @@ #define BROADCAST_TD_OP_MODE_INTERVAL ( 250 / TASK_GENERAL_INTERVAL ) ///< FP operation mode broadcast interval (in task interval/sec). #define DATA_PUBLISH_COUNTER_START_COUNT 11 ///< Data publish counter start count. +#define SIGNAL_START 1 +#define SIGNAL_STOP 0 // ********** private data ********** @@ -57,7 +59,7 @@ /* FAUL */{ FP_MODE_FAUL, FP_MODE_SERV, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_NLEG }, /* SERV */{ FP_MODE_FAUL, FP_MODE_SERV, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_NLEG }, /* INIT */{ FP_MODE_FAUL, FP_MODE_NLEG, FP_MODE_INIT, FP_MODE_STAN, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_NLEG }, -/* STAN */{ FP_MODE_FAUL, FP_MODE_SERV, FP_MODE_NLEG, FP_MODE_STAN, FP_MODE_PGEN, FP_MODE_GENP, FP_MODE_DPGP, FP_MODE_DEGP }, +/* STAN */{ FP_MODE_FAUL, FP_MODE_SERV, FP_MODE_NLEG, FP_MODE_STAN, FP_MODE_PGEN, FP_MODE_NLEG, FP_MODE_DPGP, FP_MODE_NLEG }, /* PGEN */{ FP_MODE_FAUL, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_STAN, FP_MODE_PGEN, FP_MODE_GENP, FP_MODE_NLEG, FP_MODE_NLEG }, /* GENW */{ FP_MODE_FAUL, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_STAN, FP_MODE_NLEG, FP_MODE_GENP, FP_MODE_NLEG, FP_MODE_NLEG }, /* DPGP */{ FP_MODE_FAUL, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_STAN, FP_MODE_NLEG, FP_MODE_NLEG, FP_MODE_DPGP, FP_MODE_DEGP }, @@ -129,7 +131,7 @@ // Is requested new mode valid and legal at this time? if ( ( newMode >= FP_MODE_NLEG ) && ( isTestingActivated() != TRUE ) ) { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_ILLEGAL_MODE_TRANSITION_REQUESTED, newMode ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, FP_FAULT_ID_OP_MODES_ILLEGAL_MODE_TRANSITION_REQUESTED, newMode ) newMode = currentMode; } @@ -179,7 +181,7 @@ break; default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_STATE, currentMode ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, FP_FAULT_ID_OP_MODES_INVALID_MODE_STATE, currentMode ) currentMode = FP_MODE_FAUL; currentSubMode = 0; break; @@ -218,7 +220,7 @@ } else { // Invalid mode requested - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_REQUESTED, newMode ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, FP_FAULT_ID_OP_MODES_INVALID_MODE_REQUESTED, newMode ) } } @@ -346,7 +348,7 @@ default: - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, SW_FAULT_ID_OP_MODES_INVALID_MODE_TO_TRANSITION_TO, newMode ) + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_FP_SOFTWARE_FAULT, FP_FAULT_ID_OP_MODES_ILLEGAL_MODE_TRANSITION_REQUESTED, newMode ) break; } } @@ -403,7 +405,7 @@ * The isFPDefeatured function returns if the Leahi device is defeatured. * @details \b Inputs: none * @details \b Outputs: none - * @return the current state of standby mode. + * @return TRUE if FP device is de-featured, FALSE if not. *************************************************************************/ BOOL isFPDefeatured( void ) { @@ -417,15 +419,78 @@ * has a boost pump installed. * @details \b Inputs: none * @details \b Outputs: none - * @return the current state of standby mode. + * @return TRUE if FP device is contains a boost pump, FALSE if not. *************************************************************************/ BOOL isBoostPumpInstalled( void ) { // TODO - pull status from NV mem. return isBoostInstalled; } +/*********************************************************************//** + * @brief + * The signalStopGenPermeate function returns if the Leahi device + * has a boost pump installed. + * @details \b Inputs: none + * @details \b Outputs: none + * @return the rejection reason code for stopping generate permeate. + *************************************************************************/ +REQUEST_REJECT_REASON_CODE_T signalStopGenPermeate( void ) +{ + REQUEST_REJECT_REASON_CODE_T reason = REQUEST_REJECT_REASON_NONE; + BOOL result = FALSE; + // Stop is agnostic to defeatured/featured. + // As long as were not in fault or POST, request to go to standby to stop + if ( TRUE == isFPDefeatured() ) + { + result = requestPreGenDefStop(); + } + else + { + result = requestPreGenStop(); + } + + if ( FALSE == result ) + { + reason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + } + + return reason; +} + +/*********************************************************************//** + * @brief + * The signalStartGenPermeate function returns if the Leahi device + * has a boost pump installed. + * @details \b Inputs: none + * @details \b Outputs: none + * @return the rejection reason code for starting generate permeate. + *************************************************************************/ +REQUEST_REJECT_REASON_CODE_T signalStartGenPermeate( void ) +{ + REQUEST_REJECT_REASON_CODE_T reason = REQUEST_REJECT_REASON_NONE; + BOOL result = FALSE; + + // TODO - Service and disinfection checks happen here. + if ( TRUE == isFPDefeatured() ) + { + result = requestPreGenDefStart(); + } + else + { + result = requestPreGenStart(); + } + + if ( FALSE == result ) + { + reason = REQUEST_REJECT_REASON_NOT_ALLOWED_IN_CURRENT_MODE; + } + + return reason; +} + + /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ @@ -480,4 +545,57 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetGeneratePermeateSignal function sets start stop signal of generate + * permeate. + * @details \b Inputs: none + * @details \b Outputs: none + * @param message message from Dialin which includes the signal to start or stop + * generate permeate modes. + * @return TRUE if override is successful, FALSE if not + *************************************************************************/ +BOOL testSetGeneratePermeateSignal( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // Verify message payload length is valid + if ( sizeof( U32 ) == message->hdr.payloadLen ) + { + U32 signalStartStop; + + memcpy( &signalStartStop, message->payload, sizeof( U32 ) ); + if ( SIGNAL_START == signalStartStop ) + { + signalStartGenPermeate(); + } + else if ( SIGNAL_STOP == signalStartStop ) + { + signalStopGenPermeate(); + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testGetFPDefeaturedStatus function return whether FP is defeatured or not. + * @details \b Inputs: none + * @details \b Outputs: none + * @details \b Message: \b Sent: MSG_ID_FP_DEF_STATUS_RESPONSE + * @param message request message from Dialin for FP defeatured status. + * @return TRUE if request is successful, FALSE if not + *************************************************************************/ +BOOL testGetFPDefeaturedStatus( MESSAGE_T *message ) +{ + BOOL result = FALSE; + FP_DEF_STATUS_PAYLOAD_T data; + + data.isFPDefeatured = isFPDefeatured(); + result = sendMessage( MSG_ID_FP_DEF_STATUS_RESPONSE, COMM_BUFFER_OUT_DD_CAN_PC, (U08*)&data, sizeof(FP_DEF_STATUS_PAYLOAD_T) ); + + return result; +} + /**@}*/