112 lines
3.2 KiB
C
112 lines
3.2 KiB
C
/*
|
|
* Copyright (c) 2020 Libre Solar Technologies GmbH
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/**
|
|
* @file
|
|
* @brief Task watchdog header file
|
|
*
|
|
* This header file declares prototypes for the task watchdog APIs.
|
|
*
|
|
* The task watchdog can be used to monitor correct operation of individual
|
|
* threads. It can be used together with a hardware watchdog as a fallback.
|
|
*/
|
|
|
|
#ifndef TASK_WDT_H_
|
|
#define TASK_WDT_H_
|
|
|
|
#include <zephyr/types.h>
|
|
#include <kernel.h>
|
|
#include <device.h>
|
|
|
|
/**
|
|
* @brief Task Watchdog APIs
|
|
* @defgroup task_wdt_api Task Watchdog APIs
|
|
* @ingroup subsystem
|
|
* @{
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/** Task watchdog callback. */
|
|
typedef void (*task_wdt_callback_t)(int channel_id, void *user_data);
|
|
|
|
/**
|
|
* @brief Initialize task watchdog.
|
|
*
|
|
* This function sets up necessary kernel timers and the hardware watchdog (if
|
|
* desired as fallback). It has to be called before task_wdt_add() and
|
|
* task_wdt_feed().
|
|
*
|
|
* @param hw_wdt Pointer to the hardware watchdog device used as fallback.
|
|
* Pass NULL if no hardware watchdog fallback is desired.
|
|
*
|
|
* @retval 0 If successful.
|
|
* @retval -ENOTSUP If assigning a hardware watchdog is not supported.
|
|
* @retval -Errno Negative errno if the fallback hw_wdt is used and the
|
|
* install timeout API fails. See wdt_install_timeout()
|
|
* API for possible return values.
|
|
*/
|
|
int task_wdt_init(const struct device *hw_wdt);
|
|
|
|
/**
|
|
* @brief Install new timeout.
|
|
*
|
|
* Adds a new timeout to the list of task watchdog channels.
|
|
*
|
|
* @param reload_period Period in milliseconds used to reset the timeout
|
|
* @param callback Function to be called when watchdog timer expired. Pass
|
|
* NULL to use system reset handler.
|
|
* @param user_data User data to associate with the watchdog channel.
|
|
*
|
|
* @retval channel_id If successful, a non-negative value indicating the index
|
|
* of the channel to which the timeout was assigned. This
|
|
* ID is supposed to be used as the parameter in calls to
|
|
* task_wdt_feed().
|
|
* @retval -EINVAL If the reload_period is invalid.
|
|
* @retval -ENOMEM If no more timeouts can be installed.
|
|
*/
|
|
int task_wdt_add(uint32_t reload_period, task_wdt_callback_t callback,
|
|
void *user_data);
|
|
|
|
/**
|
|
* @brief Delete task watchdog channel.
|
|
*
|
|
* Deletes the specified channel from the list of task watchdog channels. The
|
|
* channel is now available again for other tasks via task_wdt_add() function.
|
|
*
|
|
* @param channel_id Index of the channel as returned by task_wdt_add().
|
|
*
|
|
* @retval 0 If successful.
|
|
* @retval -EINVAL If there is no installed timeout for supplied channel.
|
|
*/
|
|
int task_wdt_delete(int channel_id);
|
|
|
|
/**
|
|
* @brief Feed specified watchdog channel.
|
|
*
|
|
* This function loops through all installed task watchdogs and updates the
|
|
* internal kernel timer used as for the software watchdog with the next due
|
|
* timeout.
|
|
*
|
|
* @param channel_id Index of the fed channel as returned by task_wdt_add().
|
|
*
|
|
* @retval 0 If successful.
|
|
* @retval -EINVAL If there is no installed timeout for supplied channel.
|
|
*/
|
|
int task_wdt_feed(int channel_id);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
#endif /* TASK_WDT_H_ */
|