Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -rea6ff77291eee02f351953b76c6720cf860c8be7 -r8f8776e48894e31cba816ebef2edf96d14306ba8 --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision ea6ff77291eee02f351953b76c6720cf860c8be7) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 8f8776e48894e31cba816ebef2edf96d14306ba8) @@ -628,15 +628,15 @@ F32 measSpd = getMeasuredDialInPumpSpeed(); F32 measMCSpd = getMeasuredDialInPumpMCSpeed(); F32 measMCCurr = getMeasuredDialInPumpMCCurrent(); + F32 pumpPWMPctDutyCycle = dialInPumpPWMDutyCyclePctSet * FRACTION_TO_PERCENT_FACTOR; #ifdef DEBUG_ENABLED // TODO - temporary debug code - remove later - S32 pwm = (S32)( 100.0 * dialInPumpPWMDutyCyclePctSet ); char debugFlowStr[ 256 ]; - sprintf( debugFlowStr, "Target Flow:%5d, Meas. Flow:%5d, Speed:%5d RPM, Current:%5d mA, PWM:%5d \n", flowStPt, (S32)measFlow, (S32)measMCSpd, (S32)measMCCurr, pwm ); + sprintf( debugFlowStr, "Target Flow:%5d, Meas. Flow:%5d, Speed:%5d RPM, Current:%5d mA, PWM:%5d \n", flowStPt, (S32)measFlow, (S32)measMCSpd, (S32)measMCCurr, (S32)pumpPWMPctDutyCycle ); sendDebugData( (U08*)debugFlowStr, strlen(debugFlowStr) ); #endif - // TODO - broadcastDialInFlowData( flowStPt, measFlow, measRotSpd, measSpd, measMCSpd, measMCCurr ); + broadcastDialInFlowData( flowStPt, measFlow, measRotSpd, measSpd, measMCSpd, measMCCurr, pumpPWMPctDutyCycle ); dialInFlowDataPublicationTimerCounter = 0; } } Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -rab432aeb5e140e5b17b149f980063843fcb76290 -r8f8776e48894e31cba816ebef2edf96d14306ba8 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision ab432aeb5e140e5b17b149f980063843fcb76290) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 8f8776e48894e31cba816ebef2edf96d14306ba8) @@ -834,6 +834,34 @@ handleTestAlarmStatusBroadcastIntervalOverrideRequest( message ); break; + case MSG_ID_DIAL_FLOW_SET_PT_OVERRIDE: + handleTestDialFlowSetPointOverrideRequest( message ); + break; + + case MSG_ID_DIAL_FLOW_MEAS_OVERRIDE: + handleTestDialFlowMeasuredOverrideRequest( message ); + break; + + case MSG_ID_DIAL_PUMP_MC_MEAS_SPEED_OVERRIDE: + handleTestDialPumpMCMeasuredSpeedOverrideRequest( message ); + break; + + case MSG_ID_DIAL_PUMP_MC_MEAS_CURR_OVERRIDE: + handleTestDialPumpMCMeasuredCurrentOverrideRequest( message ); + break; + + case MSG_ID_DIAL_FLOW_SEND_INTERVAL_OVERRIDE: + handleTestDialFlowBroadcastIntervalOverrideRequest( message ); + break; + + case MSG_ID_DIAL_PUMP_MEAS_SPEED_OVERRIDE: + handleTestDialPumpMeasuredSpeedOverrideRequest( message ); + break; + + case MSG_ID_DIAL_PUMP_MEAS_ROTOR_SPEED_OVERRIDE: + handleTestDialPumpRotorMeasuredSpeedOverrideRequest( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r07b9515c080aa68fecfa331cbc593adea4c0b8dc -r8f8776e48894e31cba816ebef2edf96d14306ba8 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 07b9515c080aa68fecfa331cbc593adea4c0b8dc) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 8f8776e48894e31cba816ebef2edf96d14306ba8) @@ -22,6 +22,7 @@ #include "AlarmLamp.h" #include "BloodFlow.h" #include "Buttons.h" +#include "DialInFlow.h" #include "MsgQueues.h" #include "WatchdogMgmt.h" #include "SystemCommMessages.h" @@ -40,6 +41,7 @@ { U32 alarmState; // 0 = no alarms, 1 = low priority, 2 = medium priority, 3 = high priority U32 alarmTop; // ID of top active alarm + U32 escalatesIn; // seconds U32 silenceExpiresIn; // seconds U16 alarmsFlags; // bit flags: 1 = true, 0 = false for each bit } ALARM_COMP_STATUS_PAYLOAD_T; @@ -193,6 +195,7 @@ payload.alarmState = (U32)almStatus.alarmsState; payload.alarmTop = (U32)almStatus.alarmTop; payload.silenceExpiresIn = almStatus.alarmsSilenceExpiresIn; + payload.escalatesIn = almStatus.alarmsEscalatesIn; payload.alarmsFlags = ( almStatus.systemFault ? BIT_BY_POS(0) : 0 ); payload.alarmsFlags |= ( almStatus.stop ? BIT_BY_POS(1) : 0 ); payload.alarmsFlags |= ( almStatus.noClear ? BIT_BY_POS(2) : 0 ); @@ -339,6 +342,55 @@ } /************************************************************************* + * @brief broadcastDialInFlowData + * The broadcastDialInFlowData function constructs a dialysate flow data msg to \n + * be broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details + * Inputs : none + * Outputs : dialysate flow data msg constructed and queued. + * @param flowStPt : Current set point for dialysate flow + * @param measFlow : Latest measured dialysate flow + * @param measRotorSpd : Latest measured dialysate pump rotoro speed + * @param measSpd : Latest measured dialysate pump speed + * @param measMCspd : Latest measured dialysate pump motor controller speed + * @param measSpd : Latest measured dialysate pump motor controller current + * @param pwmDC : Latest PWM duty cycle % + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastDialInFlowData( U32 flowStPt, F32 measFlow, F32 measRotorSpd, F32 measSpd, F32 measMCSpd, F32 measMCCurr, F32 pwmDC ) +{ + BOOL result; + MESSAGE_T msg; + U32 msgSize; + U08 data[ sizeof( MESSAGE_WRAPPER_T ) + 1 + CAN_MESSAGE_PAYLOAD_SIZE ]; // must hold full (wrapped) message + sync + any CAN padding + U08 *payloadPtr = msg.payload; + PERISTALTIC_PUMP_STATUS_PAYLOAD_T payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_DIALYSATE_FLOW_DATA; + msg.hdr.payloadLen = sizeof( PERISTALTIC_PUMP_STATUS_PAYLOAD_T ); + + payload.setPoint = flowStPt; + payload.measFlow = measFlow; + payload.measRotorSpd = measRotorSpd; + payload.measPumpSpd = measSpd; + payload.measMCSpd = measMCSpd; + payload.measMCCurr = measMCCurr; + payload.pwmDC = pwmDC; + + memcpy( payloadPtr, &payload, sizeof( PERISTALTIC_PUMP_STATUS_PAYLOAD_T ) ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) + msgSize = serializeMessage( msg, data ); + + // add serialized message data to appropriate comm buffer + result = addToCommBuffer( COMM_BUFFER_OUT_CAN_HD_BROADCAST, data, msgSize ); + + return result; +} + +/************************************************************************* * @brief handleDGCheckIn * The handleDGCheckIn function handles a check-in from the DG. * @details @@ -673,4 +725,88 @@ *************************************************************************/ DATA_OVERRIDE_HANDLER_FUNC( U32, handleTestBloodFlowBroadcastIntervalOverrideRequest, testSetBloodFlowDataPublishIntervalOverride, testResetBloodFlowDataPublishIntervalOverride ) +/************************************************************************* + * @brief handleTestDialFlowSetPointOverrideRequest + * The handleTestDialFlowSetPointOverrideRequest function handles a request to \n + * override the set point for the dialysate inlet flow rate (mL/min). + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC( U32, handleTestDialFlowSetPointOverrideRequest, testSetTargetDialInFlowRateOverride, testResetTargetDialInFlowRateOverride ) +/************************************************************************* + * @brief handleTestDialFlowMeasuredOverrideRequest + * The handleTestDialFlowMeasuredOverrideRequest function handles a request to \n + * override the measured dialysate inlet flow rate (mL/min). + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestDialFlowMeasuredOverrideRequest, testSetMeasuredDialInFlowRateOverride, testResetMeasuredDialInFlowRateOverride ) + +/************************************************************************* + * @brief handleTestDialPumpRotorMeasuredSpeedOverrideRequest + * The handleTestDialPumpRotorMeasuredSpeedOverrideRequest function handles a request to \n + * override the measured dialysate inlet pump rotor speed (RPM). + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestDialPumpRotorMeasuredSpeedOverrideRequest, testSetMeasuredDialInPumpRotorSpeedOverride, testResetMeasuredDialInPumpRotorSpeedOverride ) + +/************************************************************************* + * @brief handleTestDialPumpMeasuredSpeedOverrideRequest + * The handleTestDialPumpMeasuredSpeedOverrideRequest function handles a request to \n + * override the measured dialysate inlet pump speed (RPM). + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestDialPumpMeasuredSpeedOverrideRequest, testSetMeasuredDialInPumpSpeedOverride, testResetMeasuredDialInPumpSpeedOverride ) + +/************************************************************************* + * @brief handleTestDialPumpMCMeasuredSpeedOverrideRequest + * The handleTestDialPumpMCMeasuredSpeedOverrideRequest function handles a request to \n + * override the measured dialysate inlet pump motor controller speed (RPM). + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestDialPumpMCMeasuredSpeedOverrideRequest, testSetMeasuredDialInPumpMCSpeedOverride, testResetMeasuredDialInPumpMCSpeedOverride ) + +/************************************************************************* + * @brief handleTestDialPumpMCMeasuredCurrentOverrideRequest + * The handleTestDialPumpMCMeasuredCurrentOverrideRequest function handles a request to \n + * override the measured dialysate inlet pump motor controller current (mA). + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestDialPumpMCMeasuredCurrentOverrideRequest, testSetMeasuredDialInPumpMCCurrentOverride, testResetMeasuredDialInPumpMCCurrentOverride ) + +/************************************************************************* + * @brief handleTestDialFlowBroadcastIntervalOverrideRequest + * The handleTestDialFlowBroadcastIntervalOverrideRequest function handles a request to \n + * override the broadcast interval for dialysate inlet flow data. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC( U32, handleTestDialFlowBroadcastIntervalOverrideRequest, testSetDialInFlowDataPublishIntervalOverride, testResetDialInFlowDataPublishIntervalOverride ) + + Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r6311eb9b65fdeec7a285d25e07f3932ac0fb6cf1 -r8f8776e48894e31cba816ebef2edf96d14306ba8 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 6311eb9b65fdeec7a285d25e07f3932ac0fb6cf1) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 8f8776e48894e31cba816ebef2edf96d14306ba8) @@ -32,6 +32,7 @@ MSG_ID_BLOOD_FLOW_DATA, // 5 MSG_ID_DG_CHECK_IN, // 6 MSG_ID_UI_CHECK_IN, // 7 + MSG_ID_DIALYSATE_FLOW_DATA, // 8 // service/test CAN messages @@ -52,6 +53,13 @@ MSG_ID_ALARM_STATUS_SEND_INTERVAL_OVERRIDE, // 0x800D MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE, // 0x800E MSG_ID_BLOOD_PUMP_MEAS_ROTOR_SPEED_OVERRIDE,// 0x800F + MSG_ID_DIAL_FLOW_SET_PT_OVERRIDE, // 0x8010 + MSG_ID_DIAL_FLOW_MEAS_OVERRIDE, // 0x8011 + MSG_ID_DIAL_PUMP_MC_MEAS_SPEED_OVERRIDE, // 0x8012 + MSG_ID_DIAL_PUMP_MC_MEAS_CURR_OVERRIDE, // 0x8013 + MSG_ID_DIAL_FLOW_SEND_INTERVAL_OVERRIDE, // 0x8014 + MSG_ID_DIAL_PUMP_MEAS_SPEED_OVERRIDE, // 0x8015 + MSG_ID_DIAL_PUMP_MEAS_ROTOR_SPEED_OVERRIDE, // 0x8016 END_OF_MSG_IDS } MSG_ID_T; @@ -71,6 +79,9 @@ // MSG_ID_BLOOD_FLOW_DATA BOOL broadcastBloodFlowData( U32 flowStPt, F32 measFlow, F32 measRotorSpd, F32 measSpd, F32 measMCSpd, F32 measMCCurr, F32 pwmDC ); +// MSG_ID_DIALYSATE_FLOW_DATA +BOOL broadcastDialInFlowData( U32 flowStPt, F32 measFlow, F32 measRotorSpd, F32 measSpd, F32 measMCSpd, F32 measMCCurr, F32 pwmDC ); + // MSG_ID_DG_CHECK_IN void handleDGCheckIn( MESSAGE_T *message ); // MSG_ID_UI_CHECK_IN @@ -130,4 +141,26 @@ // MSG_ID_BLOOD_PUMP_MEAS_ROTOR_SPEED_OVERRIDE void handleTestBloodPumpRotorMeasuredSpeedOverrideRequest( MESSAGE_T *message ); +// MSG_ID_DIAL_FLOW_SET_PT_OVERRIDE +void handleTestDialFlowSetPointOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_DIAL_FLOW_MEAS_OVERRIDE +void handleTestDialFlowMeasuredOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_DIAL_PUMP_MC_MEAS_SPEED_OVERRIDE +void handleTestDialPumpMCMeasuredSpeedOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_DIAL_PUMP_MC_MEAS_CURR_OVERRIDE +void handleTestDialPumpMCMeasuredCurrentOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_DIAL_FLOW_SEND_INTERVAL_OVERRIDE +void handleTestDialFlowBroadcastIntervalOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_DIAL_PUMP_MEAS_SPEED_OVERRIDE +void handleTestDialPumpMeasuredSpeedOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_DIAL_PUMP_MEAS_ROTOR_SPEED_OVERRIDE +void handleTestDialPumpRotorMeasuredSpeedOverrideRequest( MESSAGE_T *message ); + + #endif Index: firmware/App/Services/WatchdogMgmt.c =================================================================== diff -u -rea6ff77291eee02f351953b76c6720cf860c8be7 -r8f8776e48894e31cba816ebef2edf96d14306ba8 --- firmware/App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision ea6ff77291eee02f351953b76c6720cf860c8be7) +++ firmware/App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision 8f8776e48894e31cba816ebef2edf96d14306ba8) @@ -43,6 +43,7 @@ DATA_ARRAY_DECL( BOOL, TaskCheckIns, NUM_OF_TASKS, watchdogTaskCheckedIn ); static WATCHDOG_SELF_TEST_STATE_T watchdogSelfTestState = WATCHDOG_SELF_TEST_STATE_START; +static SELF_TEST_STATUS_T watchdogSelfTestStatus; static U32 watchdogSelfTestTimerCount = 0; // ********** private function prototypes ********** @@ -67,6 +68,7 @@ lastWatchdogPetTime = 0; watchdogSelfTestState = WATCHDOG_SELF_TEST_STATE_START; + watchdogSelfTestStatus = SELF_TEST_STATUS_IN_PROGRESS; watchdogSelfTestTimerCount = 0; // initialize task check-ins to false for ( i = 0; i < NUM_OF_TASKS; i++ ) @@ -163,12 +165,12 @@ } if ( getCPLDWatchdogExpired() == PIN_SIGNAL_HIGH ) { - result = SELF_TEST_STATUS_PASSED; + watchdogSelfTestStatus = SELF_TEST_STATUS_PASSED; } else { activateAlarmNoData( ALARM_ID_WATCHDOG_POST_TEST_FAILED ); - result = SELF_TEST_STATUS_FAILED; + watchdogSelfTestStatus = SELF_TEST_STATUS_FAILED; } watchdogSelfTestTimerCount = getMSTimerCount(); watchdogSelfTestState = WATCHDOG_SELF_TEST_STATE_RECOVER; @@ -177,12 +179,14 @@ case WATCHDOG_SELF_TEST_STATE_RECOVER: if ( TRUE == didTimeout( watchdogSelfTestTimerCount, WATCHDOG_RECOVERY_TIME_MS ) ) { + result = watchdogSelfTestStatus; watchdogSelfTestState = WATCHDOG_SELF_TEST_STATE_COMPLETE; } break; case WATCHDOG_SELF_TEST_STATE_COMPLETE: // if we get called in this state, assume we're doing self test again + watchdogSelfTestStatus = SELF_TEST_STATUS_IN_PROGRESS; watchdogSelfTestState = WATCHDOG_SELF_TEST_STATE_START; break; Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -r85bfe5051e4d2bf67be39d394f96c075b4e52836 -r8f8776e48894e31cba816ebef2edf96d14306ba8 --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 85bfe5051e4d2bf67be39d394f96c075b4e52836) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 8f8776e48894e31cba816ebef2edf96d14306ba8) @@ -63,7 +63,7 @@ execBloodFlowController(); // control dialysate inlet pump -// execDialInFlowController(); + execDialInFlowController(); // control dialysate outlet pump // execDialOutUFController(); Index: firmware/App/Tasks/TaskPriority.c =================================================================== diff -u -r85bfe5051e4d2bf67be39d394f96c075b4e52836 -r8f8776e48894e31cba816ebef2edf96d14306ba8 --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 85bfe5051e4d2bf67be39d394f96c075b4e52836) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 8f8776e48894e31cba816ebef2edf96d14306ba8) @@ -52,7 +52,7 @@ execBloodFlowMonitor(); // monitor dialysate inlet pump and flow -// execDialInFlowMonitor(); + execDialInFlowMonitor(); // monitor dialysate outlet pump and reservoir load cells // execDialOutUFMonitor();