async_context.h File Reference
#include "pico.h"
#include "pico/time.h"
Include dependency graph for async_context.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  async_work_on_timeout
 A "timeout" instance used by an async_context. More...
 
struct  async_when_pending_worker
 A "worker" instance used by an async_context. More...
 
struct  async_context_type
 Implementation of an async_context type, providing methods common to that type. More...
 
struct  async_context
 Base structure type of all async_contexts. For details about its use, see pico_async_context. More...
 

Macros

#define ASYNC_CONTEXT_FLAG_CALLBACK_FROM_NON_IRQ   0x1
 
#define ASYNC_CONTEXT_FLAG_CALLBACK_FROM_IRQ   0x2
 
#define ASYNC_CONTEXT_FLAG_POLLED   0x4
 

Typedefs

typedef struct async_context async_context_t
 
typedef struct async_work_on_timeout async_at_time_worker_t
 A "timeout" instance used by an async_context. More...
 
typedef struct async_when_pending_worker async_when_pending_worker_t
 A "worker" instance used by an async_context. More...
 
typedef struct async_context_type async_context_type_t
 Implementation of an async_context type, providing methods common to that type.
 

Enumerations

enum  { ASYNC_CONTEXT_POLL = 1, ASYNC_CONTEXT_THREADSAFE_BACKGROUND = 2, ASYNC_CONTEXT_FREERTOS = 3 }
 

Functions

static void async_context_acquire_lock_blocking (async_context_t *context)
 Acquire the async_context lock. More...
 
static void async_context_release_lock (async_context_t *context)
 Release the async_context lock. More...
 
static void async_context_lock_check (async_context_t *context)
 Assert if the caller does not own the lock for the async_context. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
static void async_context_poll (async_context_t *context)
 Perform any pending work for polling style async_context. More...
 
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 More...
 
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. More...
 
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. More...
 
static uint async_context_core_num (const async_context_t *context)
 Return the processor core this async_context belongs to. More...
 
static void async_context_deinit (async_context_t *context)
 End async_context processing, and free any resources. More...