generated from sirlilpanda/kicad-project-template-actionless
Added the zig_main project to software for zig based implementation of code for robot
This commit is contained in:
85
software/zig_main/imports/wdt.zig
Normal file
85
software/zig_main/imports/wdt.zig
Normal file
@@ -0,0 +1,85 @@
|
||||
const sys = @import("sys");
|
||||
const errors = @import("error");
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Type aliases
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
pub const Config = sys.esp_task_wdt_config_t;
|
||||
pub const UserHandle = sys.esp_task_wdt_user_handle_t;
|
||||
pub const TaskHandle = sys.TaskHandle_t;
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Watchdog initialisation
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/// Initialise the Task Watchdog Timer.
|
||||
///
|
||||
/// `config.timeout_ms` — watchdog timeout in milliseconds
|
||||
/// `config.idle_core_mask` — bitmask of idle tasks to subscribe (0 = none)
|
||||
/// `config.trigger_panic` — whether to trigger a panic on timeout
|
||||
pub fn init(config: *const Config) !void {
|
||||
try errors.espCheckError(sys.esp_task_wdt_init(config));
|
||||
}
|
||||
|
||||
/// Reconfigure a running watchdog (does not reset the timer).
|
||||
pub fn reconfigure(config: *const Config) !void {
|
||||
try errors.espCheckError(sys.esp_task_wdt_reconfigure(config));
|
||||
}
|
||||
|
||||
/// De-initialise the Task Watchdog Timer.
|
||||
pub fn deinit() !void {
|
||||
try errors.espCheckError(sys.esp_task_wdt_deinit());
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Task subscription
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/// Subscribe a FreeRTOS task to the watchdog. Pass `null` for the calling task.
|
||||
pub fn add(task_handle: TaskHandle) !void {
|
||||
try errors.espCheckError(sys.esp_task_wdt_add(task_handle));
|
||||
}
|
||||
|
||||
/// Subscribe a named user (not a FreeRTOS task) to the watchdog.
|
||||
/// Returns a `UserHandle` for resetting and unsubscribing.
|
||||
pub fn addUser(user_name: [*:0]const u8) !UserHandle {
|
||||
var handle: UserHandle = null;
|
||||
try errors.espCheckError(sys.esp_task_wdt_add_user(user_name, &handle));
|
||||
return handle;
|
||||
}
|
||||
|
||||
/// Unsubscribe a FreeRTOS task from the watchdog.
|
||||
pub fn delete(task_handle: TaskHandle) !void {
|
||||
try errors.espCheckError(sys.esp_task_wdt_delete(task_handle));
|
||||
}
|
||||
|
||||
/// Unsubscribe a user registered with `addUser`.
|
||||
pub fn deleteUser(user_handle: UserHandle) !void {
|
||||
try errors.espCheckError(sys.esp_task_wdt_delete_user(user_handle));
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Watchdog reset (feed)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/// Reset (feed) the watchdog for the calling task.
|
||||
/// Call at least once per watchdog period to prevent a timeout.
|
||||
pub fn reset() !void {
|
||||
try errors.espCheckError(sys.esp_task_wdt_reset());
|
||||
}
|
||||
|
||||
/// Reset the watchdog for a named user registered with `addUser`.
|
||||
pub fn resetUser(user_handle: UserHandle) !void {
|
||||
try errors.espCheckError(sys.esp_task_wdt_reset_user(user_handle));
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Status query
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
/// Returns `ESP_OK` if `task_handle` is subscribed and has recently reset,
|
||||
/// or an error if it is overdue or not subscribed.
|
||||
pub fn status(task_handle: TaskHandle) !void {
|
||||
try errors.espCheckError(sys.esp_task_wdt_status(task_handle));
|
||||
}
|
||||
Reference in New Issue
Block a user