mirror of
https://github.com/mytechnotalent/Embedded-Hacking.git
synced 2026-05-22 23:49:41 +02:00
Updated Drivers
This commit is contained in:
@@ -40,17 +40,28 @@
|
||||
#include "pico/stdlib.h"
|
||||
#include "timer.h"
|
||||
|
||||
static bool heartbeat_callback(void) {
|
||||
/**
|
||||
* @brief Heartbeat timer callback that prints a message over UART
|
||||
*
|
||||
* @return bool true to keep the repeating timer active
|
||||
*/
|
||||
static bool _heartbeat_callback(void) {
|
||||
printf("Timer heartbeat\r\n");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @brief Application entry point for the repeating timer demo
|
||||
*
|
||||
* Starts a 1-second repeating timer whose callback prints a
|
||||
* heartbeat message over UART.
|
||||
*
|
||||
* @return int Does not return
|
||||
*/
|
||||
int main(void) {
|
||||
stdio_init_all();
|
||||
|
||||
timer_driver_start(1000, heartbeat_callback);
|
||||
|
||||
while (true) {
|
||||
timer_driver_start(1000, _heartbeat_callback);
|
||||
while (true)
|
||||
tight_loop_contents();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,29 +34,34 @@ static repeating_timer_t g_timer;
|
||||
static bool g_timer_active = false;
|
||||
static timer_driver_callback_t g_user_callback = NULL;
|
||||
|
||||
static bool timer_shim(repeating_timer_t *rt) {
|
||||
|
||||
/**
|
||||
* @brief Internal repeating-timer callback that forwards to the user callback
|
||||
*
|
||||
* @param rt Unused repeating-timer handle provided by the SDK
|
||||
* @return bool true to keep the timer running, false to cancel
|
||||
*/
|
||||
static bool _timer_shim(repeating_timer_t *rt) {
|
||||
(void)rt;
|
||||
if (g_user_callback) {
|
||||
if (g_user_callback)
|
||||
return g_user_callback();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void timer_driver_start(int32_t period_ms, timer_driver_callback_t callback) {
|
||||
if (g_timer_active) {
|
||||
cancel_repeating_timer(&g_timer);
|
||||
g_timer_active = false;
|
||||
}
|
||||
|
||||
g_user_callback = callback;
|
||||
g_timer_active = add_repeating_timer_ms(period_ms, timer_shim, NULL, &g_timer);
|
||||
g_timer_active = add_repeating_timer_ms(period_ms, _timer_shim, NULL, &g_timer);
|
||||
}
|
||||
|
||||
void timer_driver_cancel(void) {
|
||||
if (!g_timer_active) {
|
||||
return;
|
||||
}
|
||||
|
||||
void timer_driver_cancel(void) {
|
||||
if (!g_timer_active)
|
||||
return;
|
||||
cancel_repeating_timer(&g_timer);
|
||||
g_timer_active = false;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user