Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -rbb63d313f1edeb2fa72f992cedab03b13cdf644a -raf2cd84d3319b1e298057fe2d329aa7824306507 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision bb63d313f1edeb2fa72f992cedab03b13cdf644a) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision af2cd84d3319b1e298057fe2d329aa7824306507) @@ -114,7 +114,7 @@ /// Conversion from PWM duty cycle % to commanded pump motor speed. #define BP_PWM_TO_MOTOR_SPEED_RPM(pwm) ( ((pwm) - BP_PWM_ZERO_OFFSET) * 4000.0F ) /// Conversion macro from mL/min to estimated PWM duty cycle %. -#define BP_ML_PER_MIN_FROM_PWM(pwm) ( ( pwm / ( BP_ML_PER_MIN_TO_PUMP_RPM_FACTOR * BP_GEAR_RATIO * BP_MOTOR_RPM_TO_PWM_DC_FACTOR) ) - BP_PWM_ZERO_OFFSET ) +#define BP_ML_PER_MIN_FROM_PWM(pwm) ( ( ( pwm - BP_PWM_ZERO_OFFSET ) / ( BP_ML_PER_MIN_TO_PUMP_RPM_FACTOR * BP_GEAR_RATIO * BP_MOTOR_RPM_TO_PWM_DC_FACTOR ) ) ) /// Measured blood flow is filtered w/ moving average. #define SIZE_OF_ROLLING_AVG ( ( MS_PER_SECOND / TASK_PRIORITY_INTERVAL ) * 1 ) @@ -1610,23 +1610,23 @@ return result; } + /*********************************************************************//** * @brief - * The testResetBloodPumpRotorCountOverride function resets the override - * of the blood pump rotor counter. + * The testSetDialInPumpTargetDutyCycle function resets the override of the + * measured dialIn pump motor current. * @details Inputs: none - * @details Outputs: bloodPumpRotorCounter + * @details Outputs: adcDialInPumpMCCurrentmA * @return TRUE if reset successful, FALSE if not *************************************************************************/ -BOOL testResetBloodPumpRotorCountOverride( void ) +BOOL testSetBloodPumpTargetDutyCycle( F32 value ) { BOOL result = FALSE; if ( TRUE == isTestingActivated() ) { + targetDialInFlowRate = (S32) BP_ML_PER_MIN_FROM_PWM( value ); result = TRUE; - bloodPumpRotorCounter.override = OVERRIDE_RESET; - bloodPumpRotorCounter.ovData = bloodPumpRotorCounter.ovInitData; } return result; Index: firmware/App/Controllers/BloodFlow.h =================================================================== diff -u -r19a8bf98a7154e24c35da25225d4b55bf70ddd09 -raf2cd84d3319b1e298057fe2d329aa7824306507 --- firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision 19a8bf98a7154e24c35da25225d4b55bf70ddd09) +++ firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision af2cd84d3319b1e298057fe2d329aa7824306507) @@ -91,6 +91,7 @@ BOOL testResetMeasuredBloodPumpMCCurrentOverride( void ); BOOL testSetBloodPumpRotorCountOverride( U32 value ); BOOL testResetBloodPumpRotorCountOverride( void ); +BOOL testSetBloodPumpTargetDutyCycle( F32 value ); /**@}*/ Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -rbb63d313f1edeb2fa72f992cedab03b13cdf644a -raf2cd84d3319b1e298057fe2d329aa7824306507 --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision bb63d313f1edeb2fa72f992cedab03b13cdf644a) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision af2cd84d3319b1e298057fe2d329aa7824306507) @@ -112,7 +112,7 @@ /// Conversion from PWM duty cycle % to commanded pump motor speed. #define DIP_PWM_TO_MOTOR_SPEED_RPM(pwm) ( ((pwm) - DIP_PWM_ZERO_OFFSET) * 4000.0F ) // Macro converts PWM to estimate flow rate needed to achieve it. -#define DIP_ML_PER_MIN_FROM_PWM(pwm) ( (( pwm + DIP_PWM_ZERO_OFFSET) * 684.73 ) + 49.121 ) +#define DIP_ML_PER_MIN_FROM_PWM(pwm) ( (( pwm - DIP_PWM_ZERO_OFFSET) * 684.73 ) + 49.121 ) /// Measured dialIn flow is filtered w/ moving average. @@ -1630,7 +1630,6 @@ return result; } - /*********************************************************************//** * @brief * The testSetDialInPumpTargetDutyCycle function resets the override of the @@ -1652,6 +1651,5 @@ return result; } - /**@}*/ Index: firmware/App/Controllers/DialInFlow.h =================================================================== diff -u -r37a9fd8f15e413db5337371a7d1a1cb65567af7c -raf2cd84d3319b1e298057fe2d329aa7824306507 --- firmware/App/Controllers/DialInFlow.h (.../DialInFlow.h) (revision 37a9fd8f15e413db5337371a7d1a1cb65567af7c) +++ firmware/App/Controllers/DialInFlow.h (.../DialInFlow.h) (revision af2cd84d3319b1e298057fe2d329aa7824306507) @@ -83,7 +83,8 @@ BOOL testSetMeasuredDialInPumpMCSpeedOverride( F32 value ); BOOL testResetMeasuredDialInPumpMCSpeedOverride( void ); BOOL testSetMeasuredDialInPumpMCCurrentOverride( F32 value ); -BOOL testResetMeasuredDialInPumpMCCurrentOverride( void ); +BOOL testResetMeasuredDialInPumpMCCurrentOverride( void ); +BOOL testSetDialOutPumpTargetDutyCycle( F32 value ); /**@}*/ Index: firmware/App/Controllers/DialOutFlow.c =================================================================== diff -u -ra6f52e9ca899d4983b18cbde673139aba216e8d5 -raf2cd84d3319b1e298057fe2d329aa7824306507 --- firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision a6f52e9ca899d4983b18cbde673139aba216e8d5) +++ firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision af2cd84d3319b1e298057fe2d329aa7824306507) @@ -104,9 +104,11 @@ #define DOP_PWM_ZERO_OFFSET 0.1F ///< 10% PWM duty cycle = zero speed. /// Macro converts a flow rate to an estimated PWM duty cycle %. -#define DOP_PWM_FROM_ML_PER_MIN(rate) ( ( (rate) * 0.0009 ) + 0.0972 + DOP_PWM_ZERO_OFFSET ) +#define DOP_PWM_FROM_ML_PER_MIN(rate) ( ( ( rate ) * 0.0009 ) + 0.0972 + DOP_PWM_ZERO_OFFSET ) /// Conversion from PWM duty cycle % to commanded pump motor speed. -#define DOP_PWM_TO_MOTOR_SPEED_RPM(pwm) ( ((pwm) - DOP_PWM_ZERO_OFFSET) * 4000.0F ) +#define DOP_PWM_TO_MOTOR_SPEED_RPM(pwm) ( ( ( pwm ) - DOP_PWM_ZERO_OFFSET) * 4000.0F ) +/// Macro converts a PWM to an estimated flow rate. +#define DOP_PWM_FROM_ML_PER_MIN(pwm) ( ( ( pwm - DOP_PWM_ZERO_OFFSET - 0.0972 ) / 0.0009 ) ) #define PUMP_DIR_ERROR_COUNT_MASK 0x3F ///< Bit mask for pump direction error counter. #define DATA_PUBLISH_COUNTER_START_COUNT 40 ///< Data publish counter start count. @@ -1627,4 +1629,26 @@ return result; } +/*********************************************************************//** + * @brief + * The testSetDialInPumpTargetDutyCycle function resets the override of the + * measured dialIn pump motor current. + * @details Inputs: none + * @details Outputs: adcDialInPumpMCCurrentmA + * @return TRUE if reset successful, FALSE if not + *************************************************************************/ +BOOL testSetDialOutPumpTargetDutyCycle( F32 value ) +{ + BOOL result = FALSE; + + if ( TRUE == isTestingActivated() ) + { + targetDialInFlowRate = (S32) DOP_PWM_FROM_ML_PER_MIN( value ); + result = TRUE; + } + + return result; +} + + /**@}*/ Index: firmware/App/Controllers/DialOutFlow.h =================================================================== diff -u -r37a9fd8f15e413db5337371a7d1a1cb65567af7c -raf2cd84d3319b1e298057fe2d329aa7824306507 --- firmware/App/Controllers/DialOutFlow.h (.../DialOutFlow.h) (revision 37a9fd8f15e413db5337371a7d1a1cb65567af7c) +++ firmware/App/Controllers/DialOutFlow.h (.../DialOutFlow.h) (revision af2cd84d3319b1e298057fe2d329aa7824306507) @@ -100,6 +100,7 @@ BOOL testResetMeasuredDialOutPumpMCSpeedOverride( void ); BOOL testSetMeasuredDialOutPumpMCCurrentOverride( F32 value ); BOOL testResetMeasuredDialOutPumpMCCurrentOverride( void ); +BOOL testSetDialOutPumpTargetDutyCycle( F32 value ); /**@}*/ Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r94dab74a6432263dc4569e0cf8f9fa0b01bf1917 -raf2cd84d3319b1e298057fe2d329aa7824306507 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 94dab74a6432263dc4569e0cf8f9fa0b01bf1917) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision af2cd84d3319b1e298057fe2d329aa7824306507) @@ -1650,7 +1650,19 @@ handleTestCurrentTreamtmentParametersRequest( message ); break; + case MSG_ID_HD_BLOOD_PUMP_SET_PWM: + handleTestBloodPumpSetPWM( message ); + break; + case MSG_ID_HD_DIAL_IN_SET_PWM: + handleTestDialInSetPWM( message ); + break; + + case MSG_ID_HD_DIAL_OUT_SET_PWM: + handleTestDialOutSetPWM( message ); + break; + + // The default cannot be reached in VectorCAST since the cases are run in a for loop default: // Unrecognized message ID received - ignore Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -rce247681f11b5e164e00992fb73ba5c595d349aa -raf2cd84d3319b1e298057fe2d329aa7824306507 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision ce247681f11b5e164e00992fb73ba5c595d349aa) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision af2cd84d3319b1e298057fe2d329aa7824306507) @@ -7341,4 +7341,86 @@ return result; } +/*********************************************************************//** +* @brief +* The handleTestBloodPumpSetPWM function handles a request to override +* the Blood pumps duty cycle. +* @details Inputs: none +* @details Outputs: message handled +* @param message a pointer to the message to handle +* @return none +*************************************************************************/ +void handleTestBloodPumpSetPWM( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // verify payload length + if ( sizeof( F32 ) == message->hdr.payloadLen ) + { + F32 payLoad; + + memcpy( &payLoad, message->payload, sizeof( F32 ) ); + + result = testSetBloodPumpTargetDutyCycle( payLoad ); + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** +* @brief +* The handleTestDialInSetPWM function handles a request to override +* the Dialysate Inlet pumps duty cycle. +* @details Inputs: none +* @details Outputs: message handled +* @param message a pointer to the message to handle +* @return none +*************************************************************************/ +void handleTestDialInSetPWM( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // verify payload length + if ( sizeof( F32 ) == message->hdr.payloadLen ) + { + F32 payLoad; + + memcpy( &payLoad, message->payload, sizeof( F32 ) ); + + result = testSetDialInPumpTargetDutyCycle( payLoad ); + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** +* @brief +* The handleTestDialOutSetPWM function handles a request to override +* the Dialysate Outlet pumps duty cycle. +* @details Inputs: none +* @details Outputs: message handled +* @param message a pointer to the message to handle +* @return none +*************************************************************************/ +void handleTestDialOutSetPWM( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // verify payload length + if ( sizeof( F32 ) == message->hdr.payloadLen ) + { + F32 payLoad; + + memcpy( &payLoad, message->payload, sizeof( F32 ) ); + + result = testSetDialOutPumpTargetDutyCycle( payLoad ); + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + + /**@}*/