Nexus Embedded Platform 1.0.0
Statically assembled reusable embedded mechanisms
Loading...
Searching...
No Matches
spi.h
Go to the documentation of this file.
1
9#ifndef NEXUS_SPI_H
10#define NEXUS_SPI_H
11
12#include "nexus/core/request.h"
13#include "nexus/io/wake.h"
14#ifdef __cplusplus
15extern "C" {
16#endif
19
21#define NX_SPI_MEMORY_TX_FIXED 1U
22#define NX_SPI_MEMORY_RX_FIXED 2U
23
32typedef struct {
34 const uint8_t* tx;
35 uint8_t* rx;
36 size_t length;
38
45typedef struct {
46 nx_result_t (*recover)(void* context);
47 nx_result_t (*cancel)(void* context, nx_spi_request_t* request);
48 void (*service)(void* context);
49 nx_result_t (*stop)(void* context);
50 nx_result_t (*attach_wake)(void* context, const nx_irq_wake_t* wake,
51 uint8_t syscall_ceiling);
53
61 void* context;
62};
63
70typedef struct {
71 nx_result_t (*transfer)(void* context, const uint8_t* tx, uint8_t* rx,
72 size_t length, nx_time_us_t deadline,
73 size_t* transferred);
74 nx_result_t (*submit)(void* context, nx_spi_request_t* request);
75 nx_result_t (*start_admitted)(void* context, nx_spi_request_t* request);
76 bool (*on_port)(const void* context, const nx_spi_port_t* port);
77 nx_result_t (*submit_memory)(void* context, nx_spi_request_t* request,
78 uint8_t memory_flags);
80
90
116 const uint8_t* tx, uint8_t* rx,
117 size_t length, nx_time_us_t deadline,
118 size_t* transferred);
149 uint8_t* rx, size_t length,
150 nx_time_us_t deadline);
167 nx_spi_request_t* request);
186 nx_spi_request_t* request,
187 uint8_t memory_flags);
201 nx_spi_request_t* request);
219 const nx_spi_port_t* port);
234 nx_spi_request_t* request);
273 const nx_irq_wake_t* wake,
274 uint8_t syscall_ceiling);
275#ifdef __cplusplus
276}
277#endif
278
279#endif
Caller-owned admission, borrow, settlement and stable cancellation.
nx_result_t nx_spi_endpoint_start_admitted(const nx_spi_endpoint_t *endpoint, nx_spi_request_t *request)
Start an adapter-admitted QUEUED request without readmission.
struct nx_spi_port nx_spi_port_t
Definition spi.h:17
struct nx_spi_endpoint nx_spi_endpoint_t
Definition spi.h:18
nx_result_t nx_spi_port_attach_wake(const nx_spi_port_t *port, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)
Attach an optional hint sink to asynchronous bus IRQ publishers.
nx_result_t nx_spi_endpoint_submit(const nx_spi_endpoint_t *endpoint, nx_spi_request_t *request)
Submit one finite asynchronous whole-CS transaction.
nx_result_t nx_spi_port_recover(const nx_spi_port_t *port)
Recover an idle SPI controller after its retained fault.
nx_result_t nx_spi_endpoint_transfer(const nx_spi_endpoint_t *endpoint, const uint8_t *tx, uint8_t *rx, size_t length, nx_time_us_t deadline, size_t *transferred)
Execute one bounded full-duplex 8-bit polling transaction.
nx_result_t nx_spi_request_prepare(nx_spi_request_t *request, const uint8_t *tx, uint8_t *rx, size_t length, nx_time_us_t deadline)
Prepare an unborrowed finite request without copying buffers.
nx_result_t nx_spi_endpoint_submit_memory(const nx_spi_endpoint_t *endpoint, nx_spi_request_t *request, uint8_t memory_flags)
Submit explicit incrementing or single-cell DMA memory.
nx_result_t nx_spi_port_cancel(const nx_spi_port_t *port, nx_spi_request_t *request)
Request cancellation without revoking DMA/CS buffer loans.
void nx_spi_port_service(const nx_spi_port_t *port)
Advance one asynchronous bus under its single task executor.
nx_result_t nx_spi_port_stop(const nx_spi_port_t *port)
Close admission and retain active sources until full drain.
bool nx_spi_endpoint_on_port(const nx_spi_endpoint_t *endpoint, const nx_spi_port_t *port)
Verify an endpoint belongs to the serviced bus.
nx_result_t
Operation result; success at submission means admission only.
Definition status.h:21
Optional immutable wake target borrowed by an IRQ provider.
Definition wake.h:26
Caller-owned request metadata, without payload or callbacks.
Definition request.h:38
Shared read-only methods using one provider state.
Definition spi.h:70
nx_result_t(* start_admitted)(void *context, nx_spi_request_t *request)
Definition spi.h:75
nx_result_t(* transfer)(void *context, const uint8_t *tx, uint8_t *rx, size_t length, nx_time_us_t deadline, size_t *transferred)
Definition spi.h:71
nx_result_t(* submit)(void *context, nx_spi_request_t *request)
Definition spi.h:74
bool(* on_port)(const void *context, const nx_spi_port_t *port)
Definition spi.h:76
nx_result_t(* submit_memory)(void *context, nx_spi_request_t *request, uint8_t memory_flags)
Definition spi.h:77
Immutable interface pointing to caller-owned state.
Definition spi.h:86
const nx_spi_endpoint_ops_t * ops
Definition spi.h:87
void * context
Definition spi.h:88
Shared read-only methods using one provider state.
Definition spi.h:45
nx_result_t(* attach_wake)(void *context, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)
Definition spi.h:50
nx_result_t(* stop)(void *context)
Definition spi.h:49
nx_result_t(* cancel)(void *context, nx_spi_request_t *request)
Definition spi.h:47
void(* service)(void *context)
Definition spi.h:48
nx_result_t(* recover)(void *context)
Definition spi.h:46
Immutable interface pointing to caller-owned state.
Definition spi.h:59
const nx_spi_ops_t * ops
Definition spi.h:60
void * context
Definition spi.h:61
Caller-owned finite SPI request with one whole-CS interval.
Definition spi.h:32
const uint8_t * tx
Definition spi.h:34
nx_request_t base
Definition spi.h:33
uint8_t * rx
Definition spi.h:35
size_t length
Definition spi.h:36
uint64_t nx_time_us_t
Microseconds in one boot/clock domain; no wall-clock semantics.
Definition time.h:20
Explicit borrowed IRQ wake target and syscall-ceiling check.