Index: firmware/App/Services/AlarmMgmt.c =================================================================== diff -u -r4bd3bf3483660050d3026f7f9adff43782bfc620 -r8bcb6b1342198d6d87d1350b2ca61a932a4ff006 --- firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 4bd3bf3483660050d3026f7f9adff43782bfc620) +++ firmware/App/Services/AlarmMgmt.c (.../AlarmMgmt.c) (revision 8bcb6b1342198d6d87d1350b2ca61a932a4ff006) @@ -16,25 +16,25 @@ ***************************************************************************/ #define __ALARM_MGMT_C__ - -#include "AlarmMgmt.h" + +#include "AlarmMgmt.h" #include "CPLD.h" #include "OperationModes.h" #include "PersistentAlarm.h" -#include "Reservoirs.h" +#include "Reservoirs.h" #include "SafetyShutdown.h" #include "SystemComm.h" -#include "SystemCommMessages.h" -#include "TaskGeneral.h" -#include "Timers.h" - -/** - * @addtogroup AlarmManagement - * @{ - */ - -// ********** private definitions ********** +#include "SystemCommMessages.h" +#include "TaskGeneral.h" +#include "Timers.h" +/** + * @addtogroup AlarmManagement + * @{ + */ + +// ********** private definitions ********** + /// 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. @@ -48,84 +48,84 @@ U08 alarmRankTableSizeAssertion[ ( ( sizeof( ALARM_RANK_TABLE ) / sizeof( ALARM_RANK_T ) ) == NUM_OF_ALARM_IDS ? 1 : -1 ) ]; U32 alarmLEDTimer; ///< Alarm LED timer - -const ALARM_DATA_T BLANK_ALARM_DATA = { ALARM_DATA_TYPE_NONE, 0 }; ///< A blank alarm data record for alarms that do not include alarm data when triggered. - + +const ALARM_DATA_T BLANK_ALARM_DATA = { ALARM_DATA_TYPE_NONE, 0 }; ///< A blank alarm data record for alarms that do not include alarm data when triggered. + #define SUPERVISOR_ALARM_KEY 0xD2C3B4A5 ///< 32-bit key required for clear all alarms request. -// ********** private data ********** +// ********** private data ********** 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 BOOL alarmConditionIsActive[ NUM_OF_ALARM_IDS ]; ///< Array of flag indicates if an alarm condition is active static U32 alarmInfoPublicationTimerCounter; ///< Used to schedule alarm information publication to CAN bus. static BOOL isAFaultAlarmActive; ///< Boolean flag to indicate whether a DG fault alarm is active. /// 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 }; - -// ********** private function prototypes ********** - -static void activateAlarm( ALARM_ID_T alarm ); + +// ********** private function prototypes ********** + +static void activateAlarm( ALARM_ID_T alarm ); static void publishAlarmInfo( void ); static void alarmUserNotify( void ); static BOOL isTransitionToFaultRequired( void ); - -/*********************************************************************//** - * @brief - * The initAlarmMgmt function initializes the AlarmMgmt module. - * @details Inputs: none + +/*********************************************************************//** + * @brief + * The initAlarmMgmt function initializes the AlarmMgmt module. + * @details Inputs: none * @details Outputs: alarmInfoPublicationTimerCounter, alarmLEDTimer, - * isAFaultAlarmActive, alarmIsActive, alarmConditionIsActive - * @return none - *************************************************************************/ -void initAlarmMgmt( void ) -{ + * isAFaultAlarmActive, alarmIsActive, alarmConditionIsActive + * @return none + *************************************************************************/ +void initAlarmMgmt( void ) +{ ALARM_ID_T alrm; alarmInfoPublicationTimerCounter = DATA_PUBLISH_COUNTER_START_COUNT; alarmLEDTimer = 0; - isAFaultAlarmActive = FALSE; - - // initialize alarm states and start time stamps - for ( alrm = ALARM_ID_NO_ALARM; alrm < NUM_OF_ALARM_IDS; alrm++ ) - { - alarmIsActive[ alrm ] = FALSE; - alarmConditionIsActive[ alrm ] = FALSE; - } -} + isAFaultAlarmActive = FALSE; -/*********************************************************************//** - * @brief - * The execAlarmMgmt function executes the alarm management module. - * @details Inputs: none - * @details Outputs: none - * @return none - *************************************************************************/ -void execAlarmMgmt( void ) -{ + // initialize alarm states and start time stamps + for ( alrm = ALARM_ID_NO_ALARM; alrm < NUM_OF_ALARM_IDS; alrm++ ) + { + alarmIsActive[ alrm ] = FALSE; + alarmConditionIsActive[ alrm ] = FALSE; + } +} + +/*********************************************************************//** + * @brief + * The execAlarmMgmt function executes the alarm management module. + * @details Inputs: none + * @details Outputs: none + * @return none + *************************************************************************/ +void execAlarmMgmt( void ) +{ // Alarm audio and LED/lamp management for DG - alarmUserNotify(); + alarmUserNotify(); // Publish alarm information at interval publishAlarmInfo(); -} +} -/*********************************************************************//** - * @brief - * The activateAlarm function activates a given alarm. - * @details Inputs: none - * @details Outputs: alarmIsActive[], isAFaultAlarmActive - * @param alarm ID of alarm to activate - * @return none - *************************************************************************/ -static void activateAlarm( ALARM_ID_T alarm ) -{ - // verify given alarm - if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) - { - // no need to do anything if alarm is already active - if ( FALSE == alarmIsActive[ alarm ] ) - { - // activate alarm +/*********************************************************************//** + * @brief + * The activateAlarm function activates a given alarm. + * @details Inputs: none + * @details Outputs: alarmIsActive[], isAFaultAlarmActive + * @param alarm ID of alarm to activate + * @return none + *************************************************************************/ +static void activateAlarm( ALARM_ID_T alarm ) +{ + // verify given alarm + if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) + { + // no need to do anything if alarm is already active + if ( FALSE == alarmIsActive[ alarm ] ) + { + // activate alarm alarmIsActive[ alarm ] = TRUE; alarmConditionIsActive[ alarm ] = TRUE; @@ -144,59 +144,59 @@ if ( TRUE == ALARM_TABLE[ alarm ].alarmConditionClearImmed ) { clearAlarmCondition( alarm ); - } - } - } - else - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_ACTIVATE, alarm ) - } -} + } + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_ACTIVATE, alarm ) + } +} -/*********************************************************************//** - * @brief +/*********************************************************************//** + * @brief * The activateAlarmNoData function activates a given alarm. An alarm message - * is broadcast to the rest of the system. - * @details Inputs: none - * @details Outputs: alarm triggered message sent, alarm activated - * @param alarm ID of alarm to activate - * @return none - *************************************************************************/ -void activateAlarmNoData( ALARM_ID_T alarm ) + * is broadcast to the rest of the system. + * @details Inputs: none + * @details Outputs: alarm triggered message sent, alarm activated + * @param alarm ID of alarm to activate + * @return none + *************************************************************************/ +void activateAlarmNoData( ALARM_ID_T alarm ) { - activateAlarm2Data( alarm, BLANK_ALARM_DATA, BLANK_ALARM_DATA, FALSE ); -} + activateAlarm2Data( alarm, BLANK_ALARM_DATA, BLANK_ALARM_DATA, FALSE ); +} -/*********************************************************************//** - * @brief +/*********************************************************************//** + * @brief * The activateAlarm1Data function activates a given alarm. An alarm message * is broadcast to the rest of the system. This function will include given - * data in the broadcast message for logging. - * @details Inputs: none - * @details Outputs: alarm triggered message sent, alarm activated - * @param alarm ID of alarm to activate - * @param alarmData supporting data to include in alarm message - * @return none - *************************************************************************/ -void activateAlarm1Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData ) + * data in the broadcast message for logging. + * @details Inputs: none + * @details Outputs: alarm triggered message sent, alarm activated + * @param alarm ID of alarm to activate + * @param alarmData supporting data to include in alarm message + * @return none + *************************************************************************/ +void activateAlarm1Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData ) { - activateAlarm2Data( alarm, alarmData, BLANK_ALARM_DATA, FALSE ); -} + activateAlarm2Data( alarm, alarmData, BLANK_ALARM_DATA, FALSE ); +} -/*********************************************************************//** - * @brief +/*********************************************************************//** + * @brief * The activateAlarm2Data function activates a given alarm. An alarm message * is broadcast to the rest of the system. This function will include - * two given data in the broadcast message for logging. - * @details Inputs: none - * @details Outputs: alarm triggered message sent, alarm activated - * @param alarm ID of alarm to activate - * @param alarmData1 supporting data to include in alarm message - * @param alarmData2 supporting data to include in alarm message + * two given data in the broadcast message for logging. + * @details Inputs: none + * @details Outputs: alarm triggered message sent, alarm activated + * @param alarm ID of alarm to activate + * @param alarmData1 supporting data to include in alarm message + * @param alarmData2 supporting data to include in alarm message * @param outside flag indicates whether alarm is originating from outside HD f/w - * @return none - *************************************************************************/ -void activateAlarm2Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData1, ALARM_DATA_T alarmData2, BOOL outside ) + * @return none + *************************************************************************/ +void activateAlarm2Data( ALARM_ID_T alarm, ALARM_DATA_T alarmData1, ALARM_DATA_T alarmData2, BOOL outside ) { HD_MODE_SUB_MODE_T hdModes; @@ -213,38 +213,38 @@ } activateAlarm( alarm ); } -} +} -/*********************************************************************//** - * @brief +/*********************************************************************//** + * @brief * The clearAlarm function clears a given alarm if it is recoverable. - * An alarm message is broadcast to the rest of the system. - * @details Inputs: none - * @details Outputs: AlarmStatusTable[] - * @param alarm ID of alarm to clear - * @return none - *************************************************************************/ -void clearAlarm( ALARM_ID_T alarm ) -{ - // verify given alarm - if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) - { - // clear alarm and broadcast alarm clear if not already cleared (and not a DG fault which should not be cleared) - if ( ( TRUE == alarmIsActive[ alarm ] ) && ( ALARM_TABLE[ alarm ].alarmIsDGFault != TRUE ) ) + * An alarm message is broadcast to the rest of the system. + * @details Inputs: none + * @details Outputs: AlarmStatusTable[] + * @param alarm ID of alarm to clear + * @return none + *************************************************************************/ +void clearAlarm( ALARM_ID_T alarm ) +{ + // verify given alarm + if ( ( alarm > ALARM_ID_NO_ALARM ) && ( alarm < NUM_OF_ALARM_IDS ) ) + { + // clear alarm and broadcast alarm clear if not already cleared (and not a DG fault which should not be cleared) + if ( ( TRUE == alarmIsActive[ alarm ] ) && ( ALARM_TABLE[ alarm ].alarmIsDGFault != TRUE ) ) { if ( TRUE == isHDCommunicating() ) - { + { broadcastAlarmCleared( alarm ); - } + } alarmIsActive[ alarm ] = FALSE; - clearAlarmCondition( alarm ); - } - } - else - { - SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_CLEAR, alarm ) - } -} + clearAlarmCondition( alarm ); + } + } + else + { + SET_ALARM_WITH_2_U32_DATA( ALARM_ID_DG_SOFTWARE_FAULT, SW_FAULT_ID_ALARM_MGMT_INVALID_ALARM_TO_CLEAR, alarm ) + } +} /*********************************************************************//** * @brief @@ -276,17 +276,17 @@ } } -/*********************************************************************//** - * @brief - * The isAlarmActive function determines whether a given alarm is currently active. - * @details Inputs: alarmIsActive[] - * @details Outputs: none - * @param alarm ID of alarm to check - * @return TRUE if given alarm is active, FALSE if not +/*********************************************************************//** + * @brief + * The isAlarmActive function determines whether a given alarm is currently active. + * @details Inputs: alarmIsActive[] + * @details Outputs: none + * @param alarm ID of alarm to check + * @return TRUE if given alarm is active, FALSE if not *************************************************************************/ -BOOL isAlarmActive( ALARM_ID_T alarm ) -{ - return alarmIsActive[ alarm ]; +BOOL isAlarmActive( ALARM_ID_T alarm ) +{ + return alarmIsActive[ alarm ]; } /*********************************************************************//** @@ -314,7 +314,7 @@ BOOL isAlarmConditionActive( ALARM_ID_T alarm ) { return alarmConditionIsActive[ alarm ]; -} +} /*********************************************************************//** * @brief @@ -372,6 +372,7 @@ { BOOL status = FALSE; + // Check all the inlet water conditions status |= isAlarmActive( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_TEMP_TOO_HIGH ); status |= isAlarmActive( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_TEMP_TOO_LOW ); status |= isAlarmActive( ALARM_ID_DG_CLEANING_MODE_INLET_WATER_COND_TOO_HIGH ); @@ -458,72 +459,72 @@ return status; } - -/************************************************************************* - * TEST SUPPORT FUNCTIONS - *************************************************************************/ +/************************************************************************* + * TEST SUPPORT FUNCTIONS + *************************************************************************/ -/*********************************************************************//** - * @brief + +/*********************************************************************//** + * @brief * The testSetAlarmStateOverride function overrides the state of the alarm active - * state for a given alarm with the alarm management with a given active state. - * @details Inputs: none - * @details Outputs: alarm activated or cleared - * @param alarmID ID of alarm to activate or clear - * @param value override state for the given alarm ID (1=activate, 0=clear) - * @return TRUE if override successful, FALSE if not - *************************************************************************/ -BOOL testSetAlarmStateOverride( U32 alarmID, U32 state ) -{ - BOOL result = FALSE; - - if ( alarmID < NUM_OF_ALARM_IDS ) - { - if ( TRUE == isTestingActivated() ) - { - if ( TRUE == (BOOL)state ) - { - activateAlarmNoData( (ALARM_ID_T)alarmID ); - } - else - { - clearAlarm( (ALARM_ID_T)alarmID ); - } - result = TRUE; - } - } - - return result; -} + * state for a given alarm with the alarm management with a given active state. + * @details Inputs: none + * @details Outputs: alarm activated or cleared + * @param alarmID ID of alarm to activate or clear + * @param value override state for the given alarm ID (1=activate, 0=clear) + * @return TRUE if override successful, FALSE if not + *************************************************************************/ +BOOL testSetAlarmStateOverride( U32 alarmID, U32 state ) +{ + BOOL result = FALSE; -/*********************************************************************//** - * @brief - * The testResetAlarmStateOverride function resets the override of the - * state of the active state for a given alarm with the alarm management. - * @details Inputs: none - * @details Outputs: alarm cleared - * @param alarmID ID of alarm to clear - * @return TRUE if alarm clear successful, FALSE if not - *************************************************************************/ -BOOL testResetAlarmStateOverride( U32 alarmID ) -{ - BOOL result = FALSE; - - if ( alarmID < NUM_OF_ALARM_IDS ) - { - if ( TRUE == isTestingActivated() ) - { - result = TRUE; - clearAlarm( (ALARM_ID_T)alarmID ); - } - } - - return result; -} + if ( alarmID < NUM_OF_ALARM_IDS ) + { + if ( TRUE == isTestingActivated() ) + { + if ( TRUE == (BOOL)state ) + { + activateAlarmNoData( (ALARM_ID_T)alarmID ); + } + else + { + clearAlarm( (ALARM_ID_T)alarmID ); + } + result = TRUE; + } + } + return result; +} + /*********************************************************************//** * @brief + * The testResetAlarmStateOverride function resets the override of the + * state of the active state for a given alarm with the alarm management. + * @details Inputs: none + * @details Outputs: alarm cleared + * @param alarmID ID of alarm to clear + * @return TRUE if alarm clear successful, FALSE if not + *************************************************************************/ +BOOL testResetAlarmStateOverride( U32 alarmID ) +{ + BOOL result = FALSE; + + if ( alarmID < NUM_OF_ALARM_IDS ) + { + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + clearAlarm( (ALARM_ID_T)alarmID ); + } + } + + return result; +} + +/*********************************************************************//** + * @brief * The testClearAllAlarms function clears all active alarms, even if they * are non-recoverable or faults. The caller of this function must provide * the correct 32-bit key. A Dialin user must also be logged into DG. Index: firmware/App/Services/SystemCommMessages.c =================================================================== diff -u -r23ebb5812ecd93ca42999259f7f62f46fd482ebd -r8bcb6b1342198d6d87d1350b2ca61a932a4ff006 --- firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 23ebb5812ecd93ca42999259f7f62f46fd482ebd) +++ firmware/App/Services/SystemCommMessages.c (.../SystemCommMessages.c) (revision 8bcb6b1342198d6d87d1350b2ca61a932a4ff006) @@ -99,7 +99,7 @@ static BOOL sendTestAckResponseMsg( MSG_ID_T msgID, BOOL ack ); static BOOL sendAckResponseMsg( MSG_ID_T msgID, COMM_BUFFER_T buffer, BOOL ack ); -static BOOL sendUIResponseMsg( MSG_ID_T msgID, BOOL accepted, U32 reason ); +static BOOL sendUIResponseMsg( MSG_ID_T msgID, UI_RESPONSE_PAYLOAD_T *uiResponse ); /*********************************************************************//** * @brief @@ -247,18 +247,18 @@ * @details Inputs: none * @details Outputs: response message constructed and queued for transmit. * @param msgID ID of handled message that we are responding to - * @param accepted T/F - request accepted? - * @param reason reason code if rejected + * @param ui response pointer to the UI response payload * @return TRUE if response message successfully queued for transmit, FALSE if not *************************************************************************/ -static BOOL sendUIResponseMsg( MSG_ID_T msgID, BOOL accepted, U32 reason ) +static BOOL sendUIResponseMsg( MSG_ID_T msgID, UI_RESPONSE_PAYLOAD_T *uiResponse ) { BOOL result; MESSAGE_T msg; UI_RESPONSE_PAYLOAD_T cmd; - cmd.accepted = accepted; - cmd.rejectionReason = reason; + cmd.fwValue = uiResponse->fwValue; + cmd.accepted = uiResponse->accepted; + cmd.rejectionReason = uiResponse->rejectionReason; // Create a message record blankMessage( &msg ); @@ -562,8 +562,14 @@ *************************************************************************/ void handleDGSerialNumberRequest( void ) { + typedef struct + { + U08 topLevelSN[ MAX_TOP_LEVEL_SN_CHARS ]; + } LOCAL_TOP_SN_T; MESSAGE_T msg; DG_SYSTEM_RECORD_T system; + U08 i; + LOCAL_TOP_SN_T localTopLevelSN; // 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 @@ -578,8 +584,15 @@ // Add 1 byte for null terminator msg.hdr.payloadLen = MAX_TOP_LEVEL_SN_CHARS + 1; + for ( i = 0; i < MAX_TOP_LEVEL_SN_CHARS; i++ ) + { + // NOTE: A local variable was created to avoid system.topLevelSN in the messages list + // NOTE: For loop was used instead of memory copy to ensure it is not parsed in the messages list script + localTopLevelSN.topLevelSN[ i ] = system.topLevelSN[ i ]; + } + // Fill message payload - memcpy( payloadPtr, &system.topLevelSN, sizeof( U08 ) * MAX_TOP_LEVEL_SN_CHARS ); + memcpy( payloadPtr, &localTopLevelSN, sizeof( LOCAL_TOP_SN_T ) ); payloadPtr += MAX_TOP_LEVEL_SN_CHARS; *payloadPtr = 0; @@ -613,10 +626,12 @@ if ( 0 == message->hdr.payloadLen ) { - memcpy( payloadPtr, &service.lastServiceEpochDate, sizeof( U32 ) ); + U32 lastServiceEpochDate = service.lastServiceEpochDate; + U32 serviceIntervalSeconds = ( 0 == service.lastServiceEpochDate ? 0 : service.serviceIntervalSeconds ); + + memcpy( payloadPtr, &lastServiceEpochDate, sizeof( U32 ) ); payloadPtr += sizeof( U32 ); - service.serviceIntervalSeconds = ( 0 == service.lastServiceEpochDate ? 0 : service.serviceIntervalSeconds ); - memcpy( payloadPtr, &service.serviceIntervalSeconds, sizeof( U32 ) ); + memcpy( payloadPtr, &serviceIntervalSeconds, sizeof( U32 ) ); } // Serialize the message (w/ sync, CRC, and appropriate CAN padding) and add serialized message data to appropriate comm buffer @@ -1775,13 +1790,13 @@ *************************************************************************/ void handleSetROOnlyMode( MESSAGE_T* message ) { + UI_RESPONSE_PAYLOAD_T uiResponse; + BOOL result = FALSE; REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_DG_RO_ONLY_MODE_INVALID_PAYLOAD_LENGTH; BOOL accepted = FALSE; if ( message->hdr.payloadLen == sizeof(U32) ) { - BOOL result; - rejReason = REQUEST_REJECT_REASON_NONE; memcpy( &result, message->payload, sizeof(BOOL) ); @@ -1800,17 +1815,23 @@ break; default: + result = isROOnlyModeEnabled(); rejReason = REQUEST_REJECT_REASON_DG_RO_ONLY_MODE_DG_BUSY; break; } } else { + result = isROOnlyModeEnabled(); rejReason = REQUEST_REJECT_REASON_DG_RO_ONLY_MODE_INVALID_PARAMETER; } } - sendUIResponseMsg( MSG_ID_DG_RO_ONLY_MODE_STATUS_RESPONSE, accepted, rejReason ); + uiResponse.accepted = accepted; + uiResponse.rejectionReason = rejReason; + uiResponse.fwValue = (U32)result; + + sendUIResponseMsg( MSG_ID_DG_RO_ONLY_MODE_STATUS_RESPONSE, &uiResponse ); } /*********************************************************************//** @@ -4959,8 +4980,9 @@ *************************************************************************/ void handleDGROStatusRequest( MESSAGE_T* message ) { + UI_RESPONSE_PAYLOAD_T uiResponse; REQUEST_REJECT_REASON_CODE_T rejReason = REQUEST_REJECT_REASON_NONE; - BOOL roMode = FALSE; + BOOL roMode = FALSE; if ( 0 == message->hdr.payloadLen ) { @@ -4970,7 +4992,12 @@ { rejReason = REQUEST_REJECT_REASON_DG_RO_ONLY_MODE_INVALID_PAYLOAD_LENGTH; } - sendUIResponseMsg( MSG_ID_DG_RO_ONLY_MODE_STATUS_RESPONSE, roMode, rejReason ); + + uiResponse.accepted = roMode; + uiResponse.rejectionReason = rejReason; + uiResponse.fwValue = (U32)roMode; + + sendUIResponseMsg( MSG_ID_DG_RO_ONLY_MODE_STATUS_RESPONSE, &uiResponse ); } /*********************************************************************//** Index: firmware/App/Services/SystemCommMessages.h =================================================================== diff -u -r23ebb5812ecd93ca42999259f7f62f46fd482ebd -r8bcb6b1342198d6d87d1350b2ca61a932a4ff006 --- firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 23ebb5812ecd93ca42999259f7f62f46fd482ebd) +++ firmware/App/Services/SystemCommMessages.h (.../SystemCommMessages.h) (revision 8bcb6b1342198d6d87d1350b2ca61a932a4ff006) @@ -53,6 +53,7 @@ { BOOL accepted; ///< Accepted/Rejected U32 rejectionReason; ///< Rejection reason if not accepted. + U32 fwValue; ///< Value in the firmware. } UI_RESPONSE_PAYLOAD_T; // ********** public function prototypes ********** Index: firmware/DG.dil =================================================================== diff -u -r53110a8d810e392e8f75cf0bf85a3ec07927e846 -r8bcb6b1342198d6d87d1350b2ca61a932a4ff006 --- firmware/DG.dil (.../DG.dil) (revision 53110a8d810e392e8f75cf0bf85a3ec07927e846) +++ firmware/DG.dil (.../DG.dil) (revision 8bcb6b1342198d6d87d1350b2ca61a932a4ff006) @@ -1,4 +1,4 @@ -# RM46L852PGE 07/27/22 16:12:46 +# RM46L852PGE 05/06/24 09:40:54 # ARCH=RM46L852PGE # @@ -139,7 +139,7 @@ DRIVER.SYSTEM.VAR.ECAP6_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.SCI_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.FLASH_DATA_1_WAIT_STATE_FREQ.VALUE=110.0 -DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_BASE.VALUE=0x08002400 +DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_BASE.VALUE=0x08002800 DRIVER.SYSTEM.VAR.VIM_CHANNEL_125_MAPPING.VALUE=125 DRIVER.SYSTEM.VAR.VIM_CHANNEL_117_MAPPING.VALUE=117 DRIVER.SYSTEM.VAR.VIM_CHANNEL_109_MAPPING.VALUE=109 @@ -407,7 +407,7 @@ DRIVER.SYSTEM.VAR.CORE_HANDLER_TABLE_UNDEF_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_8_INT_PRAGMA_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.SAFETY_INIT_PBIST_SP_SELECTED.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_BASE.VALUE=0x08004400 +DRIVER.SYSTEM.VAR.RAM_STACK_ABORT_BASE.VALUE=0x08002c00 DRIVER.SYSTEM.VAR.VIM_CHANNEL_92_NAME.VALUE=etpwm2Interrupt DRIVER.SYSTEM.VAR.VIM_CHANNEL_84_NAME.VALUE=phantomInterrupt DRIVER.SYSTEM.VAR.VIM_CHANNEL_76_NAME.VALUE=phantomInterrupt @@ -435,7 +435,7 @@ DRIVER.SYSTEM.VAR.CORE_PMU_COUNTER1_EVENT.VALUE=0x11 DRIVER.SYSTEM.VAR.EFUSE_SELFTEST_ENA.VALUE=0 DRIVER.SYSTEM.VAR.CLKT_AVCLK4_DOMAIN_DISABLE.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_LINK_BASE_ADDRESS.VALUE=0x08004c00 +DRIVER.SYSTEM.VAR.RAM_LINK_BASE_ADDRESS.VALUE=0x08003400 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_4_DISABLE.VALUE=0 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_SUB_7_DISABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_120_INT_ENABLE.VALUE=0 @@ -502,7 +502,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_10_NAME.VALUE=het1HighLevelInterrupt DRIVER.SYSTEM.VAR.PMM_MEM_PD2_STATEVALUE.VALUE=0x5 DRIVER.SYSTEM.VAR.ERRATA_WORKAROUND_9.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_STACK_USER_LENGTH.VALUE=0x00001000 +DRIVER.SYSTEM.VAR.RAM_STACK_USER_LENGTH.VALUE=0x00002000 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_8_PERMISSION.VALUE=PRIV_RW_USER_RW_NOEXEC DRIVER.SYSTEM.VAR.CORE_MPU_REGION_10_SUB_2_DISABLE.VALUE=0 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_7_DISABLE.VALUE=0 @@ -549,14 +549,14 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_85_NAME.VALUE=phantomInterrupt DRIVER.SYSTEM.VAR.VIM_CHANNEL_77_NAME.VALUE=EMACTxIntISR DRIVER.SYSTEM.VAR.VIM_CHANNEL_69_NAME.VALUE=phantomInterrupt -DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_LENGTH.VALUE=0x00002000 +DRIVER.SYSTEM.VAR.RAM_STACK_IRQ_LENGTH.VALUE=0x00000400 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_SUB_6_DISABLE.VALUE=0 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_7_SUB_0_DISABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_2_INT_PRAGMA_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.CLKT_RTI2_POST_SOURCE.VALUE=VCLK DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_PERMISSION_VALUE.VALUE=0x1300 DRIVER.SYSTEM.VAR.VIM_CHANNEL_5_NAME.VALUE=rtiCompare3Interrupt -DRIVER.SYSTEM.VAR.RAM_STACK_LENGTH.VALUE=0x00004c00 +DRIVER.SYSTEM.VAR.RAM_STACK_LENGTH.VALUE=0x00003400 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_2_PERMISSION.VALUE=PRIV_RO_USER_RO_EXEC DRIVER.SYSTEM.VAR.CLKT_LPO_BIAS.VALUE=true DRIVER.SYSTEM.VAR.CLKT_AVCLK3_DIVIDER1.VALUE=4 @@ -628,7 +628,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_103_NAME.VALUE=etpwm7TripZoneInterrupt DRIVER.SYSTEM.VAR.PBIST_ALGO_16.VALUE=0 DRIVER.SYSTEM.VAR.CLKT_VCLK2_DIVIDER.VALUE=1 -DRIVER.SYSTEM.VAR.RAM_LINK_LENGTH.VALUE=0x0002b400 +DRIVER.SYSTEM.VAR.RAM_LINK_LENGTH.VALUE=0x0002cc00 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_11_END_ADDRESS.VALUE=0x0802ffff DRIVER.SYSTEM.VAR.VIM_CHANNEL_30_INT_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_22_INT_ENABLE.VALUE=0 @@ -793,7 +793,7 @@ DRIVER.SYSTEM.VAR.VIM_CHANNEL_29_MAPPING.VALUE=29 DRIVER.SYSTEM.VAR.ECLK_PORT_BIT0_DIR.VALUE=1 DRIVER.SYSTEM.VAR.FLASH_LENGTH.VALUE=0x00140000 -DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_LENGTH.VALUE=0x00001000 +DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_LENGTH.VALUE=0x00000400 DRIVER.SYSTEM.VAR.CLKT_EXT1_ENABLE.VALUE=FALSE DRIVER.SYSTEM.VAR.CORE_MPU_REGION_12_SUB_2_DISABLE.VALUE=0 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_SUB_7_DISABLE.VALUE=0 @@ -925,8 +925,8 @@ DRIVER.SYSTEM.VAR.SAFETY_INIT_DMA_DP_PBISTCHECK_ENA.VALUE=0x00000800 DRIVER.SYSTEM.VAR.HET_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.PBIST_ALGO_13_14.VALUE=0 -DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_BASE.VALUE=0x08004800 -DRIVER.SYSTEM.VAR.RAM_STACK_SVC_BASE.VALUE=0x08001000 +DRIVER.SYSTEM.VAR.RAM_STACK_UNDEF_BASE.VALUE=0x08003000 +DRIVER.SYSTEM.VAR.RAM_STACK_SVC_BASE.VALUE=0x08002000 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_9_TYPE.VALUE=DEVICE_NONSHAREABLE DRIVER.SYSTEM.VAR.VIM_CHANNEL_99_INT_PRAGMA_ENABLE.VALUE=0 DRIVER.SYSTEM.VAR.VIM_CHANNEL_3_INT_TYPE.VALUE=IRQ @@ -1134,7 +1134,7 @@ DRIVER.SYSTEM.VAR.RTI_ENABLE.VALUE=1 DRIVER.SYSTEM.VAR.STC_MAX_TIMEOUT.VALUE=0xFFFFFFFF DRIVER.SYSTEM.VAR.CLKT_LPO_LOW_TRIM.VALUE=100.00 -DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_BASE.VALUE=0x08001400 +DRIVER.SYSTEM.VAR.RAM_STACK_FIQ_BASE.VALUE=0x08002400 DRIVER.SYSTEM.VAR.CORE_MPU_REGION_4_PERMISSION_VALUE.VALUE=0x0300 DRIVER.SYSTEM.VAR.VIM_CHANNEL_0_NAME.VALUE=esmHighInterrupt DRIVER.SYSTEM.VAR.FLASH_BANK_LINK_LENGTH_7.VALUE=0x000010000 Index: firmware/include/sys_core.h =================================================================== diff -u -r0953a2a6940f9f096fa98cc1e8a5578deab4d8ef -r8bcb6b1342198d6d87d1350b2ca61a932a4ff006 --- firmware/include/sys_core.h (.../sys_core.h) (revision 0953a2a6940f9f096fa98cc1e8a5578deab4d8ef) +++ firmware/include/sys_core.h (.../sys_core.h) (revision 8bcb6b1342198d6d87d1350b2ca61a932a4ff006) @@ -63,7 +63,7 @@ * * @note: Use this macro for USER Mode Stack length (in bytes) */ -#define USER_STACK_LENGTH 0x00001000U +#define USER_STACK_LENGTH 0x00002000U /** @def SVC_STACK_LENGTH * @brief SVC Mode Stack length (in bytes) @@ -81,7 +81,7 @@ * * @note: Use this macro for FIQ Mode Stack length (in bytes) */ -#define FIQ_STACK_LENGTH 0x00001000U +#define FIQ_STACK_LENGTH 0x00000400U /** @def IRQ_STACK_LENGTH * @brief IRQ Mode Stack length (in bytes) @@ -90,7 +90,7 @@ * * @note: Use this macro for IRQ Mode Stack length (in bytes) */ -#define IRQ_STACK_LENGTH 0x00002000U +#define IRQ_STACK_LENGTH 0x00000400U /** @def ABORT_STACK_LENGTH * @brief ABORT Mode Stack length (in bytes) Index: firmware/source/sys_core.asm =================================================================== diff -u -r0953a2a6940f9f096fa98cc1e8a5578deab4d8ef -r8bcb6b1342198d6d87d1350b2ca61a932a4ff006 --- firmware/source/sys_core.asm (.../sys_core.asm) (revision 0953a2a6940f9f096fa98cc1e8a5578deab4d8ef) +++ firmware/source/sys_core.asm (.../sys_core.asm) (revision 8bcb6b1342198d6d87d1350b2ca61a932a4ff006) @@ -160,12 +160,12 @@ ldr sp, userSp bx lr -userSp .word 0x08000000+0x00001000 -svcSp .word 0x08000000+0x00001000+0x00000400 -fiqSp .word 0x08000000+0x00001000+0x00000400+0x00001000 -irqSp .word 0x08000000+0x00001000+0x00000400+0x00001000+0x00002000 -abortSp .word 0x08000000+0x00001000+0x00000400+0x00001000+0x00002000+0x00000400 -undefSp .word 0x08000000+0x00001000+0x00000400+0x00001000+0x00002000+0x00000400+0x00000400 +userSp .word 0x08000000+0x00002000 +svcSp .word 0x08000000+0x00002000+0x00000400 +fiqSp .word 0x08000000+0x00002000+0x00000400+0x00000400 +irqSp .word 0x08000000+0x00002000+0x00000400+0x00000400+0x00000400 +abortSp .word 0x08000000+0x00002000+0x00000400+0x00000400+0x00000400+0x00000400 +undefSp .word 0x08000000+0x00002000+0x00000400+0x00000400+0x00000400+0x00000400+0x00000400 .endasmfunc Index: firmware/source/sys_link.cmd =================================================================== diff -u -r53110a8d810e392e8f75cf0bf85a3ec07927e846 -r8bcb6b1342198d6d87d1350b2ca61a932a4ff006 --- firmware/source/sys_link.cmd (.../sys_link.cmd) (revision 53110a8d810e392e8f75cf0bf85a3ec07927e846) +++ firmware/source/sys_link.cmd (.../sys_link.cmd) (revision 8bcb6b1342198d6d87d1350b2ca61a932a4ff006) @@ -58,8 +58,8 @@ { VECTORS (X) : origin=0x00000000 length=0x00000020 FLASH0 (RX) : origin=0x00000020 length=0x0013FFE0 - STACKS (RW) : origin=0x08000000 length=0x00004c00 - RAM (RW) : origin=0x08004c00 length=0x0002b400 + STACKS (RW) : origin=0x08000000 length=0x00003400 + RAM (RW) : origin=0x08003400 length=0x0002cc00 /* USER CODE BEGIN (2) */ #endif @@ -70,8 +70,8 @@ VECTORS (X) : origin=0x00000000 length=0x00000020 CRCMEM (RX) : origin=0x00000020 length=0x000001E0 FLASH0 (RX) : origin=0x00000200 length=0x0013FE00 - STACKS (RW) : origin=0x08000000 length=0x00004c00 - RAM (RW) : origin=0x08004c00 length=0x0002b400 + STACKS (RW) : origin=0x08000000 length=0x00003400 + RAM (RW) : origin=0x08003400 length=0x0002cc00 #endif /* USER CODE END */