Index: firmware/App/Services/WatchdogMgmt.c =================================================================== diff -u -r482f4465ccdb813922de506bf780e29f4fb2f84b -r99f108ac337a30a2407410ca8be9a990cee9758a --- firmware/App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision 482f4465ccdb813922de506bf780e29f4fb2f84b) +++ firmware/App/Services/WatchdogMgmt.c (.../WatchdogMgmt.c) (revision 99f108ac337a30a2407410ca8be9a990cee9758a) @@ -43,9 +43,9 @@ // ********** private data ********** -static U32 lastWatchdogPetTime = 0; ///< Previous watchdog pet time. +static U32 lastWatchdogPetTime = 0; ///< Previous watchdog pet timestamp (in ms). -DATA_ARRAY_DECL( BOOL, TaskCheckIns, NUM_OF_TASKS, watchdogTaskCheckedIn ); ///< Watchdog task check-in array. +static OVERRIDE_U32_T watchdogTaskCheckedIn[ NUM_OF_TASKS ]; ///< Array of flags indicating whether individual tasks have checked in with watchdog manager. static WATCHDOG_SELF_TEST_STATE_T watchdogSelfTestState; ///< Watchdog self test current state. static SELF_TEST_STATUS_T watchdogSelfTestStatus; ///< Watchdog self test status. @@ -56,7 +56,7 @@ static void resetWDTaskCheckIns( void ); static BOOL haveAllTasksCheckedIn( void ); static void petWatchdog( void ); -static DATA_ARRAY_GET_PROTOTYPE( BOOL, hasTaskGeneralCheckedIn, task ); +static BOOL hasTaskGeneralCheckedIn( U32 task ); /*********************************************************************//** * @brief @@ -88,7 +88,7 @@ * @brief * The execWatchdogMgmt function executes the watchdog management service. * @details - * Inputs : none + * Inputs : watchdogTaskCheckedIn[] * Outputs : Pets watchdog when all tasks checked in * @return none *************************************************************************/ @@ -256,8 +256,29 @@ * @param task ID of task to check * @return TRUE if given task has checked in, FALSE if not *************************************************************************/ -static DATA_ARRAY_GET( BOOL, hasTaskGeneralCheckedIn, task, NUM_OF_TASKS-1, watchdogTaskCheckedIn, FALSE ) +static BOOL hasTaskGeneralCheckedIn( U32 task ) +{ + BOOL result = FALSE; + if ( task < NUM_OF_TASKS ) + { + if ( OVERRIDE_KEY == watchdogTaskCheckedIn[ task ].override ) + { + result = (BOOL)watchdogTaskCheckedIn[ task ].ovData; + } + else + { + result = (BOOL)watchdogTaskCheckedIn[ task ].data; + } + } + else + { + activateAlarmNoData( ALARM_ID_DG_SOFTWARE_FAULT ); + } + + return result; +} + /*********************************************************************//** * @brief * The petWatchdog function pets the watchdog by pulsing the CPLD WD pet signal. @@ -284,15 +305,55 @@ * @brief * The testSetWatchdogTaskCheckInOverride function overrides the state of the * task check-in with the watchdog management with a given check-in state. - * The testResetWatchdogTaskCheckInOverride function resets the override of the - * state of the check-in with the watchdog management. * @details * Inputs : none * Outputs : watchdogTaskCheckedIn[] * @param task ID of task to override check-in state for * @param value override state for the given task ID * @return TRUE if override successful, FALSE if not *************************************************************************/ -DATA_ARRAY_OVERRIDE_FUNC( BOOL, testSetWatchdogTaskCheckInOverride, testResetWatchdogTaskCheckInOverride, watchdogTaskCheckedIn, task, NUM_OF_TASKS-1 ) +BOOL testSetWatchdogTaskCheckInOverride( U32 task, BOOL value ) +{ + BOOL result = FALSE; + if ( task < NUM_OF_TASKS ) + { + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + watchdogTaskCheckedIn[ task ].ovData = value; + watchdogTaskCheckedIn[ task ].override = OVERRIDE_KEY; + } + } + + return result; +} + +/*********************************************************************//** + * @brief + * The testResetWatchdogTaskCheckInOverride function resets the override of the + * state of the check-in with the watchdog management. + * @details + * Inputs : none + * Outputs : watchdogTaskCheckedIn[] + * @param task ID of task to override check-in state for + * @return TRUE if override reset successful, FALSE if not + *************************************************************************/ +BOOL testResetWatchdogTaskCheckInOverride( U32 task ) +{ + BOOL result = FALSE; + + if ( task < NUM_OF_TASKS ) + { + if ( TRUE == isTestingActivated() ) + { + result = TRUE; + watchdogTaskCheckedIn[ task ].override = OVERRIDE_RESET; + watchdogTaskCheckedIn[ task ].ovData = watchdogTaskCheckedIn[ task ].ovInitData; + } + } + + return result; +} + /**@}*/