Index: firmware/App/DGCommon.h =================================================================== diff -u -r0774a37971585dacdc8398362393920c13d48426 -rf267c42c91fd6e22db80e19039b8993582de51e9 --- firmware/App/DGCommon.h (.../DGCommon.h) (revision 0774a37971585dacdc8398362393920c13d48426) +++ firmware/App/DGCommon.h (.../DGCommon.h) (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -26,7 +26,6 @@ // #define SIMULATE_UI 1 #define DEBUG_ENABLED 1 #define DISABLE_CRC_ERROR 1 -// #define CAN_TEST 1 #ifdef DEBUG_ENABLED #include Index: firmware/App/Modes/ModeFill.h =================================================================== diff -u -rb64c49fdcf2b6d95e61e63f8e258c4e600935bbd -rf267c42c91fd6e22db80e19039b8993582de51e9 --- firmware/App/Modes/ModeFill.h (.../ModeFill.h) (revision b64c49fdcf2b6d95e61e63f8e258c4e600935bbd) +++ firmware/App/Modes/ModeFill.h (.../ModeFill.h) (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -19,6 +19,8 @@ #include "DGCommon.h" +// ********** public definitions ********** + // ********** private function prototypes ********** void initFillMode( void ); // initialize this module Index: firmware/App/Modes/ModeSolo.c =================================================================== diff -u --- firmware/App/Modes/ModeSolo.c (revision 0) +++ firmware/App/Modes/ModeSolo.c (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -0,0 +1,64 @@ +/************************************************************************** + * + * Copyright (c) 2020 Diality Inc. - All Rights Reserved. + * + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * @file ModeSolo.c + * + * @date 18-Mar-2020 + * @author S. Nash + * + * @brief Top-level state machine for the standby-solo mode. + * + **************************************************************************/ + +#include "OperationModes.h" +#include "ModeSolo.h" +#include "CPLD.h" + +// ********** private data ********** + +// ********** private function prototypes ********** + +/************************************************************************* + * @brief + * The initSoloMode function initializes the Standby-Solo Mode module. + * @details + * Inputs : none + * Outputs : Standby-Solo Mode module initialized. + * @param none + * @return none + *************************************************************************/ +void initSoloMode( void ) +{ +} + +/************************************************************************* + * @brief + * The transitionToSoloMode function prepares for transition to standby-solo mode. + * @details + * Inputs : none + * Outputs : + * @param none + * @return none + *************************************************************************/ +void transitionToSoloMode( void ) +{ +} + +/************************************************************************* + * @brief + * The execSoloMode function executes the Standby-Solo Mode state machine. + * @details + * Inputs : none + * Outputs : + * @param none + * @return none + *************************************************************************/ +void execSoloMode( void ) +{ + +} + Index: firmware/App/Modes/ModeSolo.h =================================================================== diff -u --- firmware/App/Modes/ModeSolo.h (revision 0) +++ firmware/App/Modes/ModeSolo.h (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -0,0 +1,28 @@ +/************************************************************************** + * + * Copyright (c) 2020 Diality Inc. - All Rights Reserved. + * + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * @file ModeSolo.h + * + * @date 18-Mar-2020 + * @author S. Nash + * + * @brief Header file for Standby-Solo Mode. + * + **************************************************************************/ + +#ifndef __MODE_SOLO_H__ +#define __MODE_SOLO_H__ + +#include "DGCommon.h" + +// ********** private function prototypes ********** + +void initSoloMode( void ); // initialize this module +void transitionToSoloMode( void ); // prepares for transition to standby-solo mode +void execSoloMode( void ); // execute the standby-solo mode state machine (call from OperationModes) + +#endif Index: firmware/App/Modes/ModeStandby.c =================================================================== diff -u -r499e5de29e706d09f79ba22511068990c4044e84 -rf267c42c91fd6e22db80e19039b8993582de51e9 --- firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision 499e5de29e706d09f79ba22511068990c4044e84) +++ firmware/App/Modes/ModeStandby.c (.../ModeStandby.c) (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -18,10 +18,23 @@ #include "ModeStandby.h" #include "CPLD.h" +// ********** private definitions ********** + +typedef enum Standby_Mode_States +{ + STANDBY_MODE_STATE_START = 0, + STANDBY_MODE_STATE_IDLE, + NUM_OF_STANDBY_MODE_STATES +} STANDBY_MODE_STATE_T; + // ********** private data ********** +static STANDBY_MODE_STATE_T standbyState = STANDBY_MODE_STATE_START; + // ********** private function prototypes ********** +STANDBY_MODE_STATE_T handleStandbyIdleState( void ); + /************************************************************************* * @brief initStandbyMode * The initStandbyMode function initializes the Standby Mode module. @@ -46,6 +59,8 @@ *************************************************************************/ void transitionToStandbyMode( void ) { + // reset to start state each time we transition to standby mode + standbyState = STANDBY_MODE_STATE_START; } /************************************************************************* @@ -59,6 +74,43 @@ *************************************************************************/ void execStandbyMode( void ) { + // execute current Standby state + switch ( standbyState ) + { + case STANDBY_MODE_STATE_START: + standbyState = STANDBY_MODE_STATE_IDLE; + break; + case STANDBY_MODE_STATE_IDLE: + standbyState = handleStandbyIdleState(); + break; + + default: + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_SOFTWARE_FAULT, 0, standbyState ) + standbyState = STANDBY_MODE_STATE_START; + break; + } } +/************************************************************************* + * @brief + * The handleStandbyIdleState function executes the Idle state of the \n + * Standby Mode state machine. + * @details + * Inputs : none + * Outputs : + * @param none + * @return the next state + *************************************************************************/ +STANDBY_MODE_STATE_T handleStandbyIdleState( void ) +{ + STANDBY_MODE_STATE_T result = STANDBY_MODE_STATE_IDLE; + + // go to standby or standby solo mode depending on whether HD is connected +// if ( FALSE == isHDCommunicating() ) +// { +// requestNewOperationMode( MODE_SOLO ); +// } + + return result; +} Index: firmware/App/Modes/ModeStandby.h =================================================================== diff -u -rb64c49fdcf2b6d95e61e63f8e258c4e600935bbd -rf267c42c91fd6e22db80e19039b8993582de51e9 --- firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision b64c49fdcf2b6d95e61e63f8e258c4e600935bbd) +++ firmware/App/Modes/ModeStandby.h (.../ModeStandby.h) (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -21,8 +21,8 @@ // ********** private function prototypes ********** -void initStandbyMode( void ); // initialize this module -void transitionToStandbyMode( void ); // prepares for transition to standby mode -void execStandbyMode( void ); // execute the standby mode state machine (call from OperationModes) +void initStandbyMode( void ); // initialize this module +void transitionToStandbyMode( void ); // prepares for transition to standby mode +void execStandbyMode( void ); // execute the standby mode state machine (call from OperationModes) #endif Index: firmware/App/Modes/OperationModes.c =================================================================== diff -u -r499e5de29e706d09f79ba22511068990c4044e84 -rf267c42c91fd6e22db80e19039b8993582de51e9 --- firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision 499e5de29e706d09f79ba22511068990c4044e84) +++ firmware/App/Modes/OperationModes.c (.../OperationModes.c) (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -14,19 +14,19 @@ * **************************************************************************/ +#include "gio.h" + +#include "OperationModes.h" #include "ModeDisinfect.h" #include "ModeDrain.h" #include "ModeFill.h" #include "ModeFlush.h" -#include "gio.h" - -#include "OperationModes.h" - #include "ModeFault.h" #include "ModeFill.h" #include "ModeInitPOST.h" #include "ModePostTreat.h" #include "ModeService.h" +#include "ModeSolo.h" #include "ModeStandby.h" // ********** private data ********** @@ -37,15 +37,16 @@ // this matrix determines legal transitions from one mode to another static const OP_MODE MODE_TRANSITION_TABLE[NUM_OF_MODES - 1][NUM_OF_MODES - 1] = { -// from to-> FAULT SERVICE INIT STANBY FILL DRAI FLUS DISI - /* FAUL */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG }, - /* SERV */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG }, - /* INIT */{ MODE_FAUL, MODE_NLEG, MODE_INIT, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG }, - /* STAN */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_STAN, MODE_FILL, MODE_NLEG, MODE_NLEG, MODE_NLEG }, - /* FILL */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_FILL, MODE_NLEG, MODE_NLEG, MODE_NLEG }, - /* DRAI */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_DRAI, MODE_NLEG, MODE_NLEG }, - /* FLUS */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_FLUS, MODE_NLEG }, - /* DISI */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_DISI } +// from to-> FAULT SERVICE INIT STANBY STBY-SOLO FILL DRAIN FLUSH DISINFECT + /* FAUL */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG }, + /* SERV */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG }, + /* INIT */{ MODE_FAUL, MODE_NLEG, MODE_INIT, MODE_STAN, MODE_SOLO, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_NLEG }, + /* STAN */{ MODE_FAUL, MODE_SERV, MODE_NLEG, MODE_STAN, MODE_SOLO, MODE_FILL, MODE_DRAI, MODE_NLEG, MODE_NLEG }, + /* SOLO */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_SOLO, MODE_NLEG, MODE_NLEG, MODE_FLUS, MODE_DISI }, + /* FILL */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_FILL, MODE_NLEG, MODE_NLEG, MODE_NLEG }, + /* DRAI */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_NLEG, MODE_NLEG, MODE_DRAI, MODE_NLEG, MODE_NLEG }, + /* FLUS */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_SOLO, MODE_NLEG, MODE_NLEG, MODE_FLUS, MODE_NLEG }, + /* DISI */{ MODE_FAUL, MODE_NLEG, MODE_NLEG, MODE_STAN, MODE_SOLO, MODE_NLEG, MODE_NLEG, MODE_NLEG, MODE_DISI } }; // ********** private function prototypes ********** @@ -81,6 +82,7 @@ initServiceMode(); initInitAndPOSTMode(); initStandbyMode(); + initSoloMode(); initFillMode(); initDrainMode(); initFlushMode(); @@ -138,6 +140,10 @@ execStandbyMode(); break; + case MODE_SOLO: + execSoloMode(); + break; + case MODE_FILL: execFillMode(); break; @@ -213,7 +219,7 @@ U32 i; // block additional requests until after mode arbitration - // TODO - disable priority task + _disable_IRQ(); // select highest priority mode request -or- current mode if no requests pending for ( i = 0; i < MODE_NLEG; i++ ) @@ -232,7 +238,7 @@ } // un-block requests - // TODO - enable priority task + _enable_IRQ(); return reqMode; } @@ -263,6 +269,9 @@ case MODE_STAN: transitionToStandbyMode(); break; + case MODE_SOLO: + transitionToSoloMode(); + break; case MODE_FILL: transitionToFillMode(); break; Index: firmware/App/Modes/OperationModes.h =================================================================== diff -u -rb64c49fdcf2b6d95e61e63f8e258c4e600935bbd -rf267c42c91fd6e22db80e19039b8993582de51e9 --- firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision b64c49fdcf2b6d95e61e63f8e258c4e600935bbd) +++ firmware/App/Modes/OperationModes.h (.../OperationModes.h) (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -26,7 +26,8 @@ MODE_FAUL = 0, // Fault MODE_SERV, // Service MODE_INIT, // Initialization & POST - MODE_STAN, // Standby + MODE_STAN, // Standby - mated to HD + MODE_SOLO, // Standby - no HD connected MODE_FILL, // Fill mode MODE_DRAI, // Drain MODE_FLUS, // Flush Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u --- firmware/App/Services/Reservoirs.c (revision 0) +++ firmware/App/Services/Reservoirs.c (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -0,0 +1,112 @@ +/************************************************************************** + * + * Copyright (c) 2020 Diality Inc. - All Rights Reserved. + * + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * @file Reservoirs.c + * + * @date 18-Mar-2020 + * @author S. Nash + * + * @brief Reservoirs service module. Maintains reservoir set points and \n + * handles reservoir related commands from the HD. + * + **************************************************************************/ + +#include // for memcpy() + +#include "OperationModes.h" +#include "Reservoirs.h" + +// ********** private definitions ********** + +#define DEFAULT_DIALYSATE_TEMP_PRIMARY_C 39.0 +#define DEFAULT_DIALYSATE_TEMP_TRIMMER_C 37.0 + +#define DEFAULT_TREATMENT_FILL_VOLUME_ML 1500 +#define DEFAULT_PRIME_FILL_VOLUME_ML 2500 +#define DEFAULT_DRAIN_VOLUME_ML 100 + +// ********** private data ********** + +static RESERVOIR_ID_T activeReservoir; +static U32 fillVolumeTargetMl; +static U32 drainVolumeTargetMl; +static F32 targetDialysateTemperaturePrimary; +static F32 targetDialysateTemperatureTrim; + +// ********** private function prototypes ********** + +/************************************************************************* + * @brief + * The initReservoirs function initializes the Reservoirs module. + * @details + * Inputs : none + * Outputs : Reservoirs module initialized. + * @param none + * @return none + *************************************************************************/ +void initReservoirs( void ) +{ + activeReservoir = RESERVOIR_1; + fillVolumeTargetMl = DEFAULT_TREATMENT_FILL_VOLUME_ML; + drainVolumeTargetMl = DEFAULT_DRAIN_VOLUME_ML; + targetDialysateTemperaturePrimary = DEFAULT_DIALYSATE_TEMP_PRIMARY_C; + targetDialysateTemperatureTrim = DEFAULT_DIALYSATE_TEMP_TRIMMER_C; +} + +/************************************************************************* + * @brief + * The startFill function handles a fill command from the HD. + * @details + * Inputs : none + * Outputs : move to fill mode + * @param resID : Reservoir to drain. + * @param fillToVolMl : Target volume (in mL) to fill reservoir to. + * @param targetPrimeTemp : Target temperature of dialysate to fill reservoir with. + * @param targetTrimTemp : Target temperature of dialysate coming out of reservoir. + * @return TRUE if fill command successful, FALSE if not. + *************************************************************************/ +BOOL startFill( RESERVOIR_ID_T resID, U32 fillToVolMl, F32 targetPrimeTemp, F32 targetTrimTemp ) +{ + BOOL result = FALSE; + + // validate parameters + if ( resID < NUM_OF_RESERVOIRS ) // TODO also check volume and temps vs. max capacities + { + activeReservoir = resID; + fillVolumeTargetMl = fillToVolMl; + targetDialysateTemperaturePrimary = targetPrimeTemp; + targetDialysateTemperatureTrim = targetTrimTemp; + requestNewOperationMode( MODE_FILL ); + } + + return result; +} + +/************************************************************************* + * @brief + * The startDrain function handles a fill command from the HD + * @details + * Inputs : none + * Outputs : + * @param resID : Reservoir to drain. + * @param drainToVolMl : Target volume (in mL) to drain reservoir to. + * @return TRUE if drain command successful, FALSE if not. + *************************************************************************/ +BOOL startDrain( RESERVOIR_ID_T resID, U32 drainToVolMl ) +{ + BOOL result = FALSE; + + // validate parameters + if ( resID < NUM_OF_RESERVOIRS ) // TODO also check volume vs. max capacity + { + activeReservoir = resID; + drainVolumeTargetMl = drainToVolMl; + requestNewOperationMode( MODE_DRAI ); + } + + return result; +} Index: firmware/App/Services/Reservoirs.h =================================================================== diff -u --- firmware/App/Services/Reservoirs.h (revision 0) +++ firmware/App/Services/Reservoirs.h (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -0,0 +1,39 @@ +/************************************************************************** + * + * Copyright (c) 2020 Diality Inc. - All Rights Reserved. + * + * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN + * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. + * + * @file Reservoirs.h + * + * @date 18-Mar-2020 + * @author S. Nash + * + * @brief header file for Reservoirs service module. + * + **************************************************************************/ + +#ifndef __RESERVOIRS_H__ +#define __RESERVOIRS_H__ + +#include "DGCommon.h" + +// ********** public definitions ********** + +/// Enumeration of reservoirs TODO - move to a Reservoirs.h in Services? +typedef enum Reservoirs +{ + RESERVOIR_1 = 0, ///< Reservoir #1. + RESERVOIR_2, ///< Reservoir #2. + NUM_OF_RESERVOIRS ///< Number of reservoirs. +} RESERVOIR_ID_T; + +// ********** public function prototypes ********** + +void initReservoirs( void ); + +BOOL startFill( RESERVOIR_ID_T resID, U32 fillToVolMl, F32 targetPrimeTemp, F32 targetTrimTemp ); // handle fill command from HD +BOOL startDrain( RESERVOIR_ID_T resID, U32 drainToVolMl ); // handle drain command from HD + +#endif Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r7acb9d914f79aaa921c95e1a4049594c889bf795 -rf267c42c91fd6e22db80e19039b8993582de51e9 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 7acb9d914f79aaa921c95e1a4049594c889bf795) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -99,7 +99,7 @@ static U32 lastCANPacketSentTimeStamp = 0; #ifdef DEBUG_ENABLED -static U08 pcXmitPacket[ PC_MESSAGE_PACKET_SIZE ] = { 0, 0, 0, 0, 0, 0, 0, 0 }; +static U08 pcXmitPacket[ 1024 ]; static U08 pcRecvPacket[ PC_MESSAGE_PACKET_SIZE ] = { 0, 0, 0, 0, 0, 0, 0, 0 }; #endif @@ -116,15 +116,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 CAN_TEST -U08 dbgRcvdCANFrames[1024][8]; -U32 dbgRcvdCANFrameTS[1024]; -U32 dbgRcvdCANFrameIdx = 0; -U08 dbgXmitCANFrames[1024][8]; -U32 dbgXmitCANFrameTS[1024]; -U32 dbgXmitCANFrameIdx = 0; -#endif - // ********** private function prototypes ********** #ifdef DEBUG_ENABLED @@ -296,25 +287,6 @@ // if packet retrieved, add to buffer if ( result != 0 ) { -#ifdef CAN_TEST - if ( dbgRcvdCANFrameIdx >= 1000 ) - { - result = 99; // Break point here - } - else - { - dbgRcvdCANFrameTS[dbgRcvdCANFrameIdx] = getMSTimerCount(); - memcpy( &dbgRcvdCANFrames[dbgRcvdCANFrameIdx][0], data, 8); - dbgRcvdCANFrameIdx++; - } -#endif -//#ifdef DEBUG_ENABLED -// if ( srcCANBox == COMM_BUFFER_IN_CAN_PC ) -// { -// memcpy( &dbgRcvFromDialin[dbgRcvFromDialinIdx], data, CAN_MESSAGE_PAYLOAD_SIZE); -// dbgRcvFromDialinIdx += CAN_MESSAGE_PAYLOAD_SIZE; -// } -//#endif // add CAN packet to appropriate comm buffer based on the message box it came in on (s/b same #) addToCommBuffer( srcCANBox, data, CAN_MESSAGE_PAYLOAD_SIZE ); } @@ -557,18 +529,6 @@ memcpy( lastCANPacketSent, data, CAN_MESSAGE_PAYLOAD_SIZE ); lastCANPacketSentChannel = mBox; lastCANPacketSentTimeStamp = getMSTimerCount(); -#ifdef CAN_TEST - if ( dbgXmitCANFrameIdx > 1000 ) - { - dataSize = 99; // Break point here - } - else - { - dbgXmitCANFrameTS[dbgXmitCANFrameIdx] = getMSTimerCount(); - memcpy( &dbgXmitCANFrames[dbgXmitCANFrameIdx][0], data, 8); - dbgXmitCANFrameIdx++; - } -#endif if ( 0 != canTransmit( canREG1, mBox, data ) ) { result = CAN_MESSAGE_PAYLOAD_SIZE; @@ -604,20 +564,19 @@ { U32 result = 0; U32 dataPend = numberOfBytesInCommBuffer( COMM_BUFFER_OUT_UART_PC ); - U32 dataSize; - if ( dataPend >= PC_MESSAGE_PACKET_SIZE ) + if ( dataPend > 0 ) { - dataSize = getFromCommBuffer( COMM_BUFFER_OUT_UART_PC, pcXmitPacket, PC_MESSAGE_PACKET_SIZE ); + result = getFromCommBuffer( COMM_BUFFER_OUT_UART_PC, pcXmitPacket, dataPend ); - // if there's another UART packet to send, send it - if ( dataSize == PC_MESSAGE_PACKET_SIZE ) + // if there's data to transmit, transmit it + if ( result > 0 ) { signalSCI1XmitsInitiated(); + pcDMAXmitControlRecord.FRCNT = result; // set DMA transfer size dmaSetCtrlPacket( DMA_CH3, pcDMAXmitControlRecord ); dmaSetChEnable( DMA_CH3, DMA_HW ); setSCI1DMATransmitInterrupt(); - result = PC_MESSAGE_PACKET_SIZE; } } @@ -859,7 +818,8 @@ { if ( TRUE == didTimeout( timeOfLastHDCheckIn, HD_COMM_TIMEOUT_IN_MS ) ) { - //activateAlarmNoData( ALARM_ID_HD_COMM_TIMEOUT ); // TODO - add this alarm + hdIsCommunicating = FALSE; + //activateAlarmNoData( ALARM_ID_HD_COMM_TIMEOUT ); // TODO - add this alarm if we're in middle of a treatment? or if in a mode that comm loss would impact badly? } } @@ -876,10 +836,6 @@ 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(); @@ -892,10 +848,8 @@ 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 -r7acb9d914f79aaa921c95e1a4049594c889bf795 -rf267c42c91fd6e22db80e19039b8993582de51e9 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 7acb9d914f79aaa921c95e1a4049594c889bf795) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -353,32 +353,7 @@ 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_DG_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_DG_BROADCAST, ACK_NOT_REQUIRED ); -} -#endif - - /************************************************************************* * TEST SUPPORT FUNCTIONS *************************************************************************/ Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r479cebb3c254ed13bca26f361c8b5266f8eae408 -rf267c42c91fd6e22db80e19039b8993582de51e9 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 479cebb3c254ed13bca26f361c8b5266f8eae408) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -38,11 +38,6 @@ // MSG_ID_LOAD_CELL_READINGS BOOL broadcastLoadCellData( F32 loadCellA1, F32 loadCellA2, F32 loadCellB1, F32 loadCellB2 ); -#ifdef CAN_TEST -// MSG_ID_DG_CAN_TEST_1_LARGE_FREQ -void broadcastCANTest1LargeFrequentMessage(); -#endif - // *********** public test support message functions ********** #ifdef DEBUG_ENABLED Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -rb64c49fdcf2b6d95e61e63f8e258c4e600935bbd -rf267c42c91fd6e22db80e19039b8993582de51e9 --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision b64c49fdcf2b6d95e61e63f8e258c4e600935bbd) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -45,17 +45,6 @@ // run operation mode state machine execOperationModes(); -#ifdef CAN_TEST - { - static U32 canTestCtr = 0; - if ( ++canTestCtr >= 2 ) - { - broadcastCANTest1LargeFrequentMessage(); - canTestCtr = 0; - } - } -#endif - // manage data to be transmitted to other sub-systems execSystemCommTx(); Index: firmware/source/sys_main.c =================================================================== diff -u -rb64c49fdcf2b6d95e61e63f8e258c4e600935bbd -rf267c42c91fd6e22db80e19039b8993582de51e9 --- firmware/source/sys_main.c (.../sys_main.c) (revision b64c49fdcf2b6d95e61e63f8e258c4e600935bbd) +++ firmware/source/sys_main.c (.../sys_main.c) (revision f267c42c91fd6e22db80e19039b8993582de51e9) @@ -68,6 +68,7 @@ #include "InternalADC.h" #include "MsgQueues.h" #include "OperationModes.h" +#include "Reservoirs.h" #include "RTC.h" #include "SafetyShutdown.h" #include "SystemComm.h" @@ -161,6 +162,7 @@ initCommBuffers(); initMsgQueues(); initSystemComm(); + initReservoirs(); initOperationModes(); }