Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -rc85d9f0a8023fabdf1cd557965958d225e2b9085 -rb6d20d9e5c704a9f7ebceea9bb12731dac61fc2a --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision c85d9f0a8023fabdf1cd557965958d225e2b9085) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision b6d20d9e5c704a9f7ebceea9bb12731dac61fc2a) @@ -87,6 +87,14 @@ 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) + U32 startStop; ///< Heater Start:1 and Stop: 0 + F32 temperature; ///< Temperature range ( 10.0 to 90.0 deg ) +} HEATER_START_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 +670,52 @@ return result; } +/*********************************************************************//** + * @brief + * The testHeaterStartStopOverride function starts/stops 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 testHeaterStartStopOverride( 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 ) + { + // Handle start command + if ( ( TRUE == payload.startStop ) && + ( ( 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; + } + + //Handle stop command + if ( FALSE == payload.startStop ) + { + stopHeater( (DD_HEATERS_T)payload.heaterID ); + result = TRUE; + } + } + } + } + + return result; +} + /**@}*/