Index: firmware/App/Controllers/Heaters.c =================================================================== diff -u -r9afca35aabacd4a52a8eb39828e78e25ac4165f9 -r740929e7f04220e1a74e1a6f8ce71129f40a7be1 --- firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 9afca35aabacd4a52a8eb39828e78e25ac4165f9) +++ firmware/App/Controllers/Heaters.c (.../Heaters.c) (revision 740929e7f04220e1a74e1a6f8ce71129f40a7be1) @@ -502,7 +502,11 @@ } else { - // Do nothing the mode that DG is in right now, does not need heaters to be on + // Calculate the energy equation and set the duty cycle + // This is for other modes (i.e. standby or service) + targetFlow = getTargetROPumpFlowRateLPM(); + dutyCycle = calculatePrimaryHeaterDutyCycle( targetTemperature, inletTemperature, targetFlow, FALSE ); + state = HEATER_EXEC_STATE_PRIMARY_CONTROL_TO_TARGET; } // Update the calculated target temperature and flow @@ -603,6 +607,13 @@ dutyCycle = calculateTrimmerHeaterDutyCycle( targetTemperature, currentTemperature, targetFlowLPM, FALSE ); state = HEATER_EXEC_STATE_CONTROL_TO_DISINFECT_TARGET; } + else + { + // If not any of the above modes, just calculate the energy equation based on TRo + currentTemperature = getTemperatureValue( (U32)TEMPSENSORS_OUTLET_REDUNDANT ); + dutyCycle = calculateTrimmerHeaterDutyCycle( targetTemperature, currentTemperature, targetFlowLPM, TRUE ); + state = HEATER_EXEC_STATE_TRIMMER_CONTROL_TO_TARGET; + } // Update the calculated target temperature // Reset the duty cycle since the reservoir has been switched Index: firmware/App/Controllers/Valves.c =================================================================== diff -u -r8074ecece0b11532c173ad951a98036f0c54ca52 -r740929e7f04220e1a74e1a6f8ce71129f40a7be1 --- firmware/App/Controllers/Valves.c (.../Valves.c) (revision 8074ecece0b11532c173ad951a98036f0c54ca52) +++ firmware/App/Controllers/Valves.c (.../Valves.c) (revision 740929e7f04220e1a74e1a6f8ce71129f40a7be1) @@ -402,7 +402,8 @@ *************************************************************************/ VALVE_STATE_NAMES_T getValveStateName( VALVES_T valveID ) { - VALVE_STATE_NAMES_T name; + // Initialized per CppCheck. + VALVE_STATE_NAMES_T name = NUM_OF_VALVE_STATES; if ( valveID < NUM_OF_VALVES ) { Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r20535cdea80fac7a48eb84d47c9ec4a1968051c5 -r740929e7f04220e1a74e1a6f8ce71129f40a7be1 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 20535cdea80fac7a48eb84d47c9ec4a1968051c5) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 740929e7f04220e1a74e1a6f8ce71129f40a7be1) @@ -1176,6 +1176,10 @@ handleTestHDCommunicationStatusOverrideRequest( message ); break; + case MSG_ID_DG_SET_PRIMARY_AND_TRIMMER_HEATERS_TARGET_TEMP: + handleSetPrimaryAndTrimmerHeatersTargetTemperature( message ); + break; + case MSG_ID_DG_GET_USAGE_INFO_RECORD: handleGetDGUsageInfoRecord( message ); break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r20535cdea80fac7a48eb84d47c9ec4a1968051c5 -r740929e7f04220e1a74e1a6f8ce71129f40a7be1 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 20535cdea80fac7a48eb84d47c9ec4a1968051c5) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 740929e7f04220e1a74e1a6f8ce71129f40a7be1) @@ -477,6 +477,11 @@ DG_VERSIONS_T payload; U08 *payloadPtr = msg.payload; + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_VERSION; + msg.hdr.payloadLen = sizeof( DG_VERSIONS_T ); + if ( message->hdr.payloadLen == sizeof( U08 ) + sizeof( U08 ) + sizeof( U08 ) + sizeof( U16 ) + sizeof( U32 ) ) { // populate payload @@ -487,11 +492,6 @@ payload.compatibilityRev = (U32)SW_COMPATIBILITY_REV; getFPGAVersions( &payload.fpgaId, &payload.fpgaMajor, &payload.fpgaMinor, &payload.fpgaLab ); - // create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_VERSION; - msg.hdr.payloadLen = sizeof( DG_VERSIONS_T ); - // fill message payload memcpy( payloadPtr, &payload, sizeof( DG_VERSIONS_T ) ); } @@ -554,13 +554,13 @@ // has been already checked in POST getNVRecord2Driver( GET_SRV_RECORD, (U08*)&service, sizeof( DG_SERVICE_RECORD_T ), 0, ALARM_ID_NO_ALARM ); + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_SERVICE_SCHEDULE_DATA; + msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ); + if ( 0 == message->hdr.payloadLen ) { - // Create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_SERVICE_SCHEDULE_DATA; - msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ); - // Fill message payload memcpy( payloadPtr, &service.lastServiceEpochDate, sizeof( U32 ) ); payloadPtr += sizeof( U32 ); @@ -1383,8 +1383,8 @@ // HD mode broadcast is operations mode and submode so 8 bytes if ( message->hdr.payloadLen == sizeof( U32 ) + sizeof( U32 ) ) { - U32 mode; - U32 subMode; + U32 mode = 0; + U32 subMode = 0; memcpy( payloadPtr, &mode, sizeof( U32 ) ); payloadPtr += sizeof( U32 ); @@ -1412,17 +1412,17 @@ DG_USAGE_INFO_RECORD_T usageInfo; U08 *payloadPtr = msg.payload; + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DG_USAGE_DATA; + msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ) + sizeof( BOOL ); + // Get the service record. There are no arrays of service to check and also, raise no alarm since the service record // has been already checked in POST getNVRecord2Driver( GET_USAGE_RECORD, (U08*)&usageInfo, sizeof( DG_USAGE_INFO_RECORD_T ), 0, ALARM_ID_NO_ALARM ); if ( 0 == message->hdr.payloadLen ) { - // Create a message record - blankMessage( &msg ); - msg.hdr.msgID = MSG_ID_DG_USAGE_DATA; - msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ) + sizeof( BOOL ); - // Fill message payload memcpy( payloadPtr, &usageInfo.lastHeatDisDateEpoch, sizeof( U32 ) ); payloadPtr += sizeof( U32 ); @@ -3484,7 +3484,7 @@ memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_PAYLOAD_T ) ); if ( FALSE == payload.reset ) { - result = testSetHDCommunicationStatus(payload.state.u32); + result = testSetHDCommunicationStatus( payload.state.u32 ); } else { @@ -3497,6 +3497,39 @@ } /*********************************************************************//** + * @brief + * The handleSetPrimaryAndTrimmerHeatersTargetTemperature function handles + * setting primary and trimmer heaters target temperature. + * @details Inputs: none + * @details Outputs: message handled + * @param message a pointer to the message to handle + * @return none + *************************************************************************/ +void handleSetPrimaryAndTrimmerHeatersTargetTemperature( MESSAGE_T *message ) +{ + BOOL status = FALSE; + U08* payloadPtr = message->payload; + + if ( message->hdr.payloadLen >= ( sizeof( F32 ) + sizeof( F32 ) ) ) + { + F32 primaryTargetTemp = 0.0F; + F32 trimmerTargetTemp = 0.0F; + status = TRUE; + + memcpy( &primaryTargetTemp, payloadPtr, sizeof( F32 ) ); + payloadPtr += sizeof( F32 ); + + memcpy( &trimmerTargetTemp, payloadPtr, sizeof( F32 ) ); + + setHeaterTargetTemperature( DG_PRIMARY_HEATER, primaryTargetTemp ); + setHeaterTargetTemperature( DG_TRIMMER_HEATER, trimmerTargetTemp ); + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, status ); +} + +/*********************************************************************//** * @brief * The handleGetDGUsageInfoRecord function handles a request to get the DG * usage information record. Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r20535cdea80fac7a48eb84d47c9ec4a1968051c5 -r740929e7f04220e1a74e1a6f8ce71129f40a7be1 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 20535cdea80fac7a48eb84d47c9ec4a1968051c5) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 740929e7f04220e1a74e1a6f8ce71129f40a7be1) @@ -377,8 +377,11 @@ void handleSetDGSoftwareConfigRecord( MESSAGE_T *message ); // MSG_ID_DG_HD_COMMUNICATION_STATUS -void handleTestHDCommunicationStatusOverrideRequest(MESSAGE_T *message); +void handleTestHDCommunicationStatusOverrideRequest( MESSAGE_T *message ); +// MSG_ID_DG_SET_PRIMARY_AND_TRIMMER_HEATERS_TARGET_TEMP +void handleSetPrimaryAndTrimmerHeatersTargetTemperature( MESSAGE_T *message ); + // MSG_ID_DG_GET_USAGE_INFO_RECORD void handleGetDGUsageInfoRecord( MESSAGE_T *message );