Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -r941afbaab7fc86f40fa49f9d110d481f65b44b68 -r16efeb7b3a19e02ae83a553a77f01a3550ff7850 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 941afbaab7fc86f40fa49f9d110d481f65b44b68) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 16efeb7b3a19e02ae83a553a77f01a3550ff7850) @@ -108,8 +108,10 @@ DATA_DECL( U32, BloodFlowDataPub, bloodFlowDataPublishInterval, BLOOD_FLOW_DATA_PUB_INTERVAL, BLOOD_FLOW_DATA_PUB_INTERVAL ); // interval (in ms) at which to publish blood flow data to CAN bus DATA_DECL( S32, TargetBloodFlowRate, targetBloodFlowRate, 0, 0 ); // requested blood flow rate DATA_DECL( F32, MeasuredBloodFlowRate, measuredBloodFlowRate, 0.0, 0.0 ); // measured blood flow rate -DATA_DECL( F32, MeasuredBloodPumpSpeed, adcBloodPumpSpeedRPM, 0.0, 0.0 ); // measured blood pump speed -DATA_DECL( F32, MeasuredBloodPumpCurrent, adcBloodPumpCurrentmA, 0.0, 0.0 ); // measured blood pump motor current +DATA_DECL( F32, MeasuredBloodPumpRotorSpeed, bloodPumpRotorSpeedRPM, 0.0, 0.0 );// measured blood pump rotor speed +DATA_DECL( F32, MeasuredBloodPumpSpeed, bloodPumpSpeedRPM, 0.0, 0.0 ); // measured blood pump motor speed +DATA_DECL( F32, MeasuredBloodPumpMCSpeed, adcBloodPumpMCSpeedRPM, 0.0, 0.0 ); // measured blood pump motor controller speed +DATA_DECL( F32, MeasuredBloodPumpMCCurrent, adcBloodPumpMCCurrentmA, 0.0, 0.0 );// measured blood pump motor controller current static F32 bpFlowError = 0.0; // blood flow error static F32 bpFlowErrorSum = 0.0; // blood flow error sum @@ -245,8 +247,8 @@ U16 bpmA = getIntADCReading( INT_ADC_BLOOD_PUMP_MOTOR_CURRENT ); F32 bpFlow = getFPGABloodFlow(); - adcBloodPumpSpeedRPM.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpRPM)) * BP_SPEED_ADC_TO_RPM_FACTOR; - adcBloodPumpCurrentmA.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpmA)) * BP_CURRENT_ADC_TO_MA_FACTOR; + adcBloodPumpMCSpeedRPM.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpRPM)) * BP_SPEED_ADC_TO_RPM_FACTOR; + adcBloodPumpMCCurrentmA.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpmA)) * BP_CURRENT_ADC_TO_MA_FACTOR; flowReadingsTotal -= flowReadings[flowReadingsIdx]; flowReadings[flowReadingsIdx] = bpFlow; @@ -550,28 +552,52 @@ DATA_GET( F32, getMeasuredBloodFlowRate, measuredBloodFlowRate ) /************************************************************************* + * @brief getMeasuredBloodPumpRotorSpeed + * The getMeasuredBloodPumpRotorSpeed function gets the measured blood flow \n + * rate. + * @details + * Inputs : bloodPumpRotorSpeedRPM + * Outputs : none + * @param none + * @return the current blood flow rate (in mL/min). + *************************************************************************/ +DATA_GET( F32, getMeasuredBloodPumpRotorSpeed, bloodPumpRotorSpeedRPM ) + +/************************************************************************* * @brief getMeasuredBloodPumpSpeed - * The getMeasuredBloodPumpSpeed function gets the measured blood pump \n + * The getMeasuredBloodPumpSpeed function gets the measured blood flow \n + * rate. + * @details + * Inputs : bloodPumpSpeedRPM + * Outputs : none + * @param none + * @return the current blood flow rate (in mL/min). + *************************************************************************/ +DATA_GET( F32, getMeasuredBloodPumpSpeed, bloodPumpSpeedRPM ) + +/************************************************************************* + * @brief getMeasuredBloodPumpMCSpeed + * The getMeasuredBloodPumpMCSpeed function gets the measured blood pump \n * speed. * @details - * Inputs : adcBloodPumpSpeedRPM + * Inputs : adcBloodPumpMCSpeedRPM * Outputs : none * @param none * @return the current blood pump speed (in RPM). *************************************************************************/ -DATA_GET( F32, getMeasuredBloodPumpSpeed, adcBloodPumpSpeedRPM ) +DATA_GET( F32, getMeasuredBloodPumpMCSpeed, adcBloodPumpMCSpeedRPM ) /************************************************************************* - * @brief getMeasuredBloodPumpCurrent - * The getMeasuredBloodPumpCurrent function gets the measured blood pump \n + * @brief getMeasuredBloodPumpMCCurrent + * The getMeasuredBloodPumpMCCurrent function gets the measured blood pump \n * current. * @details - * Inputs : adcBloodPumpCurrentmA + * Inputs : adcBloodPumpMCCurrentmA * Outputs : none * @param none * @return the current blood pump current (in mA). *************************************************************************/ -DATA_GET( F32, getMeasuredBloodPumpCurrent, adcBloodPumpCurrentmA ) +DATA_GET( F32, getMeasuredBloodPumpMCCurrent, adcBloodPumpMCCurrentmA ) /************************************************************************* * @brief publishBloodFlowData @@ -591,17 +617,19 @@ { S32 flowStPt = (S32)getTargetBloodFlowRate(); F32 measFlow = getMeasuredBloodFlowRate(); + F32 measRotSpd = getMeasuredBloodPumpRotorSpeed(); F32 measSpd = getMeasuredBloodPumpSpeed(); - F32 measCurr = getMeasuredBloodPumpCurrent(); + F32 measMCSpd = getMeasuredBloodPumpMCSpeed(); + F32 measMCCurr = getMeasuredBloodPumpMCCurrent(); #ifdef DEBUG_ENABLED // TODO - temporary debug code - remove later S32 pwm = (S32)( 100.0 * bloodPumpPWMDutyCyclePctSet ); char debugFlowStr[256]; - sprintf( debugFlowStr, "Target Flow:%5d, Meas. Flow:%5d, Speed:%5d RPM, Current:%5d mA, PWM:%5d \n", flowStPt, (S32)measFlow, (S32)measSpd, (S32)measCurr, 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, pwm ); sendDebugData( (U08*)debugFlowStr, strlen(debugFlowStr) ); #endif - broadcastBloodFlowData( flowStPt, measFlow, measSpd, measCurr ); + broadcastBloodFlowData( flowStPt, measFlow, measRotSpd, measSpd, measMCSpd, measMCCurr ); bloodFlowDataPublicationTimerCounter = 0; } } @@ -623,7 +651,7 @@ if ( BLOOD_PUMP_CONTROL_TO_TARGET_STATE == bloodPumpState ) { // check set direction vs. direction from sign of motor controller speed - bpMCDir = ( getMeasuredBloodPumpSpeed() >= 0.0 ? MOTOR_DIR_FORWARD : MOTOR_DIR_REVERSE ); + bpMCDir = ( getMeasuredBloodPumpMCSpeed() >= 0.0 ? MOTOR_DIR_FORWARD : MOTOR_DIR_REVERSE ); if ( bloodPumpDirectionSet != bpMCDir ) { SET_ALARM_WITH_2_U32_DATA( ALARM_ID_BLOOD_PUMP_MC_DIRECTION_CHECK, (U32)bloodPumpDirectionSet, (U32)bpMCDir ) @@ -648,13 +676,13 @@ // blood pump should be off if ( BLOOD_PUMP_OFF_STATE == bloodPumpState ) { - bpCurr = fabs( getMeasuredBloodPumpCurrent() ); + bpCurr = fabs( getMeasuredBloodPumpMCCurrent() ); if ( bpCurr > BP_MAX_CURR_WHEN_STOPPED_MA ) { bpCurrErrorDurationCtr += TASK_PRIORITY_INTERVAL; if ( bpCurrErrorDurationCtr > BP_MAX_CURR_ERROR_DURATION_MS ) { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK, getMeasuredBloodPumpCurrent() ); + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK, getMeasuredBloodPumpMCCurrent() ); } } else @@ -665,13 +693,13 @@ // blood pump should be running else { - bpCurr = fabs( getMeasuredBloodPumpCurrent() ); + bpCurr = fabs( getMeasuredBloodPumpMCCurrent() ); if ( ( bpCurr < BP_MIN_CURR_WHEN_RUNNING_MA ) || ( bpCurr > BP_MAX_CURR_WHEN_RUNNING_MA ) ) { bpCurrErrorDurationCtr += TASK_PRIORITY_INTERVAL; if ( bpCurrErrorDurationCtr > BP_MAX_CURR_ERROR_DURATION_MS ) { - SET_ALARM_WITH_1_F32_DATA( ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK, getMeasuredBloodPumpCurrent() ); + SET_ALARM_WITH_1_F32_DATA( ALARM_ID_BLOOD_PUMP_MC_CURRENT_CHECK, getMeasuredBloodPumpMCCurrent() ); } } else @@ -784,31 +812,59 @@ DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodFlowRateOverride, testResetMeasuredBloodFlowRateOverride, measuredBloodFlowRate ) /************************************************************************* + * @brief testSetMeasuredBloodPumpRotorSpeedOverride and testResetMeasuredBloodPumpRotorSpeedOverride + * The testSetMeasuredBloodPumpRotorSpeedOverride function overrides the measured \n + * blood pump rotor speed. \n + * The testResetMeasuredBloodPumpRotorSpeedOverride function resets the override of the \n + * measured blood pump rotor speed. + * @details + * Inputs : none + * Outputs : bloodPumpRotorSpeedRPM + * @param value : override measured blood pump rotor speed (in RPM) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpRotorSpeedOverride, testResetMeasuredBloodPumpRotorSpeedOverride, bloodPumpRotorSpeedRPM ) + +/************************************************************************* * @brief testSetMeasuredBloodPumpSpeedOverride and testResetMeasuredBloodPumpSpeedOverride * The testSetMeasuredBloodPumpSpeedOverride function overrides the measured \n * blood pump motor speed. \n * The testResetMeasuredBloodPumpSpeedOverride function resets the override of the \n * measured blood pump motor speed. * @details * Inputs : none - * Outputs : adcBloodPumpSpeedRPM + * Outputs : bloodPumpSpeedRPM + * @param value : override measured blood pump motor speed (in RPM) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpSpeedOverride, testResetMeasuredBloodPumpSpeedOverride, bloodPumpSpeedRPM ) + +/************************************************************************* + * @brief testSetMeasuredBloodPumpMCSpeedOverride and testResetMeasuredBloodPumpMCSpeedOverride + * The testSetMeasuredBloodPumpMCSpeedOverride function overrides the measured \n + * blood pump motor speed. \n + * The testResetMeasuredBloodPumpMCSpeedOverride function resets the override of the \n + * measured blood pump motor speed. + * @details + * Inputs : none + * Outputs : adcBloodPumpMCSpeedRPM * @param value : override measured blood pump speed (in RPM) * @return TRUE if override successful, FALSE if not *************************************************************************/ -DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpSpeedOverride, testResetMeasuredBloodPumpSpeedOverride, adcBloodPumpSpeedRPM ) +DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpMCSpeedOverride, testResetMeasuredBloodPumpMCSpeedOverride, adcBloodPumpMCSpeedRPM ) /************************************************************************* - * @brief testSetMeasuredBloodPumpCurrentOverride and testResetMeasuredBloodPumpCurrentOverride - * The testSetMeasuredBloodPumpCurrentOverride function overrides the measured \n + * @brief testSetMeasuredBloodPumpMCCurrentOverride and testResetMeasuredBloodPumpMCCurrentOverride + * The testSetMeasuredBloodPumpMCCurrentOverride function overrides the measured \n * blood pump motor current. \n - * The testResetMeasuredBloodPumpCurrentOverride function resets the override of the \n + * The testResetMeasuredBloodPumpMCCurrentOverride function resets the override of the \n * measured blood pump motor current. * @details * Inputs : none - * Outputs : adcBloodPumpCurrentmA + * Outputs : adcBloodPumpMCCurrentmA * @param value : override measured blood pump current (in mA) * @return TRUE if override successful, FALSE if not *************************************************************************/ -DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpCurrentOverride, testResetMeasuredBloodPumpCurrentOverride, adcBloodPumpCurrentmA ) +DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpMCCurrentOverride, testResetMeasuredBloodPumpMCCurrentOverride, adcBloodPumpMCCurrentmA ) Index: firmware/App/Controllers/BloodFlow.h =================================================================== diff -u -r3417fd56afc9b21fb4c2d86c75dd33ac31fbd9f1 -r16efeb7b3a19e02ae83a553a77f01a3550ff7850 --- firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision 3417fd56afc9b21fb4c2d86c75dd33ac31fbd9f1) +++ firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision 16efeb7b3a19e02ae83a553a77f01a3550ff7850) @@ -34,18 +34,24 @@ DATA_GET_PROTOTYPE( S32, getTargetBloodFlowRate ); DATA_GET_PROTOTYPE( F32, getMeasuredBloodFlowRate); +DATA_GET_PROTOTYPE( F32, getMeasuredBloodPumpRotorSpeed ); DATA_GET_PROTOTYPE( F32, getMeasuredBloodPumpSpeed ); -DATA_GET_PROTOTYPE( F32, getMeasuredBloodPumpCurrent ); +DATA_GET_PROTOTYPE( F32, getMeasuredBloodPumpMCSpeed ); +DATA_GET_PROTOTYPE( F32, getMeasuredBloodPumpMCCurrent ); BOOL testSetBloodFlowDataPublishIntervalOverride( U32 value ); BOOL testResetBloodFlowDataPublishIntervalOverride( void ); BOOL testSetTargetBloodFlowRateOverride( S32 value ); BOOL testResetTargetBloodFlowRateOverride( void ); BOOL testSetMeasuredBloodFlowRateOverride( F32 value ); BOOL testResetMeasuredBloodFlowRateOverride( void ); +BOOL testSetMeasuredBloodPumpRotorSpeedOverride( F32 value ); +BOOL testResetMeasuredBloodPumpRotorSpeedOverride( void ); BOOL testSetMeasuredBloodPumpSpeedOverride( F32 value ); BOOL testResetMeasuredBloodPumpSpeedOverride( void ); -BOOL testSetMeasuredBloodPumpCurrentOverride( F32 value ); -BOOL testResetMeasuredBloodPumpCurrentOverride( void ); +BOOL testSetMeasuredBloodPumpMCSpeedOverride( F32 value ); +BOOL testResetMeasuredBloodPumpMCSpeedOverride( void ); +BOOL testSetMeasuredBloodPumpMCCurrentOverride( F32 value ); +BOOL testResetMeasuredBloodPumpMCCurrentOverride( void ); #endif Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r070554b23739bf16ea2bf9528ebabda1ce0ffeb3 -r16efeb7b3a19e02ae83a553a77f01a3550ff7850 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 070554b23739bf16ea2bf9528ebabda1ce0ffeb3) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 16efeb7b3a19e02ae83a553a77f01a3550ff7850) @@ -264,11 +264,13 @@ * Outputs : blood flow data msg constructed and queued. * @param flowStPt : Current set point for blood flow * @param measFlow : Latest measured blood flow + * @param measRotorSpd : Latest measured blood pump rotoro speed * @param measSpd : Latest measured blood pump speed - * @param measSpd : Latest measured blood pump motor current + * @param measMCspd : Latest measured blood pump motor controller speed + * @param measSpd : Latest measured blood pump motor controller current * @return TRUE if msg successfully queued for transmit, FALSE if not *************************************************************************/ -BOOL broadcastBloodFlowData( U32 flowStPt, F32 measFlow, F32 measSpd, F32 measCurr ) +BOOL broadcastBloodFlowData( U32 flowStPt, F32 measFlow, F32 measRotorSpd, F32 measSpd, F32 measMCSpd, F32 measMCCurr ) { BOOL result; MESSAGE_T msg; @@ -279,15 +281,19 @@ // create a message record blankMessage( &msg ); msg.hdr.msgID = MSG_ID_BLOOD_FLOW_DATA; - msg.hdr.payloadLen = sizeof(U32) + sizeof(F32) + sizeof(F32) + sizeof(F32); + msg.hdr.payloadLen = sizeof(U32) + sizeof(F32) + sizeof(F32) + sizeof(F32) + sizeof(F32) + sizeof(F32); memcpy( payloadPtr, &flowStPt, sizeof(U32) ); payloadPtr += sizeof(U32); memcpy( payloadPtr, &measFlow, sizeof(F32) ); payloadPtr += sizeof(F32); + memcpy( payloadPtr, &measRotorSpd, sizeof(F32) ); + payloadPtr += sizeof(F32); memcpy( payloadPtr, &measSpd, sizeof(F32) ); payloadPtr += sizeof(F32); - memcpy( payloadPtr, &measCurr, sizeof(F32) ); + memcpy( payloadPtr, &measMCSpd, sizeof(F32) ); + payloadPtr += sizeof(F32); + memcpy( payloadPtr, &measMCCurr, sizeof(F32) ); // serialize the message (w/ sync, CRC, and appropriate CAN padding) msgSize = serializeMessage( msg, data ); @@ -583,7 +589,7 @@ * @param message : a pointer to the message to handle * @return none *************************************************************************/ -DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestBloodPumpMeasuredSpeedOverrideRequest, testSetMeasuredBloodPumpSpeedOverride, testResetMeasuredBloodPumpSpeedOverride ) +DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestBloodPumpMeasuredSpeedOverrideRequest, testSetMeasuredBloodPumpMCSpeedOverride, testResetMeasuredBloodPumpMCSpeedOverride ) /************************************************************************* * @brief handleTestBloodPumpMeasuredCurrentOverrideRequest @@ -595,7 +601,7 @@ * @param message : a pointer to the message to handle * @return none *************************************************************************/ -DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestBloodPumpMeasuredCurrentOverrideRequest, testSetMeasuredBloodPumpCurrentOverride, testResetMeasuredBloodPumpCurrentOverride ) +DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestBloodPumpMeasuredCurrentOverrideRequest, testSetMeasuredBloodPumpMCCurrentOverride, testResetMeasuredBloodPumpMCCurrentOverride ) /************************************************************************* * @brief handleTestBloodFlowBroadcastIntervalOverrideRequest Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r070554b23739bf16ea2bf9528ebabda1ce0ffeb3 -r16efeb7b3a19e02ae83a553a77f01a3550ff7850 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 070554b23739bf16ea2bf9528ebabda1ce0ffeb3) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 16efeb7b3a19e02ae83a553a77f01a3550ff7850) @@ -67,7 +67,7 @@ BOOL broadcastAlarmCleared( ALARM_ID_T alarm ); // MSG_ID_BLOOD_FLOW_DATA -BOOL broadcastBloodFlowData( U32 flowStPt, F32 measFlow, F32 measSpd, F32 measCurr ); +BOOL broadcastBloodFlowData( U32 flowStPt, F32 measFlow, F32 measRotorSpd, F32 measSpd, F32 measMCSpd, F32 measMCCurr ); // MSG_ID_DG_CHECK_IN void handleDGCheckIn( MESSAGE_T *message );