libdragon
Loading...
Searching...
No Matches
timer.h
Go to the documentation of this file.
1
8#ifndef __LIBDRAGON_TIMER_H
9#define __LIBDRAGON_TIMER_H
10
11#include <stdint.h>
12#include "n64sys.h"
13
44typedef void (*timer_callback1_t)(int ovfl);
46typedef void (*timer_callback2_t)(int ovfl, void *ctx);
47
51typedef struct timer_link
52{
54 uint32_t left;
56 uint32_t set;
58 int ovfl;
60 int flags;
62 union {
63 timer_callback1_t callback;
64 timer_callback2_t callback_with_context;
65 };
67 void *ctx;
69 struct timer_link *next;
71
73#define TF_ONE_SHOT 0
75#define TF_CONTINUOUS 1
77#define TF_DISABLED 2
78
87#define TIMER_TICKS(us) ((int)TIMER_TICKS_LL(us))
96#define TIMER_MICROS(tk) ((int)TIMER_MICROS_LL(tk))
97
106#define TIMER_TICKS_LL(us) ((long long)(us) * TICKS_PER_SECOND / 1000000)
115#define TIMER_MICROS_LL(tk) ((long long)(tk) * 1000000 / TICKS_PER_SECOND)
116
119#ifdef __cplusplus
120extern "C" {
121#endif
122
138void timer_init(void);
139
151void timer_close(void);
152
159long long timer_ticks(void);
160
161
177timer_link_t *new_timer(int ticks, int flags, timer_callback1_t callback);
178
195timer_link_t *new_timer_context(int ticks, int flags, timer_callback2_t callback, void *ctx);
196
197
213void start_timer(timer_link_t *timer, int ticks, int flags, timer_callback1_t callback);
214
231void start_timer_context(timer_link_t *timer, int ticks, int flags, timer_callback2_t callback, void *ctx);
232
233
240void restart_timer(timer_link_t *timer);
241
254void stop_timer(timer_link_t *timer);
255
264void delete_timer(timer_link_t *timer);
265
266#ifdef __cplusplus
267}
268#endif
269
270#endif
int flags
Timer flags. See TF_ONE_SHOT, TF_CONTINUOUS, and TF_DISABLED.
Definition timer.h:60
int ovfl
To correct for drift.
Definition timer.h:58
uint32_t left
Absolute ticks value at which the timer expires.
Definition timer.h:54
uint32_t set
Ticks to set if continuous.
Definition timer.h:56
void * ctx
Callback context parameter.
Definition timer.h:67
struct timer_link * next
Link to next timer.
Definition timer.h:69
void(* timer_callback1_t)(int ovfl)
Timer callback function without context.
Definition timer.h:44
void(* timer_callback2_t)(int ovfl, void *ctx)
Timer callback function with context.
Definition timer.h:46
N64 System Interface.
void start_timer(timer_link_t *timer, int ticks, int flags, timer_callback1_t callback)
Start a timer (not currently in the list)
Definition timer.c:244
void timer_close(void)
Free and close the timer subsystem.
Definition timer.c:357
timer_link_t * new_timer(int ticks, int flags, timer_callback1_t callback)
Create a new timer and add to list.
Definition timer.c:188
timer_link_t * new_timer_context(int ticks, int flags, timer_callback2_t callback, void *ctx)
Create a new timer with context and add to list.
Definition timer.c:216
void timer_init(void)
Initialize the timer subsystem.
Definition timer.c:174
void stop_timer(timer_link_t *timer)
Stop a timer and remove it from the list.
Definition timer.c:315
void delete_timer(timer_link_t *timer)
Remove a timer from the list and delete it.
Definition timer.c:347
void start_timer_context(timer_link_t *timer, int ticks, int flags, timer_callback2_t callback, void *ctx)
Start a timer (not currently in the list) with context.
Definition timer.c:270
long long timer_ticks(void)
Return total ticks since timer was initialized, as a 64-bit counter.
Definition timer.c:392
void restart_timer(timer_link_t *timer)
Reset a timer and add to list.
Definition timer.c:296