Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -rc85d9f0a8023fabdf1cd557965958d225e2b9085 -r48ca7fd644c67920acc29a80b7af379d0a134d1a --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision c85d9f0a8023fabdf1cd557965958d225e2b9085) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 48ca7fd644c67920acc29a80b7af379d0a134d1a) @@ -87,6 +87,19 @@ F32 prevDiaTargetFlowLPM; ///< Heater previous target dialysate flow in L/min. } HEATER_STATUS_T; +/// Payload record structure for heaters start request +typedef struct +{ + U32 heaterID; ///< Heater ID (0: Primary, 1: Trimmer) + F32 temperature; ///< Temperature range ( 10.0 to 90.0 deg ) +} HEATER_START_CMD_PAYLOAD_T; + +/// Payload record structure for heaters stop request +typedef struct +{ + U32 heaterID; ///< Heater ID (0: Primary, 1: Trimmer) +} HEATER_STOP_CMD_PAYLOAD_T; + static HEATER_STATUS_T heatersStatus[ NUM_OF_DD_HEATERS ]; ///< Heaters status. static U32 dataPublicationTimerCounter; ///< Data publication timer counter. static OVERRIDE_U32_T heatersDataPublishInterval = { HEATERS_DATA_PUBLISH_INTERVAL, HEATERS_DATA_PUBLISH_INTERVAL, 0, 0 }; ///< Heaters data publish time interval. @@ -662,4 +675,75 @@ return result; } +/*********************************************************************//** + * @brief + * The testHeaterStartOverride function starts a given heater + * at mentioned temperature. + * @details \b Inputs: tester logged in + * @details \b Outputs: heatersStatus[] + * @param message set message from Dialin which includes the heater to set + * and the state to set the heater to. + * @return TRUE if set request is successful, FALSE if not + *************************************************************************/ +BOOL testHeaterStartOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // Verify tester has logged in with TD + if ( TRUE == isTestingActivated() ) + { + // Verify payload length is valid + if ( sizeof( HEATER_START_CMD_PAYLOAD_T ) == message->hdr.payloadLen ) + { + HEATER_START_CMD_PAYLOAD_T payload; + + memcpy( &payload, message->payload, sizeof(HEATER_START_CMD_PAYLOAD_T) ); + + if ( ( (DD_HEATERS_T)payload.heaterID < NUM_OF_DD_HEATERS ) && + ( ( payload.temperature >= HEATER_TARGET_TEMPERATURE_MIN ) && ( payload.temperature <= HEATER_TARGET_TEMPERATURE_MAX ) ) ) + { + setHeaterTargetTemperature( (DD_HEATERS_T)payload.heaterID, payload.temperature ); + startHeater( (DD_HEATERS_T)payload.heaterID ); + result = TRUE; + } + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testHeaterStopOverride function stops a given heater. + * @details \b Inputs: tester logged in + * @details \b Outputs: heatersStatus[] + * @param message set message from Dialin which includes the heater to set + * and the state to set the heater to. + * @return TRUE if set request is successful, FALSE if not + *************************************************************************/ +BOOL testHeaterStopOverride( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // Verify tester has logged in with TD + if ( TRUE == isTestingActivated() ) + { + // Verify payload length is valid + if ( sizeof( HEATER_STOP_CMD_PAYLOAD_T ) == message->hdr.payloadLen ) + { + HEATER_STOP_CMD_PAYLOAD_T payload; + + memcpy( &payload, message->payload, sizeof(HEATER_STOP_CMD_PAYLOAD_T) ); + + if ( (DD_HEATERS_T)payload.heaterID < NUM_OF_DD_HEATERS ) + { + stopHeater( (DD_HEATERS_T)payload.heaterID ); + result = TRUE; + } + } + } + + return result; +} + /**@}*/