Index: firmware/.cproject
===================================================================
diff -u -ra673b3fdaed36dc1e30bce51c8d90218cc96fccb -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/.cproject (.../.cproject) (revision a673b3fdaed36dc1e30bce51c8d90218cc96fccb)
+++ firmware/.cproject (.../.cproject) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -49,6 +49,7 @@
@@ -141,6 +142,8 @@
Index: firmware/App/Controllers/Buttons.c
===================================================================
diff -u -r0c2b4420fcab891fae916fff9122685e6c583eda -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Controllers/Buttons.c (.../Buttons.c) (revision 0c2b4420fcab891fae916fff9122685e6c583eda)
+++ firmware/App/Controllers/Buttons.c (.../Buttons.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -353,9 +353,7 @@
sendOffButtonMsgToUI( OFF_BUTTON_CMD_PROMPT_USER_TO_CONFIRM );
offRequestAwaitingUserConfirmation = TRUE;
offRequestPendingTimer = 0;
-#ifdef SIMULATE_UI
userConfirmOffButton( OFF_BUTTON_RSP_USER_REQUESTS_POWER_OFF );
-#endif
}
}
prevOffButtonState = getOffButtonState();
Index: firmware/App/Controllers/DialOutFlow.c
===================================================================
diff -u -ra04ab4724f0df3a7144f6a8e357abe8b2f41dfbf -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision a04ab4724f0df3a7144f6a8e357abe8b2f41dfbf)
+++ firmware/App/Controllers/DialOutFlow.c (.../DialOutFlow.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -50,8 +50,8 @@
#define MIN_DIAL_OUT_PUMP_PWM_DUTY_CYCLE 0.12 ///< Controller will error if PWM duty cycle < 10%, so set min to 12%.
#define DOP_CONTROL_INTERVAL ( 1000 / TASK_GENERAL_INTERVAL ) ///< Interval (ms/task time) at which the dialysate outlet pump is controlled.
-#define DOP_P_COEFFICIENT 0.003 ///< P term for dialysate outlet pump control.
-#define DOP_I_COEFFICIENT 0.001 ///< I term for dialysate outlet pump control.
+#define DOP_P_COEFFICIENT 0.0014 ///< P term for dialysate outlet pump control.
+#define DOP_I_COEFFICIENT 0.0001 ///< I term for dialysate outlet pump control.
#define DOP_MAX_CURR_WHEN_STOPPED_MA 150.0 ///< Motor controller current should not exceed this when pump should be stopped.
#define DOP_MIN_CURR_WHEN_RUNNING_MA 150.0 ///< Motor controller current should always exceed this when pump should be running.
Index: firmware/App/Controllers/PresOccl.c
===================================================================
diff -u -r926afe9b1d9cc6931cbca48080e4a66385a20239 -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 926afe9b1d9cc6931cbca48080e4a66385a20239)
+++ firmware/App/Controllers/PresOccl.c (.../PresOccl.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -30,7 +30,7 @@
// ********** private definitions **********
/// Default publication interval for pressure and occlusion data.
-#define PRES_OCCL_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) // interval (ms/task time) at which the pressure/occlusion data is published on the CAN bus.
+#define PRES_OCCL_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) ///< interval (ms/task time) at which the pressure/occlusion data is published on the CAN bus.
/// Defined states for the pressure and occlusion monitor state machine.
typedef enum PresOccl_States
Index: firmware/App/Drivers/Comm.c
===================================================================
diff -u -rf7e3018ec6ab762fe08efb42b21fb2ca970174b0 -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Drivers/Comm.c (.../Comm.c) (revision f7e3018ec6ab762fe08efb42b21fb2ca970174b0)
+++ firmware/App/Drivers/Comm.c (.../Comm.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -27,7 +27,9 @@
// ********** private data **********
static volatile BOOL canXmitsInProgress = FALSE;
-static volatile BOOL uartXmitsInProgress = FALSE;
+#ifdef DEBUG_ENABLED
+ static volatile BOOL uartXmitsInProgress = FALSE;
+#endif
/*************************************************************************
* @brief signalCANXmitsInitiated
@@ -69,10 +71,12 @@
* @param none
* @return none
*************************************************************************/
+#ifdef DEBUG_ENABLED
void signalSCI1XmitsInitiated( void )
{
uartXmitsInProgress = TRUE;
}
+#endif
/*************************************************************************
* @brief signalSCI1XmitsCompleted
@@ -84,10 +88,12 @@
* @param none
* @return none
*************************************************************************/
+#ifdef DEBUG_ENABLED
void signalSCI1XmitsCompleted( void )
{
uartXmitsInProgress = FALSE;
}
+#endif
/*************************************************************************
* @brief setSCI1DMAReceiveInterrupt
@@ -99,10 +105,12 @@
* @param none
* @return none
*************************************************************************/
+#ifdef DEBUG_ENABLED
void setSCI1DMAReceiveInterrupt( void )
{
sciREG->SETINT = SCI_DMA_RECEIVE_INT;
}
+#endif
/*************************************************************************
* @brief setSCI1DMATransmitInterrupt
@@ -114,10 +122,12 @@
* @param none
* @return none
*************************************************************************/
+#ifdef DEBUG_ENABLED
void setSCI1DMATransmitInterrupt( void )
{
sciREG->SETINT = SCI_DMA_TRANSMIT_INT;
}
+#endif
/*************************************************************************
* @brief clearSCI1DMAReceiveInterrupt
@@ -129,10 +139,12 @@
* @param none
* @return none
*************************************************************************/
+#ifdef DEBUG_ENABLED
void clearSCI1DMAReceiveInterrupt( void )
{
sciREG->CLEARINT = SCI_DMA_RECEIVE_INT;
}
+#endif
/*************************************************************************
* @brief clearSCI1DMATransmitInterrupt
@@ -144,10 +156,12 @@
* @param none
* @return none
*************************************************************************/
+#ifdef DEBUG_ENABLED
void clearSCI1DMATransmitInterrupt( void )
{
sciREG->CLEARINT = SCI_DMA_TRANSMIT_INT;
}
+#endif
/*************************************************************************
* @brief setSCI2DMAReceiveInterrupt
@@ -251,6 +265,7 @@
* @param none
* @return TRUE if a transmit is in progress, FALSE if not
*************************************************************************/
+#ifdef DEBUG_ENABLED
BOOL isSCI1DMATransmitInProgress( void )
{
BOOL transmitterBusy = ( ( sciREG->FLR & (U32)SCI_TX_INT ) == 0U ? TRUE : FALSE );
@@ -259,6 +274,7 @@
return ( ( TRUE == uartXmitsInProgress ) || ( transmitterBusy == TRUE ) || ( dmaTransmitterBusy == TRUE ) ? TRUE : FALSE );
}
+#endif
/*************************************************************************
* @brief isSCI2DMATransmitInProgress
Index: firmware/App/Drivers/Comm.h
===================================================================
diff -u -r52863cba9685f31136ab3f4b4764a17ccf34fc05 -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Drivers/Comm.h (.../Comm.h) (revision 52863cba9685f31136ab3f4b4764a17ccf34fc05)
+++ firmware/App/Drivers/Comm.h (.../Comm.h) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -28,22 +28,22 @@
void signalCANXmitsInitiated( void );
void signalCANXmitsCompleted( void );
-void signalSCI1XmitsInitiated( void );
-void signalSCI1XmitsCompleted( void );
-void setSCI1DMAReceiveInterrupt( void );
-void setSCI1DMATransmitInterrupt( void );
-void clearSCI1DMAReceiveInterrupt( void );
-void clearSCI1DMATransmitInterrupt( void );
+#ifdef DEBUG_ENABLED
+ void signalSCI1XmitsInitiated( void );
+ void signalSCI1XmitsCompleted( void );
+ void setSCI1DMAReceiveInterrupt( void );
+ void setSCI1DMATransmitInterrupt( void );
+ void clearSCI1DMAReceiveInterrupt( void );
+ void clearSCI1DMATransmitInterrupt( void );
+ void clearSCI1CommErrors( void );
+ BOOL isSCI1DMATransmitInProgress( void );
+#endif
void setSCI2DMAReceiveInterrupt( void );
void setSCI2DMATransmitInterrupt( void );
void clearSCI2DMAReceiveInterrupt( void );
void clearSCI2DMATransmitInterrupt( void );
-
-void clearSCI1CommErrors( void );
void clearSCI2CommErrors( void );
-
-BOOL isSCI1DMATransmitInProgress( void );
BOOL isSCI2DMATransmitInProgress( void );
BOOL isCAN1TransmitInProgress( void );
Index: firmware/App/Modes/Dialysis.c
===================================================================
diff -u -ra673b3fdaed36dc1e30bce51c8d90218cc96fccb -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision a673b3fdaed36dc1e30bce51c8d90218cc96fccb)
+++ firmware/App/Modes/Dialysis.c (.../Dialysis.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -20,6 +20,7 @@
#include "DialInFlow.h"
#include "DialOutFlow.h"
#include "OperationModes.h"
+#include "TaskGeneral.h"
#include "Timers.h"
#include "ModeTreatment.h"
@@ -30,6 +31,10 @@
// ********** private definitions **********
+#define MAX_UF_ACCURACY_ERROR_ML 250 ///< Maximum ultrafiltration accuracy error in mL over the entire treatment.
+#define MAX_UF_ACCURACY_ERROR_ML_PER_HR 100 ///< Maximum ultrafiltration accuracy error in mL/hr.
+#define UF_ACCURACY_CHECK_INTERVAL ((1 * MIN_PER_HOUR * SEC_PER_MIN * MS_PER_SECOND) / TASK_GENERAL_INTERVAL) ///< Ultrafiltration rate accuracy check interval count
+
/// Enumeration of dialysis sub-mode states.
typedef enum Dialysis_States
{
@@ -67,6 +72,9 @@
static F32 maxUFVolumeML; ///< Currently set total ultrafiltration volume for treatment (from prescription).
static F32 setUFRate; ///< Currently set ultrafiltration rate (from prescription).
+static U32 uFAccuracyCheckTimerCtr; ///< Timer counter to determine when next to check ultrafiltration accuracy.
+static F32 lastUFVolumeChecked; ///< Starting ultrafiltration volume for accuracy check.
+
// ********** private function prototypes **********
static DIALYSIS_STATE_T handleDialysisUltrafiltrationState( void );
@@ -77,6 +85,7 @@
static UF_STATE_T handleUFRunningState( void );
static UF_STATE_T handleUFCompletedOrOffState( void );
+static void checkUFAccuracy( void );
static void updateUFVolumes( void );
/*********************************************************************//**
@@ -106,6 +115,9 @@
setDialysateFlowRate = 0;
maxUFVolumeML = 0.0;
setUFRate = 0.0;
+
+ uFAccuracyCheckTimerCtr = 0;
+ lastUFVolumeChecked = 0.0;
}
/*********************************************************************//**
@@ -349,6 +361,12 @@
// calculate UF volumes and provide to dialysate outlet pump controller
updateUFVolumes();
+ // if we've reached target UF volume, UF is complete
+ if ( measUFVolume >= maxUFVolumeML )
+ {
+ result = UF_COMPLETED_OR_OFF_STATE;
+ }
+
// TODO - test code - remove later
if ( TRUE == isStopButtonPressed() )
{
@@ -385,6 +403,41 @@
/*********************************************************************//**
* @brief
+ * The checkUFAccuracy function checks ultrafiltration accuracy for the last \n
+ * minute and triggers an alarm if out of spec.
+ * @details
+ * Inputs : uFAccuracyCheckTimerCtr, lastUFVolumeChecked, measUFVolume
+ * Outputs : uFAccuracyCheckTimerCtr, lastUFVolumeChecked
+ * @return none
+ *************************************************************************/
+static void checkUFAccuracy( void )
+{
+ // check UF accuracy at 1 hour intervals
+ if ( ++uFAccuracyCheckTimerCtr >= UF_ACCURACY_CHECK_INTERVAL )
+ {
+ F32 uFMeasRatePerHr = measUFVolume - lastUFVolumeChecked;
+ F32 uFSetRatePerHr = ( setUFRate * (F32)MIN_PER_HOUR );
+ F32 uFRateError = uFSetRatePerHr - uFMeasRatePerHr;
+
+ // check UF accuracy
+ if ( uFRateError > (F32)MAX_UF_ACCURACY_ERROR_ML_PER_HR )
+ {
+ SET_ALARM_WITH_2_F32_DATA( ALARM_ID_UF_RATE_ACCURACY_ERROR, uFSetRatePerHr, uFMeasRatePerHr );
+ }
+ // reset for next check
+ lastUFVolumeChecked = measUFVolume;
+ uFAccuracyCheckTimerCtr = 0;
+ }
+
+ // check total UF volume error
+ if ( ( FABS( refUFVolume - measUFVolume ) ) >= (F32)MAX_UF_ACCURACY_ERROR_ML )
+ {
+ SET_ALARM_WITH_2_F32_DATA( ALARM_ID_UF_VOLUME_ACCURACY_ERROR, refUFVolume, measUFVolume );
+ }
+}
+
+/*********************************************************************//**
+ * @brief
* The updateUFVolumes function updates the ultrafiltration volumes based on \n
* set UF rate, latest UF elapsed time, and the latest load cell weight for the \n
* currently used reservoir. Updated UF volumes are then sent to the dialysate \n
Index: firmware/App/Modes/ModeInitPOST.c
===================================================================
diff -u -r57ee0134869672b53ab5b7146b8988ede8f828d6 -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 57ee0134869672b53ab5b7146b8988ede8f828d6)
+++ firmware/App/Modes/ModeInitPOST.c (.../ModeInitPOST.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -119,8 +119,8 @@
break;
case POST_STATE_RTC:
- //testStatus = execRTCSelfTest();
- postState = POST_STATE_STUCK_BUTTON; //handlePOSTStatus( testStatus );
+ testStatus = execRTCSelfTest();
+ postState = handlePOSTStatus( testStatus );
break;
case POST_STATE_STUCK_BUTTON:
Index: firmware/App/Modes/ModeTreatment.c
===================================================================
diff -u -ra673b3fdaed36dc1e30bce51c8d90218cc96fccb -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision a673b3fdaed36dc1e30bce51c8d90218cc96fccb)
+++ firmware/App/Modes/ModeTreatment.c (.../ModeTreatment.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -37,17 +37,21 @@
#define TREATMENT_TIME_DATA_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) // interval (ms/task time) at which the treatment time data is published on the CAN bus
+/// Sub-mode states while in treatment mode
typedef enum Treatment_States
{
- TREATMENT_START_STATE = 0,
- TREATMENT_DIALYSIS_STATE,
- TREATMENT_STOP_STATE,
- TREATMENT_RINSEBACK_STATE,
- TREATMENT_RB_RC_PAUSE_STATE,
- TREATMENT_RECIRC_STATE,
- TREATMENT_BYPASS_RECIRC_STATE,
- TREATMENT_END_STATE,
- NUM_OF_TREATMENT_STATES
+ TREATMENT_START_STATE = 0, ///< Start treatment, prime blood side with gradual ramp for 1 min. while dialyzer is bypassed. No dialysis or UF taking place.
+ TREATMENT_DIALYSIS_STATE, ///< Perform dialysis. Deliver Heparin as prescribed. Deliver UF as prescribed. Handle saline boluses as requested.
+ TREATMENT_STOP_STATE, ///< Treatment stopped. All pumps off. Dializer bypassed.
+ TREATMENT_RINSEBACK_STATE, ///< Perform rinseback with saline. Dialyzer bypassed. Dialysate recirculating.
+ TREATMENT_RINSEBACK_PAUSE_STATE, ///< Rinseback paused. Blood pump off. Dialyzer bypassed. Dialysate recirculating.
+ TREATMENT_RECIRC_SETUP_STATE, ///< Rinseback complete. Blood pump off. Blood lines closed. User to disconnect and shunt blood lines.
+ TREATMENT_RECIRC_STATE, ///< Recirculate saline and dialysate while patient disconnected. Blood lines open and shunted. Dialyzer is bypassed.
+ TREATMENT_RECIRC_PAUSE_STATE, ///< Recirculate paused. Blood pump off. Blood lines closed and shunted. Dialyzer is bypassed.
+ TREATMENT_RECIRC_STOP_STATE, ///< Recirculate stopped. Blood pump off. Blood lines open. Waiting for patient to unshunt and connect and resume treatment.
+ TREATMENT_DIALYSIS_END_STATE, ///< Dialysis has ended. Blood pump slowed. Dialyzer is bypassed. Dialysate is recirculated. User can rinseback.
+ TREATMENT_END_STATE, ///< Treatment has ended. All pumps off. Dialyzer is bypassed. Blood lines are closed. User to disconnect.
+ NUM_OF_TREATMENT_STATES ///< # of treatment states (sub-modes).
} TREATMENT_STATE_T;
// ********** private data **********
@@ -101,7 +105,7 @@
*************************************************************************/
void transitionToTreatmentMode( void )
{
- // initialize mode each time we transition to it
+ // initialize treatment mode each time we transition to it
initTreatmentMode();
// initialize treatment sub-modes each time we transition to treatment mode
initDialysis();
@@ -158,18 +162,30 @@
// TODO - implement
break;
- case TREATMENT_RB_RC_PAUSE_STATE:
+ case TREATMENT_RINSEBACK_PAUSE_STATE:
// TODO - implement
break;
+ case TREATMENT_RECIRC_SETUP_STATE:
+ // TODO - implement
+ break;
+
case TREATMENT_RECIRC_STATE:
// TODO - implement
break;
- case TREATMENT_BYPASS_RECIRC_STATE:
+ case TREATMENT_RECIRC_PAUSE_STATE:
// TODO - implement
break;
+ case TREATMENT_RECIRC_STOP_STATE:
+ // TODO - implement
+ break;
+
+ case TREATMENT_DIALYSIS_END_STATE:
+ // TODO - implement
+ break;
+
case TREATMENT_END_STATE:
// TODO - implement
requestNewOperationMode( MODE_POST ); // TODO - test code - remove later
@@ -256,8 +272,10 @@
treatmentTimeMS += msSinceLast;
lastTreatmentTimeStamp = newTime;
+ // execute state machine for treatment dialysis sub-mode
execDialysis();
+ // TODO - test code - remove later
if ( getOffButtonState() == BUTTON_STATE_PRESSED )
{
if ( lastOffButtonState == BUTTON_STATE_RELEASED )
@@ -289,8 +307,10 @@
{
TREATMENT_STATE_T result = TREATMENT_STOP_STATE;
+ // execute state machine for treatment stop sub-mode
execTreatmentStop();
+ // TODO - test code - remove later
if ( getOffButtonState() == BUTTON_STATE_PRESSED )
{
if ( lastOffButtonState == BUTTON_STATE_RELEASED )
Index: firmware/App/Services/AlarmMgmt.c
===================================================================
diff -u -r79f3a45ee472c053fd191e8196245729703ebab3 -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 79f3a45ee472c053fd191e8196245729703ebab3)
+++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -95,6 +95,8 @@
{ ALARM_PRIORITY_HIGH, ALM_ESC_4_MIN, ALARM_ID_BLOOD_SITTING_WARNING, FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // ALARM_ID_ARTERIAL_PRESSURE_HIGH
{ ALARM_PRIORITY_HIGH, ALM_ESC_4_MIN, ALARM_ID_BLOOD_SITTING_WARNING, FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // ALARM_ID_VENOUS_PRESSURE_LOW
{ ALARM_PRIORITY_HIGH, ALM_ESC_4_MIN, ALARM_ID_BLOOD_SITTING_WARNING, FALSE, TRUE , FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }, // ALARM_ID_VENOUS_PRESSURE_HIGH
+ { ALARM_PRIORITY_HIGH, 0, ALARM_ID_NO_ALARM, TRUE, TRUE , TRUE, TRUE, TRUE, TRUE, TRUE, FALSE }, // ALARM_ID_UF_RATE_ACCURACY_ERROR
+ { ALARM_PRIORITY_HIGH, 0, ALARM_ID_NO_ALARM, TRUE, TRUE , TRUE, TRUE, TRUE, TRUE, TRUE, FALSE }, // ALARM_ID_UF_VOLUME_ACCURACY_ERROR
};
/// A blank alarm data record for alarms that do not include alarm data when triggered.
Index: firmware/App/Services/CommBuffers.h
===================================================================
diff -u -r52863cba9685f31136ab3f4b4764a17ccf34fc05 -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Services/CommBuffers.h (.../CommBuffers.h) (revision 52863cba9685f31136ab3f4b4764a17ccf34fc05)
+++ firmware/App/Services/CommBuffers.h (.../CommBuffers.h) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -36,8 +36,10 @@
COMM_BUFFER_IN_CAN_UI_BROADCAST,
COMM_BUFFER_IN_CAN_PC,
COMM_BUFFER_OUT_CAN_PC,
+#ifdef DEBUG_ENABLED
COMM_BUFFER_IN_UART_PC,
COMM_BUFFER_OUT_UART_PC,
+#endif
NUM_OF_COMM_BUFFERS
} COMM_BUFFER_T;
Index: firmware/App/Services/Interrupts.c
===================================================================
diff -u -rf7e3018ec6ab762fe08efb42b21fb2ca970174b0 -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Services/Interrupts.c (.../Interrupts.c) (revision f7e3018ec6ab762fe08efb42b21fb2ca970174b0)
+++ firmware/App/Services/Interrupts.c (.../Interrupts.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -35,8 +35,10 @@
// ********** private data **********
-static U32 sci1FrameErrorCnt = 0;
-static U32 sci1OverrunErrorCnt = 0;
+#ifdef DEBUG_ENABLED
+ static U32 sci1FrameErrorCnt = 0;
+ static U32 sci1OverrunErrorCnt = 0;
+#endif
static U32 sci2FrameErrorCnt = 0;
static U32 sci2OverrunErrorCnt = 0;
@@ -161,60 +163,57 @@
// TODO - temporary debug code - remove later
char debugStr[ 256 ];
#endif
- if ( sci == sciREG )
+
+ if ( sci == scilinREG )
{
if ( ( flags & SCI_FE_INT ) != 0 )
{
- sci1FrameErrorCnt++;
- clearSCI1CommErrors();
+ sci2FrameErrorCnt++;
+ clearSCI2CommErrors();
// TODO - try to do something to recover (+ max retries = comm fault)
#ifdef DEBUG_ENABLED
// TODO - temporary debug code - remove later
- sprintf( debugStr, "Debug UART frame error:%5d \n", sci1FrameErrorCnt );
+ sprintf( debugStr, "FPGA UART frame error:%5d \n", sci2FrameErrorCnt );
sendDebugData( (U08*)debugStr, strlen(debugStr) );
#endif
}
if ( ( flags & SCI_OE_INT ) != 0 )
{
- sci1OverrunErrorCnt++;
- clearSCI1CommErrors();
+ sci2OverrunErrorCnt++;
+ clearSCI2CommErrors();
// TODO - try to do something to recover (+ max retries = comm fault)
#ifdef DEBUG_ENABLED
// TODO - temporary debug code - remove later
- sprintf( debugStr, "Debug UART overrun error:%5d \n", sci1OverrunErrorCnt );
+ sprintf( debugStr, "FPGA UART overrun error:%5d \n", sci2OverrunErrorCnt );
sendDebugData( (U08*)debugStr, strlen(debugStr) );
#endif
}
}
- else if ( sci == scilinREG )
+#ifdef DEBUG_ENABLED
+ if ( sci == sciREG )
{
if ( ( flags & SCI_FE_INT ) != 0 )
{
- sci2FrameErrorCnt++;
- clearSCI2CommErrors();
+ sci1FrameErrorCnt++;
+ clearSCI1CommErrors();
// TODO - try to do something to recover (+ max retries = comm fault)
-#ifdef DEBUG_ENABLED
+
// TODO - temporary debug code - remove later
- sprintf( debugStr, "FPGA UART frame error:%5d \n", sci2FrameErrorCnt );
+ sprintf( debugStr, "Debug UART frame error:%5d \n", sci1FrameErrorCnt );
sendDebugData( (U08*)debugStr, strlen(debugStr) );
-#endif
}
if ( ( flags & SCI_OE_INT ) != 0 )
{
- sci2OverrunErrorCnt++;
- clearSCI2CommErrors();
+ sci1OverrunErrorCnt++;
+ clearSCI1CommErrors();
// TODO - try to do something to recover (+ max retries = comm fault)
-#ifdef DEBUG_ENABLED
+
// TODO - temporary debug code - remove later
- sprintf( debugStr, "FPGA UART overrun error:%5d \n", sci2OverrunErrorCnt );
+ sprintf( debugStr, "Debug UART overrun error:%5d \n", sci1OverrunErrorCnt );
sendDebugData( (U08*)debugStr, strlen(debugStr) );
-#endif
}
}
- else
- {
- // TODO - ignore? - should not be any other SCI peripherals
- }
+#endif
}
/*************************************************************************
@@ -238,23 +237,25 @@
signalFPGAReceiptCompleted();
break;
+#ifdef DEBUG_ENABLED
case DMA_CH1: // PC receive channel
clearSCI1DMAReceiveInterrupt();
// handle received packet from PC
handleUARTMsgRecvPacketInterrupt();
break;
-
+#endif
case DMA_CH2: // FPGA transmit channel
clearSCI2DMATransmitInterrupt();
signalFPGATransmitCompleted();
break;
+#ifdef DEBUG_ENABLED
case DMA_CH3: // PC transmit channel
clearSCI1DMATransmitInterrupt();
// send next pending packet to PC (if any)
handleUARTMsgXmitPacketInterrupt();
break;
-
+#endif
default:
// TODO - ignore?
break;
Index: firmware/App/Services/SystemComm.c
===================================================================
diff -u -ra673b3fdaed36dc1e30bce51c8d90218cc96fccb -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision a673b3fdaed36dc1e30bce51c8d90218cc96fccb)
+++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -37,7 +37,11 @@
#define NUM_OF_CAN_OUT_BUFFERS 5 // # of CAN buffers for transmit
#define NUM_OF_CAN_IN_BUFFERS 7 // # of CAN buffers for receiving
-#define NUM_OF_MSG_IN_BUFFERS 8 // # of Msg buffers for receiving - 1 is UART
+#ifdef DEBUG_ENABLED
+ #define NUM_OF_MSG_IN_BUFFERS 8 // # of Msg buffers for receiving - 1 is UART
+#else
+ #define NUM_OF_MSG_IN_BUFFERS 7 // # of Msg buffers for receiving
+#endif
#define SCI1_RECEIVE_DMA_REQUEST 30
#define SCI1_TRANSMIT_DMA_REQUEST 31
@@ -54,7 +58,7 @@
#define MSG_NOT_ACKED_MAX_RETRIES 3
#define PENDING_ACK_LIST_SIZE 25
-#pragma pack(push,1)
+#pragma pack(push, 1)
typedef struct
{
@@ -89,24 +93,31 @@
COMM_BUFFER_IN_CAN_UI_2_HD,
COMM_BUFFER_IN_CAN_UI_BROADCAST,
COMM_BUFFER_IN_CAN_PC,
+#ifdef DEBUG_ENABLED
COMM_BUFFER_IN_UART_PC
+#endif
};
static U08 lastCANPacketSent[ CAN_MESSAGE_PAYLOAD_SIZE ];
static CAN_MESSAGE_BOX_T lastCANPacketSentChannel = (CAN_MESSAGE_BOX_T)0;
static U32 lastCANPacketSentTimeStamp = 0;
-static U08 pcXmitPacket[ PC_MESSAGE_PACKET_SIZE ] = { 0, 0, 0, 0, 0, 0, 0, 0 };
-static U08 pcRecvPacket[ PC_MESSAGE_PACKET_SIZE ] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+#ifdef DEBUG_ENABLED
+ static U08 pcXmitPacket[ PC_MESSAGE_PACKET_SIZE ] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+ static U08 pcRecvPacket[ PC_MESSAGE_PACKET_SIZE ] = { 0, 0, 0, 0, 0, 0, 0, 0 };
+ // DMA control records
+ static g_dmaCTRL pcDMAXmitControlRecord; // DMA transmit control record (UART-debug)
+ static g_dmaCTRL pcDMARecvControlRecord; // DMA receive control record (UART-debug)
+
+ //static U08 dbgRcvFromDialin[2048];
+ //static U32 dbgRcvFromDialinIdx = 0;
+#endif
+
#ifndef ACK_NOT_IMPLEMENTED
static PENDING_ACK_RECORD_T pendingAckList[ PENDING_ACK_LIST_SIZE ]; // list of outgoing messages that are awaiting an ACK
#endif
-// DMA control records
-static g_dmaCTRL pcDMAXmitControlRecord; // DMA transmit control record (UART-debug)
-static g_dmaCTRL pcDMARecvControlRecord; // DMA receive control record (UART-debug)
-
static volatile BOOL dgIsCommunicating = FALSE; // has DG sent a message since last check
static U32 timeOfLastDGCheckIn = 0; // last time DG checked in
static volatile BOOL uiIsCommunicating = FALSE; // has UI sent a message since last check
@@ -117,11 +128,6 @@
static U32 badCRCListIdx = 0; // where next bad message CRC time stamp will go in list
static U32 badCRCListCount = 0; // # of bad CRCs in the list
-//#ifdef DEBUG_ENABLED
-//static U08 dbgRcvFromDialin[2048];
-//static U32 dbgRcvFromDialinIdx = 0;
-//#endif
-
#ifdef CAN_TEST
U08 dbgRcvdCANFrames[2048][8];
U32 dbgRcvdCANFrameTS[2048];
@@ -136,13 +142,16 @@
// ********** private function prototypes **********
-static void initUARTAndDMA( void );
+#ifdef DEBUG_ENABLED
+ static void initUARTAndDMA( void );
+ static U32 transmitNextUARTPacket( void );
+#endif
+
static BOOL isCANBoxForXmit( CAN_MESSAGE_BOX_T srcCANBox );
static BOOL isCANBoxForRecv( CAN_MESSAGE_BOX_T srcCANBox );
static COMM_BUFFER_T findNextHighestPriorityCANPacketToTransmit( void );
static U32 transmitNextCANPacket( void );
-static U32 transmitNextUARTPacket( void );
static void processIncomingData( void );
static S32 parseMessageFromBuffer( U08 *data, U32 len );
@@ -171,8 +180,10 @@
{
U32 i;
+#ifdef DEBUG_ENABLED
// initialize UART and DMA for PC communication
initUARTAndDMA();
+#endif
// initialize bad message CRC list
for ( i = 0; i < MAX_COMM_CRC_FAILURES; i++ )
@@ -327,6 +338,7 @@
}
}
+#ifdef DEBUG_ENABLED
// if UART transmitter is idle, start transmitting any pending packets
if ( FALSE == isSCI1DMATransmitInProgress() )
{
@@ -349,6 +361,7 @@
// }
}
#endif
+#endif
}
/*************************************************************************
@@ -430,6 +443,7 @@
* @param none
* @return none
*************************************************************************/
+#ifdef DEBUG_ENABLED
void handleUARTMsgRecvPacketInterrupt( void )
{
// buffer received packet
@@ -439,6 +453,7 @@
dmaSetChEnable( DMA_CH1, DMA_HW );
setSCI1DMAReceiveInterrupt();
}
+#endif
/*************************************************************************
* @brief handleUARTMsgXmitPacketInterrupt
@@ -450,6 +465,7 @@
* @param none
* @return none
*************************************************************************/
+#ifdef DEBUG_ENABLED
void handleUARTMsgXmitPacketInterrupt( void )
{
U32 bytesXmitted = transmitNextUARTPacket();
@@ -459,6 +475,7 @@
signalSCI1XmitsCompleted();
}
}
+#endif
/*************************************************************************
* @brief initUARTAndDMA
@@ -470,11 +487,13 @@
* @param none
* @return none
*************************************************************************/
+#ifdef DEBUG_ENABLED
static void initUARTAndDMA( void )
{
// Enable DMA block transfer complete interrupts
dmaEnableInterrupt( DMA_CH1, BTC );
dmaEnableInterrupt( DMA_CH3, BTC );
+
// assign DMA channels to h/w DMA requests
dmaReqAssign( DMA_CH1, SCI1_RECEIVE_DMA_REQUEST );
dmaReqAssign( DMA_CH3, SCI1_TRANSMIT_DMA_REQUEST );
@@ -523,6 +542,7 @@
dmaSetChEnable( DMA_CH1, DMA_HW );
setSCI1DMAReceiveInterrupt();
}
+#endif
/*************************************************************************
* @brief isCANBoxForXmit
@@ -687,6 +707,7 @@
* @param msg : none
* @return # of bytes transmitted
*************************************************************************/
+#ifdef DEBUG_ENABLED
static U32 transmitNextUARTPacket( void )
{
U32 result = 0;
@@ -710,8 +731,8 @@
return result;
}
+#endif
-
/*************************************************************************
********************** RECEIVE SUPPORT FUNCTIONS *************************
*************************************************************************/
Index: firmware/App/Services/SystemComm.h
===================================================================
diff -u -r6c60d0d0300828750c76f2e397d4e7ccaa84bbb2 -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Services/SystemComm.h (.../SystemComm.h) (revision 6c60d0d0300828750c76f2e397d4e7ccaa84bbb2)
+++ firmware/App/Services/SystemComm.h (.../SystemComm.h) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -26,24 +26,28 @@
#define MESSAGE_SYNC_BYTE 0xA5
#define CAN_MESSAGE_PAYLOAD_SIZE 8
-#define PC_MESSAGE_PACKET_SIZE 8
+#ifdef DEBUG_ENABLED
+ #define PC_MESSAGE_PACKET_SIZE 8
+#endif
#define MSG_ID_ACK 0xFFFF
#define MSG_ACK_BIT 0x8000
#define MAX_MSG_SEQ_NO 0x7FFF
#define MIN_MSG_SEQ_NO 0x0001
#define MAX_ACK_MSG_SIZE ( sizeof( MESSAGE_WRAPPER_T ) + 1 + CAN_MESSAGE_PAYLOAD_SIZE ) // must hold full (wrapped) message + sync + any CAN padding
-typedef COMM_BUFFER_T CAN_MESSAGE_BOX_T; // the first 12 comm buffers align with the 12 active CAN message boxes
+typedef COMM_BUFFER_T CAN_MESSAGE_BOX_T; // the CAN comm buffers align with the active CAN message boxes
// ********** public function prototypes **********
void initSystemComm( void );
void execSystemCommRx( void );
void execSystemCommTx( void );
void handleCANMsgInterrupt( CAN_MESSAGE_BOX_T srcCANBox );
+#ifdef DEBUG_ENABLED
void handleUARTMsgRecvPacketInterrupt( void );
void handleUARTMsgXmitPacketInterrupt( void );
+#endif
void checkInFromDG( void );
void checkInFromUI( void );
BOOL isDGCommunicating( void );
Index: firmware/App/Services/SystemCommMessages.c
===================================================================
diff -u -r0c2b4420fcab891fae916fff9122685e6c583eda -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 0c2b4420fcab891fae916fff9122685e6c583eda)
+++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -712,6 +712,7 @@
* @param len : # of bytes of debug data
* @return TRUE if debug data was successfully queued for transmit, FALSE if not
*************************************************************************/
+#ifdef DEBUG_ENABLED
BOOL sendDebugData( U08 *dbgData, U32 len )
{
BOOL result;
@@ -721,6 +722,7 @@
return result;
}
+#endif
/*************************************************************************
* @brief isTestingActivated
Index: firmware/App/Services/SystemCommMessages.h
===================================================================
diff -u -r0c2b4420fcab891fae916fff9122685e6c583eda -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 0c2b4420fcab891fae916fff9122685e6c583eda)
+++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -143,8 +143,10 @@
// *********** public test support message functions **********
+#ifdef DEBUG_ENABLED
// DEBUG OUTPUT
BOOL sendDebugData( U08 *dbgData, U32 len );
+#endif
// MSG_TESTER_LOG_IN
void handleTesterLogInRequest( MESSAGE_T *message );
Index: firmware/App/Services/WatchdogMgmt.c
===================================================================
diff -u -rf7e3018ec6ab762fe08efb42b21fb2ca970174b0 -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision f7e3018ec6ab762fe08efb42b21fb2ca970174b0)
+++ firmware/App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -107,7 +107,11 @@
}
// check to see if watchdog has expired
+#ifdef BREADBOARD2_TARGET
+ if ( getCPLDWatchdogExpired() == PIN_SIGNAL_LOW )
+#else
if ( getCPLDWatchdogExpired() == PIN_SIGNAL_HIGH )
+#endif
{
// ignore expired watchdog until after watchdog POST
if ( WATCHDOG_SELF_TEST_STATE_COMPLETE == watchdogSelfTestState )
Index: firmware/App/Tasks/TaskGeneral.c
===================================================================
diff -u -r48278ac6fa3738a97349ed7f3278773daf1d8004 -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 48278ac6fa3738a97349ed7f3278773daf1d8004)
+++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -57,7 +57,7 @@
execSystemCommRx();
// prevent most processing until UI has started communicating
-#ifndef RM46_EVAL_BOARD_TARGET
+#ifndef SIMULATE_UI
if ( TRUE == uiCommunicated() )
#endif
{
Index: firmware/App/Tasks/TaskPriority.c
===================================================================
diff -u -r48278ac6fa3738a97349ed7f3278773daf1d8004 -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 48278ac6fa3738a97349ed7f3278773daf1d8004)
+++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -37,7 +37,7 @@
void taskPriority( void )
{
// prevent most processing until UI has started communicating
-#ifndef RM46_EVAL_BOARD_TARGET
+#ifndef SIMULATE_UI
if ( TRUE == uiCommunicated() )
#endif
{
Index: firmware/HD.dil
===================================================================
diff -u -r0c2b4420fcab891fae916fff9122685e6c583eda -r2e6c750c202b7361d79488ce383e34f380e75413
--- firmware/HD.dil (.../HD.dil) (revision 0c2b4420fcab891fae916fff9122685e6c583eda)
+++ firmware/HD.dil (.../HD.dil) (revision 2e6c750c202b7361d79488ce383e34f380e75413)
@@ -1,4 +1,4 @@
-# RM46L852PGE 02/11/20 08:33:36
+# RM46L852PGE 02/26/20 17:20:35
#
ARCH=RM46L852PGE
#
@@ -7207,7 +7207,7 @@
DRIVER.PINMUX.VAR.DMA_IFT_COUNT_24.VALUE=0
DRIVER.PINMUX.VAR.DMA_IFT_COUNT_16.VALUE=0
DRIVER.PINMUX.VAR.DMA_INTLFSEN_12.VALUE=1
-DRIVER.PINMUX.VAR.MUX30_OPTION0.VALUE=1
+DRIVER.PINMUX.VAR.MUX30_OPTION0.VALUE=0
DRIVER.PINMUX.VAR.MUX22_OPTION0.VALUE=0
DRIVER.PINMUX.VAR.MUX14_OPTION0.VALUE=0
DRIVER.PINMUX.VAR.DMA_FIDXD_29.VALUE=0