Index: firmware/.launches/HD.launch
===================================================================
diff -u -r79f3a45ee472c053fd191e8196245729703ebab3 -r48278ac6fa3738a97349ed7f3278773daf1d8004
--- firmware/.launches/HD.launch (.../HD.launch) (revision 79f3a45ee472c053fd191e8196245729703ebab3)
+++ firmware/.launches/HD.launch (.../HD.launch) (revision 48278ac6fa3738a97349ed7f3278773daf1d8004)
@@ -6,7 +6,7 @@
-
+
Index: firmware/App/Controllers/BloodFlow.c
===================================================================
diff -u -r6788d3f0fe41ee36ac7e9d4bd8e0f407f9fc2c4b -r48278ac6fa3738a97349ed7f3278773daf1d8004
--- firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 6788d3f0fe41ee36ac7e9d4bd8e0f407f9fc2c4b)
+++ firmware/App/Controllers/BloodFlow.c (.../BloodFlow.c) (revision 48278ac6fa3738a97349ed7f3278773daf1d8004)
@@ -937,20 +937,67 @@
}
/*************************************************************************
- * @brief testSetTargetBloodFlowRateOverride and testResetTargetBloodFlowRateOverride
+ * @brief
* 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( S32, testSetTargetBloodFlowRateOverride, testResetTargetBloodFlowRateOverride, targetBloodFlowRate )
+BOOL testSetTargetBloodFlowRateOverride( S32 value )
+{
+ BOOL result = FALSE;
+ if ( TRUE == isTestingActivated() )
+ {
+ MOTOR_DIR_T dir;
+
+ if ( value < 0 )
+ {
+ dir = MOTOR_DIR_REVERSE;
+ }
+ else
+ {
+ dir = MOTOR_DIR_FORWARD;
+ }
+ targetBloodFlowRate.ovInitData = targetBloodFlowRate.data; // backup current target flow rate
+ targetBloodFlowRate.ovData = value;
+ targetBloodFlowRate.override = OVERRIDE_KEY;
+ result = setBloodPumpTargetFlowRate( ABS(value), dir, bloodPumpControlMode );
+ }
+
+ return result;
+}
+
/*************************************************************************
+ * @brief
+ * The testResetTargetBloodFlowRateOverride function resets the override of the \n
+ * target blood flow rate.
+ * @details
+ * Inputs : none
+ * Outputs : targetBloodFlowRate
+ * @param none
+ * @return TRUE if override reset successful, FALSE if not
+ *************************************************************************/
+BOOL testResetTargetBloodFlowRateOverride( void )
+{
+ BOOL result = FALSE;
+
+ if ( TRUE == isTestingActivated() )
+ {
+ targetBloodFlowRate.data = targetBloodFlowRate.ovInitData; // restore pre-override target flow rate
+ targetBloodFlowRate.override = OVERRIDE_RESET;
+ targetBloodFlowRate.ovInitData = 0;
+ targetBloodFlowRate.ovData = 0;
+ result = setBloodPumpTargetFlowRate( targetBloodFlowRate.data, bloodPumpDirection, bloodPumpControlMode );
+ }
+
+ return result;
+}
+
+/*************************************************************************
* @brief testSetMeasuredBloodFlowRateOverride and testResetMeasuredBloodFlowRateOverride
* The testResetMeasuredBloodFlowRateOverride function overrides the measured \n
* blood flow rate. \n
Index: firmware/App/Controllers/DialInFlow.c
===================================================================
diff -u -r6788d3f0fe41ee36ac7e9d4bd8e0f407f9fc2c4b -r48278ac6fa3738a97349ed7f3278773daf1d8004
--- firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 6788d3f0fe41ee36ac7e9d4bd8e0f407f9fc2c4b)
+++ firmware/App/Controllers/DialInFlow.c (.../DialInFlow.c) (revision 48278ac6fa3738a97349ed7f3278773daf1d8004)
@@ -921,20 +921,67 @@
}
/*************************************************************************
- * @brief testSetTargetDialInFlowRateOverride and testResetTargetDialInFlowRateOverride
+ * @brief
* The testSetTargetDialInFlowRateOverride function overrides the target \n
- * dialIn flow rate. \n
- * The testResetTargetDialInFlowRateOverride function resets the override of the \n
- * target dialIn flow rate.
+ * dialysate inlet flow rate. \n
* @details
* Inputs : none
* Outputs : targetDialInFlowRate
- * @param value : override target dialIn flow rate (in mL/min)
+ * @param value : override target dialysate inlet flow rate (in mL/min)
* @return TRUE if override successful, FALSE if not
*************************************************************************/
-DATA_OVERRIDE_FUNC( S32, testSetTargetDialInFlowRateOverride, testResetTargetDialInFlowRateOverride, targetDialInFlowRate )
+BOOL testSetTargetDialInFlowRateOverride( S32 value )
+{
+ BOOL result = FALSE;
+ if ( TRUE == isTestingActivated() )
+ {
+ MOTOR_DIR_T dir;
+
+ if ( value < 0 )
+ {
+ dir = MOTOR_DIR_REVERSE;
+ }
+ else
+ {
+ dir = MOTOR_DIR_FORWARD;
+ }
+ targetDialInFlowRate.ovInitData = targetDialInFlowRate.data; // backup current target flow rate
+ targetDialInFlowRate.ovData = value;
+ targetDialInFlowRate.override = OVERRIDE_KEY;
+ result = setDialInPumpTargetFlowRate( ABS(value), dir, dialInPumpControlMode );
+ }
+
+ return result;
+}
+
/*************************************************************************
+ * @brief
+ * The testResetTargetDialInFlowRateOverride function resets the override of the \n
+ * target dialysate inlet flow rate.
+ * @details
+ * Inputs : none
+ * Outputs : targetDialInFlowRate
+ * @param none
+ * @return TRUE if override reset successful, FALSE if not
+ *************************************************************************/
+BOOL testResetTargetDialInFlowRateOverride( void )
+{
+ BOOL result = FALSE;
+
+ if ( TRUE == isTestingActivated() )
+ {
+ targetDialInFlowRate.data = targetDialInFlowRate.ovInitData; // restore pre-override target flow rate
+ targetDialInFlowRate.override = OVERRIDE_RESET;
+ targetDialInFlowRate.ovInitData = 0;
+ targetDialInFlowRate.ovData = 0;
+ result = setDialInPumpTargetFlowRate( targetDialInFlowRate.data, dialInPumpDirection, dialInPumpControlMode );
+ }
+
+ return result;
+}
+
+/*************************************************************************
* @brief testSetMeasuredDialInFlowRateOverride and testResetMeasuredDialInFlowRateOverride
* The testResetMeasuredDialInFlowRateOverride function overrides the measured \n
* dialIn flow rate. \n
Index: firmware/App/Modes/ModeStandby.c
===================================================================
diff -u -r6788d3f0fe41ee36ac7e9d4bd8e0f407f9fc2c4b -r48278ac6fa3738a97349ed7f3278773daf1d8004
--- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 6788d3f0fe41ee36ac7e9d4bd8e0f407f9fc2c4b)
+++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 48278ac6fa3738a97349ed7f3278773daf1d8004)
@@ -21,6 +21,7 @@
#include "DialOutFlow.h"
#include "Buttons.h"
#include "OperationModes.h"
+#include "SystemCommMessages.h"
#include "ModeStandby.h"
#ifdef RM46_EVAL_BOARD_TARGET
#include "Timers.h"
Index: firmware/App/Services/SystemComm.c
===================================================================
diff -u -r79f3a45ee472c053fd191e8196245729703ebab3 -r48278ac6fa3738a97349ed7f3278773daf1d8004
--- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 79f3a45ee472c053fd191e8196245729703ebab3)
+++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 48278ac6fa3738a97349ed7f3278773daf1d8004)
@@ -111,9 +111,21 @@
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;
+//#ifdef DEBUG_ENABLED
+//static U08 dbgRcvFromDialin[2048];
+//static U32 dbgRcvFromDialinIdx = 0;
+//#endif
+
+#ifdef CAN_TEST
+U08 dbgRcvdCANFrames[2048][8];
+U32 dbgRcvdCANFrameTS[2048];
+U32 dbgRcvdCANFrameCh[2048];
+U32 dbgRcvdCANFrameIdx = 0;
+U08 dbgXmitCANFrames[2048][8];
+U32 dbgXmitCANFrameTS[2048];
+U32 dbgXmitCANFrameCh[2048];
+U32 dbgXmitCANFrameIdx = 0;
+U32 dbgCANOutIdx = 0;
#endif
// ********** private function prototypes **********
@@ -305,6 +317,23 @@
{
transmitNextUARTPacket();
}
+#ifdef CAN_TEST
+ if ( dbgRcvdCANFrameIdx >= 2000 )
+ {
+ U32 i = dbgCANOutIdx;
+ char debugStr[ 150 ];
+
+ dbgCANOutIdx++;
+ if ( dbgCANOutIdx < 2000 )
+ {
+ sprintf( debugStr, "%8d %4d %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X %8d %4d %02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\n",
+ dbgRcvdCANFrameTS[i], dbgRcvdCANFrameCh[i], dbgRcvdCANFrames[i][0], dbgRcvdCANFrames[i][1], dbgRcvdCANFrames[i][2], dbgRcvdCANFrames[i][3], dbgRcvdCANFrames[i][4], dbgRcvdCANFrames[i][5], dbgRcvdCANFrames[i][6], dbgRcvdCANFrames[i][7],
+ dbgXmitCANFrameTS[i], dbgXmitCANFrameCh[i], dbgXmitCANFrames[i][0], dbgXmitCANFrames[i][1], dbgXmitCANFrames[i][2], dbgXmitCANFrames[i][3], dbgXmitCANFrames[i][4], dbgXmitCANFrames[i][5], dbgXmitCANFrames[i][6], dbgXmitCANFrames[i][7]);
+ sendDebugData( (U08*)debugStr, strlen(debugStr) );
+// printf(debugStr);
+ }
+ }
+#endif
}
/*************************************************************************
@@ -343,6 +372,19 @@
// if packet retrieved, add to buffer
if ( result != 0 )
{
+#ifdef CAN_TEST
+ if ( dbgRcvdCANFrameIdx >= 2000 )
+ {
+ result = 99; // Break point here
+ }
+ else
+ {
+ dbgRcvdCANFrameTS[dbgRcvdCANFrameIdx] = getMSTimerCount();
+ dbgRcvdCANFrameCh[dbgRcvdCANFrameIdx] = srcCANBox;
+ memcpy( &dbgRcvdCANFrames[dbgRcvdCANFrameIdx][0], data, 8);
+ dbgRcvdCANFrameIdx++;
+ }
+#endif
//#ifdef DEBUG_ENABLED
// if ( srcCANBox == COMM_BUFFER_IN_CAN_PC )
// {
@@ -581,6 +623,19 @@
if ( dataSize == CAN_MESSAGE_PAYLOAD_SIZE )
{
signalCANXmitsInitiated();
+#ifdef CAN_TEST
+ if ( dbgXmitCANFrameIdx > 2000 )
+ {
+ dataSize = 99; // Break point here
+ }
+ else
+ {
+ dbgXmitCANFrameTS[dbgXmitCANFrameIdx] = getMSTimerCount();
+ dbgXmitCANFrameCh[dbgXmitCANFrameIdx] = mBox;
+ memcpy( &dbgXmitCANFrames[dbgXmitCANFrameIdx][0], data, 8);
+ dbgXmitCANFrameIdx++;
+ }
+#endif
if ( 0 != canTransmit( canREG1, mBox, data ) )
{
result = CAN_MESSAGE_PAYLOAD_SIZE;
@@ -913,6 +968,10 @@
static void checkTooManyBadMsgCRCs( void )
{
U32 listTimeInMS;
+#ifdef CAN_TEST
+ static U32 crcErrorCtr = 0;
+ crcErrorCtr++;
+#endif
// replace oldest bad CRC in list with this new one
badCRCTimeStamps[ badCRCListIdx ] = getMSTimerCount();
@@ -925,8 +984,10 @@
if ( ( badCRCListCount >= MAX_COMM_CRC_FAILURES ) && ( listTimeInMS <= MAX_COMM_CRC_FAILURE_WINDOW_MS ) )
{
#ifndef DISABLE_CRC_ERROR
+#ifndef CAN_TEST
activateAlarmNoData( ALARM_ID_COMM_TOO_MANY_BAD_CRCS );
#endif
+#endif
}
}
Index: firmware/App/Services/SystemCommMessages.c
===================================================================
diff -u -r57ee0134869672b53ab5b7146b8988ede8f828d6 -r48278ac6fa3738a97349ed7f3278773daf1d8004
--- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 57ee0134869672b53ab5b7146b8988ede8f828d6)
+++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 48278ac6fa3738a97349ed7f3278773daf1d8004)
@@ -644,7 +644,33 @@
return result;
}
+#ifdef CAN_TEST
+void broadcastCANTest1LargeFrequentMessage()
+{
+ static U16 seqNo = 0;
+ MESSAGE_T msg;
+ U32 i;
+ // create a message record
+ blankMessage( &msg );
+ msg.hdr.msgID = MSG_ID_HD_CAN_TEST_1_LARGE_FREQ;
+ msg.hdr.payloadLen = 96;
+
+ for ( i = 0; i < 12; i++ )
+ {
+ memcpy(&msg.payload[i*8], &seqNo, 2);
+ seqNo++;
+ }
+ memcpy(&msg.payload[94], &seqNo, 2);
+ seqNo++;
+
+ // serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer
+ serializeMessage( msg, COMM_BUFFER_OUT_CAN_HD_BROADCAST, ACK_NOT_REQUIRED );
+}
+#endif
+
+
+
/*************************************************************************
* TEST SUPPORT FUNCTIONS
*************************************************************************/
Index: firmware/App/Services/SystemCommMessages.h
===================================================================
diff -u -r57ee0134869672b53ab5b7146b8988ede8f828d6 -r48278ac6fa3738a97349ed7f3278773daf1d8004
--- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 57ee0134869672b53ab5b7146b8988ede8f828d6)
+++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 48278ac6fa3738a97349ed7f3278773daf1d8004)
@@ -39,6 +39,10 @@
MSG_ID_DIALYSATE_OUT_FLOW_DATA, // 11
MSG_ID_LOAD_CELL_READINGS, // 12
MSG_ID_TREATMENT_TIME, // 13
+#ifdef CAN_TEST
+ MSG_ID_HD_CAN_TEST_1_LARGE_FREQ, // 14
+ MSG_ID_DG_CAN_TEST_1_LARGE_FREQ, // 15
+#endif
// service/test CAN messages
@@ -128,6 +132,11 @@
// MSG_ID_TREATMENT_TIME
BOOL broadcastTreatmentTime( U32 secsTotTreatment, U32 secsElapsed, U32 secsRemaining );
+#ifdef CAN_TEST
+// MSG_ID_HD_CAN_TEST_1_LARGE_FREQ
+void broadcastCANTest1LargeFrequentMessage();
+#endif
+
// *********** public test support message functions **********
// DEBUG OUTPUT
Index: firmware/App/Tasks/TaskGeneral.c
===================================================================
diff -u -r57ee0134869672b53ab5b7146b8988ede8f828d6 -r48278ac6fa3738a97349ed7f3278773daf1d8004
--- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 57ee0134869672b53ab5b7146b8988ede8f828d6)
+++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 48278ac6fa3738a97349ed7f3278773daf1d8004)
@@ -24,6 +24,7 @@
#include "OperationModes.h"
#include "PresOccl.h"
#include "SystemComm.h"
+#include "SystemCommMessages.h"
#include "WatchdogMgmt.h"
#include "TaskGeneral.h"
#include "RTC.h"
@@ -60,12 +61,24 @@
if ( TRUE == uiCommunicated() )
#endif
{
+#ifndef CAN_TEST
// monitor pressure/occlusion sensors
execPresOccl();
+#endif
// run operation mode state machine
execOperationModes();
+#ifdef CAN_TEST
+ {
+ static U32 canTestCtr = 0;
+ if ( ++canTestCtr >= 2 )
+ {
+ broadcastCANTest1LargeFrequentMessage();
+ canTestCtr = 0;
+ }
+ }
+#else
// control blood pump
execBloodFlowController();
@@ -83,6 +96,7 @@
// control alarm lamp
execAlarmLamp();
+#endif
#ifdef RM46_EVAL_BOARD_TARGET
if ( getUserButtonState() == PIN_SIGNAL_LOW )
Index: firmware/App/Tasks/TaskPriority.c
===================================================================
diff -u -ra74a984a7059f75d86ad87d6d9499bd8f94cc976 -r48278ac6fa3738a97349ed7f3278773daf1d8004
--- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision a74a984a7059f75d86ad87d6d9499bd8f94cc976)
+++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 48278ac6fa3738a97349ed7f3278773daf1d8004)
@@ -44,6 +44,7 @@
// 1st pass for FPGA
execFPGAIn();
+#ifndef CAN_TEST
// monitor and process buttons
execButtons();
@@ -58,7 +59,7 @@
// monitor dialysate outlet pump and load cells
execDialOutFlowMonitor();
-
+#endif
// 2nd pass for FPGA
execFPGAOut();
}