Index: firmware/App/Controllers/AlarmLamp.c =================================================================== diff -u -r07b9515c080aa68fecfa331cbc593adea4c0b8dc -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Controllers/AlarmLamp.c (.../AlarmLamp.c) (revision 07b9515c080aa68fecfa331cbc593adea4c0b8dc) +++ firmware/App/Controllers/AlarmLamp.c (.../AlarmLamp.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -53,8 +53,8 @@ // ********** private data ********** -DATA_DECL( LAMP_PATTERN_T, LampPattern, currentLampPattern, LAMP_PATTERN_OFF, LAMP_PATTERN_FAULT ); -static LAMP_PATTERN_T pendingLampPattern = LAMP_PATTERN_OFF; +DATA_DECL( LAMP_PATTERN_T, LampPattern, currentLampPattern, LAMP_PATTERN_MANUAL, LAMP_PATTERN_FAULT ); +static LAMP_PATTERN_T pendingLampPattern = LAMP_PATTERN_MANUAL; static U32 currentLampPatternStep = 0; static U32 lampPatternStepTimer = 0; @@ -86,7 +86,7 @@ *************************************************************************/ void initAlarmLamp( void ) { - pendingLampPattern = LAMP_PATTERN_OFF; + pendingLampPattern = LAMP_PATTERN_MANUAL; currentLampPatternStep = 0; lampPatternStepTimer = 0; @@ -218,6 +218,7 @@ { alarmLampSelfTestState = ALARM_LAMP_SELF_TEST_STATE_COMPLETE; setCPLDLampGreen( PIN_SIGNAL_LOW ); + requestAlarmLampPattern( LAMP_PATTERN_OK ); result = SELF_TEST_STATUS_PASSED; } break; Index: firmware/App/Controllers/BloodFlow.c =================================================================== diff -u -rea6ff77291eee02f351953b76c6720cf860c8be7 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision ea6ff77291eee02f351953b76c6720cf860c8be7) +++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -632,7 +632,7 @@ // TODO - temporary debug code - remove later 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, (S32)pumpPWMPctDutyCycle ); + sprintf( debugFlowStr, "Blood Set Pt.:%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 broadcastBloodFlowData( flowStPt, measFlow, measRotSpd, measSpd, measMCSpd, measMCCurr, pumpPWMPctDutyCycle ); Index: firmware/App/Controllers/DialInFlow.c =================================================================== diff -u -r8f8776e48894e31cba816ebef2edf96d14306ba8 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 8f8776e48894e31cba816ebef2edf96d14306ba8) +++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -104,7 +104,7 @@ // ********** private data ********** static DIAL_IN_PUMP_STATE_T dialInPumpState = DIAL_IN_PUMP_OFF_STATE; // current state of dialIn flow controller state machine -static U32 dialInFlowDataPublicationTimerCounter = 0; // used to schedule dialIn flow data publication to CAN bus +static U32 dialInFlowDataPublicationTimerCounter = 5; // used to schedule dialIn flow data publication to CAN bus static BOOL isDialInPumpOn = FALSE; // dialIn pump is currently running static F32 dialInPumpPWMDutyCyclePct = 0.0; // initial dialIn pump PWM duty cycle static F32 dialInPumpPWMDutyCyclePctSet = 0.0; // currently set dialIn pump PWM duty cycle @@ -633,7 +633,7 @@ // TODO - temporary debug code - remove later 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, (S32)pumpPWMPctDutyCycle ); + sprintf( debugFlowStr, "Dial. Set Pt:%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 broadcastDialInFlowData( flowStPt, measFlow, measRotSpd, measSpd, measMCSpd, measMCCurr, pumpPWMPctDutyCycle ); Fisheye: Tag 4a41a54d255afc5cef0599e2a832927ed2b0ee5d refers to a dead (removed) revision in file `firmware/App/Controllers/DialOutUF.c'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 4a41a54d255afc5cef0599e2a832927ed2b0ee5d refers to a dead (removed) revision in file `firmware/App/Controllers/DialOutUF.h'. Fisheye: No comparison available. Pass `N' to diff? Index: firmware/App/Modes/ModeFault.c =================================================================== diff -u -r40bcef6aa65af6c93ce937c6c4aa2de13e8a78d3 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 40bcef6aa65af6c93ce937c6c4aa2de13e8a78d3) +++ firmware/App/Modes/ModeFault.c (.../ModeFault.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -47,8 +47,6 @@ *************************************************************************/ void transitionToFaultMode( void ) { - // temporary test code - solid red alarm lamp - requestAlarmLampPattern( LAMP_PATTERN_FAULT ); } /************************************************************************* Index: firmware/App/Modes/ModeInitPOST.c =================================================================== diff -u -rea6ff77291eee02f351953b76c6720cf860c8be7 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision ea6ff77291eee02f351953b76c6720cf860c8be7) +++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -77,7 +77,6 @@ *************************************************************************/ void transitionToInitAndPOSTMode( void ) { - requestAlarmLampPattern( LAMP_PATTERN_MANUAL ); } /************************************************************************* @@ -200,6 +199,7 @@ } else if ( testStatus == SELF_TEST_STATUS_FAILED ) { + requestAlarmLampPattern( LAMP_PATTERN_FAULT ); tempPOSTPassed = FALSE; result = POST_STATE_FAILED; } Index: firmware/App/Modes/ModeOpParams.c =================================================================== diff -u -r40bcef6aa65af6c93ce937c6c4aa2de13e8a78d3 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Modes/ModeOpParams.c (.../ModeOpParams.c) (revision 40bcef6aa65af6c93ce937c6c4aa2de13e8a78d3) +++ firmware/App/Modes/ModeOpParams.c (.../ModeOpParams.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -55,7 +55,6 @@ void transitionToOpParamsMode( void ) { // temporary test code - alarm lamp fault - requestAlarmLampPattern( LAMP_PATTERN_FAULT ); setBloodPumpTargetFlowRate( 300, MOTOR_DIR_FORWARD ); #ifdef RM46_EVAL_BOARD_TARGET start = getMSTimerCount(); Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r40bcef6aa65af6c93ce937c6c4aa2de13e8a78d3 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 40bcef6aa65af6c93ce937c6c4aa2de13e8a78d3) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -55,7 +55,6 @@ void transitionToPostTreatmentMode( void ) { // temporary test code - alarm lamp high alarm - requestAlarmLampPattern( LAMP_PATTERN_HIGH_ALARM ); setBloodPumpTargetFlowRate( 100, MOTOR_DIR_REVERSE ); #ifdef RM46_EVAL_BOARD_TARGET start = getMSTimerCount(); Index: firmware/App/Modes/ModePreTreat.c =================================================================== diff -u -r40bcef6aa65af6c93ce937c6c4aa2de13e8a78d3 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 40bcef6aa65af6c93ce937c6c4aa2de13e8a78d3) +++ firmware/App/Modes/ModePreTreat.c (.../ModePreTreat.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -55,7 +55,6 @@ void transitionToPreTreatmentMode( void ) { // temporary test code - alarm lamp low alarm - requestAlarmLampPattern( LAMP_PATTERN_LOW_ALARM ); setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD ); #ifdef RM46_EVAL_BOARD_TARGET start = getMSTimerCount(); Index: firmware/App/Modes/ModePrescription.c =================================================================== diff -u -rd9cc76524777a12ba77b58ce95416dddfb032997 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Modes/ModePrescription.c (.../ModePrescription.c) (revision d9cc76524777a12ba77b58ce95416dddfb032997) +++ firmware/App/Modes/ModePrescription.c (.../ModePrescription.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -55,7 +55,6 @@ void transitionToPrescriptionMode( void ) { // temporary test code - alarm lamp Off - requestAlarmLampPattern( LAMP_PATTERN_OFF ); setBloodPumpTargetFlowRate( 500, MOTOR_DIR_FORWARD ); #ifdef RM46_EVAL_BOARD_TARGET // TODO - temporary test code for eval board Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r40bcef6aa65af6c93ce937c6c4aa2de13e8a78d3 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 40bcef6aa65af6c93ce937c6c4aa2de13e8a78d3) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -54,7 +54,6 @@ void transitionToStandbyMode( void ) { // temporary test code - alarm lamp OK - requestAlarmLampPattern( LAMP_PATTERN_OK ); setBloodPumpTargetFlowRate( 0, MOTOR_DIR_FORWARD ); #ifdef RM46_EVAL_BOARD_TARGET start = getMSTimerCount(); Index: firmware/App/Modes/ModeTreatment.c =================================================================== diff -u -rd9cc76524777a12ba77b58ce95416dddfb032997 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision d9cc76524777a12ba77b58ce95416dddfb032997) +++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -54,7 +54,6 @@ void transitionToTreatmentMode( void ) { // temporary test code - alarm lamp medium alarm - requestAlarmLampPattern( LAMP_PATTERN_MED_ALARM ); setBloodPumpTargetFlowRate( 400, MOTOR_DIR_REVERSE ); #ifdef RM46_EVAL_BOARD_TARGET // TODO - temporary test code for eval board Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r8f8776e48894e31cba816ebef2edf96d14306ba8 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 8f8776e48894e31cba816ebef2edf96d14306ba8) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -72,10 +72,12 @@ static g_dmaCTRL pcDMAXmitControlRecord; // DMA transmit control record (UART-debug) static g_dmaCTRL pcDMARecvControlRecord; // DMA receive control record (UART-debug) -static BOOL dgIsCommunicating = FALSE; // has DG sent a message since last check -static BOOL uiIsCommunicating = FALSE; // has UI sent a message since last check -static BOOL uiDidCommunicate = FALSE; // has UI every sent a message +static volatile BOOL canXmitSucceeded = FALSE; // indicates that the last CAN packet transmitted was successful +static volatile BOOL dgIsCommunicating = FALSE; // has DG sent a message since last check +static volatile BOOL uiIsCommunicating = FALSE; // has UI sent a message since last check +static volatile BOOL uiDidCommunicate = FALSE; // has UI every sent a message + // ********** private function prototypes ********** static void initUARTAndDMA( void ); @@ -250,14 +252,12 @@ // message interrupt is for a transmit message box? if ( TRUE == isCANBoxForXmit( srcCANBox ) ) { - if ( FALSE == canIsTxMessagePending( canREG1, srcCANBox ) ) - { - U32 bytesXmitted = transmitNextCANPacket(); + //U32 bytesXmitted = transmitNextCANPacket(); - if ( 0 == bytesXmitted ) - { - signalCANXmitsCompleted(); - } + //if ( 0 == bytesXmitted ) + { + canXmitSucceeded = TRUE; + signalCANXmitsCompleted(); } } else if ( TRUE == isCANBoxForRecv( srcCANBox ) ) @@ -485,33 +485,43 @@ static U32 transmitNextCANPacket( void ) { U32 result = 0; - COMM_BUFFER_T buffer = findNextHighestPriorityCANPacketToTransmit(); - - // if a buffer is found with a packet to transmit, get packet from buffer and transmit it - if ( buffer != COMM_BUFFER_NOT_USED ) + while ( 1 ) // TODO - add timeout and/or max packets per call { - U08 data[ CAN_MESSAGE_PAYLOAD_SIZE ]; - U32 dataSize = getFromCommBuffer( buffer, data, CAN_MESSAGE_PAYLOAD_SIZE ); - CAN_MESSAGE_BOX_T mBox = buffer; // CAN message boxes and comm buffers are aligned + COMM_BUFFER_T buffer = findNextHighestPriorityCANPacketToTransmit(); - // if there's another CAN packet to send, send it - if ( dataSize == CAN_MESSAGE_PAYLOAD_SIZE ) + // if a buffer is found with a packet to transmit, get packet from buffer and transmit it + if ( buffer != COMM_BUFFER_NOT_USED ) { - signalCANXmitsInitiated(); - if ( 0 != canTransmit( canREG1, mBox, data ) ) + U08 data[ CAN_MESSAGE_PAYLOAD_SIZE ]; + U32 dataSize = getFromCommBuffer( buffer, data, CAN_MESSAGE_PAYLOAD_SIZE ); + CAN_MESSAGE_BOX_T mBox = buffer; // CAN message boxes and comm buffers are aligned + + // if there's another CAN packet to send, send it + if ( dataSize == CAN_MESSAGE_PAYLOAD_SIZE ) { - result = CAN_MESSAGE_PAYLOAD_SIZE; + signalCANXmitsInitiated(); + if ( 0 != canTransmit( canREG1, mBox, data ) ) + { + result = CAN_MESSAGE_PAYLOAD_SIZE; + + canXmitSucceeded = FALSE; + while ( FALSE == canXmitSucceeded ); // TODO - add timeout (2ms) + } + else + { + signalCANXmitsCompleted(); + // TODO - shouldn't get here, but let's see if we do + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_SOFTWARE_FAULT, (U32)mBox ) + } } else - { - signalCANXmitsCompleted(); - // TODO - shouldn't get here, but let's see if we do - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_SOFTWARE_FAULT, (U32)mBox ) + { // TODO - shouldn't get here - just testing - set first data to new s/w fault enum later + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, (U32)buffer, (U32)dataSize ) } } else - { // TODO - shouldn't get here - just testing - set first data to new s/w fault enum later - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, (U32)buffer, (U32)dataSize ) + { + break; } } Index: firmware/App/Services/WatchdogMgmt.c =================================================================== diff -u -r8f8776e48894e31cba816ebef2edf96d14306ba8 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision 8f8776e48894e31cba816ebef2edf96d14306ba8) +++ firmware/App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -112,8 +112,10 @@ // ignore expired watchdog until after watchdog POST if ( WATCHDOG_SELF_TEST_STATE_COMPLETE == watchdogSelfTestState ) { - activateSafetyShutdown(); +#ifndef DEBUG_ENABLED + activateSafetyShutdown(); // TODO - restore these - commented out now so that we don't get WD error with breakpoints while debugging activateAlarmNoData( ALARM_ID_WATCHDOG_EXPIRED ); +#endif } } } Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -r8f8776e48894e31cba816ebef2edf96d14306ba8 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 8f8776e48894e31cba816ebef2edf96d14306ba8) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -20,7 +20,6 @@ #include "AlarmLamp.h" #include "BloodFlow.h" #include "DialInFlow.h" -#include "DialOutUF.h" #include "OperationModes.h" #include "SystemComm.h" #include "WatchdogMgmt.h" @@ -54,7 +53,9 @@ execSystemCommRx(); // prevent most processing until UI has started communicating +#ifndef RM46_EVAL_BOARD_TARGET if ( TRUE == uiCommunicated() ) +#endif { // run operation mode state machine execOperationModes(); @@ -63,11 +64,8 @@ execBloodFlowController(); // control dialysate inlet pump - execDialInFlowController(); +// execDialInFlowController(); - // control dialysate outlet pump -// execDialOutUFController(); - // manage alarm state execAlarmMgmt(); Index: firmware/App/Tasks/TaskPriority.c =================================================================== diff -u -r8f8776e48894e31cba816ebef2edf96d14306ba8 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 8f8776e48894e31cba816ebef2edf96d14306ba8) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -20,7 +20,6 @@ #include "BloodFlow.h" #include "Buttons.h" #include "DialInFlow.h" -#include "DialOutUF.h" #include "FPGA.h" #include "SystemComm.h" #include "WatchdogMgmt.h" @@ -37,7 +36,9 @@ void taskPriority( void ) { // prevent most processing until UI has started communicating +#ifndef RM46_EVAL_BOARD_TARGET if ( TRUE == uiCommunicated() ) +#endif { // 1st pass for FPGA execFPGAIn(); @@ -52,11 +53,8 @@ execBloodFlowMonitor(); // monitor dialysate inlet pump and flow - execDialInFlowMonitor(); +// execDialInFlowMonitor(); - // monitor dialysate outlet pump and reservoir load cells -// execDialOutUFMonitor(); - // 2nd pass for FPGA execFPGAOut(); Index: firmware/source/can.c =================================================================== diff -u -r6311eb9b65fdeec7a285d25e07f3932ac0fb6cf1 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/source/can.c (.../can.c) (revision 6311eb9b65fdeec7a285d25e07f3932ac0fb6cf1) +++ firmware/source/can.c (.../can.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -517,6 +517,8 @@ */ /* USER CODE BEGIN (5) */ + // Enable EIE (error interrupts) + canREG1->CTL |= (uint32)0x00000008U; /* USER CODE END */ } Index: firmware/source/sys_main.c =================================================================== diff -u -r6311eb9b65fdeec7a285d25e07f3932ac0fb6cf1 -r4a41a54d255afc5cef0599e2a832927ed2b0ee5d --- firmware/source/sys_main.c (.../sys_main.c) (revision 6311eb9b65fdeec7a285d25e07f3932ac0fb6cf1) +++ firmware/source/sys_main.c (.../sys_main.c) (revision 4a41a54d255afc5cef0599e2a832927ed2b0ee5d) @@ -67,7 +67,6 @@ #include "CommBuffers.h" #include "CPLD.h" #include "DialInFlow.h" -#include "DialOutUF.h" #include "FPGA.h" #include "InternalADC.h" #include "MsgQueues.h" @@ -155,7 +154,6 @@ initInternalADC(); initBloodFlow(); initDialInFlow(); - initDialOutUF(); initAlarmLamp(); initButtons(); initWatchdogMgmt();