Index: firmware/App/Common.h =================================================================== diff -u -r6c60d0d0300828750c76f2e397d4e7ccaa84bbb2 -r1c80d60fe6a95297a8a8033a3c7eade53e72779a --- firmware/App/Common.h (.../Common.h) (revision 6c60d0d0300828750c76f2e397d4e7ccaa84bbb2) +++ firmware/App/Common.h (.../Common.h) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) @@ -85,12 +85,18 @@ #define MASK_OFF_LSW 0xFFFF0000 #define SHIFT_8_BITS_FOR_BYTE_SHIFT 8 #define SHIFT_16_BITS_FOR_WORD_SHIFT 16 +#define MASK_OFF_NIBBLE_LSB 0xF0 +#define MASK_OFF_NIBBLE_MSB 0x0F +#define MAX_DOUBLE_DIGIT_DECIMAL 99U +#define MAX_SINGLE_DIGIT_DECIMAL 9U +#define SHIFT_BITS_BY_4 4U #define FLOAT_TO_INT_ROUNDUP_OFFSET 0.5 #define ML_PER_LITER 1000 #define MS_PER_SECOND 1000 #define SEC_PER_MIN 60 #define FRACTION_TO_PERCENT_FACTOR 100.0 + // **** Common Macros **** #define FLOAT_TO_INT_WITH_ROUND(f) ((f) < 0.0 ? (S32)((f) - FLOAT_TO_INT_ROUNDUP_OFFSET) : (S32)((f) + FLOAT_TO_INT_ROUNDUP_OFFSET)) Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r9799e3d83970fc263a1d8efe8cd9ca44d6b76d94 -r1c80d60fe6a95297a8a8033a3c7eade53e72779a --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 9799e3d83970fc263a1d8efe8cd9ca44d6b76d94) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) @@ -25,7 +25,7 @@ #include "SystemComm.h" #include "Comm.h" #include "Interrupts.h" -#include "MsgQueues.h" +#include "Timers.h" #include "Utilities.h" #include "SystemCommMessages.h" @@ -42,6 +42,31 @@ #define SCI1_RECEIVE_DMA_REQUEST 30 #define SCI1_TRANSMIT_DMA_REQUEST 31 +#define UI_COMM_TIMEOUT_IN_MS 5000 +#define DG_COMM_TIMEOUT_IN_MS 2000 + +#define MAX_COMM_CRC_FAILURES 5 +#define MAX_COMM_CRC_FAILURE_WINDOW_MS (10 * SEC_PER_MIN * MS_PER_SECOND) + +#define MSG_NOT_ACKED_TIMEOUT_MS ( MS_PER_SECOND * 1 ) +#define MSG_NOT_ACKED_MAX_RETRIES 3 +#define PENDING_ACK_LIST_SIZE 25 + +#pragma pack(push,1) + +typedef struct +{ + BOOL used; + U16 seqNo; + U16 retries; + U32 timeStamp; + COMM_BUFFER_T channel; + U32 msgSize; + U08 msg[ MAX_ACK_MSG_SIZE ]; +} PENDING_ACK_RECORD_T; + +#pragma pack(pop) + // ********** private data ********** const COMM_BUFFER_T CAN_OUT_BUFFERS[ NUM_OF_CAN_OUT_BUFFERS ] = @@ -68,14 +93,24 @@ 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 }; +#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 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 volatile BOOL uiIsCommunicating = FALSE; // has UI sent a message since last check -static volatile BOOL uiDidCommunicate = FALSE; // has UI every sent a message +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 +static U32 timeOfLastUICheckIn = 0; // last time UI checked in +static volatile BOOL uiDidCommunicate = FALSE; // has UI every sent a message +static U32 badCRCTimeStamps[ MAX_COMM_CRC_FAILURES ]; // time of last five bad message CRCs (wrapping list) +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 + // ********** private function prototypes ********** static void initUARTAndDMA( void ); @@ -92,6 +127,14 @@ static void processReceivedMessages( void ); static void processReceivedMessage( MESSAGE_T *message ); +static void checkForCommTimeouts( void ); +static void checkTooManyBadMsgCRCs( U16 msgID ); + +#ifndef ACK_NOT_IMPLEMENTED +static BOOL matchACKtoPendingACKList( S16 seqNo ); +static void checkPendingACKList( void ); +#endif + /************************************************************************* * @brief initSystemComm * The initSystemComm function initializes the SystemComm module. @@ -103,8 +146,24 @@ *************************************************************************/ void initSystemComm( void ) { + U32 i; + // initialize UART and DMA for PC communication initUARTAndDMA(); + + // initialize bad message CRC list + for ( i = 0; i < MAX_COMM_CRC_FAILURES; i++ ) + { + badCRCTimeStamps[ i ] = 0; + } + +#ifndef ACK_NOT_IMPLEMENTED + // initialize pending ACK list + for ( i = 0; i < PENDING_ACK_LIST_SIZE; i++ ) + { + pendingAckList[ i ].used = FALSE; + } +#endif } /************************************************************************* @@ -120,6 +179,7 @@ void checkInFromDG( void ) { dgIsCommunicating = TRUE; + timeOfLastDGCheckIn = getMSTimerCount(); } /************************************************************************* @@ -135,6 +195,7 @@ void checkInFromUI( void ) { uiIsCommunicating = TRUE; + timeOfLastUICheckIn = getMSTimerCount(); uiDidCommunicate = TRUE; } @@ -206,6 +267,14 @@ // process received messages in the queue processReceivedMessages(); + + // check for sub-system comm timeouts + checkForCommTimeouts(); + +#ifndef ACK_NOT_IMPLEMENTED + // check ACK list for messages that need to be re-sent because they haven't been ACK'd + checkPendingACKList(); +#endif } /************************************************************************* @@ -593,28 +662,25 @@ if ( msgSize > 0 ) { + MESSAGE_WRAPPER_T rcvMsg; + U08 *dataPtr = data+1; // skip over sync byte + // consume message (+sync byte) msgSize = getFromCommBuffer( MSG_IN_BUFFERS[ i ], data, msgSize + 1 ); - // if message data is at least minimum size, convert received message data to a message and add to message queue - if ( msgSize > MESSAGE_OVERHEAD_SIZE ) - { - MESSAGE_WRAPPER_T rcvMsg; - U08 *dataPtr = data+1; // skip over sync byte - - messagesInBuffer = TRUE; - // blank the new message record - blankMessageInWrapper( &rcvMsg ); - // copy message header portion of message data to the new message - memcpy( &(rcvMsg.msg.hdr), dataPtr, sizeof(MESSAGE_HEADER_T) ); - dataPtr += sizeof(MESSAGE_HEADER_T); - // copy message payload portion of message data to the new message - memcpy( &(rcvMsg.msg.payload), dataPtr, rcvMsg.msg.hdr.payloadLen ); - dataPtr += rcvMsg.msg.hdr.payloadLen; - // copy CRC portion of message data to the new message - rcvMsg.crc = *dataPtr; - // add new message to queue for later processing - addToMsgQueue( MSG_Q_IN, &rcvMsg ); - } // message is at least as large as minimum size + // convert received message data to a message and add to message queue + messagesInBuffer = TRUE; + // blank the new message record + blankMessageInWrapper( &rcvMsg ); + // copy message header portion of message data to the new message + memcpy( &(rcvMsg.msg.hdr), dataPtr, sizeof(MESSAGE_HEADER_T) ); + dataPtr += sizeof(MESSAGE_HEADER_T); + // copy message payload portion of message data to the new message + memcpy( &(rcvMsg.msg.payload), dataPtr, rcvMsg.msg.hdr.payloadLen ); + dataPtr += rcvMsg.msg.hdr.payloadLen; + // copy CRC portion of message data to the new message + rcvMsg.crc = *dataPtr; + // add new message to queue for later processing + addToMsgQueue( MSG_Q_IN, &rcvMsg ); } // looks like there is a complete message in the comm buffer } // enough data left in comm buffer to possibly be a complete message } // while loop to get all complete messages for each comm buffer @@ -681,7 +747,7 @@ // if a minimum sized msg would fit in remaining, continue if ( remSize >= MESSAGE_OVERHEAD_SIZE ) { - payloadSize = data[ pos + sizeof( U16 ) ]; + payloadSize = data[ pos + sizeof(MESSAGE_HEADER_T) - sizeof(U08) ]; msgSize = MESSAGE_OVERHEAD_SIZE + payloadSize; // we now know the size of the message - we can now know if full message is contained in buffer if ( msgSize <= remSize ) @@ -721,31 +787,216 @@ // TODO - check CRC before processing a message if ( message.crc == crc8( (U08*)(&message), sizeof(MESSAGE_HEADER_T) + message.msg.hdr.payloadLen ) ) { - processReceivedMessage( &message.msg ); +#ifndef ACK_NOT_IMPLEMENTED + // if ACK, mark pending message ACK'd + if ( MSG_ID_ACK == message.msg.hdr.msgID ) + { + matchACKtoPendingACKList( message.msg.hdr.seqNo ); + } + else +#endif + { +#ifndef ACK_NOT_IMPLEMENTED + // if received message requires ACK, queue one up + if ( message.msg.hdr.seqNo < 0 ) + { + sendACKMsg( &message.msg ); + } + else +#endif + { // otherwise, process the received message + processReceivedMessage( &message.msg ); + } + } } else // CRC failed { - // TODO - probably wouldn't want to fault on this. ignore? + checkTooManyBadMsgCRCs( message.msg.hdr.msgID ); } } } +} - // TODO - process UART (script) messages too +/************************************************************************* + * @brief checkForCommTimeouts + * The checkForCommTimeouts function checks for sub-system communication \n + * timeout errors. + * @details + * Inputs : timeOfLastDGCheckIn, timeOfLastUICheckIn + * Outputs : possibly a comm t/o alarm + * @param none + * @return none + *************************************************************************/ +static void checkForCommTimeouts( void ) +{ + if ( TRUE == uiDidCommunicate ) + { + if ( TRUE == didTimeout( timeOfLastUICheckIn, UI_COMM_TIMEOUT_IN_MS ) ) + { + activateAlarmNoData( ALARM_ID_UI_COMM_TIMEOUT ); + } + } + // TODO - check DG comm timeout } /************************************************************************* + * @brief checkTooManyBadMsgCRCs + * The checkTooManyBadMsgCRCs function checks for too many bad message CRCs \n + * within a set period of time. Assumed function is being called when a new \n + * bad CRC is detected so a new bad CRC will be added to the list. + * @details + * Inputs : badCRCTimeStamps[], badCRCListIdx, badCRCListCount + * Outputs : possibly a "too many bad CRCs" alarm + * @param msgID : the message ID from the recevied msg that failed CRC check. + * @return none + *************************************************************************/ +static void checkTooManyBadMsgCRCs( U16 msgID ) +{ + U32 listTimeInMS; + + // replace oldest bad CRC in list with this new one + badCRCTimeStamps[ badCRCListIdx ] = getMSTimerCount(); + // move list index to next position (may wrap) + badCRCListIdx = INC_WRAP( badCRCListIdx, 0, MAX_COMM_CRC_FAILURES - 1 ); + // update list count + badCRCListCount = INC_CAP( badCRCListCount, MAX_COMM_CRC_FAILURES ); + // check if too many bad CRCs in window of time + listTimeInMS = calcTimeSince( badCRCTimeStamps[ badCRCListIdx ] ); + if ( listTimeInMS <= MAX_COMM_CRC_FAILURE_WINDOW_MS ) + { + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_COMM_TOO_MANY_BAD_CRCS, (U32)msgID ); + } +} + +#ifndef ACK_NOT_IMPLEMENTED +/************************************************************************* + * @brief addMsgToPendingACKList + * The addMsgToPendingACKList function adds a given message to the pending \n + * ACK list. Messages in this list will require receipt of an ACK message \n + * for this particular message within a limited time. + * @details + * Inputs : pendingAckList[] + * Outputs : pendingAckList[] + * @param msg : pointer to msg within the message data + * @param msgData : pointer to message data to add to pending ACK list + * @param len : # of bytes of message data + * @return TRUE if message added successfully, FALSE if not + *************************************************************************/ +BOOL addMsgToPendingACKList( MESSAGE_T *msg, COMM_BUFFER_T channel, U08 *msgData, U32 len ) +{ + BOOL result = FALSE; + U32 i; + + // find first open slot in pending ACK list and add given msg data to it + for ( i = 0; i < PENDING_ACK_LIST_SIZE; i++ ) + { + _disable_IRQ(); // slot selection needs interrupt protection + if ( FALSE == pendingAckList[ i ].used ) + { + S16 seqNo = msg->hdr.seqNo * -1; // remove ACK bit from seq # + + pendingAckList[ i ].used = TRUE; + _enable_IRQ(); + pendingAckList[ i ].seqNo = seqNo; + pendingAckList[ i ].channel = channel; + pendingAckList[ i ].timeStamp = getMSTimerCount(); + pendingAckList[ i ].retries = MSG_NOT_ACKED_MAX_RETRIES; + pendingAckList[ i ].msgSize = len; + memcpy( pendingAckList[ i ].msg, msgData, len ); + result = TRUE; + break; + } + else + { + _enable_IRQ(); + } + } + + return result; +} + +/************************************************************************* + * @brief matchACKtoPendingACKList + * The matchACKtoPendingACKList function searches the pending ACK list to \n + * see if the sequence # from a received ACK msg matches any. If found, \n + * the list entry is removed. + * @details + * Inputs : pendingAckList[] + * Outputs : pendingAckList[] + * @param seqNo : sequence # to match to an entry in the list + * @return TRUE if a match was found, FALSE if not + *************************************************************************/ +static BOOL matchACKtoPendingACKList( S16 seqNo ) +{ + BOOL result = FALSE; + U32 i; + + // find match + for ( i = 0; i < PENDING_ACK_LIST_SIZE; i++ ) + { + if ( ( TRUE == pendingAckList[ i ].used ) && ( pendingAckList[ i ].seqNo == seqNo ) ) + { // remove message pending ACK from list + pendingAckList[ i ].used = FALSE; + result = TRUE; + break; + } + } + + return result; +} + +/************************************************************************* + * @brief checkPendingACKList + * The checkPendingACKList function searches the pending ACK list to \n + * see if any have expired. Any such messages will be queued for retransmission \n + * and if max retries reached a fault is triggered. + * @details + * Inputs : pendingAckList[] + * Outputs : pendingAckList[] + * @param none + * @return none + *************************************************************************/ +static void checkPendingACKList( void ) +{ + U32 i; + + // find expired messages pending ACK + for ( i = 0; i < PENDING_ACK_LIST_SIZE; i++ ) + { + if ( ( TRUE == pendingAckList[ i ].used ) && ( TRUE == didTimeout( pendingAckList[ i ].timeStamp, MSG_NOT_ACKED_TIMEOUT_MS ) ) ) + { + if ( pendingAckList[ i ].retries > 0 ) + { // re-queue message for transmit + pendingAckList[ i ].retries--; + pendingAckList[ i ].timeStamp = getMSTimerCount(); + addToCommBuffer( pendingAckList[ i ].channel, pendingAckList[ i ].msg, pendingAckList[ i ].msgSize ); + } + else + { + U16 msgID; + + memcpy( &msgID, &pendingAckList[ i ].msg[ sizeof( U08 ) + sizeof( U16) ], sizeof( U16 ) ); + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_CAN_MESSAGE_NOT_ACKED, (U32)msgID ); + } + } + } +} +#endif + +/************************************************************************* * @brief processReceivedMessage * The processReceivedMessage function processes a given message. * @details * Inputs : none * Outputs : message processed - * @param msg : + * @param message : pointer to message to process * @return none *************************************************************************/ static void processReceivedMessage( MESSAGE_T *message ) { U16 msgID = message->hdr.msgID; + // handle any messages from other sub-systems switch ( msgID ) { case MSG_ID_OFF_BUTTON_PRESS: @@ -837,34 +1088,58 @@ handleTestBloodPumpRotorMeasuredSpeedOverrideRequest( message ); break; - case MSG_ID_DIAL_FLOW_SET_PT_OVERRIDE: - handleTestDialFlowSetPointOverrideRequest( message ); + case MSG_ID_DIAL_IN_FLOW_SET_PT_OVERRIDE: + handleTestDialInFlowSetPointOverrideRequest( message ); break; - case MSG_ID_DIAL_FLOW_MEAS_OVERRIDE: - handleTestDialFlowMeasuredOverrideRequest( message ); + case MSG_ID_DIAL_IN_FLOW_MEAS_OVERRIDE: + handleTestDialInFlowMeasuredOverrideRequest( message ); break; - case MSG_ID_DIAL_PUMP_MC_MEAS_SPEED_OVERRIDE: - handleTestDialPumpMCMeasuredSpeedOverrideRequest( message ); + case MSG_ID_DIAL_IN_PUMP_MC_MEAS_SPEED_OVERRIDE: + handleTestDialInPumpMCMeasuredSpeedOverrideRequest( message ); break; - case MSG_ID_DIAL_PUMP_MC_MEAS_CURR_OVERRIDE: - handleTestDialPumpMCMeasuredCurrentOverrideRequest( message ); + case MSG_ID_DIAL_IN_PUMP_MC_MEAS_CURR_OVERRIDE: + handleTestDialInPumpMCMeasuredCurrentOverrideRequest( message ); break; - case MSG_ID_DIAL_FLOW_SEND_INTERVAL_OVERRIDE: - handleTestDialFlowBroadcastIntervalOverrideRequest( message ); + case MSG_ID_DIAL_IN_FLOW_SEND_INTERVAL_OVERRIDE: + handleTestDialInFlowBroadcastIntervalOverrideRequest( message ); break; - case MSG_ID_DIAL_PUMP_MEAS_SPEED_OVERRIDE: - handleTestDialPumpMeasuredSpeedOverrideRequest( message ); + case MSG_ID_DIAL_IN_PUMP_MEAS_SPEED_OVERRIDE: + handleTestDialInPumpMeasuredSpeedOverrideRequest( message ); break; - case MSG_ID_DIAL_PUMP_MEAS_ROTOR_SPEED_OVERRIDE: - handleTestDialPumpRotorMeasuredSpeedOverrideRequest( message ); + case MSG_ID_DIAL_IN_PUMP_MEAS_ROTOR_SPEED_OVERRIDE: + handleTestDialInPumpRotorMeasuredSpeedOverrideRequest( message ); break; + case MSG_ID_PRESSURE_ARTERIAL_OVERRIDE: + handleTestArterialPressureOverrideRequest( message ); + break; + + case MSG_ID_PRESSURE_VENOUS_OVERRIDE: + handleTestVenousPressureOverrideRequest( message ); + break; + + case MSG_ID_OCCLUSION_BLOOD_PUMP_OVERRIDE: + handleTestBloodPumpOcclusionOverrideRequest( message ); + break; + + case MSG_ID_OCCLUSION_DIAL_IN_PUMP_OVERRIDE: + handleTestDialysateInletPumpOcclusionOverrideRequest( message ); + break; + + case MSG_ID_OCCLUSION_DIAL_OUT_PUMP_OVERRIDE: + handleTestDialysateOutletPumpOcclusionOverrideRequest( message ); + break; + + case MSG_ID_PRES_OCCL_SEND_INTERVAL_OVERRIDE: + handleTestPresOcclBroadcastIntervalOverrideRequest( message ); + break; + case MSG_ID_SET_RTC_DATE_TIME: handleSetRTCTimestamp( message ); break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r3e525c0567dd0b7d2153b751169d0ae17648e117 -r1c80d60fe6a95297a8a8033a3c7eade53e72779a --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 3e525c0567dd0b7d2153b751169d0ae17648e117) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) @@ -29,6 +29,7 @@ #include "SystemCommMessages.h" #include "Utilities.h" #include "SystemComm.h" +#include "RTC.h" // ********** private definitions ********** @@ -488,6 +489,40 @@ } /************************************************************************* + * @brief broadcastRTCEpoch + * The broadcastRTCEpoch function constructs an epoch msg to \n + * be broadcast and queues the msg for transmit on the appropriate CAN channel. + * @details + * Inputs : none + * Outputs : RTC time and date in epoch + * @param epoch : Current time and date in epoch + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL broadcastRTCEpoch( U32 epoch ) +{ + BOOL result; + MESSAGE_T msg; + U32 msgSize; + U08 data[ sizeof( MESSAGE_WRAPPER_T ) + 1 + CAN_MESSAGE_PAYLOAD_SIZE ]; // must hold full (wrapped) message + sync + any CAN padding + U08 *payloadPtr = msg.payload; + + // create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_RTC_EPOCH; + msg.hdr.payloadLen = sizeof( U32 ); + + memcpy( payloadPtr, &epoch, sizeof( U32 ) ); + + // serialize the message (w/ sync, CRC, and appropriate CAN padding) + msgSize = serializeMessage( msg, data ); + + // add serialized message data to appropriate comm buffer + result = addToCommBuffer( COMM_BUFFER_OUT_CAN_HD_BROADCAST, data, msgSize ); + + return result; +} + +/************************************************************************* * @brief handleDGCheckIn * The handleDGCheckIn function handles a check-in from the DG. * @details @@ -961,3 +996,33 @@ *************************************************************************/ DATA_OVERRIDE_HANDLER_FUNC( U32, handleTestPresOcclBroadcastIntervalOverrideRequest, testSetPresOcclDataPublishIntervalOverride, testResetPresOcclDataPublishIntervalOverride ) +/************************************************************************* + * @brief handleSetRTCTimestamp + * The handleSetRTCTimestamp function handles a request to write time and + * date to RTC + * @details + * Inputs : none + * Outputs : message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleSetRTCTimestamp( MESSAGE_T *message ) +{ + BOOL result; + U08 seconds = message->payload[0]; + U08 minutes = message->payload[1]; + U08 hours = message->payload[2]; + U08 days = message->payload[3]; + U08 months = message->payload[4]; + U32 years; + memcpy(&years, &message->payload[5], sizeof(U32)); + + // TODO: Change setRTCTimestamp to return a boolean for this + result = TRUE; + + setRTCTimestamp( seconds, minutes, hours, days, months, years ); + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r6c60d0d0300828750c76f2e397d4e7ccaa84bbb2 -r1c80d60fe6a95297a8a8033a3c7eade53e72779a --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 6c60d0d0300828750c76f2e397d4e7ccaa84bbb2) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) @@ -34,6 +34,7 @@ MSG_ID_UI_CHECK_IN, // 7 MSG_ID_DIALYSATE_FLOW_DATA, // 8 MSG_ID_PRESSURE_OCCLUSION_DATA, // 9 + MSG_ID_RTC_EPOCH, // 10 // service/test CAN messages @@ -67,6 +68,7 @@ MSG_ID_OCCLUSION_DIAL_IN_PUMP_OVERRIDE, // 0x801A MSG_ID_OCCLUSION_DIAL_OUT_PUMP_OVERRIDE, // 0x801B MSG_ID_PRES_OCCL_SEND_INTERVAL_OVERRIDE, // 0x801C + MSG_ID_SET_RTC_DATE_TIME, // 0x801D END_OF_MSG_IDS } MSG_ID_T; @@ -97,6 +99,9 @@ // MSG_ID_PRESSURE_OCCLUSION_DATA BOOL broadcastPresOcclData( F32 artPres, F32 venPres, F32 bpOccl, F32 diOccl, F32 doOccl ); +// MSG_ID_RTC_EPOCH +BOOL broadcastRTCEpoch( U32 epoch ); + // MSG_ID_DG_CHECK_IN void handleDGCheckIn( MESSAGE_T *message ); // MSG_ID_UI_CHECK_IN @@ -195,5 +200,8 @@ // MSG_ID_PRES_OCCL_SEND_INTERVAL_OVERRIDE void handleTestPresOcclBroadcastIntervalOverrideRequest( MESSAGE_T *message ); +// MSG_ID_SET_RTC_TIMESTAMP +void handleSetRTCTimestamp( MESSAGE_T *message ); + #endif Index: firmware/App/Tasks/TaskGeneral.c =================================================================== diff -u -rfe01fd0124c0c43737474781730608d55d0f0bda -r1c80d60fe6a95297a8a8033a3c7eade53e72779a --- firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision fe01fd0124c0c43737474781730608d55d0f0bda) +++ firmware/App/Tasks/TaskGeneral.c (.../TaskGeneral.c) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) @@ -21,6 +21,7 @@ #include "BloodFlow.h" #include "DialInFlow.h" #include "OperationModes.h" +#include "PresOccl.h" #include "SystemComm.h" #include "WatchdogMgmt.h" #include "TaskGeneral.h" @@ -62,6 +63,9 @@ if ( TRUE == uiCommunicated() ) #endif { + // monitor pressure/occlusion sensors + execPresOccl(); + // run operation mode state machine execOperationModes(); Index: firmware/HD.dil =================================================================== diff -u -r668307bef53cce2f8afdac12bfd184970f30e780 -r1c80d60fe6a95297a8a8033a3c7eade53e72779a --- firmware/HD.dil (.../HD.dil) (revision 668307bef53cce2f8afdac12bfd184970f30e780) +++ firmware/HD.dil (.../HD.dil) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) @@ -1,4 +1,4 @@ -# RM46L852PGE 12/30/19 18:54:03 +# RM46L852PGE 01/22/20 12:55:22 # ARCH=RM46L852PGE # @@ -1109,7 +1109,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_100_INT_TYPE.VALUE=IRQ DRIVER.SYSTEM.VAR.SAFETY_INIT_FTU_DP_PBISTCHECK_ENA.VALUE=0x00000000 DRIVER.SYSTEM.VAR.RTP_ENABLE.VALUE=0 -DRIVER.SYSTEM.VAR.MIBSPI3_ENABLE.VALUE=0 +DRIVER.SYSTEM.VAR.MIBSPI3_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_0.VALUE=0x0013FFE0 DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_1.VALUE=0x00180000 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SIZE_VALUE.VALUE=0x16 @@ -1846,7 +1846,7 @@ DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_FUN.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_LOCK.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_PARERRENA.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_OVRNINTENA.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT8_PULDIS.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_TG6_CS_ENCODE.VALUE=0xFF DRIVER.MIBSPI.VAR.MIBSPI1_TG6_USE_CS_ENCODE.VALUE=0 @@ -1855,7 +1855,7 @@ DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT0_PDR.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PDR.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT2_DOUT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSNR.VALUE=CS_3 +DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSNR.VALUE=CS_NONE DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PSL.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PSL.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_DFSEL.VALUE=0 @@ -1865,7 +1865,7 @@ DRIVER.MIBSPI.VAR.MIBSPI5_TG2_BUF_MODE.VALUE=4 DRIVER.MIBSPI.VAR.MIBSPI5_RXINTENA.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_TG5_USE_CS_ENCODE.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_DEYSNCENA.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT11_PULDIS.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT1_PULDIS.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT27_PSL.VALUE=1 @@ -1914,7 +1914,7 @@ DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE2.VALUE=1003.252 DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT2_PULDIS.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_BITERRENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_BITERRENA.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI1_TG1_BUF_LOCK.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_ACTUALBAUDRATE3.VALUE=1003.252 DRIVER.MIBSPI.VAR.MIBSPI5_TG4_PRST.VALUE=0 @@ -1932,7 +1932,7 @@ DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_PSL.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_WDEL.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_TG6_ONESHOT.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_WDELAY0.VALUE=20 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DOUT.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DOUT.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_T2CDELAYACTUAL.VALUE=9.677 @@ -1960,7 +1960,7 @@ DRIVER.MIBSPI.VAR.MIBSPI5_TG5_BUF_LOCK.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_TG1_ONESHOT.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT5_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSNR.VALUE=CS_6 +DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSNR.VALUE=CS_NONE DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT3_FUN.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_TG2_LENGTH.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_BASE_PORT.VALUE=0xFFF7FC18 @@ -1988,7 +1988,7 @@ DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL0.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_TG2_USE_CS_ENCODE.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL1.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PARERRENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PARERRENA.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI1_TG4_CS_ENCODE.VALUE=0xFF DRIVER.MIBSPI.VAR.MIBSPI5_TG5_PRST.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_PARPOL2.VALUE=0 @@ -2086,7 +2086,7 @@ DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT4_PULDIS.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN2.VALUE=16 DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSNR.VALUE=CS_2 +DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_CSNR.VALUE=CS_NONE DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT9_DOUT.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_CHARLEN3.VALUE=16 DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_DIR.VALUE=1 @@ -2152,7 +2152,7 @@ DRIVER.MIBSPI.VAR.MIBSPI3_TG3_TRGSRC.VALUE=TRG_DISABLED DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE1.VALUE=1000.000 DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_FUN.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_BUF_CSHOLD.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE2.VALUE=1000.000 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_PULL.VALUE=2 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_PULL.VALUE=2 @@ -2162,7 +2162,7 @@ DRIVER.MIBSPI.VAR.MIBSPI3_TG4_USE_CS_ENCODE.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_TG2_BUF_MODE.VALUE=4 DRIVER.MIBSPI.VAR.MIBSPI3_BAUDRATE3.VALUE=1000.000 -DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_TIMEOUTENA.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI5_ENABLEHIGHZ.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA0.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_C2EDELAY.VALUE=0 @@ -2175,7 +2175,7 @@ DRIVER.MIBSPI.VAR.MIBSPI5_TG3_USE_CS_ENCODE.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_TG7_CS_ENCODE.VALUE=0xFF DRIVER.MIBSPI.VAR.MIBSPI1_PARITYENA3.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSNR.VALUE=CS_5 +DRIVER.MIBSPI.VAR.MIBSPI3_TG5_BUF_CSNR.VALUE=CS_NONE DRIVER.MIBSPI.VAR.MIBSPI3_POLARITY0.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_TG2_BUF_DFSEL.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_C2TDELAY.VALUE=0 @@ -2311,7 +2311,7 @@ DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT0_PULDIS.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_TG5_CS_ENCODE.VALUE=0xFF DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT11_PSL.VALUE=1 -DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSNR.VALUE=CS_1 +DRIVER.MIBSPI.VAR.MIBSPI3_TG1_BUF_CSNR.VALUE=CS_NONE DRIVER.MIBSPI.VAR.MIBSPI1_TG0_BUF_DFSEL.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_POLARITY0.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_TG5_TRGSRC.VALUE=TRG_DISABLED @@ -2336,7 +2336,7 @@ DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSNR.VALUE=CS_3 DRIVER.MIBSPI.VAR.MIBSPI5_TG2_TRGSRC.VALUE=TRG_DISABLED DRIVER.MIBSPI.VAR.MIBSPI3_TG6_BUF_CSHOLD_LASTBUF.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG0_LENGTH.VALUE=8 +DRIVER.MIBSPI.VAR.MIBSPI3_TG0_LENGTH.VALUE=11 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_FUN.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT8_PULDIS.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_TG4_CS_ENCODE.VALUE=0xFF @@ -2411,7 +2411,7 @@ DRIVER.MIBSPI.VAR.MIBSPI3_RAM_PARITY_ENA.VALUE=0x00000005 DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA0.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_DFSEL.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSNR.VALUE=CS_4 +DRIVER.MIBSPI.VAR.MIBSPI3_TG4_BUF_CSNR.VALUE=CS_NONE DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT3_PDR.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA1.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_PARITYENA2.VALUE=0 @@ -2431,15 +2431,15 @@ DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT2_PSL.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI1_T2EDELAYACTUAL.VALUE=0.000 DRIVER.MIBSPI.VAR.MIBSPI1_TG3_TRGSRC.VALUE=TRG_DISABLED -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_FUN.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT0_FUN.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_TG0_CS_ENCODE.VALUE=0xFF DRIVER.MIBSPI.VAR.MIBSPI1_TIMEOUTENA.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_TG1_PRST.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_TG0_BUF_WDEL.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_CLKMOD.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT9_DOUT.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PHASE0.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_PHASE0.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI5_TG7_TRGSRC.VALUE=TRG_DISABLED DRIVER.MIBSPI.VAR.MIBSPI3_PHASE1.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_DIR.VALUE=0 @@ -2477,7 +2477,7 @@ DRIVER.MIBSPI.VAR.MIBSPI5_TG5_TRGEVT.VALUE=TRG_ALWAYS DRIVER.MIBSPI.VAR.MIBSPI5_TG3_BUF_CSHOLD_LASTBUF.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_WDELAY2.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_FUN.VALUE=1 +DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_FUN.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT17_DIR.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI1_PORT_BIT25_DIR.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_TG2_CS_ENCODE.VALUE=0xFF @@ -2511,7 +2511,7 @@ DRIVER.MIBSPI.VAR.MIBSPI5_TG3_ONESHOT.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAYACTUAL.VALUE=19.355 DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT1_PDR.VALUE=0 -DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSNR.VALUE=CS_7 +DRIVER.MIBSPI.VAR.MIBSPI3_TG7_BUF_CSNR.VALUE=CS_NONE DRIVER.MIBSPI.VAR.MIBSPI1_TG3_BUF_DFSEL.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_C2TDELAY.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_TG6_LENGTH.VALUE=0 @@ -2558,12 +2558,12 @@ DRIVER.MIBSPI.VAR.MIBSPI3_PORT_BIT10_DIR.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI3_TG3_BUF_CSHOLD.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE2.VALUE=102 -DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN0.VALUE=16 +DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN0.VALUE=8 DRIVER.MIBSPI.VAR.MIBSPI5_ACTUALBAUDRATE3.VALUE=1003.252 DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL1.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI3_PRESCALE3.VALUE=102 DRIVER.MIBSPI.VAR.MIBSPI3_CHARLEN1.VALUE=16 -DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRENA.VALUE=0 +DRIVER.MIBSPI.VAR.MIBSPI3_DLENERRENA.VALUE=1 DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT26_PDR.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_PORT_BIT18_PDR.VALUE=0 DRIVER.MIBSPI.VAR.MIBSPI5_PARPOL2.VALUE=0 @@ -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=0 +DRIVER.PINMUX.VAR.MUX30_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX22_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX14_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.DMA_FIDXD_29.VALUE=0 @@ -7407,7 +7407,7 @@ DRIVER.PINMUX.VAR.DMA_FIDXS_7.VALUE=0 DRIVER.PINMUX.VAR.DMA_AIM_7.VALUE=ENABLED DRIVER.PINMUX.VAR.MUX59_OPTION5.VALUE=0 -DRIVER.PINMUX.VAR.MUX6_OPTION1.VALUE=0 +DRIVER.PINMUX.VAR.MUX6_OPTION1.VALUE=1 DRIVER.PINMUX.VAR.DMA_FIDXS_8.VALUE=0 DRIVER.PINMUX.VAR.DMA_AIM_8.VALUE=ENABLED DRIVER.PINMUX.VAR.MUX6_OPTION2.VALUE=0 @@ -7424,7 +7424,7 @@ DRIVER.PINMUX.VAR.MUX52_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX44_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX36_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX28_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX28_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX6_OPTION4.VALUE=0 DRIVER.PINMUX.VAR.MUX60_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.MUX52_OPTION1.VALUE=0 @@ -7670,7 +7670,7 @@ DRIVER.PINMUX.VAR.MUX51_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX43_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX35_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX27_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX27_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX19_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX5_OPTION4.VALUE=0 DRIVER.PINMUX.VAR.DMA_ADDMW_7.VALUE=CONSTANT @@ -7945,7 +7945,7 @@ DRIVER.PINMUX.VAR.MUX50_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX42_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX34_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MUX26_OPTION0.VALUE=0 +DRIVER.PINMUX.VAR.MUX26_OPTION0.VALUE=1 DRIVER.PINMUX.VAR.MUX18_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.MUX4_OPTION4.VALUE=0 DRIVER.PINMUX.VAR.DMA_IFT_COUNT_7.VALUE=0 @@ -7967,7 +7967,7 @@ DRIVER.PINMUX.VAR.MUX18_OPTION2.VALUE=0 DRIVER.PINMUX.VAR.PIN_MUX_97_SELECT.VALUE=0 DRIVER.PINMUX.VAR.PIN_MUX_89_SELECT.VALUE=0 -DRIVER.PINMUX.VAR.PIN_MUX_6_SELECT.VALUE=0 +DRIVER.PINMUX.VAR.PIN_MUX_6_SELECT.VALUE=1 DRIVER.PINMUX.VAR.DMA_ADDMR_31_VALUE.VALUE=0x0001 DRIVER.PINMUX.VAR.DMA_ADDMR_23_VALUE.VALUE=0x0001 DRIVER.PINMUX.VAR.DMA_ADDMR_15_VALUE.VALUE=0x0001 @@ -8350,7 +8350,7 @@ DRIVER.PINMUX.VAR.DMA_BYP_9.VALUE=1 DRIVER.PINMUX.VAR.MIBSPI1.VALUE=0 DRIVER.PINMUX.VAR.MUX103_OPTION0.VALUE=0 -DRIVER.PINMUX.VAR.MIBSPI3.VALUE=0 +DRIVER.PINMUX.VAR.MIBSPI3.VALUE=1 DRIVER.PINMUX.VAR.MUX103_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.OHCI0.VALUE=0 DRIVER.PINMUX.VAR.MUX103_OPTION2.VALUE=0 @@ -8830,7 +8830,7 @@ DRIVER.PINMUX.VAR.PINMUX0.VALUE="PINMUX_PIN_1_GIOB_3 | PINMUX_PIN_2_GIOA_0 | PINMUX_PIN_3_MIBSPI3NCS_3 | PINMUX_PIN_4_MIBSPI3NCS_2" DRIVER.PINMUX.VAR.MUX99_OPTION0.VALUE=0 DRIVER.PINMUX.VAR.DMA_INTLFSEN_7.VALUE=1 -DRIVER.PINMUX.VAR.PINMUX1.VALUE="PINMUX_PIN_5_GIOA_1 | PINMUX_PIN_6_HET1_11" +DRIVER.PINMUX.VAR.PINMUX1.VALUE="PINMUX_PIN_5_GIOA_1 | PINMUX_PIN_6_MIBSPI3NCS_4" DRIVER.PINMUX.VAR.MUX99_OPTION1.VALUE=0 DRIVER.PINMUX.VAR.DMA_READ_ELSIZE_10.VALUE=8BIT DRIVER.PINMUX.VAR.DMA_INTLFSEN_8.VALUE=1 Index: firmware/source/sys_main.c =================================================================== diff -u -rfe01fd0124c0c43737474781730608d55d0f0bda -r1c80d60fe6a95297a8a8033a3c7eade53e72779a --- firmware/source/sys_main.c (.../sys_main.c) (revision fe01fd0124c0c43737474781730608d55d0f0bda) +++ firmware/source/sys_main.c (.../sys_main.c) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) @@ -67,15 +67,18 @@ #include "CommBuffers.h" #include "CPLD.h" #include "DialInFlow.h" +#include "Dialysis.h" #include "FPGA.h" #include "InternalADC.h" #include "MsgQueues.h" #include "OperationModes.h" +#include "PresOccl.h" #include "RTC.h" #include "SafetyShutdown.h" #include "SystemComm.h" #include "TaskBG.h" #include "Timers.h" +#include "TreatmentStop.h" #include "WatchdogMgmt.h" static void initProcessor( void ); @@ -157,18 +160,21 @@ { initAlarmMgmt(); initTimers(); - initSafetyShutdown(); initCPLD(); - initInternalADC(); - initBloodFlow(); - initDialInFlow(); - initAlarmLamp(); - initButtons(); + initSafetyShutdown(); initWatchdogMgmt(); initFPGA(); + initAlarmLamp(); + initButtons(); + initInternalADC(); initCommBuffers(); initMsgQueues(); initSystemComm(); + initPresOccl(); + initBloodFlow(); + initDialInFlow(); + initDialysis(); + initTreatmentStop(); initOperationModes(); initRTC(); } Index: results/cppcheck.log =================================================================== diff -u -rfe01fd0124c0c43737474781730608d55d0f0bda -r1c80d60fe6a95297a8a8033a3c7eade53e72779a --- results/cppcheck.log (.../cppcheck.log) (revision fe01fd0124c0c43737474781730608d55d0f0bda) +++ results/cppcheck.log (.../cppcheck.log) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) @@ -1,59 +1,91 @@ Checking hdfirmware/firmware/App/Controllers/AlarmLamp.c ... -1/36 files checked 2% done +1/38 files checked 2% done Checking hdfirmware/firmware/App/Controllers/BloodFlow.c ... Checking hdfirmware/firmware/App/Controllers/BloodFlow.c: DEBUG_ENABLED... -2/36 files checked 5% done +2/38 files checked 5% done Checking hdfirmware/firmware/App/Controllers/Buttons.c ... Checking hdfirmware/firmware/App/Controllers/Buttons.c: SIMULATE_UI... -3/36 files checked 8% done +3/38 files checked 7% done Checking hdfirmware/firmware/App/Controllers/DialInFlow.c ... Checking hdfirmware/firmware/App/Controllers/DialInFlow.c: DEBUG_ENABLED... -4/36 files checked 10% done -Checking hdfirmware/firmware/App/Controllers/RTC.c ... -Checking hdfirmware/firmware/App/Controllers/RTC.c: _VECTORCAST_... -5/36 files checked 13% done +4/38 files checked 10% done +Checking hdfirmware/firmware/App/Controllers/PresOccl.c ... +5/38 files checked 12% done Checking hdfirmware/firmware/App/Drivers/CPLD.c ... Checking hdfirmware/firmware/App/Drivers/CPLD.c: RM46_EVAL_BOARD_TARGET... -6/36 files checked 16% done +6/38 files checked 15% done Checking hdfirmware/firmware/App/Drivers/Comm.c ... -7/36 files checked 19% done +7/38 files checked 18% done Checking hdfirmware/firmware/App/Drivers/InternalADC.c ... -8/36 files checked 21% done +8/38 files checked 20% done Checking hdfirmware/firmware/App/Drivers/SafetyShutdown.c ... -9/36 files checked 24% done +9/38 files checked 23% done +Checking hdfirmware/firmware/App/Modes/Dialysis.c ... +10/38 files checked 25% done Checking hdfirmware/firmware/App/Modes/ModeFault.c ... -10/36 files checked 27% done +11/38 files checked 28% done Checking hdfirmware/firmware/App/Modes/ModeInitPOST.c ... -11/36 files checked 30% done +12/38 files checked 31% done Checking hdfirmware/firmware/App/Modes/ModeOpParams.c ... Checking hdfirmware/firmware/App/Modes/ModeOpParams.c: RM46_EVAL_BOARD_TARGET... -12/36 files checked 32% done +13/38 files checked 33% done Checking hdfirmware/firmware/App/Modes/ModePostTreat.c ... Checking hdfirmware/firmware/App/Modes/ModePostTreat.c: RM46_EVAL_BOARD_TARGET... -13/36 files checked 35% done +14/38 files checked 36% done Checking hdfirmware/firmware/App/Modes/ModePreTreat.c ... Checking hdfirmware/firmware/App/Modes/ModePreTreat.c: RM46_EVAL_BOARD_TARGET... -14/36 files checked 38% done +15/38 files checked 38% done Checking hdfirmware/firmware/App/Modes/ModePrescription.c ... Checking hdfirmware/firmware/App/Modes/ModePrescription.c: RM46_EVAL_BOARD_TARGET... -15/36 files checked 40% done +16/38 files checked 41% done Checking hdfirmware/firmware/App/Modes/ModeService.c ... -16/36 files checked 43% done +17/38 files checked 44% done Checking hdfirmware/firmware/App/Modes/ModeStandby.c ... Checking hdfirmware/firmware/App/Modes/ModeStandby.c: RM46_EVAL_BOARD_TARGET... -17/36 files checked 46% done +18/38 files checked 46% done Checking hdfirmware/firmware/App/Modes/ModeTreatment.c ... Checking hdfirmware/firmware/App/Modes/ModeTreatment.c: RM46_EVAL_BOARD_TARGET... -18/36 files checked 49% done +19/38 files checked 49% done Checking hdfirmware/firmware/App/Modes/OperationModes.c ... -19/36 files checked 51% done +20/38 files checked 51% done +Checking hdfirmware/firmware/App/Modes/TreatmentStop.c ... +21/38 files checked 54% done Checking hdfirmware/firmware/App/Services/AlarmMgmt.c ... Checking hdfirmware/firmware/App/Services/AlarmMgmt.c: DEBUG_ENABLED... -20/36 files checked 54% done +22/38 files checked 56% done Checking hdfirmware/firmware/App/Services/CommBuffers.c ... -21/36 files checked 57% done +23/38 files checked 59% done Checking hdfirmware/firmware/App/Services/FPGA.c ... +Checking hdfirmware/firmware/App/Services/FPGA.c: DEBUG_ENABLED... Checking hdfirmware/firmware/App/Services/FPGA.c: RM46_EVAL_BOARD_TARGET... +24/38 files checked 62% done +Checking hdfirmware/firmware/App/Services/Interrupts.c ... +Checking hdfirmware/firmware/App/Services/Interrupts.c: DEBUG_ENABLED... +25/38 files checked 64% done +Checking hdfirmware/firmware/App/Services/MsgQueues.c ... +26/38 files checked 67% done +Checking hdfirmware/firmware/App/Services/PIControllers.c ... +27/38 files checked 69% done +Checking hdfirmware/firmware/App/Services/SystemComm.c ... +Checking hdfirmware/firmware/App/Services/SystemComm.c: RM46_EVAL_BOARD_TARGET... +28/38 files checked 72% done +Checking hdfirmware/firmware/App/Services/SystemCommMessages.c ... +29/38 files checked 75% done +Checking hdfirmware/firmware/App/Services/Timers.c ... +30/38 files checked 77% done +Checking hdfirmware/firmware/App/Services/Utilities.c ... +31/38 files checked 80% done +Checking hdfirmware/firmware/App/Services/WatchdogMgmt.c ... +32/38 files checked 82% done +Checking hdfirmware/firmware/App/Tasks/TaskBG.c ... +33/38 files checked 85% done +Checking hdfirmware/firmware/App/Tasks/TaskGeneral.c ... +Checking hdfirmware/firmware/App/Tasks/TaskGeneral.c: RM46_EVAL_BOARD_TARGET... +34/38 files checked 88% done +Checking hdfirmware/firmware/App/Tasks/TaskPriority.c ... +35/38 files checked 90% done +Checking hdfirmware/firmware/App/Tasks/TaskTimer.c ... +36/38 files checked 93% done 22/36 files checked 60% done Checking hdfirmware/firmware/App/Services/Interrupts.c ... Checking hdfirmware/firmware/App/Services/Interrupts.c: DEBUG_ENABLED... @@ -83,9 +115,7 @@ Checking hdfirmware/firmware/App/Tasks/TaskTimer.c ... 34/36 files checked 92% done Checking hdfirmware/firmware/irqDispatch_c.c ... -Checking hdfirmware/firmware/irqDispatch_c.c: __TI_VIM_128CH__... -Checking hdfirmware/firmware/irqDispatch_c.c: __TI_VIM_96CH__... -Checking hdfirmware/firmware/irqDispatch_c.c: __TI_VIM_96CH__;__TI_VIM_96CH__;__TI_VIM_96CH__;__TI_VIM_96CH__;__TI_VIM_96CH__... -35/36 files checked 95% done +37/38 files checked 95% done Checking hdfirmware/firmware/source/sys_main.c ... -36/36 files checked 100% done +38/38 files checked 100% done + Index: results/cppcheckError.csv =================================================================== diff -u -rfe01fd0124c0c43737474781730608d55d0f0bda -r1c80d60fe6a95297a8a8033a3c7eade53e72779a --- results/cppcheckError.csv (.../cppcheckError.csv) (revision fe01fd0124c0c43737474781730608d55d0f0bda) +++ results/cppcheckError.csv (.../cppcheckError.csv) (revision 1c80d60fe6a95297a8a8033a3c7eade53e72779a) @@ -2,14 +2,27 @@ hdfirmware/firmware/App/Controllers/RTC.c,1140,style,redundantAssignment,Variable 'result' is reassigned a value before the old one has been used. hdfirmware/firmware/App/Controllers/RTC.c,655,style,unreadVariable,Variable 'controlReg2' is assigned a value that is never used. hdfirmware/firmware/App/Services/Interrupts.c,100,style,variableScope,The scope of the variable 'debugStr' can be reduced. -hdfirmware/firmware/App/Services/PIControllers.c,67,style,variableScope,The scope of the variable 'controller' can be reduced. +hdfirmware/firmware/App/Services/PIControllers.c,77,style,variableScope,The scope of the variable 'controller' can be reduced. hdfirmware/firmware/irqDispatch_c.c,75,style,unusedFunction,The function 'C_irqDispatch' is never used. -hdfirmware/firmware/App/Services/AlarmMgmt.c,254,style,unusedFunction,The function 'activateAlarm1Data' is never used. -hdfirmware/firmware/App/Services/AlarmMgmt.c,277,style,unusedFunction,The function 'activateAlarm2Data' is never used. +hdfirmware/firmware/App/Services/AlarmMgmt.c,278,style,unusedFunction,The function 'activateAlarm1Data' is never used. +hdfirmware/firmware/App/Services/AlarmMgmt.c,301,style,unusedFunction,The function 'activateAlarm2Data' is never used. hdfirmware/firmware/App/Drivers/InternalADC.c,112,style,unusedFunction,The function 'adcNotification' is never used. hdfirmware/firmware/App/Services/Interrupts.c,96,style,unusedFunction,The function 'canErrorNotification' is never used. hdfirmware/firmware/App/Services/Interrupts.c,75,style,unusedFunction,The function 'canMessageNotification' is never used. hdfirmware/firmware/App/Services/Interrupts.c,230,style,unusedFunction,The function 'dmaGroupANotification' is never used. +hdfirmware/firmware/App/Controllers/BloodFlow.c,847,style,unusedFunction,The function 'execBloodFlowTest' is never used. +hdfirmware/firmware/App/Controllers/DialInFlow.c,831,style,unusedFunction,The function 'execDialInFlowTest' is never used. +hdfirmware/firmware/App/Modes/Dialysis.c,60,style,unusedFunction,The function 'execDialysis' is never used. +hdfirmware/firmware/App/Controllers/PresOccl.c,389,style,unusedFunction,The function 'execPresOcclTest' is never used. +hdfirmware/firmware/App/Modes/TreatmentStop.c,62,style,unusedFunction,The function 'execTreatmentStop' is never used. +hdfirmware/firmware/App/Services/FPGA.c,839,style,unusedFunction,The function 'getFPGAId' is never used. +hdfirmware/firmware/App/Services/FPGA.c,854,style,unusedFunction,The function 'getFPGARev' is never used. +hdfirmware/firmware/App/Services/FPGA.c,869,style,unusedFunction,The function 'getFPGAStatus' is never used. +hdfirmware/firmware/App/Services/PIControllers.c,206,style,unusedFunction,The function 'getPIControllerSignals' is never used. +hdfirmware/firmware/App/Services/AlarmMgmt.c,359,style,unusedFunction,The function 'isAlarmActive' is never used. +hdfirmware/firmware/App/Services/SystemComm.c,212,style,unusedFunction,The function 'isDGCommunicating' is never used. +hdfirmware/firmware/App/Modes/ModeInitPOST.c,162,style,unusedFunction,The function 'isPOSTCompleted' is never used. +hdfirmware/firmware/App/Modes/ModeInitPOST.c,177,style,unusedFunction,The function 'isPOSTPassed' is never used. hdfirmware/firmware/App/Controllers/BloodFlow.c,815,style,unusedFunction,The function 'execBloodFlowTest' is never used. hdfirmware/firmware/App/Controllers/DialInFlow.c,815,style,unusedFunction,The function 'execDialInFlowTest' is never used. hdfirmware/firmware/App/Services/SystemComm.c,202,style,unusedFunction,The function 'execSystemCommRx' is never used. @@ -26,12 +39,21 @@ hdfirmware/firmware/App/Modes/ModeInitPOST.c,170,style,unusedFunction,The function 'isPOSTCompleted' is never used. hdfirmware/firmware/App/Modes/ModeInitPOST.c,185,style,unusedFunction,The function 'isPOSTPassed' is never used. hdfirmware/firmware/App/Drivers/Comm.c,273,style,unusedFunction,The function 'isSCI2DMATransmitInProgress' is never used. -hdfirmware/firmware/App/Services/SystemComm.c,170,style,unusedFunction,The function 'isUICommunicating' is never used. +hdfirmware/firmware/App/Services/SystemComm.c,231,style,unusedFunction,The function 'isUICommunicating' is never used. hdfirmware/firmware/App/Services/Interrupts.c,60,style,unusedFunction,The function 'phantomInterrupt' is never used. hdfirmware/firmware/App/Controllers/RTC.c,436,style,unusedFunction,The function 'readFromRAM' is never used. hdfirmware/firmware/App/Services/Interrupts.c,158,style,unusedFunction,The function 'sciNotification' is never used. -hdfirmware/firmware/App/Controllers/DialInFlow.c,183,style,unusedFunction,The function 'setDialInPumpTargetFlowRate' is never used. +hdfirmware/firmware/App/Controllers/DialInFlow.c,184,style,unusedFunction,The function 'setDialInPumpTargetFlowRate' is never used. hdfirmware/firmware/App/Services/FPGA.c,883,style,unusedFunction,The function 'setFPGAControl' is never used. +hdfirmware/firmware/App/Controllers/PresOccl.c,143,style,unusedFunction,The function 'setOcclusionThreshold' is never used. +hdfirmware/firmware/App/Controllers/PresOccl.c,112,style,unusedFunction,The function 'setPressureLimits' is never used. +hdfirmware/firmware/App/Controllers/BloodFlow.c,247,style,unusedFunction,The function 'signalBloodPumpHardStop' is never used. +hdfirmware/firmware/App/Controllers/DialInFlow.c,248,style,unusedFunction,The function 'signalDialInPumpHardStop' is never used. +hdfirmware/firmware/App/Tasks/TaskGeneral.c,48,style,unusedFunction,The function 'taskGeneral' is never used. +hdfirmware/firmware/App/Tasks/TaskPriority.c,36,style,unusedFunction,The function 'taskPriority' is never used. +hdfirmware/firmware/App/Tasks/TaskTimer.c,32,style,unusedFunction,The function 'taskTimer' is never used. +hdfirmware/firmware/App/Modes/Dialysis.c,47,style,unusedFunction,The function 'transitionToDialysis' is never used. +hdfirmware/firmware/App/Modes/TreatmentStop.c,48,style,unusedFunction,The function 'transitionToTreatmentStop' is never used. hdfirmware/firmware/App/Controllers/RTC.c,233,style,unusedFunction,The function 'setRTCTimestamp' is never used. hdfirmware/firmware/App/Controllers/BloodFlow.c,246,style,unusedFunction,The function 'signalBloodPumpHardStop' is never used. hdfirmware/firmware/App/Controllers/DialInFlow.c,247,style,unusedFunction,The function 'signalDialInPumpHardStop' is never used.