v1.5.0
Go to the documentation of this file.
63 #ifndef _PICO_ASYNC_CONTEXT_H
64 #define _PICO_ASYNC_CONTEXT_H
74 ASYNC_CONTEXT_POLL = 1,
75 ASYNC_CONTEXT_THREADSAFE_BACKGROUND = 2,
76 ASYNC_CONTEXT_FREERTOS = 3,
143 #define ASYNC_CONTEXT_FLAG_CALLBACK_FROM_NON_IRQ 0x1
144 #define ASYNC_CONTEXT_FLAG_CALLBACK_FROM_IRQ 0x2
145 #define ASYNC_CONTEXT_FLAG_POLLED 0x4
157 uint32_t (*execute_sync)(
async_context_t *context, uint32_t (*func)(
void *param),
void *param);
203 context->type->acquire_lock_blocking(context);
222 context->type->release_lock(context);
233 context->type->lock_check(context);
252 return context->type->execute_sync(context, func, param);
271 return context->type->add_at_time_worker(context, worker);
292 return context->type->add_at_time_worker(context, worker);
313 return context->type->add_at_time_worker(context, worker);
328 return context->type->remove_at_time_worker(context, worker);
348 return context->type->add_when_pending_worker(context, worker);
363 return context->type->remove_when_pending_worker(context, worker);
378 context->type->set_work_pending(context, worker);
393 if (context->type->poll) context->type->poll(context);
407 context->type->wait_until(context, until);
420 context->type->wait_for_work_until(context, until);
444 return context->core_num;
461 context->type->deinit(context);
void * user_data
Definition: async_context.h:112
A "timeout" instance used by an async_context.
Definition: async_context.h:90
absolute_time_t next_time
Definition: async_context.h:108
static void async_context_deinit(async_context_t *context)
End async_context processing, and free any resources.
Definition: async_context.h:460
static bool async_context_add_at_time_worker_at(async_context_t *context, async_at_time_worker_t *worker, absolute_time_t at)
Add an "at time" worker to a context.
Definition: async_context.h:290
static bool async_context_remove_at_time_worker(async_context_t *context, async_at_time_worker_t *worker)
Remove an "at time" worker from a context.
Definition: async_context.h:327
static void async_context_wait_for_work_until(async_context_t *context, absolute_time_t until)
Block until work needs to be done or the specified time has been reached.
Definition: async_context.h:419
static uint async_context_core_num(const async_context_t *context)
Return the processor core this async_context belongs to.
Definition: async_context.h:443
static void async_context_release_lock(async_context_t *context)
Release the async_context lock.
Definition: async_context.h:221
struct async_when_pending_worker * next
Definition: async_context.h:129
void(* do_work)(async_context_t *context, struct async_when_pending_worker *worker)
Definition: async_context.h:136
static bool async_context_remove_when_pending_worker(async_context_t *context, async_when_pending_worker_t *worker)
Remove a "when pending" worker from a context.
Definition: async_context.h:362
static void async_context_set_work_pending(async_context_t *context, async_when_pending_worker_t *worker)
Mark a "when pending" worker as having work pending.
Definition: async_context.h:377
static absolute_time_t make_timeout_time_ms(uint32_t ms)
Convenience method to get the timestamp a number of milliseconds from the current time.
Definition: time.h:141
A "worker" instance used by an async_context.
Definition: async_context.h:125
static void async_context_poll(async_context_t *context)
Perform any pending work for polling style async_context.
Definition: async_context.h:392
static uint32_t async_context_execute_sync(async_context_t *context, uint32_t(*func)(void *param), void *param)
Execute work synchronously on the core the async_context belongs to.
Definition: async_context.h:251
static bool async_context_add_when_pending_worker(async_context_t *context, async_when_pending_worker_t *worker)
Add a "when pending" worker to a context.
Definition: async_context.h:347
static bool async_context_add_at_time_worker_in_ms(async_context_t *context, async_at_time_worker_t *worker, uint32_t ms)
Add an "at time" worker to a context.
Definition: async_context.h:311
void(* do_work)(async_context_t *context, struct async_work_on_timeout *timeout)
Definition: async_context.h:103
static void async_context_lock_check(async_context_t *context)
Assert if the caller does not own the lock for the async_context.
Definition: async_context.h:232
Base structure type of all async_contexts. For details about its use, see pico_async_context.
Definition: async_context.h:175
struct async_work_on_timeout * next
Definition: async_context.h:94
struct async_context_type async_context_type_t
Implementation of an async_context type, providing methods common to that type.
static void async_context_acquire_lock_blocking(async_context_t *context)
Acquire the async_context lock.
Definition: async_context.h:202
bool work_pending
Definition: async_context.h:140
static void async_context_wait_for_work_ms(async_context_t *context, uint32_t ms)
Block until work needs to be done or the specified number of milliseconds have passed.
Definition: async_context.h:432
static bool async_context_add_at_time_worker(async_context_t *context, async_at_time_worker_t *worker)
Add an "at time" worker to a context.
Definition: async_context.h:270
Implementation of an async_context type, providing methods common to that type.
Definition: async_context.h:151
struct async_when_pending_worker async_when_pending_worker_t
A "worker" instance used by an async_context.
static void async_context_wait_until(async_context_t *context, absolute_time_t until)
sleep until the specified time in an async_context callback safe way
Definition: async_context.h:406
struct async_work_on_timeout async_at_time_worker_t
A "timeout" instance used by an async_context.