Index: firmware/App/Common.h =================================================================== diff -u -rcb5c7321fae3036d7a3641ae49097b4b361270f5 -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 --- firmware/App/Common.h (.../Common.h) (revision cb5c7321fae3036d7a3641ae49097b4b361270f5) +++ firmware/App/Common.h (.../Common.h) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) @@ -22,7 +22,7 @@ // ********** build switches ********** #ifndef _VECTORCAST_ - #define RM46_EVAL_BOARD_TARGET 1 +// #define RM46_EVAL_BOARD_TARGET 1 // #define SIMULATE_UI 1 #endif @@ -90,6 +90,7 @@ #define GET_MSW_OF_LONG(l) ((U16)(((l) >> SHIFT_16_BITS_FOR_WORD_SHIFT) & MASK_OFF_MSW)) #define MAKE_WORD_OF_BYTES(h,l) ((((U16)(h) << SHIFT_8_BITS_FOR_BYTE_SHIFT) & MASK_OFF_LSB) | ((U16)(l) & MASK_OFF_MSB)) #define MAKE_LONG_OF_WORDS(h,l) ((((U32)(h) << SHIFT_16_BITS_FOR_WORD_SHIFT) & MASK_OFF_LSW) | ((U32)(l) & MASK_OFF_MSW)) +#define SIGN_FROM_12_BIT_VALUE(v) ((S16)(v) - 2048) // **** VectorCAST Definitions **** Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -rcb5c7321fae3036d7a3641ae49097b4b361270f5 -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision cb5c7321fae3036d7a3641ae49097b4b361270f5) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) @@ -29,8 +29,8 @@ #define MAX_BLOOD_FLOW_RATE 600 // mL/min #define MAX_BLOOD_PUMP_PWM_STEP_CHANGE 0.005 // duty cycle TODO - fixed or parameterized or set in motor controller? -#define BP_SPEED_ADC_2_RPM_FACTOR 0.05 // conversion factor from ADC counts to RPM for blood pump motor TODO - set appropriate value -#define BP_CURRENT_ADC_2_MA_FACTOR 0.1 // conversion factor from ADC counts to mA for blood pump motor TODO - set appropriate value +#define BP_SPEED_ADC_2_RPM_FACTOR 1.0 // conversion factor from ADC counts to RPM for blood pump motor TODO - set appropriate value +#define BP_CURRENT_ADC_2_MA_FACTOR 1.0 // conversion factor from ADC counts to mA for blood pump motor TODO - set appropriate value typedef enum BloodPump_States { @@ -50,8 +50,8 @@ } BLOOD_FLOW_SELF_TEST_STATE_T; // CAN3 port pin assignments for pump stop and direction outputs -#define STOP_CAN3_PORT_MASK 0x00000002 // (Tx - re-purposed as output GPIO) -#define DIR_CAN3_PORT_MASK 0x00000002 // (Rx - re-purposed as output GPIO) +#define STOP_CAN3_PORT_MASK 0x00000002 // (Tx - re-purposed as output GPIO for blood pump stop signal) +#define DIR_CAN3_PORT_MASK 0x00000002 // (Rx - re-purposed as output GPIO for blood pump direction signal) // blood pump stop and direction macros #define SET_BP_DIR() {canREG3->RIOC |= DIR_CAN3_PORT_MASK;} #define SET_BP_STOP() {canREG3->TIOC |= STOP_CAN3_PORT_MASK;} @@ -62,15 +62,16 @@ static BLOOD_PUMP_STATE_T bloodPumpState = BLOOD_PUMP_OFF_STATE; // current state of blood flow controller state machine static BOOL isBloodPumpOn = FALSE; // blood pump is currently running -static U32 bloodPumpTargetFlowRate = 0; // requested blood flow rate -static U32 bloodPumpTargetFlowRateSet = 0; // currently set blood flow rate +DATA_DECL( U32, TargetBloodFlowRate, targetBloodFlowRate, 0, 0 ); // requested blood flow rate +static U32 targetBloodFlowRateSet = 0; // currently set blood flow rate static F32 bloodPumpPWMDutyCyclePct = 0.0; // initial blood pump PWM duty cycle static F32 bloodPumpPWMDutyCyclePctSet = 0.0; // currently set blood pump PWM duty cycle static MOTOR_DIR_T bloodPumpDirection = MOTOR_DIR_FORWARD; // requested blood flow direction static MOTOR_DIR_T bloodPumpDirectionSet = MOTOR_DIR_FORWARD; // currently set blood flow direction -static F32 adcBloodPumpSpeedRPM = 0; -static F32 adcBloodPumpCurrentmA = 0; +DATA_DECL( F32, MeasuredBloodFlowRate, measuredBloodFlowRate, 0.0, 0.0 ); // requested blood flow rate +DATA_DECL( F32, MeasuredBloodPumpSpeed, adcBloodPumpSpeedRPM, 0.0, 0.0 ); // requested blood flow rate +DATA_DECL( F32, MeasuredBloodPumpCurrent, adcBloodPumpCurrentmA, 0.0, 0.0 ); // requested blood flow rate static BLOOD_FLOW_SELF_TEST_STATE_T bloodPumpSelfTestState = BLOOD_FLOW_SELF_TEST_STATE_START; static U32 bloodPumpSelfTestTimerCount = 0; @@ -106,7 +107,7 @@ * pump direction. * @details * Inputs : isBloodPumpOn, bloodPumpDirectionSet - * Outputs : bloodPumpTargetFlowRate, bloodPumpdirection, bloodPumpPWMDutyCyclePct + * Outputs : targetBloodFlowRate, bloodPumpdirection, bloodPumpPWMDutyCyclePct * @param flowRate : new target blood flow rate * @param dir : new blood flow direction * @return TRUE if new flow rate & dir are set, FALSE if not @@ -121,7 +122,7 @@ // verify flow rate if ( flowRate <= MAX_BLOOD_FLOW_RATE ) { - bloodPumpTargetFlowRate = flowRate; + targetBloodFlowRate.data = flowRate; bloodPumpDirection = dir; // TODO - this is temporary conversion to initial duty cycle bloodPumpPWMDutyCyclePct = ( (F32)flowRate / 800.0 ); @@ -140,7 +141,7 @@ } break; case BLOOD_PUMP_CONTROL_TO_TARGET_STATE: // start ramp in appropriate direction - if ( bloodPumpTargetFlowRate < bloodPumpTargetFlowRateSet ) + if ( targetBloodFlowRateSet > getTargetBloodFlowRate() ) { bloodPumpState = BLOOD_PUMP_RAMPING_DOWN_STATE; } @@ -175,8 +176,11 @@ *************************************************************************/ void execBloodFlowMonitor( void ) { - adcBloodPumpSpeedRPM = (F32)getIntADCReading( INT_ADC_BLOOD_PUMP_SPEED ) * BP_SPEED_ADC_2_RPM_FACTOR; - adcBloodPumpCurrentmA = (F32)getIntADCReading( INT_ADC_BLOOD_PUMP_MOTOR_CURRENT ) * BP_CURRENT_ADC_2_MA_FACTOR; + U16 bpRPM = getIntADCReading( INT_ADC_BLOOD_PUMP_SPEED ); + U16 bpmA = getIntADCReading( INT_ADC_BLOOD_PUMP_MOTOR_CURRENT ); + + adcBloodPumpSpeedRPM.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpRPM)) * BP_SPEED_ADC_2_RPM_FACTOR; + adcBloodPumpCurrentmA.data = (F32)(SIGN_FROM_12_BIT_VALUE(bpmA)) * BP_CURRENT_ADC_2_MA_FACTOR; } /************************************************************************* @@ -219,7 +223,7 @@ * The handleBloodPumpOffState function handles the blood pump off state \n * of the blood pump controller state machine. * @details - * Inputs : bloodPumpTargetFlowRate, bloodPumpDirection + * Inputs : targetBloodFlowRate, bloodPumpDirection * Outputs : bloodPumpPWMDutyCyclePctSet, bloodPumpDirectionSet, isBloodPumpOn * @param none * @return next state @@ -229,7 +233,7 @@ BLOOD_PUMP_STATE_T result = BLOOD_PUMP_OFF_STATE; // if we've been given a flow rate, setup ramp up and transition to ramp up state - if ( bloodPumpTargetFlowRate > 0 ) + if ( getTargetBloodFlowRate() > 0 ) { // set initial PWM duty cycle bloodPumpPWMDutyCyclePctSet = MAX_BLOOD_PUMP_PWM_STEP_CHANGE; @@ -261,7 +265,7 @@ BLOOD_PUMP_STATE_T result = BLOOD_PUMP_RAMPING_UP_STATE; // have we been asked to stop the blood pump? - if ( 0 == bloodPumpTargetFlowRate ) + if ( 0 == getTargetBloodFlowRate() ) { // start ramp down to stop bloodPumpPWMDutyCyclePctSet -= MAX_BLOOD_PUMP_PWM_STEP_CHANGE; @@ -271,7 +275,7 @@ // have we reached end of ramp up? else if ( bloodPumpPWMDutyCyclePctSet >= bloodPumpPWMDutyCyclePct ) { - bloodPumpTargetFlowRateSet = bloodPumpTargetFlowRate; + targetBloodFlowRateSet = getTargetBloodFlowRate(); result = BLOOD_PUMP_CONTROL_TO_TARGET_STATE; } // continue ramp up @@ -302,7 +306,7 @@ if ( bloodPumpPWMDutyCyclePctSet < MAX_BLOOD_PUMP_PWM_STEP_CHANGE ) { isBloodPumpOn = FALSE; - bloodPumpTargetFlowRateSet = 0; + targetBloodFlowRateSet = 0; bloodPumpPWMDutyCyclePctSet = 0.0; etpwmSetCmpA( etpwmREG1, 0 ); etpwmStopTBCLK(); @@ -312,7 +316,7 @@ // have we reached end of ramp down? else if ( bloodPumpPWMDutyCyclePctSet <= bloodPumpPWMDutyCyclePct ) { - bloodPumpTargetFlowRateSet = bloodPumpTargetFlowRate; + targetBloodFlowRateSet = getTargetBloodFlowRate(); result = BLOOD_PUMP_CONTROL_TO_TARGET_STATE; } // continue ramp down @@ -356,6 +360,7 @@ static void stopBloodPump( void ) { SET_BP_STOP(); +// CLR_BP_STOP(); } /************************************************************************* @@ -370,6 +375,7 @@ static void releaseBloodPumpStop( void ) { CLR_BP_STOP(); +// SET_BP_STOP(); } /************************************************************************* @@ -388,12 +394,12 @@ { case MOTOR_DIR_FORWARD: bloodPumpDirectionSet = dir; - CLR_BP_DIR(); + SET_BP_DIR(); break; case MOTOR_DIR_REVERSE: bloodPumpDirectionSet = dir; - SET_BP_DIR(); + CLR_BP_DIR(); break; default: @@ -402,4 +408,114 @@ } } +/************************************************************************* + * @brief getTargetBloodFlowRate + * The getTargetBloodFlowRate function gets the current target blood flow \n + * rate. + * @details + * Inputs : targetBloodFlowRate + * Outputs : none + * @param none + * @return the current target blood flow rate (in mL/min). + *************************************************************************/ +DATA_GET( U32, getTargetBloodFlowRate, targetBloodFlowRate ) +/************************************************************************* + * @brief getMeasuredBloodFlowRate + * The getMeasuredBloodFlowRate function gets the measured blood flow \n + * rate. + * @details + * Inputs : measuredBloodFlowRate + * Outputs : none + * @param none + * @return the current blood flow rate (in mL/min). + *************************************************************************/ +DATA_GET( F32, getMeasuredBloodFlowRate, measuredBloodFlowRate ) + +/************************************************************************* + * @brief getMeasuredBloodPumpSpeed + * The getMeasuredBloodPumpSpeed function gets the measured blood pump \n + * speed. + * @details + * Inputs : adcBloodPumpSpeedRPM + * Outputs : none + * @param none + * @return the current blood pump speed (in RPM). + *************************************************************************/ +DATA_GET( F32, getMeasuredBloodPumpSpeed, adcBloodPumpSpeedRPM ) + +/************************************************************************* + * @brief getMeasuredBloodPumpCurrent + * The getMeasuredBloodPumpCurrent function gets the measured blood pump \n + * current. + * @details + * Inputs : adcBloodPumpCurrentmA + * Outputs : none + * @param none + * @return the current blood pump current (in mA). + *************************************************************************/ +DATA_GET( F32, getMeasuredBloodPumpCurrent, adcBloodPumpCurrentmA ) + + +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ + + +/************************************************************************* + * @brief testSetTargetBloodFlowRateOverride and testResetTargetBloodFlowRateOverride + * The testSetTargetBloodFlowRateOverride function overrides the target \n + * blood flow rate. \n + * The testResetTargetBloodFlowRateOverride function resets the override of the \n + * target blood flow rate. + * @details + * Inputs : none + * Outputs : targetBloodFlowRate + * @param value : override target blood flow rate (in mL/min) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( U32, testSetTargetBloodFlowRateOverride, testResetTargetBloodFlowRateOverride, targetBloodFlowRate ) + +/************************************************************************* + * @brief testSetMeasuredBloodFlowRateOverride and testResetMeasuredBloodFlowRateOverride + * The testResetMeasuredBloodFlowRateOverride function overrides the measured \n + * blood flow rate. \n + * The testResetOffButtonStateOverride function resets the override of the \n + * measured blood flow rate. + * @details + * Inputs : none + * Outputs : measuredBloodFlowRate + * @param value : override measured blood flow rate (in mL/min) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodFlowRateOverride, testResetMeasuredBloodFlowRateOverride, measuredBloodFlowRate ) + +/************************************************************************* + * @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 + * @param value : override measured blood pump speed (in RPM) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpSpeedOverride, testResetMeasuredBloodPumpSpeedOverride, adcBloodPumpSpeedRPM ) + +/************************************************************************* + * @brief testSetMeasuredBloodPumpCurrentOverride and testResetMeasuredBloodPumpCurrentOverride + * The testSetMeasuredBloodPumpCurrentOverride function overrides the measured \n + * blood pump motor current. \n + * The testResetMeasuredBloodPumpCurrentOverride function resets the override of the \n + * measured blood pump motor current. + * @details + * Inputs : none + * Outputs : adcBloodPumpCurrentmA + * @param value : override measured blood pump current (in mA) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +DATA_OVERRIDE_FUNC( F32, testSetMeasuredBloodPumpCurrentOverride, testResetMeasuredBloodPumpCurrentOverride, adcBloodPumpCurrentmA ) + + Index: firmware/App/Controllers/BloodFlow.h =================================================================== diff -u -r40bcef6aa65af6c93ce937c6c4aa2de13e8a78d3 -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 --- firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision 40bcef6aa65af6c93ce937c6c4aa2de13e8a78d3) +++ firmware/App/Controllers/BloodFlow.h (.../BloodFlow.h) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) @@ -32,4 +32,18 @@ SELF_TEST_STATUS_T execBloodFlowTest( void ); +DATA_GET_PROTOTYPE( U32, getTargetBloodFlowRate ); +//DATA_GET_PROTOTYPE( F32, getMeasuredBloodFlowRate) +//DATA_GET_PROTOTYPE( F32, getMeasuredBloodPumpSpeed ); +//DATA_GET_PROTOTYPE( F32, getMeasuredBloodPumpCurrent ); + +BOOL testSetTargetBloodFlowRateOverride( U32 value ); +BOOL testResetTargetBloodFlowRateOverride( void ); +BOOL testSetMeasuredBloodFlowRateOverride( F32 value ); +BOOL testResetMeasuredBloodFlowRateOverride( void ); +BOOL testSetMeasuredBloodPumpSpeedOverride( F32 value ); +BOOL testResetMeasuredBloodPumpSpeedOverride( void ); +BOOL testSetMeasuredBloodPumpCurrentOverride( F32 value ); +BOOL testResetMeasuredBloodPumpCurrentOverride( void ); + #endif Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -reff7b1575f008f81b29ef906f6346fac6012d3ab -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision eff7b1575f008f81b29ef906f6346fac6012d3ab) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) @@ -668,9 +668,30 @@ handleTestWatchdogCheckInStateOverrideRequest( message ); break; + case MSG_ID_ALARM_STATE_OVERRIDE: + //handleTestAlarmStateOverrideRequest( message ); + break; + + case MSG_ID_BLOOD_FLOW_SET_PT_OVERRIDE: + handleTestBloodFlowSetPointOverrideRequest( message ); + break; + + case MSG_ID_BLOOD_FLOW_MEAS_OVERRIDE: + handleTestBloodFlowMeasuredOverrideRequest( message ); + break; + + case MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE: + handleTestBloodPumpMeasuredSpeedOverrideRequest( message ); + break; + + case MSG_ID_BLOOD_PUMP_MEAS_CURR_OVERRIDE: + handleTestBloodPumpMeasuredCurrentOverrideRequest( message ); + break; + default: // TODO - unrecognized message ID received - ignore break; } } } + Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -reff7b1575f008f81b29ef906f6346fac6012d3ab -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision eff7b1575f008f81b29ef906f6346fac6012d3ab) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) @@ -20,6 +20,7 @@ #include "Common.h" #include "AlarmLamp.h" +#include "BloodFlow.h" #include "Buttons.h" #include "MsgQueues.h" #include "WatchdogMgmt.h" @@ -293,29 +294,8 @@ * @param message : a pointer to the message to handle * @return none *************************************************************************/ -void handleTestOffButtonStateOverrideRequest( MESSAGE_T *message ) -{ - TEST_OVERRIDE_CARGO_T cargo; - BOOL result = FALSE; +DATA_OVERRIDE_HANDLER_FUNC( BUTTON_STATE_T, handleTestOffButtonStateOverrideRequest, testSetOffButtonStateOverride, testResetOffButtonStateOverride ) - // verify cargo length - if ( sizeof(TEST_OVERRIDE_CARGO_T) == message->hdr.cargoLen ) - { - memcpy( &cargo, message->cargo, sizeof(TEST_OVERRIDE_CARGO_T) ); - - if ( FALSE == cargo.reset ) - { - result = testSetOffButtonStateOverride( (BUTTON_STATE_T)(cargo.state) ); - } - else - { - result = testResetOffButtonStateOverride(); - } - } - // respond to request - sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); -} - /************************************************************************* * @brief handleTestStopButtonStateOverrideRequest * The handleTestStopButtonStateOverrideRequest function handles a request to \n @@ -326,29 +306,8 @@ * @param message : a pointer to the message to handle * @return none *************************************************************************/ -void handleTestStopButtonStateOverrideRequest( MESSAGE_T *message ) -{ - TEST_OVERRIDE_CARGO_T cargo; - BOOL result = FALSE; +DATA_OVERRIDE_HANDLER_FUNC( BUTTON_STATE_T, handleTestStopButtonStateOverrideRequest, testSetStopButtonStateOverride, testResetStopButtonStateOverride ) - // verify cargo length - if ( sizeof(TEST_OVERRIDE_CARGO_T) == message->hdr.cargoLen ) - { - memcpy( &cargo, message->cargo, sizeof(TEST_OVERRIDE_CARGO_T) ); - - if ( FALSE == cargo.reset ) - { - result = testSetStopButtonStateOverride( (BUTTON_STATE_T)(cargo.state) ); - } - else - { - result = testResetStopButtonStateOverride(); - } - } - // respond to request - sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); -} - /************************************************************************* * @brief handleTestAlarmLampPatternOverrideRequest * The handleTestAlarmLampPatternOverrideRequest function handles a request to \n @@ -359,59 +318,77 @@ * @param message : a pointer to the message to handle * @return none *************************************************************************/ -void handleTestAlarmLampPatternOverrideRequest( MESSAGE_T *message ) -{ - TEST_OVERRIDE_CARGO_T cargo; - BOOL result = FALSE; +DATA_OVERRIDE_HANDLER_FUNC( LAMP_PATTERN_T, handleTestAlarmLampPatternOverrideRequest, testSetCurrentLampPatternOverride, testResetCurrentLampPatternOverride ) - // verify cargo length - if ( sizeof(TEST_OVERRIDE_CARGO_T) == message->hdr.cargoLen ) - { - memcpy( &cargo, message->cargo, sizeof(TEST_OVERRIDE_CARGO_T) ); +/************************************************************************* + * @brief handleTestWatchdogCheckInStateOverrideRequest + * The handleTestWatchdogCheckInStateOverrideRequest function handles a \n + * request to override the check-in status of a given task. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_ARRAY_OVERRIDE_HANDLER_FUNC( BOOL, handleTestWatchdogCheckInStateOverrideRequest, testSetWatchdogTaskCheckInOverride, testResetWatchdogTaskCheckInOverride ) - if ( FALSE == cargo.reset ) - { - result = testSetCurrentLampPatternOverride( (LAMP_PATTERN_T)(cargo.state) ); - } - else - { - result = testResetCurrentLampPatternOverride(); - } - } - // respond to request - sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); -} +/************************************************************************* + * @brief handleTestAlarmStateOverrideRequest + * The handleTestAlarmStateOverrideRequest function handles a request to \n + * override the active status of a given alarm. + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +//DATA_ARRAY_OVERRIDE_HANDLER_FUNC( BOOL, handleTestAlarmStateOverrideRequest, testSetAlarmStateOverride, testResetAlarmStateOverride ) /************************************************************************* - * @brief handleTestAlarmLampPatternOverrideRequest - * The handleTestAlarmLampPatternOverrideRequest function handles a request to \n - * override the alarm lamp pattern. + * @brief handleTestBloodFlowSetPointOverrideRequest + * The handleTestBloodFlowSetPointOverrideRequest function handles a request to \n + * override the set point for the blood flow rate (mL/min). * @details * Inputs : none * Outputs : message handled * @param message : a pointer to the message to handle * @return none *************************************************************************/ -void handleTestWatchdogCheckInStateOverrideRequest( MESSAGE_T *message ) -{ - TEST_OVERRIDE_ARRAY_CARGO_T cargo; - BOOL result = FALSE; +DATA_OVERRIDE_HANDLER_FUNC( U32, handleTestBloodFlowSetPointOverrideRequest, testSetTargetBloodFlowRateOverride, testResetTargetBloodFlowRateOverride ) - // verify cargo length - if ( sizeof(TEST_OVERRIDE_ARRAY_CARGO_T) == message->hdr.cargoLen ) - { - memcpy( &cargo, message->cargo, sizeof(TEST_OVERRIDE_ARRAY_CARGO_T) ); +/************************************************************************* + * @brief handleTestBloodFlowMeasuredOverrideRequest + * The handleTestBloodFlowMeasuredOverrideRequest function handles a request to \n + * override the measured blood 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, handleTestBloodFlowMeasuredOverrideRequest, testSetMeasuredBloodFlowRateOverride, testResetMeasuredBloodFlowRateOverride ) - if ( FALSE == cargo.reset ) - { - result = testSetWatchdogTaskCheckInOverride( cargo.index, (BOOL)(cargo.state) ); - } - else - { - result = testResetWatchdogTaskCheckInOverride( cargo.index ); - } - } - // respond to request - sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); -} +/************************************************************************* + * @brief handleTestBloodPumpMeasuredSpeedOverrideRequest + * The handleTestBloodPumpMeasuredSpeedOverrideRequest function handles a request to \n + * override the measured blood 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, handleTestBloodPumpMeasuredSpeedOverrideRequest, testSetMeasuredBloodPumpSpeedOverride, testResetMeasuredBloodPumpSpeedOverride ) +/************************************************************************* + * @brief handleTestBloodPumpMeasuredCurrentOverrideRequest + * The handleTestBloodPumpMeasuredCurrentOverrideRequest function handles a request to \n + * override the measured blood pump current (mA). + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +DATA_OVERRIDE_HANDLER_FUNC( F32, handleTestBloodPumpMeasuredCurrentOverrideRequest, testSetMeasuredBloodPumpCurrentOverride, testResetMeasuredBloodPumpCurrentOverride ) + Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -reff7b1575f008f81b29ef906f6346fac6012d3ab -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision eff7b1575f008f81b29ef906f6346fac6012d3ab) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) @@ -26,13 +26,18 @@ { MSG_ID_UNUSED = 0, MSG_ID_OFF_BUTTON_PRESS, - MSG_ID_FIRST_TESTER_MESSAGE = 8000, + MSG_ID_FIRST_TESTER_MESSAGE = 0x8000, MSG_ID_TESTER_LOGIN_REQUEST = MSG_ID_FIRST_TESTER_MESSAGE, MSG_ID_HD_MESSAGE, MSG_ID_OFF_BUTTON_STATE_OVERRIDE, MSG_ID_STOP_BUTTON_STATE_OVERRIDE, MSG_ID_ALARM_LAMP_PATTERN_OVERRIDE, MSG_ID_WATCHDOG_TASK_CHECKIN_OVERRIDE, + MSG_ID_ALARM_STATE_OVERRIDE, + MSG_ID_BLOOD_FLOW_SET_PT_OVERRIDE, + MSG_ID_BLOOD_FLOW_MEAS_OVERRIDE, + MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE, + MSG_ID_BLOOD_PUMP_MEAS_CURR_OVERRIDE, NUM_OF_MSG_IDS } MSG_ID_T; @@ -66,4 +71,19 @@ // MSG_ID_WATCHDOG_TASK_CHECKIN_OVERRIDE: void handleTestWatchdogCheckInStateOverrideRequest( MESSAGE_T *message ); +// MSG_ID_ALARM_STATE_OVERRIDE +void handleTestAlarmStateOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_BLOOD_FLOW_SET_PT_OVERRIDE +void handleTestBloodFlowSetPointOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_BLOOD_FLOW_MEAS_OVERRIDE +void handleTestBloodFlowMeasuredOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_BLOOD_PUMP_MEAS_SPEED_OVERRIDE +void handleTestBloodPumpMeasuredSpeedOverrideRequest( MESSAGE_T *message ); + +// MSG_ID_BLOOD_PUMP_MEAS_CURR_OVERRIDE +void handleTestBloodPumpMeasuredCurrentOverrideRequest( MESSAGE_T *message ); + #endif Index: firmware/App/Services/Utilities.c =================================================================== diff -u -r28e8929e62c231c1fc9fbcb8efe6613e930a291b -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 --- firmware/App/Services/Utilities.c (.../Utilities.c) (revision 28e8929e62c231c1fc9fbcb8efe6613e930a291b) +++ firmware/App/Services/Utilities.c (.../Utilities.c) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) @@ -26,38 +26,39 @@ // ********** private data ********** const U16 crc16_table[] = -{ 0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf, - 0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7, - 0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e, - 0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876, - 0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd, - 0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5, - 0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c, - 0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974, - 0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb, - 0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3, - 0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a, - 0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72, - 0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9, - 0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1, - 0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738, - 0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70, - 0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7, - 0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff, - 0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036, - 0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e, - 0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5, - 0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd, - 0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134, - 0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c, - 0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3, - 0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb, - 0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232, - 0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a, - 0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1, - 0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9, - 0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330, - 0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78 +{ + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, + 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, + 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, + 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, + 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, + 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, + 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, + 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, + 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, + 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, + 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, + 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, + 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, + 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, + 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, + 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, + 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, + 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, + 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, + 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, + 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 }; const U08 crc8_table[] = { @@ -99,7 +100,7 @@ while ( len-- > 0 ) { - crc = (crc >> SHIFT_8_BITS_FOR_BYTE_SHIFT) ^ crc16_table[*address ^ (crc & MASK_OFF_MSB)]; + crc = (crc << SHIFT_8_BITS_FOR_BYTE_SHIFT) ^ crc16_table[*address ^ ((crc >> SHIFT_8_BITS_FOR_BYTE_SHIFT) & MASK_OFF_MSB)]; address++; } Index: firmware/App/TestSupport.h =================================================================== diff -u -reff7b1575f008f81b29ef906f6346fac6012d3ab -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 --- firmware/App/TestSupport.h (.../TestSupport.h) (revision eff7b1575f008f81b29ef906f6346fac6012d3ab) +++ firmware/App/TestSupport.h (.../TestSupport.h) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) @@ -199,4 +199,58 @@ return result; \ } +// DATA_OVERRIDE_HANDLER_FUNC - creates an override and a reset override handler function for a DATA +// t = data's type +// h_name = name of handler function +// o_name = name of override function +// r_name = name of reset override function +#define DATA_OVERRIDE_HANDLER_FUNC( t, h_name, o_name, r_name ) \ +void h_name( MESSAGE_T *message ) \ +{ \ + TEST_OVERRIDE_CARGO_T cargo; \ + BOOL result = FALSE; \ + /* verify cargo length */ \ + if ( sizeof(TEST_OVERRIDE_CARGO_T) == message->hdr.cargoLen ) \ + { \ + memcpy( &cargo, message->cargo, sizeof(TEST_OVERRIDE_CARGO_T) ); \ + if ( FALSE == cargo.reset ) \ + { \ + result = o_name( (t)(cargo.state) ); \ + } \ + else \ + { \ + result = r_name(); \ + } \ + } \ + /* respond to request */ \ + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); \ +} + +// DATA_ARRAY_OVERRIDE_HANDLER_FUNC - creates an override and a reset override handler function for a DATA array +// t = data's type +// h_name = name of handler function +// o_name = name of override function +// r_name = name of reset override function +#define DATA_ARRAY_OVERRIDE_HANDLER_FUNC( t, h_name, o_name, r_name ) \ +void h_name( MESSAGE_T *message ) \ +{ \ + TEST_OVERRIDE_ARRAY_CARGO_T cargo; \ + BOOL result = FALSE; \ + /* verify cargo length */ \ + if ( sizeof(TEST_OVERRIDE_ARRAY_CARGO_T) == message->hdr.cargoLen ) \ + { \ + memcpy( &cargo, message->cargo, sizeof(TEST_OVERRIDE_ARRAY_CARGO_T) ); \ + if ( FALSE == cargo.reset ) \ + { \ + result = o_name( cargo.index, (t)(cargo.state) ); \ + } \ + else \ + { \ + result = r_name( cargo.index ); \ + } \ + } \ + /* respond to request */ \ + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); \ +} + #endif Index: firmware/HD.dil =================================================================== diff -u -rcb5c7321fae3036d7a3641ae49097b4b361270f5 -r6b6b337c1c0e7dd7c1b7311a39596473d7214ee4 --- firmware/HD.dil (.../HD.dil) (revision cb5c7321fae3036d7a3641ae49097b4b361270f5) +++ firmware/HD.dil (.../HD.dil) (revision 6b6b337c1c0e7dd7c1b7311a39596473d7214ee4) @@ -1,4 +1,4 @@ -# RM46L852PGE 11/08/19 14:28:44 +# RM46L852PGE 11/11/19 14:34:38 # ARCH=RM46L852PGE #