Index: firmware/App/Modes/ConsumableSelfTest.c =================================================================== diff -u -r1e3ec545fa8f81372dca1672efb2e1648203e155 -r52a40b3e01e67899cdeabdf64f4efddbe4654007 --- firmware/App/Modes/ConsumableSelfTest.c (.../ConsumableSelfTest.c) (revision 1e3ec545fa8f81372dca1672efb2e1648203e155) +++ firmware/App/Modes/ConsumableSelfTest.c (.../ConsumableSelfTest.c) (revision 52a40b3e01e67899cdeabdf64f4efddbe4654007) @@ -8,7 +8,7 @@ * @file ConsumableSelfTest.c * * @author (last) Dara Navaei -* @date (last) 04-Jan-2022 +* @date (last) 25-Feb-2022 * * @author (original) Quang Nguyen * @date (original) 06-Mar-2021 @@ -18,6 +18,7 @@ #include "ConsumableSelfTest.h" #include "DGInterface.h" #include "ModePreTreat.h" +#include "NVDataMgmt.h" #include "Reservoirs.h" /** @@ -75,18 +76,28 @@ switch( currentConsumableSelfTestState ) { case CONSUMABLE_SELF_TESTS_INSTALL_STATE: -#ifdef SKIP_UI_INTERACTION - consumableInstallConfirmed = TRUE; + +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) #endif + { + consumableInstallConfirmed = TRUE; + } // TODO: Check for DG straw door status to be open once DG door driver implemented if ( TRUE == consumableInstallConfirmed ) { consumableInstallConfirmed = FALSE; -#ifndef SKIP_CONSUMABLE_TESTS - currentConsumableSelfTestState = CONSUMABLE_SELF_TESTS_FILL_CMD_STATE; -#else - currentConsumableSelfTestState = CONSUMABLE_SELF_TESTS_COMPLETE_STATE; + +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_CONSUMABLES_TESTS ) != SW_CONFIG_ENABLE_VALUE ) + { + currentConsumableSelfTestState = CONSUMABLE_SELF_TESTS_FILL_CMD_STATE; + } + else #endif + { + currentConsumableSelfTestState = CONSUMABLE_SELF_TESTS_COMPLETE_STATE; + } } break; Index: firmware/App/Modes/ModePostTreat.c =================================================================== diff -u -r5420b3e1f4260d8fbdce3f4f495f19f1a6f05b7e -r52a40b3e01e67899cdeabdf64f4efddbe4654007 --- firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 5420b3e1f4260d8fbdce3f4f495f19f1a6f05b7e) +++ firmware/App/Modes/ModePostTreat.c (.../ModePostTreat.c) (revision 52a40b3e01e67899cdeabdf64f4efddbe4654007) @@ -7,8 +7,8 @@ * * @file ModePostTreat.c * -* @author (last) Behrouz NematiPour -* @date (last) 04-Jan-2022 +* @author (last) Dara Navaei +* @date (last) 15-Feb-2022 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -184,9 +184,11 @@ if ( ++postTreatmentPublishTimerCounter >= getU32OverrideValue( &postTreatmentModePublishInterval ) ) { - U32 state = (U32)currentPostTreatmentState; + POST_TREATMENT_STATE_DATA_T data; - broadcastData( MSG_ID_HD_POST_TREATMENT_STATE, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&state, sizeof( U32 ) ); + data.currentPostTreatmentState = (U32)currentPostTreatmentState; + + broadcastData( MSG_ID_HD_POST_TREATMENT_STATE, COMM_BUFFER_OUT_CAN_HD_BROADCAST, (U08*)&data, sizeof( POST_TREATMENT_STATE_DATA_T ) ); postTreatmentPublishTimerCounter = 0; } @@ -366,9 +368,13 @@ if ( STATE_CLOSED == getFPGADoorState() ) { -#ifdef SKIP_UI_INTERACTION - patientDisconnectionConfirmed = TRUE; +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) #endif + { + patientDisconnectionConfirmed = TRUE; + } + if ( TRUE == patientDisconnectionConfirmed ) { patientDisconnectionConfirmed = FALSE; @@ -409,8 +415,11 @@ { HD_POST_TREATMENT_STATE_T state = HD_POST_TREATMENT_DISPOSABLE_REMOVAL_STATE; -#ifdef SKIP_UI_INTERACTION - disposableRemovalConfirmed = TRUE; +#ifndef _RELEASE_ + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_DISABLE_UI_INTERACTION ) ) + { + disposableRemovalConfirmed = TRUE; + } #endif if ( TRUE == disposableRemovalConfirmed ) @@ -432,11 +441,16 @@ *************************************************************************/ static HD_POST_TREATMENT_STATE_T handlePostTreatmentVerifyState( void ) { -#ifndef SKIP_CARTRIDGE_REMOVAL - BOOL isCartridgeRemoved = isCartridgeUnloaded(); -#else + // Assuming the cartridge door is removed already. + // This is used when the disable cartridge removal step software configuration is enabled BOOL isCartridgeRemoved = TRUE; + +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_CARTRIDGE_REMOVAL_STEP ) != SW_CONFIG_ENABLE_VALUE ) #endif + { + isCartridgeRemoved = isCartridgeUnloaded(); + } if ( STATE_CLOSED == getFPGADoorState() ) { Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r031a5ae459c0b73d8b95e6cb8a484309846c1b46 -r52a40b3e01e67899cdeabdf64f4efddbe4654007 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 031a5ae459c0b73d8b95e6cb8a484309846c1b46) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 52a40b3e01e67899cdeabdf64f4efddbe4654007) @@ -8,7 +8,7 @@ * @file AlarmMgmt.c * * @author (last) Dara Navaei -* @date (last) 04-Jan-2022 +* @date (last) 26-Feb-2022 * * @author (original) Sean Nash * @date (original) 07-Nov-2019 @@ -63,8 +63,8 @@ #define CLR_BACKUP_AUDIO_ENABLE() {mibspiREG3->PC3 &= ~BACKUP_AUDIO_ENABLE_SPI3_PORT_MASK;} ///< Macro to disable backup alarm audio. #define ALARM_AUDIO_TEST_TONE 4 ///< Alarm audio state for continuous test tone. -#define ALARM_AUDIO_CURRENT_HG_MIN_MA 20.0 ///< Minimum audio current (high gain) during test tone self-test (in mA). // TODO - Why is HG so low? S/B same as LG I think. -#define ALARM_AUDIO_CURRENT_LG_MIN_MA 60.0 ///< Minimum audio current (low gain) during test tone self-test (in mA). +#define ALARM_AUDIO_CURRENT_HG_MIN_MA 20.0F ///< Minimum audio current (high gain) during test tone self-test (in mA). // TODO - Why is HG so low? S/B same as LG I think. +#define ALARM_AUDIO_CURRENT_LG_MIN_MA 60.0F ///< Minimum audio current (low gain) during test tone self-test (in mA). #define ALARM_AUDIO_MAX_TEST_TIME_MS 1000 ///< Maximum time for audio current to reach threshold in test. #define MAX_ALARM_AUDIO_VOLUME_INDEX (MAX_ALARM_VOLUME_LEVEL - 1 ) ///< Index for maximum alarm audio volume. #define MIN_ALARM_AUDIO_VOLUME_INDEX 0 ///< Index for minimum alarm audio volume. @@ -115,19 +115,14 @@ static OVERRIDE_U32_T alarmStatusPublishInterval = { ALARM_STATUS_PUBLISH_INTERVAL, ALARM_STATUS_PUBLISH_INTERVAL, ALARM_STATUS_PUBLISH_INTERVAL, 0 }; /// Interval (in task intervals) at which to publish alarm information to CAN bus. static OVERRIDE_U32_T alarmInfoPublishInterval = { ALARM_INFO_PUB_INTERVAL, ALARM_INFO_PUB_INTERVAL, ALARM_INFO_PUB_INTERVAL, 0 }; -#ifndef ALARM_VOLUME_DEFAULT_LOW -/// Set alarm audio volume attenuation level (0..4 - lower level = higher gain). -static OVERRIDE_U32_T alarmAudioVolumeLevel = { MIN_ALARM_VOLUME_ATTENUATION, MIN_ALARM_VOLUME_ATTENUATION, MIN_ALARM_VOLUME_ATTENUATION, 0 }; -#else static OVERRIDE_U32_T alarmAudioVolumeLevel = { MAX_ALARM_VOLUME_ATTENUATION, MAX_ALARM_VOLUME_ATTENUATION, MAX_ALARM_VOLUME_ATTENUATION, 0 }; -#endif -/// Alarm audio current (high gain) measured at ADC. -static OVERRIDE_F32_T alarmPrimaryAudioCurrentHG = { 0.0, 0.0, 0.0, 0 }; -/// Alarm audio current (low gain) measured at ADC. -static OVERRIDE_F32_T alarmPrimaryAudioCurrentLG = { 0.0, 0.0, 0.0, 0 }; -/// Alarm backup audio current measured at ADC. -static OVERRIDE_F32_T alarmBackupAudioCurrent = { 0.0, 0.0, 0.0, 0 }; +static OVERRIDE_F32_T alarmPrimaryAudioCurrentHG = { 0.0, 0.0, 0.0, 0 }; /// Alarm audio current (high gain) measured at ADC. + +static OVERRIDE_F32_T alarmPrimaryAudioCurrentLG = { 0.0, 0.0, 0.0, 0 }; /// Alarm audio current (low gain) measured at ADC. + +static OVERRIDE_F32_T alarmBackupAudioCurrent = { 0.0, 0.0, 0.0, 0 }; /// Alarm backup audio current measured at ADC. + static COMP_ALARM_STATUS_T alarmStatus; ///< Record for the current composite alarm status. static ALARM_PRIORITY_RANKS_T alarmPriorityFIFO[ NUM_OF_ALARM_PRIORITIES ]; ///< FIFO - first activated or highest sub-rank alarm in each alarm priority category. @@ -204,7 +199,6 @@ alarmStatus.noResume = FALSE; alarmStatus.noRinseback = FALSE; alarmStatus.noEndTreatment = FALSE; - alarmStatus.noNewTreatment = FALSE; alarmStatus.noDialRecirc = FALSE; alarmStatus.ok = FALSE; @@ -222,7 +216,7 @@ * @return none *************************************************************************/ void execAlarmMgmt( void ) -{ +{ monitorAlarms(); handleAlarmEscalations(); updateAlarmsState(); @@ -344,6 +338,9 @@ data.almData1 = alarmData1.data.uInt.data; data.almDataType2 = (U32)alarmData2.dataType; data.almData2 = alarmData2.data.uInt.data; + data.almPriority = ALARM_TABLE[ alarm ].alarmPriority; + data.almRank = ALARM_TABLE[ alarm ].alarmSubRank; + data.almClrTopOnly = ALARM_TABLE[ alarm ].alarmClearOnly; broadcastData( MSG_ID_ALARM_TRIGGERED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_TRIGGERED_PAYLOAD_T ) ); // Send information for UI to log to treatment log @@ -372,10 +369,12 @@ // Clear alarm condition and broadcast alarm condition clear if not already cleared if ( TRUE == alarmIsDetected[ alarm ] ) { - U32 a = (U32)alarm; + ALARM_NAME_DATA_T data; + data.alarmName = (U32)alarm; + alarmIsDetected[ alarm ] = FALSE; - broadcastData( MSG_ID_ALARM_CONDITION_CLEARED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&a, sizeof( U32 ) ); + broadcastData( MSG_ID_ALARM_CONDITION_CLEARED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_NAME_DATA_T ) ); } } } @@ -401,9 +400,11 @@ // Clear alarm and broadcast alarm clear if not already cleared if ( TRUE == alarmIsActive[ alarm ] ) { - U32 a = (U32)alarm; + ALARM_NAME_DATA_T data; + + data.alarmName = (U32) alarm; - broadcastData( MSG_ID_ALARM_CLEARED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&a, sizeof( U32 ) ); + broadcastData( MSG_ID_ALARM_CLEARED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_NAME_DATA_T ) ); alarmIsActive[ alarm ] = FALSE; clearAlarmCondition( alarm ); @@ -494,7 +495,7 @@ if ( ALARM_USER_ACTION_ACK == action ) { - // // If user acknowledged alarm w/ clear only property, just clear that alarm + // If user acknowledged alarm w/ clear only property, just clear that alarm if ( TRUE == ALARM_TABLE[ a ].alarmClearOnly ) { clearAlarm( a ); @@ -651,19 +652,6 @@ /*********************************************************************//** * @brief -* The getNoNewTreatmentStatus function gets the persistent no new -* treatment alarm status flag. -* @details Inputs: alarmStatus.noNewTreatment -* @details Outputs: none -* @return TRUE if no new treatment allowed, otherwise FALSE -*************************************************************************/ -BOOL getNoNewTreatmentStatus( void ) -{ - return alarmStatus.noNewTreatment; -} - -/*********************************************************************//** - * @brief * The handleActiveAlarmListRequest function processed the active alarms list * request from UI. * @details Inputs: alarmIsActive[] @@ -913,14 +901,17 @@ else { if ( alarmStatus.alarmsState < NUM_OF_ALARM_PRIORITIES ) +#ifndef _RELEASE_ { -#ifndef DISABLE_ALARM_AUDIO - setAlarmAudioState( alarmStatus.alarmsState, - ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_GAIN], - ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_DIVIDER] ); -#endif + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_ALARM_AUDIO ) != SW_CONFIG_ENABLE_VALUE ) + { + setAlarmAudioState( alarmStatus.alarmsState, + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_GAIN], + ALARM_AUDIO_DIVIDER_LOOKUP_TABLE[volume][ALARM_AUDIO_VOLUME_DIVIDER] ); + } } else +#endif { SET_ALARM_WITH_2_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_AUDIO_INVALID_ALARM_STATE, alarmStatus.alarmsState ) setAlarmAudioState( ALARM_PRIORITY_HIGH, @@ -1042,7 +1033,6 @@ BOOL noResume = FALSE; BOOL noRinseback = FALSE; BOOL noEndTreatment = FALSE; - BOOL noNewTreatment = FALSE; BOOL usrAckReq = FALSE; BOOL noMinimize = TRUE; ALARM_ID_T a; @@ -1114,7 +1104,10 @@ alarmStatus.noResume = noResume; alarmStatus.noRinseback = noRinseback; alarmStatus.noEndTreatment = noEndTreatment; - alarmStatus.noNewTreatment |= noNewTreatment; +//<<<<<<< HEAD +//======= DEBUG_DENALI + //alarmStatus.noNewTreatment |= noNewTreatment; +//>>>>>>> DEN-11928-dg-conductivity-update alarmStatus.ok = usrAckReq; alarmStatus.noMinimize = noMinimize; } @@ -1202,6 +1195,14 @@ { U32 result = alarmAudioVolumeLevel.data; +#ifndef _RELEASE_ + // Check the software configurations + if ( SW_CONFIG_ENABLE_VALUE == getSoftwareConfigStatus( SW_CONFIG_ENABLE_ALARM_VOLUME_DEFAULT_LOW ) ) + { + result = MIN_ALARM_VOLUME_ATTENUATION; + } +#endif + if ( OVERRIDE_KEY == alarmAudioVolumeLevel.override ) { result = alarmAudioVolumeLevel.ovData; @@ -1482,9 +1483,11 @@ { if ( TRUE == alarmIsActive[ a ] ) { - U32 al = (U32)a; + ALARM_NAME_DATA_T data; - broadcastData( MSG_ID_ALARM_CLEARED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&al, sizeof( U32 ) ); + data.alarmName = (U32)a; + + broadcastData( MSG_ID_ALARM_CLEARED, COMM_BUFFER_OUT_CAN_HD_ALARM, (U08*)&data, sizeof( ALARM_NAME_DATA_T ) ); alarmIsActive[ a ] = FALSE; alarmStartedAt[ a ].data = 0; // Clear FIFO if this alarm was in it Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r031a5ae459c0b73d8b95e6cb8a484309846c1b46 -r52a40b3e01e67899cdeabdf64f4efddbe4654007 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 031a5ae459c0b73d8b95e6cb8a484309846c1b46) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 52a40b3e01e67899cdeabdf64f4efddbe4654007) @@ -7,8 +7,8 @@ * * @file SystemCommMessages.c * -* @author (last) Michael Garthwaite -* @date (last) 18-Feb-2022 +* @author (last) Dara Navaei +* @date (last) 03-Mar-2022 * * @author (original) Dara Navaei * @date (original) 05-Nov-2019 @@ -28,7 +28,6 @@ #include "Fans.h" #include "FPGA.h" #include "ModeStandby.h" -#include "ModeTreatmentParams.h" #include "OperationModes.h" #include "RTC.h" #include "SampleWater.h" @@ -152,18 +151,21 @@ { data[ msgSize++ ] = 0; } - - #ifndef DISABLE_ACK_ERRORS - // If ACK required, add to pending ACK list - if ( TRUE == ackReq ) + +#ifndef _RELEASE_ + if ( getSoftwareConfigStatus( SW_CONFIG_DISABLE_ACK_ERRORS ) != SW_CONFIG_ENABLE_VALUE ) +#endif { - if ( FALSE == addMsgToPendingACKList( &msg, buffer, data, msgSize ) ) + // If ACK required, add to pending ACK list + if ( TRUE == ackReq ) { - error = TRUE; - SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MSG_PENDING_ACK_LIST_FULL ) - } + if ( FALSE == addMsgToPendingACKList( &msg, buffer, data, msgSize ) ) + { + error = TRUE; + SET_ALARM_WITH_1_U32_DATA( ALARM_ID_HD_SOFTWARE_FAULT, SW_FAULT_ID_MSG_PENDING_ACK_LIST_FULL ) + } + } } - #endif if ( FALSE == error ) { @@ -1803,10 +1805,11 @@ payload.alarmsFlags |= ( almStatus.noResume ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_RESUME) : 0 ); payload.alarmsFlags |= ( almStatus.noRinseback ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_RINSEBACK) : 0 ); payload.alarmsFlags |= ( almStatus.noEndTreatment ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_END_TREATMENT) : 0 ); - payload.alarmsFlags |= ( almStatus.ok ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_OK_BUTTON_ONLY) : 0 ); + payload.alarmsFlags |= ( almStatus.ok ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_OK_BUTTON_ONLY) : 0 ); payload.alarmsFlags |= ( almStatus.alarmsToEscalate ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_ALARMS_TO_ESCALATE) : 0 ); payload.alarmsFlags |= ( almStatus.alarmsSilenced ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_ALARMS_SILENCED) : 0 ); payload.alarmsFlags |= ( almStatus.lampOn ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_LAMP_ON) : 0 ); + //payload.alarmsFlags |= ( almStatus.noDialRecirc ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_DIALYSATE_RECIRC) : 0 ); // DEBUG_DENALI payload.alarmsFlags |= ( almStatus.noMinimize ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_NO_MINIMIZE) : 0 ); payload.alarmsFlags |= ( almStatus.topAlarmConditionDetected ? BIT_BY_POS(ALARM_STATE_FLAG_BIT_POS_TOP_CONDITION) : 0 ); @@ -1979,6 +1982,7 @@ } } + #ifdef EMC_TEST_BUILD BOOL broadcastCANErrorCount( U32 count ) { @@ -2306,7 +2310,7 @@ TEMPERATURE_SENSORS_DATA_T payload; memcpy( &payload, message->payload, sizeof( TEMPERATURE_SENSORS_DATA_T ) ); - setDialysateTemperatureReadings( payload.inletDialysate, payload.outletRedundant ); + setDialysateTemperatureReadings( payload.TDi, payload.TRo ); } // TODO - what to do if invalid payload length? // TODO - how to know if DG stops sending these? @@ -3101,7 +3105,12 @@ void handleHDSerialNumberRequest( void ) { MESSAGE_T msg; - HD_SYSTEM_RECORD_T system = getHDSystemRecord(); + HD_SYSTEM_RECORD_T system; + + // Get the system's record. There are no arrays of system to check and also, raise no alarm since the system record + // has been already checked in POST + getNVRecord2Driver( GET_SYS_RECORD, (U08*)&system, sizeof( HD_SYSTEM_RECORD_T ), 0, ALARM_ID_NO_ALARM ); + U08 *payloadPtr = msg.payload; // Create a message record @@ -3153,7 +3162,10 @@ void handleHDServiceScheduleRequest( MESSAGE_T *message ) { MESSAGE_T msg; - HD_SERVICE_RECORD_T payload = getHDServiceRecord(); + HD_SERVICE_RECORD_T service; + + getNVRecord2Driver( GET_SRV_RECORD, (U08*)&service, sizeof( HD_SERVICE_RECORD_T ), 0, ALARM_ID_NO_ALARM ); + U08 *payloadPtr = msg.payload; // Create a message record @@ -3162,9 +3174,9 @@ msg.hdr.payloadLen = sizeof( U32 ) + sizeof( U32 ); // Fill message payload - memcpy( payloadPtr, &payload.lastServiceEpochDate, sizeof( U32 ) ); + memcpy( payloadPtr, &service.lastServiceEpochDate, sizeof( U32 ) ); payloadPtr += sizeof( U32 ); - memcpy( payloadPtr, &payload.serviceIntervalSeconds, sizeof( U32 ) ); + memcpy( payloadPtr, &service.serviceIntervalSeconds, sizeof( U32 ) ); // 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_2_UI, ACK_REQUIRED ); @@ -5124,6 +5136,7 @@ if ( sizeof( TEST_OVERRIDE_PAYLOAD_T ) == message->hdr.payloadLen ) { memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_PAYLOAD_T ) ); + if ( FALSE == payload.reset ) { result = testSetBatteryRemainingPercentOverride( payload.state.u32 ); @@ -5374,7 +5387,7 @@ memcpy(&payloadLength, payloadPtr, sizeof(U32)); payloadPtr += sizeof(U32); - status = setCalibrationRecord( currentMessage, totalMessages, payloadLength, payloadPtr ); + status = receiveRecordFromDialin( NVDATAMGMT_CALIBRATION_RECORD, currentMessage, totalMessages, payloadLength, payloadPtr ); // Respond to request sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, status ); @@ -5399,7 +5412,7 @@ // Tester must be logged in if ( TRUE == isTestingActivated() ) { - result = getCalibrationRecord(); + result = sendRecordToDialin( NVDATAMGMT_CALIBRATION_RECORD ); } } @@ -5554,7 +5567,7 @@ memcpy(&payloadLength, payloadPtr, sizeof(U32)); payloadPtr += sizeof(U32); - status = setSystemRecord( currentMessage, totalMessages, payloadLength, payloadPtr ); + status = receiveRecordFromDialin( NVDATAMGMT_SYSTEM_RECORD, currentMessage, totalMessages, payloadLength, payloadPtr ); // Respond to request sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, status ); @@ -5579,7 +5592,7 @@ // Tester must be logged in if ( TRUE == isTestingActivated() ) { - result = getSystemRecord(); + result = sendRecordToDialin( NVDATAMGMT_SYSTEM_RECORD ); } } @@ -5670,7 +5683,7 @@ // Tester must be logged in if ( TRUE == isTestingActivated() ) { - result = getServiceRecord(); + result = sendRecordToDialin( NVDATAMGMT_SERVICE_RECORD ); } } @@ -5736,7 +5749,7 @@ memcpy(&payloadLength, payloadPtr, sizeof(U32)); payloadPtr += sizeof(U32); - status = setServiceRecord( currentMessage, totalMessages, payloadLength, payloadPtr ); + status = receiveRecordFromDialin( NVDATAMGMT_SERVICE_RECORD, currentMessage, totalMessages, payloadLength, payloadPtr ); // Respond to request sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, status ); @@ -5820,6 +5833,7 @@ TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; BOOL result = FALSE; +#ifndef _RELEASE_ // Verify payload length if ( sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) == message->hdr.payloadLen ) { @@ -5833,6 +5847,7 @@ result = testResetValvesCurrentOverride( payload.index ); } } +#endif // Respond to request sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); @@ -5885,6 +5900,7 @@ TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; BOOL result = FALSE; +#ifndef _RELEASE_ // Verify payload length if ( sizeof(TEST_OVERRIDE_ARRAY_PAYLOAD_T) == message->hdr.payloadLen ) { @@ -5898,6 +5914,7 @@ result = testResetValvesPositionCountOverride( payload.index ); } } +#endif // Respond to request sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); @@ -6782,30 +6799,30 @@ /*********************************************************************//** * @brief - * The handleTestFansRPMAlarmStartTimeOverrideRequest function handles a - * request to override the fan RPM alarm start time. + * The handleSetFansDutyCycleOverrideRequest function handles a + * request to override the fans duty cycle. * @details Inputs: none * @details Outputs: message handled * @param message a pointer to the message to handle * @return none *************************************************************************/ -void handleTestFansRPMAlarmStartTimeOffsetOverrideRequest( MESSAGE_T *message ) +void handleSetFansDutyCycleOverrideRequest( MESSAGE_T *message ) { - TEST_OVERRIDE_ARRAY_PAYLOAD_T payload; + TEST_OVERRIDE_PAYLOAD_T payload; BOOL result = FALSE; // verify payload length - if ( sizeof( TEST_OVERRIDE_ARRAY_PAYLOAD_T ) == message->hdr.payloadLen ) + if ( sizeof( TEST_OVERRIDE_PAYLOAD_T ) == message->hdr.payloadLen ) { - memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_ARRAY_PAYLOAD_T ) ); + memcpy( &payload, message->payload, sizeof( TEST_OVERRIDE_PAYLOAD_T ) ); if ( FALSE == payload.reset ) { - result = testSetFanRPMAlarmStartTimeOffsetOverride( payload.state.u32, payload.index ); + result = testSetFansDutyCycleOverride( payload.state.f32 ); } else { - result = testResetFanRPMAlarmStartTimeOffsetOverride(); + result = testResetFansDutyCycleOverride(); } } @@ -6857,4 +6874,133 @@ return serializeMessage(msg, COMM_BUFFER_OUT_CAN_PC, ACK_REQUIRED ); } +/*********************************************************************//** + * @brief + * The handleTestFansRPMAlarmStartTimeOffsetRequest function handles a + * request to set the fans RPM alarm start time offset. + * @details Inputs: none + * @details Outputs: message handled + * @param message : a pointer to the message to handle + * @return none + *************************************************************************/ +void handleTestFansRPMAlarmStartTimeOffsetRequest( MESSAGE_T *message ) +{ + U32 rpmTimeOffset; + + BOOL result = FALSE; + + // Verify payload length + if ( sizeof(U32) == message->hdr.payloadLen ) + { + memcpy( &rpmTimeOffset, message->payload, sizeof(U32) ); + + result = testSetFanRPMAlarmStartTimestamp( rpmTimeOffset ); + } + + // Respond to request + sendTestAckResponseMsg( (MSG_ID_T)message->hdr.msgID, result ); +} + +/*********************************************************************//** + * @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; + + if ( message->hdr.payloadLen >= ( sizeof(currentMessage) + sizeof(totalMessages) + sizeof(payloadLength) ) ) + { + 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 ); +} + /**@}*/