Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r6bb7cd715299d16c131ab074fac0e62d8022f235 -ra89d6b091874136d75a9bfbdbbc1ff00f42467b3 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 6bb7cd715299d16c131ab074fac0e62d8022f235) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision a89d6b091874136d75a9bfbdbbc1ff00f42467b3) @@ -1,14 +1,14 @@ /************************************************************************** * -* Copyright (c) 2019-2021 Diality Inc. - All Rights Reserved. +* Copyright (c) 2020-2022 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 AlarmMgmt.c * -* @author (last) Sean Nash -* @date (last) 12-Nov-2021 +* @author (last) Dara Navaei +* @date (last) 06-Jul-2022 * * @author (original) Sean * @date (original) 04-Feb-2020 @@ -35,6 +35,7 @@ /// Interval (ms/task time) at which the alarm information is published on the CAN bus. #define ALARM_INFO_PUB_INTERVAL ( MS_PER_SECOND / TASK_GENERAL_INTERVAL ) +#define DATA_PUBLISH_COUNTER_START_COUNT 12 ///< Data publish counter start count. // *** This declaration will cause a compiler error if ALARM_TABLE does not have same # of alarms as the Alarm_List enumeration. U08 alarmTableSizeAssertion[ ( ( sizeof( ALARM_TABLE ) / sizeof( ALARM_T ) ) == NUM_OF_ALARM_IDS ? 1 : -1 ) ]; @@ -50,7 +51,7 @@ static BOOL alarmIsActive[ NUM_OF_ALARM_IDS ]; ///< Array of current state of each alarm static BOOL alarmConditionIsActive[ NUM_OF_ALARM_IDS ]; ///< Array of flag indicates if an alarm condition is active -static U32 alarmInfoPublicationTimerCounter = 0; ///< Used to schedule alarm information publication to CAN bus. +static U32 alarmInfoPublicationTimerCounter; ///< Used to schedule alarm information publication to CAN bus. /// 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 }; @@ -68,7 +69,9 @@ *************************************************************************/ void initAlarmMgmt( void ) { - ALARM_ID_T alrm; + ALARM_ID_T alrm; + + alarmInfoPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; // initialize alarm states and start time stamps for ( alrm = ALARM_ID_NO_ALARM; alrm < NUM_OF_ALARM_IDS; alrm++ ) @@ -114,7 +117,7 @@ alarmConditionIsActive[ alarm ] = TRUE; // If alarm is a DG fault, request transition to fault mode - if ( TRUE == ALARM_TABLE[ alarm ].alarmIsDGFault ) + if ( ( TRUE == ALARM_TABLE[ alarm ].alarmIsDGFault ) && ( getCurrentOperationMode() != DG_MODE_SERV ) ) { requestNewOperationMode( DG_MODE_FAUL ); } @@ -270,9 +273,11 @@ // Publish voltages monitor data on interval if ( ++alarmInfoPublicationTimerCounter >= getU32OverrideValue( &alarmInfoPublishInterval ) ) { - U32 safetyActivated = (U32)isSafetyShutdownActivated(); + SAFETY_SHUTDOWN_ACTIVATION_DATA_T data; - broadcastData( MSG_ID_DG_ALARM_INFO, COMM_BUFFER_OUT_CAN_DG_ALARM, (U08*)&safetyActivated, sizeof( U32 ) ); + data.safetyShutdownStatus = (U32)isSafetyShutdownActivated(); + + broadcastData( MSG_ID_DG_ALARM_INFO, COMM_BUFFER_OUT_CAN_DG_ALARM, (U08*)&data, sizeof( SAFETY_SHUTDOWN_ACTIVATION_DATA_T ) ); alarmInfoPublicationTimerCounter = 0; } } @@ -289,8 +294,10 @@ * @param limit alarm condition limit * @return TRUE if given alarm is active, FALSE if not *************************************************************************/ -void checkPersistentAlarm( ALARM_ID_T alarm, BOOL const isErrorOccured, F32 const data, F32 const limit ) +BOOL checkPersistentAlarm( ALARM_ID_T alarm, BOOL const isErrorOccured, F32 const data, F32 const limit ) { + BOOL status = FALSE; + if ( TRUE == isPersistentAlarmTriggered( alarm, isErrorOccured ) ) { SET_ALARM_WITH_2_F32_DATA( alarm, data, limit ); @@ -299,7 +306,10 @@ if ( TRUE == isPersistentAlarmConditionCleared( alarm, isErrorOccured ) ) { clearAlarmCondition( alarm ); + status = TRUE; } + + return status; } @@ -393,9 +403,11 @@ { if ( TRUE == alarmIsActive[ a ] ) { - U32 al = (U32)a; + ALARM_NAME_DATA_T data; - broadcastData( MSG_ID_ALARM_CLEARED, COMM_BUFFER_OUT_CAN_DG_ALARM, (U08*)&al, sizeof( U32 ) ); + data.alarmName = (U32)a; + + broadcastData( MSG_ID_ALARM_CLEARED, COMM_BUFFER_OUT_CAN_DG_ALARM, (U08*)&data, sizeof( ALARM_NAME_DATA_T ) ); alarmIsActive[ a ] = FALSE; } }