Index: firmware/App/HDCommon.h =================================================================== diff -u -r514463982373eb976e4b48a27d0f85f56e014920 -r687dc2717d2f6b128b73526791f08d7176e447e8 --- firmware/App/HDCommon.h (.../HDCommon.h) (revision 514463982373eb976e4b48a27d0f85f56e014920) +++ firmware/App/HDCommon.h (.../HDCommon.h) (revision 687dc2717d2f6b128b73526791f08d7176e447e8) @@ -85,7 +85,7 @@ #define DISABLE_ILLEGAL_AIR_TRAP_ALARM 1 // Disable illegal state for air trap alarm #define SKIP_RESERVOIR_ALARMS 1 // Skip reservoir management alarms #define IGNORE_BLOOD_LEAK_SELF_TEST 1 // Ignore blood leak self test -// #define IGNORE_BLOOD_LEAK_ALARM 1 // Ignore blood leak alarm + #define IGNORE_BLOOD_LEAK_ALARM 1 // Ignore blood leak alarm // Skip Pre-Treatment and get to treatment as soon as possible #define SKIP_UI_INTERACTION 1 // Skip UI interaction. Index: firmware/App/Services/Reservoirs.c =================================================================== diff -u -r514463982373eb976e4b48a27d0f85f56e014920 -r687dc2717d2f6b128b73526791f08d7176e447e8 --- firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 514463982373eb976e4b48a27d0f85f56e014920) +++ firmware/App/Services/Reservoirs.c (.../Reservoirs.c) (revision 687dc2717d2f6b128b73526791f08d7176e447e8) @@ -74,7 +74,7 @@ static const F32 RESERVOIR_DILUTION_RATIO = MAX_RESERVOIR_DILUTION / ( 1.0 - MAX_RESERVOIR_DILUTION ); ///< Reservoir dilution ratio. // TODO remove -static BOOL test = FALSE; +static BOOL test = TRUE; // TODO remove // ********** private function prototypes ********** @@ -128,10 +128,6 @@ ratios.acidMixingRatio = 0.0; ratios.bicarbMixingRatio = 0.0; ratios.timeFillPrepMS = 0; - - // TODO remove - test = FALSE; - // TODO remove } /*********************************************************************//** @@ -583,29 +579,37 @@ TREATMENT_RESERVOIR_MGMT_STATE_T state = TREATMENT_RESERVOIR_MGMT_WAIT_FOR_FILL_SETTLE_STATE; // Wait for the reservoir to settle and then send the commands to switch the active reservoir - if ( ( TRUE == didTimeout( reservoirSwitchStartTimeMS, RESERVOIR_SETTLE_TIME_MS ) ) && ( volSpentML >= (F32)FILL_RESERVOIR_TO_VOLUME_ML ) /*&& ( FALSE == test )*/ ) // DEBUG_DENALI + if ( ( TRUE == didTimeout( reservoirSwitchStartTimeMS, RESERVOIR_SETTLE_TIME_MS ) ) && ( volSpentML >= (F32)FILL_RESERVOIR_TO_VOLUME_ML ) ) { DG_RESERVOIR_ID_T inactiveRes = getDGInactiveReservoir(); - // Signal dialysis sub-mode to capture baseline volume for next reservoir. - setStartReservoirVolume( inactiveRes ); + // TODO test code remove + // This must be TRUE for reservoir 1, and FALSE for reservoir 2 + test = FALSE; + //if ( TRUE == test ) + { + // Signal dialysis sub-mode to capture baseline volume for next reservoir. + setStartReservoirVolume( inactiveRes ); - // Command DG to switch reservoirs - cmdSetDGActiveReservoir( inactiveRes ); + // Command DG to switch reservoirs + cmdSetDGActiveReservoir( inactiveRes ); - // Signal dialysis sub-mode to switch reservoirs - signalReservoirsSwitched(); + // Signal dialysis sub-mode to switch reservoirs + signalReservoirsSwitched(); + } + // TODO test code // Get ready for the next delivery volSpentML = 0.0; // Wait for used reservoir to settle reservoirSwitchStartTimeMS = getMSTimerCount(); + // TODO test code state = TREATMENT_RESERVOIR_MGMT_WAIT_FOR_SWITCH_SETTLE_STATE; - - // This is to make sure the active reservoir stays as 2 - test = TRUE; + // For reservoir test, it should go back to start state + //state = TREATMENT_RESERVOIR_MGMT_START_STATE; + // TODO test code } return state; Index: firmware/App/Services/SystemComm.c =================================================================== diff -u -r9c785a779da348df1c066ae0da2d0f53de7ea936 -r687dc2717d2f6b128b73526791f08d7176e447e8 --- firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 9c785a779da348df1c066ae0da2d0f53de7ea936) +++ firmware/App/Services/SystemComm.c (.../SystemComm.c) (revision 687dc2717d2f6b128b73526791f08d7176e447e8) @@ -1617,6 +1617,14 @@ handleSetFansDutyCycleOverrideRequest( message ); break; + case MSG_ID_HD_GET_SW_CONFIG_RECORD: + handleGetHDSoftwareConfigRecord( message ); + break; + + case MSG_ID_HD_SET_SW_CONFIG_RECORD: + handleSetHDSoftwareConfigRecord( message ); + break; + default: // Unrecognized message ID received - ignore break; Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r9c785a779da348df1c066ae0da2d0f53de7ea936 -r687dc2717d2f6b128b73526791f08d7176e447e8 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 9c785a779da348df1c066ae0da2d0f53de7ea936) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 687dc2717d2f6b128b73526791f08d7176e447e8) @@ -1980,6 +1980,105 @@ } } +/*********************************************************************//** + * @brief + * The sendHDSWConfigRecord function sends out the HD software configuration record. + * @details Inputs: none + * @details Outputs: HD software configuration record msg constructed and queued + * @param msgCurrNum: current payload number + * @param msgTotalNum: total number of payloads + * @param length: buffer length to be written + * @param swRcrdAddress: start address of the software configuration record + * @return TRUE if msg successfully queued for transmit, FALSE if not + *************************************************************************/ +BOOL sendHDSWConfigRecord( U32 payloadCurrNum, U32 payloadTotalNum, U32 length, U08* swRcrdAddress ) +{ + BOOL result; + MESSAGE_T msg; + U08 *payloadPtr = msg.payload; + + // Create a message record + blankMessage( &msg ); + msg.hdr.msgID = MSG_ID_HD_SEND_SW_CONFIG_RECORD; + msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ) + sizeof( U32 ) + length; + + memcpy( payloadPtr, &payloadCurrNum, sizeof( U32 ) ); + payloadPtr += sizeof( U32 ); + + memcpy( payloadPtr, &payloadTotalNum, sizeof( U32 ) ); + payloadPtr += sizeof( U32 ); + + memcpy( payloadPtr, &length, sizeof( U32 ) ); + payloadPtr += sizeof( U32 ); + + memcpy( payloadPtr, swRcrdAddress, length ); + + // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer + result = serializeMessage( msg, COMM_BUFFER_OUT_CAN_PC, ACK_NOT_REQUIRED ); + + return result; +} + +/*********************************************************************//** +* @brief +* The handleGetHDSoftwareConfigRecord function handles a request to get the HD +* software configuration record. +* @details Inputs: none +* @details Outputs: message handled +* @param message a pointer to the message to handle +* @return none +*************************************************************************/ +void handleGetHDSoftwareConfigRecord( MESSAGE_T *message ) +{ + BOOL result = FALSE; + + // verify payload length + if ( 0 == message->hdr.payloadLen ) + { + // Tester must be logged in + if ( TRUE == isTestingActivated() ) + { + result = sendRecordToDialin( NVDATAMGMT_SW_CONFIG_RECORD ); + } + } + + // respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** +* @brief +* The handleSetHDSoftwareConfigRecord function handles a request to set the HD +* software configuration record. +* @details Inputs: none +* @details Outputs: message handled +* @param message a pointer to the message to handle +* @return none +*************************************************************************/ +void handleSetHDSoftwareConfigRecord( MESSAGE_T *message ) +{ + U32 currentMessage; + U32 totalMessages; + U32 payloadLength; + + BOOL status = FALSE; + U08* payloadPtr = message->payload; + + memcpy(¤tMessage, payloadPtr, sizeof(U32)); + payloadPtr += sizeof(U32); + + memcpy(&totalMessages, payloadPtr, sizeof(U32)); + payloadPtr += sizeof(U32); + + memcpy(&payloadLength, payloadPtr, sizeof(U32)); + payloadPtr += sizeof(U32); + + status = receiveRecordFromDialin( NVDATAMGMT_SW_CONFIG_RECORD, currentMessage, totalMessages, payloadLength, payloadPtr ); + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, status ); +} + #ifdef EMC_TEST_BUILD BOOL broadcastCANErrorCount( U32 count ) { Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r9c785a779da348df1c066ae0da2d0f53de7ea936 -r687dc2717d2f6b128b73526791f08d7176e447e8 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 9c785a779da348df1c066ae0da2d0f53de7ea936) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 687dc2717d2f6b128b73526791f08d7176e447e8) @@ -409,6 +409,15 @@ // MSG_ID_DG_CONCENTRATE_MIXING_RATIOS_DATA void handleDGMixingRatios( MESSAGE_T *message ); +// MSG_ID_HD_SEND_SW_CONFIG_RECORD +BOOL sendHDSWConfigRecord( U32 payloadCurrNum, U32 payloadTotalNum, U32 length, U08* swRcrdAddress ); + +// MSG_ID_HD_GET_SW_CONFIG_RECORD +void handleGetHDSoftwareConfigRecord( MESSAGE_T *message ); + +// MSG_ID_HD_SET_SW_CONFIG_RECORD +void handleSetHDSoftwareConfigRecord( MESSAGE_T *message ); + #ifdef EMC_TEST_BUILD // MSG_ID_CAN_ERROR_COUNT BOOL broadcastCANErrorCount( U32 count ); Index: firmware/App/Tasks/TaskPriority.c =================================================================== diff -u -r514463982373eb976e4b48a27d0f85f56e014920 -r687dc2717d2f6b128b73526791f08d7176e447e8 --- firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 514463982373eb976e4b48a27d0f85f56e014920) +++ firmware/App/Tasks/TaskPriority.c (.../TaskPriority.c) (revision 687dc2717d2f6b128b73526791f08d7176e447e8) @@ -111,7 +111,7 @@ #endif #endif -#ifdef BOARD_WITH_NO_HARDWARE +#ifndef IGNORE_BLOOD_LEAK_ALARM // Monitor blood leak detector for testing on a fixture only execBloodLeak(); #endif