Index: firmware/App/Controllers/ConcentratePumps.c =================================================================== diff -u -r7336ffd91e991f7156b01a7f15ed2afd85b62f80 -rd4e5e5e155cd938823ee8eb8b090355e1fcc37a2 --- firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision 7336ffd91e991f7156b01a7f15ed2afd85b62f80) +++ firmware/App/Controllers/ConcentratePumps.c (.../ConcentratePumps.c) (revision d4e5e5e155cd938823ee8eb8b090355e1fcc37a2) @@ -58,6 +58,7 @@ } CONCENTRATE_PUMP_STATE_T; // ********** private data ********** + static CONCENTRATE_PUMP_STATE_T concentratePumpState; ///< Concentrate pump module current state. static BOOL isPumpOnRequested; ///< Flag indicates a request to turn concentrate pumps on. static BOOL isPumpOffRequested; ///< Flag indicates a request to turn concentrate pumps off. @@ -109,6 +110,7 @@ { if ( ++concentratePumpMonitorTimerCounter >= getPublishConcentratePumpDataInterval() ) { + CONCENTRATE_PUMP_DATA_T data; concentratePumpMonitorTimerCounter = 0U; F32 const cp1PulseWidthInSecond = (F32)( getFPGACP1HallSensePulseWidth() * CONCENTRATE_PUMP_HALL_SENSE_PERIOD_RESOLUTION ) / US_PER_SECOND; @@ -117,7 +119,12 @@ F32 const cp1SpeedMlPerMin = ( 1 / cp1PulseWidthInSecond ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; F32 const cp2SpeedMlPerMin = ( 1 / cp2PulseWidthInSecond ) * CONCENTRATE_PUMP_VOLUME_PER_PULSE * SEC_PER_MIN; - broadcastConcentratePumpData( getConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1 ), cp1SpeedMlPerMin, getConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2 ), cp2SpeedMlPerMin ); + data.cp1TargetSpeed = getConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP1 ); + data.cp1MeasuredSpeed = cp1SpeedMlPerMin; + data.cp2TargetSpeed = getConcentratePumpTargetSpeed( CONCENTRATEPUMPS_CP2 ); + data.cp2MeasuredSpeed = cp2SpeedMlPerMin; + + broadcastConcentratePumpData( &data ); } } @@ -135,9 +142,11 @@ case CONCENTRATE_PUMP_OFF_STATE: concentratePumpState = handleConcentratePumpOffState(); break; + case CONCENTRATE_PUMP_ON_STATE: concentratePumpState = handleConcentratePumpOnState(); break; + default: SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_CONCENTRATE_PUMP_EXEC_INVALID_STATE, concentratePumpState ) concentratePumpState = CONCENTRATE_PUMP_OFF_STATE; @@ -329,6 +338,14 @@ return state; } +/*********************************************************************//** + * @brief + * The getConcentratePumpTargetSpeed function gets the concentrate pump + * target speed for a given pump id. + * @details Inputs: pumpTargetSpeed + * @details Outputs: none + * @return the current concentrate pump target speed. + *************************************************************************/ static F32 getConcentratePumpTargetSpeed( CONCENTRATE_PUMPS_T pumpId ) { F32 result = 0.0; Index: firmware/App/Controllers/ConductivitySensors.c =================================================================== diff -u -rc593086f741b1776d8bdff43d40bc4d569d7b1f4 -rd4e5e5e155cd938823ee8eb8b090355e1fcc37a2 --- firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision c593086f741b1776d8bdff43d40bc4d569d7b1f4) +++ firmware/App/Controllers/ConductivitySensors.c (.../ConductivitySensors.c) (revision d4e5e5e155cd938823ee8eb8b090355e1fcc37a2) @@ -64,6 +64,10 @@ #define EMSTAT_PICO_MEASUREMENT_OFFSET 0x8000000 ///< Measurement offset for emstat pico measurement data. #define EMSTAT_PICO_GOOD_STATUS 0x10 ///< Measurement good status. +#define ASCII_CODE_LETTER_A 0x41 ///< ASCII code in hex for letter A. +#define ASCII_CODE_NUMBER_ZERO 0x30 ///< ASCII code in hex for number zero. +#define ASCII_CODE_NUMBER_SEVEN 0x37 ///< ASCII code in hex for number seven. + #pragma pack(push,1) /// Emstat pico measurement data package structure typedef struct @@ -167,10 +171,18 @@ if ( ++conductivityDataPublicationTimerCounter >= getConductivityDataPublishInterval() ) { - conductivityDataPublicationTimerCounter = 0; + CONDUCTIVITY_DATA_T data; + calcRORejectionRatio(); - broadcastConductivityData( roRejectionRatio, getConductivityValue(CONDUCTIVITYSENSORS_CPI_SENSOR), getConductivityValue(CONDUCTIVITYSENSORS_CPO_SENSOR), - getConductivityValue(CONDUCTIVITYSENSORS_CD1_SENSOR), getConductivityValue(CONDUCTIVITYSENSORS_CD2_SENSOR) ); + + conductivityDataPublicationTimerCounter = 0; + data.roRejectionRatio = roRejectionRatio; + data.cpi = getConductivityValue(CONDUCTIVITYSENSORS_CPI_SENSOR); + data.cpo = getConductivityValue(CONDUCTIVITYSENSORS_CPO_SENSOR); + data.cd1 = getConductivityValue(CONDUCTIVITYSENSORS_CD1_SENSOR); + data.cd2 = getConductivityValue(CONDUCTIVITYSENSORS_CD2_SENSOR); + + broadcastConductivityData( &data ); } } @@ -362,14 +374,14 @@ for ( ii = 0; ii < size; ++ii ) { - if ( valuePtr[ii] < 0x40 ) + if ( valuePtr[ii] < ASCII_CODE_LETTER_A ) { - value = ( valuePtr[ii] - 0x30 ); + value = ( valuePtr[ii] - ASCII_CODE_NUMBER_ZERO ); result = ( result << 4 ) | value; } else { - value = ( valuePtr[ii] - 0x37 ); + value = ( valuePtr[ii] - ASCII_CODE_NUMBER_SEVEN ); result = ( result << 4 ) | value; } } @@ -393,9 +405,11 @@ case 'm': result = 1000; break; + case 'u': result = 1000000; break; + default: result = 1; break; @@ -461,20 +475,23 @@ packageStarted = TRUE; packageIndex = 0; break; + case ';': if ( packageStarted ) { processMeasurementDataPackage( CONDUCTIVITYSENSORS_CD1_SENSOR ); packageIndex = 0; } break; + case '\n': if ( packageStarted ) { processMeasurementDataPackage( CONDUCTIVITYSENSORS_CD2_SENSOR ); packageStarted = FALSE; } break; + default: if ( packageStarted ) { Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r7336ffd91e991f7156b01a7f15ed2afd85b62f80 -rd4e5e5e155cd938823ee8eb8b090355e1fcc37a2 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 7336ffd91e991f7156b01a7f15ed2afd85b62f80) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision d4e5e5e155cd938823ee8eb8b090355e1fcc37a2) @@ -555,25 +555,18 @@ * @param measuredCP2Speed measured speed for concentrate pump CP2 using hall sense * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastConcentratePumpData( F32 cp1TgtSpeed, F32 cp1MeasuredSpeed, F32 cp2TgtSpeed, F32 cp2MeasuredSpeed ) +BOOL broadcastConcentratePumpData( void * concentratePumpDataPtr ) { BOOL result; MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - CONCENTRATE_PUMP_DATA_T payload; // create a message record blankMessage( &msg ); msg.hdr.msgID = MSG_ID_DG_CONCENTRATE_PUMP_DATA; msg.hdr.payloadLen = sizeof( CONCENTRATE_PUMP_DATA_T ); - payload.cp1TargetSpeed = cp1TgtSpeed; - payload.cp1MeasuredSpeed = cp1MeasuredSpeed; - payload.cp2TargetSpeed = cp2TgtSpeed; - payload.cp2MeasuredSpeed = cp2MeasuredSpeed; + memcpy( &msg.payload, concentratePumpDataPtr, sizeof( CONCENTRATE_PUMP_DATA_T ) ); - memcpy( payloadPtr, &payload, sizeof( CONCENTRATE_PUMP_DATA_T ) ); - // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_BROADCAST, ACK_NOT_REQUIRED ); @@ -689,26 +682,18 @@ * @param cpo water outlet conductivity data * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastConductivityData( F32 roRejectionRatio, F32 cpi, F32 cpo, F32 cd1, F32 cd2 ) +BOOL broadcastConductivityData( void * conductivityDataPtr ) { BOOL result; MESSAGE_T msg; - U08 *payloadPtr = msg.payload; - CONDUCTIVITY_DATA_T payload; // create a message record blankMessage( &msg ); msg.hdr.msgID = MSG_ID_DG_CONDUCTIVITY_DATA; msg.hdr.payloadLen = sizeof( CONDUCTIVITY_DATA_T ); - payload.roRejectionRatio = roRejectionRatio; - payload.cpi = cpi; - payload.cpo = cpo; - payload.cd1 = cd1; - payload.cd2 = cd2; + memcpy( &msg.payload, conductivityDataPtr, sizeof( CONDUCTIVITY_DATA_T ) ); - memcpy( payloadPtr, &payload, sizeof( CONDUCTIVITY_DATA_T ) ); - // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_DG_BROADCAST, ACK_NOT_REQUIRED ); Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r7336ffd91e991f7156b01a7f15ed2afd85b62f80 -rd4e5e5e155cd938823ee8eb8b090355e1fcc37a2 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 7336ffd91e991f7156b01a7f15ed2afd85b62f80) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision d4e5e5e155cd938823ee8eb8b090355e1fcc37a2) @@ -64,7 +64,7 @@ BOOL broadcastDrainPumpData( U32 tgtSpeed, U32 dac ); // MSG_ID_DG_CONCENTRATE_PUMP_DATA -BOOL broadcastConcentratePumpData( F32 cp1TgtSpeed, F32 cp1MeasuredSpeed, F32 cp2TgtSpeed, F32 cp2MeasuredSpeed ); +BOOL broadcastConcentratePumpData( void * concentratePumpDataPtr ); // MSG_ID_DG_PRESSURES_DATA BOOL broadcastPressureSensorsData( F32 measROIn, F32 measROOut, F32 measDrainIn, F32 measDrainOut ); @@ -79,7 +79,7 @@ BOOL broadcastTemperatureSensorsData ( U08 *sensorsValue, U32 byteLength ); // MSG_ID_DG_CONDUCTIVITY_DATA -BOOL broadcastConductivityData( F32 roRejectionRatio, F32 cpi, F32 cpo, F32 cd1, F32 cd2 ); +BOOL broadcastConductivityData( void * conductivityDataPtr ); // MSG_ID_POWER_OFF_WARNING void handlePowerOffWarning( MESSAGE_T *message );