Nexus Embedded Platform 1.0.0
Statically assembled reusable embedded mechanisms
Loading...
Searching...
No Matches
can.h
Go to the documentation of this file.
1
6#ifndef NEXUS_IO_CAN_H
7#define NEXUS_IO_CAN_H
8
10#include "nexus/io/wake.h"
11#ifdef __cplusplus
12extern "C" {
13#endif
14
18typedef struct {
19 uint32_t id;
22 uint8_t dlc;
23 uint8_t data[8];
25
32#define NX_CAN_LOSS_SOFTWARE 1U
33#define NX_CAN_LOSS_HARDWARE_LOWER_BOUND 2U
34#define NX_CAN_LOSS_SATURATED 4U
35#define NX_CAN_DLC_NORMALIZED 8U
51
52typedef struct {
53 bool started;
54 bool closing;
55 bool bus_off;
56 uint8_t pending;
59 uint8_t last_error;
61
73
75typedef struct {
77 void* context;
79
89 const nx_can_frame_t* frame,
90 nx_time_us_t deadline);
100 nx_can_tx_request_t* request);
110 nx_can_tx_request_t* request);
129 nx_can_event_t* events, size_t capacity,
130 size_t* count);
165 const nx_irq_wake_t* wake,
166 uint8_t syscall_ceiling);
167#ifdef __cplusplus
168}
169#endif
170#endif
nx_result_t nx_can_port_read_events(const nx_can_port_t *port, nx_can_event_t *events, size_t capacity, size_t *count)
Consume value events without overwriting earlier unconsumed facts.
nx_can_frame_kind_t
Definition can.h:16
@ NX_CAN_REMOTE
Definition can.h:16
@ NX_CAN_DATA
Definition can.h:16
nx_result_t nx_can_port_service(const nx_can_port_t *port)
Process latched completions and absolute timeout/drain deadlines.
nx_can_event_kind_t
Definition can.h:31
@ NX_CAN_EVENT_FRAME
Definition can.h:31
@ NX_CAN_EVENT_LOSS
Definition can.h:31
nx_result_t nx_can_port_stop(const nx_can_port_t *port)
Close admission, abort TX and detach IRQ/RX publishers.
nx_can_format_t
Definition can.h:15
@ NX_CAN_EXTENDED
Definition can.h:15
@ NX_CAN_STANDARD
Definition can.h:15
nx_result_t nx_can_port_attach_wake(const nx_can_port_t *port, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)
Borrow an optional wake target after checking all four actual IRQs.
nx_result_t nx_can_tx_prepare(nx_can_tx_request_t *request, const nx_can_frame_t *frame, nx_time_us_t deadline)
Validate and copy a classic frame into unborrowed request storage.
nx_result_t nx_can_port_recover(const nx_can_port_t *port)
Explicitly reenter initialization after bus-off and complete drain.
nx_result_t nx_can_port_cancel(const nx_can_port_t *port, nx_can_tx_request_t *request)
Request abort without revoking a borrowed request.
nx_result_t nx_can_port_submit(const nx_can_port_t *port, nx_can_tx_request_t *request)
Admit one frame into one of three hardware mailboxes.
nx_result_t nx_can_port_state(const nx_can_port_t *port, nx_can_state_t *state)
Copy authoritative error/admission state, even when RX is full.
Caller-owned admission, borrow, settlement and stable cancellation.
nx_result_t
Operation result; success at submission means admission only.
Definition status.h:21
Value receive fact or ordered loss boundary.
Definition can.h:41
uint64_t lost
Definition can.h:44
uint8_t raw_dlc
Definition can.h:49
uint32_t flags
Definition can.h:45
nx_can_frame_t frame
Definition can.h:42
nx_time_us_t timestamp_us
Definition can.h:43
nx_can_event_kind_t kind
Definition can.h:46
uint8_t filter
Definition can.h:48
uint8_t fifo
Definition can.h:47
Classic 2.0A/B value frame; DLC is always 0..8, never CAN FD.
Definition can.h:18
uint8_t dlc
Definition can.h:22
uint8_t data[8]
Definition can.h:23
nx_can_format_t format
Definition can.h:20
nx_can_frame_kind_t kind
Definition can.h:21
uint32_t id
Definition can.h:19
Shared immutable operations; execution owner serializes task methods.
Definition can.h:63
nx_result_t(* state)(void *, nx_can_state_t *)
Definition can.h:68
nx_result_t(* stop)(void *)
Definition can.h:69
nx_result_t(* service)(void *)
Definition can.h:66
nx_result_t(* cancel)(void *, nx_can_tx_request_t *)
Definition can.h:65
nx_result_t(* submit)(void *, nx_can_tx_request_t *)
Definition can.h:64
nx_result_t(* recover)(void *)
Definition can.h:70
nx_result_t(* read_events)(void *, nx_can_event_t *, size_t, size_t *)
Definition can.h:67
nx_result_t(* attach_wake)(void *, const nx_irq_wake_t *, uint8_t)
Definition can.h:71
Immutable face; lookup does not allocate, start or acquire hardware.
Definition can.h:75
const nx_can_ops_t * ops
Definition can.h:76
void * context
Definition can.h:77
Latched controller state, independent of receive-ring fullness.
Definition can.h:52
uint8_t transmit_errors
Definition can.h:57
bool closing
Definition can.h:54
bool bus_off
Definition can.h:55
uint8_t last_error
Definition can.h:59
uint8_t receive_errors
Definition can.h:58
uint8_t pending
Definition can.h:56
bool started
Definition can.h:53
Caller-owned frame copied at prepare; base must first be initialized.
Definition can.h:27
nx_can_frame_t frame
Definition can.h:29
nx_request_t base
Definition can.h:28
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
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.