类型化 I/O:设备与执行合同¶
这些声明来自公共头文件。选择、生命周期、支持的执行模式和物理资源授权范围仍以对应设计及支持记录为准。
model.h、spi_dma_model.h 和 rtc_lptim_model.h 中的 Native 模型控制供主机测试使用,不建立 MCU 硬件支持或设备探测能力。可选接口只描述被选择的合同;接口存在并不代表每个 provider 都支持。
adc.h¶
已审查的 ADC 单次采样与低速轮询扫描。
作者 Nexus Team
函数
-
nx_result_t nx_adc_port_info(const nx_adc_port_t *port, nx_adc_info_t *info)¶
查询固定、已审查的 ADC 序列与原始计数格式。
- 参数:
port – [in] 单次或低速扫描 provider。
info – [out] 分辨率、声明的参考值及序列长度。
- 返回:
成功或 INVALID。
-
nx_result_t nx_adc_port_sequence_info(const nx_adc_port_t *port, nx_adc_sequence_info_t *info)¶
读取固定通道顺序与完整扫描的时序事实。
- 参数:
port – [in] 已初始化且支持时序信息的 provider。
info – [out] 冷态只读事实;不会启动采集。
- 返回:
成功或 INVALID/STATE/UNSUPPORTED。
-
nx_result_t nx_adc_port_attach_observer(const nx_adc_port_t *port, nx_adc_observer_t *observer)¶
采集开始前附加可选观察者存储。
备注
分离或回收前,先停止并等待相关访问者退出。没有隐藏分配;轮询及有限模式无需观察存储。
- 参数:
port – [in] 已初始化的连续采集 provider,由一个任务所有者控制。
observer – [inout] 已初始化且稳定的调用方存储;传入 NULL 表示分离。provider 在启动时验证精确的 stream 数量。
- 返回:
成功或 BUSY/CONTEXT/UNSUPPORTED。
-
nx_result_t nx_adc_port_block_observation(const nx_adc_port_t *port, const nx_stream_block_t *block, nx_adc_observation_t *observation)¶
查询一个存活消费者借用的软件完成记录。
- 参数:
port – [in] 同一个稳定且支持观察的 provider。
block – [in] 同一 stream 当前已取得的不可变 block。
observation – [out] 复制的 epoch、序号、观察时间和间隙标志。这绝不是硬件采样孔径时间戳。
- 返回:
成功或 INVALID/STATE/UNSUPPORTED;拒绝时输出不变。
-
nx_result_t nx_adc_port_sample(const nx_adc_port_t *port, uint16_t *samples, size_t capacity, nx_time_us_t deadline, size_t *count)¶
通过有界轮询采样固定单次/扫描序列。
备注
采集持续占用 CPU,且仅限任务上下文。参考电压、采样误差和最大速率需要实物资格验证。
- 参数:
port – [inout] 唯一执行所有者;通道及采样时间配置固定。
samples – [out] 按配置通道顺序排列的原始计数。
capacity – [in] 样本容量至少为 channel_count。
deadline – [in] 时钟域中的绝对 deadline。
count – [out] 完整有效样本;其余输出保持不变。
- 返回:
成功或 INVALID/BUSY/TIMEOUT/IO;返回前完成中止及排空。不保留缓冲区,也不承诺 DMA、触发或流式能力。
-
nx_result_t nx_adc_port_stream_start(const nx_adc_port_t *port, nx_stream_t *stream, uint32_t trigger_hz)¶
使用调用者存储启动选定的触发/块采集。
备注
block 包含按通道顺序排列的原生 uint16_t 原始计数。容量及长度必须为完整扫描的整数倍;DMA 域、对齐和物理速率需要独立证据。
- 参数:
port – [in] 支持触发及 block 的 provider,由一个任务执行者控制。
stream – [inout] 已初始化、供消费者不可变访问的 block 机制。
trigger_hz – [in] 请求的完整扫描速率,为正值;超出所声明定时器或 ADC 能力的速率由 provider 拒绝。
- 返回:
缓冲区准入前返回成功或 INVALID/BUSY/UNSUPPORTED。
-
nx_result_t nx_adc_port_stream_stop(const nx_adc_port_t *port)¶
停止触发与内存写入源,不撤销消费者借用。
备注
消费者的 READY/BORROWED block 仍须排空或释放。
- 参数:
port – [in] 同一个采集执行者;BUSY 时保留存储。
- 返回:
成功证明源已分离;BUSY 保留生产者存储;仅支持轮询的 provider 返回 UNSUPPORTED。
-
nx_result_t nx_adc_port_stream_service(const nx_adc_port_t *port)¶
消费者排空后,显式恢复离散块采集。
备注
不会创建任务、重试或隐藏的重新 arm。block 模式明确说明触发间隙;连续无间隙捕获需要另外声明的硬件能力及资格验证。
- 参数:
port – [in] 与 start 和 stop 相同的唯一任务执行者。
- 返回:
引擎已 arm 时返回成功;源排空或空闲 block 背压期间返回 BUSY;采集停止后返回 STATE。
-
nx_result_t nx_adc_port_attach_wake(const nx_adc_port_t *port, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
检查发布者 IRQ 优先级后,附加可选提示接收端。
备注
先锁存 block 或错误条件,再通知。回收旧 sink 存储前,停止并等待发布者及等待者退出。
- 参数:
port – [in] 已初始化且支持 block 的 provider,由一个任务执行者控制。
wake – [in] 不可变的借用目标;NULL 表示分离。
syscall_ceiling – [in] 可选的额外未移位内核安全优先级数值下限;不得削弱生成策略。PRIMASK 内核目标要求为零。不调用内核时忽略。
- 返回:
成功或 CONTEXT/STATE/PERMISSION/UNSUPPORTED。
-
struct nx_adc_sequence_info_t¶
- #include <adc.h>
选定模式下不可变的完整扫描时序事实。
备注
sample_times 按通道顺序保存 sample_cycles 的采样码。scan_cycles 包含各通道的采样及转换周期。时钟声明和周期数描述调度,不建立电气精度或采样孔径时间戳的事实。数组在 provider 整个生命周期内保持有效。
-
struct nx_adc_ops_t¶
- #include <adc.h>
使用同一个提供者状态的共享只读方法。
备注
各方法遵循对应公共操作的所有权合同。缺失的可选方法返回 UNSUPPORTED。
公共成员
-
nx_result_t (*info)(const void *context, nx_adc_info_t *info)¶
-
nx_result_t (*sample)(void *context, uint16_t *samples, size_t capacity, nx_time_us_t deadline, size_t *count)¶
-
nx_result_t (*stream_start)(void *context, nx_stream_t *stream, uint32_t trigger_hz)¶
-
nx_result_t (*stream_stop)(void *context)¶
-
nx_result_t (*stream_service)(void *context)¶
-
nx_result_t (*attach_wake)(void *context, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
-
nx_result_t (*sequence_info)(const void *context, nx_adc_sequence_info_t *info)¶
-
nx_result_t (*attach_observer)(void *context, nx_adc_observer_t *observer)¶
-
nx_result_t (*block_observation)(const void *context, const nx_stream_block_t *block, nx_adc_observation_t *observation)¶
-
nx_result_t (*info)(const void *context, nx_adc_info_t *info)¶
adc_format.h¶
明确的整数采样表示与扫描布局。
作者 Nexus Team
枚举
-
enum nx_adc_encoding_t¶
整数编码;不隐式转换电压或浮点数。
取值:
-
enumerator NX_ADC_ENCODING_UNKNOWN¶
-
enumerator NX_ADC_UNSIGNED¶
-
enumerator NX_ADC_TWOS_COMPLEMENT¶
-
enumerator NX_ADC_ENCODING_UNKNOWN¶
-
enum nx_adc_byte_order_t¶
显式声明字节序,与执行代码的 CPU 无关。
取值:
-
enumerator NX_ADC_BYTE_ORDER_UNKNOWN¶
-
enumerator NX_ADC_LITTLE_ENDIAN¶
-
enumerator NX_ADC_BIG_ENDIAN¶
-
enumerator NX_ADC_BYTE_ORDER_UNKNOWN¶
函数
-
nx_result_t nx_adc_format_validate(const nx_adc_format_t *format)¶
验证完整的不可变布局,不读取采样存储。
- 参数:
format – [in] 可读、自然对齐的布局,由调用方保持有效。
- 返回:
SUCCESS 或 INVALID;不分配、不访问硬件,也不保留借用。
-
nx_result_t nx_adc_format_decode(const nx_adc_format_t *format, const void *samples, size_t bytes, size_t scan, size_t channel, int64_t *value)¶
从调用者拥有或消费者已取得的扫描数据中解码一个整数。
备注
不保留任何指针。输入、输出或 format 重叠,以及地址回绕的范围,均在访问前拒绝。样本装载的工作量有界,为 1..4 字节。此操作既不转换为经过校准的工程单位,也不与活跃生产者同步;消费者负责完成该访问的同步/退出等待。
- 参数:
format – [in] 有效且不可变、通道布局一致的扫描描述。
samples – [in] 可读存储;必须先等待所有生产者或 DMA 访问结束。
bytes – [in] 为 scan_stride 的正整数倍,包含填充。
scan – [in] 从零开始的完整扫描索引。
channel – [in] 按 provider 顺序从零开始的通道位置。
value – [out] 独立且已对齐的输出,被拒绝时保持不变。
- 返回:
SUCCESS 或 INVALID;全部 32 位无符号或有符号原始值均可容纳于 int64_t。
-
struct nx_adc_format_t¶
- #include <adc_format.h>
各通道存储格式一致的不可变整数布局,与 ADC 接口独立。
备注
storage_bytes 为 1..4;significant_bits 在该存储范围内为 1..32。lsb_bits 表示丢弃的低位,不是算术缩放因子。sample_stride 和 scan_stride 以字节计,包含显式填充。channel_count 保持 provider 另行声明的通道顺序。软件触发使用 identity0;硬件触发标识是非零、装配内局部的 ID,绝不是地址或物理时序承诺。group 或 trigger 声明描述 provider 已支持的模式;验证布局不会为设备增加支持,也不会配置设备。
公共成员
-
size_t sample_stride¶
-
size_t scan_stride¶
-
uint32_t trigger_identity¶
-
uint16_t channel_count¶
-
uint8_t storage_bytes¶
-
uint8_t significant_bits¶
-
uint8_t lsb_bits¶
-
nx_adc_encoding_t encoding¶
-
nx_adc_byte_order_t byte_order¶
-
nx_adc_group_t group¶
-
nx_adc_trigger_t trigger¶
-
size_t sample_stride¶
adc_group.h¶
可选的有限完整序列整数 ADC 采集。
作者 Nexus Team
函数
-
nx_result_t nx_adc_group_prepare(nx_adc_group_request_t *request, void *frames, size_t bytes, size_t frame_count, nx_time_us_t deadline)¶
准备调用者存储,不访问硬件,也不保留借用。
备注
请求与帧存储彼此独立。准备过程不读取样本字节,也不证明 DMA 域或芯片模式成立。复用前必须等待所有先前的观察者退出。拒绝 NX_DEADLINE_NEVER。
- 参数:
request – [inout] 已初始化为 READY,或已完全消费的 SETTLED 存储。
frames – [out] 已对齐、非空的原始输出,包含显式填充。
bytes – [in] 长度为正且地址不回绕的范围;由 provider 验证精确布局。
frame_count – [in] 正的完整帧数,不是原始 rank 数。
deadline – [in] 平台单调时间域中的有限绝对 deadline。
- 返回:
返回 SUCCESS 或 INVALID/STATE;被拒绝的请求保持不变。
-
nx_result_t nx_adc_group_submit(const nx_adc_group_port_t *port, nx_adc_group_request_t *request)¶
由唯一所有者接受并启动一次选定的有限采集。
备注
请求被接受后,调用方不得修改描述符;只有以 acquire 语义观察到 SETTLED 后,才能访问帧存储。预转换可能写入整个范围,但不会将预转换数据发布为有效数据。准入后的 arm 失败仍保留借用,直到实际排空。没有可信完成时间戳时,首次在 deadline 时刻或之后观察到完成即为 TIMEOUT。单帧 injected 配置有意防止第二次触发及 JDR 覆盖。
- 参数:
port – [in] 已初始化的选中接口,其保留配置事实不可变。
request – [inout] 精确处于 READY 的描述符及独占可写范围。
- 返回:
SUCCESS 表示已 ACCEPTED,包括立即进入 SETTLED 的失败。其他结果表示拒绝,不保留指针,也不留下新的残余效果。
-
nx_result_t nx_adc_group_cancel(const nx_adc_group_port_t *port, nx_adc_group_request_t *request)¶
开始取消,不撤销已接受的存储借用。
备注
最先出现的终结故障、取消或超时保持最终决定权。
- 参数:
port – [in] 同一个稳定的选中接口,并由串行化的特权任务调用。
request – [inout] 当前已接受且仍然存活的精确请求。
- 返回:
SUCCESS 表示开始或观察到取消,不代表已经 SETTLED。
-
nx_result_t nx_adc_group_service(const nx_adc_group_port_t *port)¶
推进有界的预转换、采集和排空,不包含隐藏等待。
备注
只要各源、ADC、DMA 或 IRQ 仍可能引用请求或输出,就不得回收它们。QUARANTINED 请求仍归当前所有者持有,可重试排空。
- 参数:
port – [in] 同一个稳定的选中接口,并由串行化的特权任务调用。
- 返回:
推进或结算后返回 SUCCESS;排空尚未完成时返回 BUSY;或返回错误并保留恢复责任。
-
nx_result_t nx_adc_group_stop(const nx_adc_group_port_t *port)¶
关闭准入,证明请求的源已排空后才报告空闲。
备注
停止不等于冷关闭:引脚、公共时钟、内部源使能和 provider 存储仍被保留,直到平台完成退出等待后关闭。
- 参数:
port – [in] 同一个稳定的选中接口,并由串行化的特权任务调用。
- 返回:
仅在最终请求分离后返回 SUCCESS;BUSY/IO 保留全部租约。
-
nx_result_t nx_adc_group_info(const nx_adc_group_port_t *port, nx_adc_group_info_t *info)¶
复制实际选定事实与当前保留的所有者状态。
备注
观察到空闲或故障不会释放请求或任何冷租约。
- 参数:
port – [in] 同一个已初始化的选中接口,由唯一任务执行者调用。
info – [out] 独立且已对齐的输出,被拒绝时保持不变。
- 返回:
返回 SUCCESS 或 INVALID/STATE/CONTEXT/UNSUPPORTED。
-
struct nx_adc_group_request_t¶
- #include <adc_group.h>
完整的原始帧存储跨度,具有明确的有限请求生命周期。
备注
base.transferred 统计完整帧,不统计字节或单个 rank。SUCCESS 表示恰好完成 frame_count 帧;错误时报告的保证有效帧数为零。部分 DMA/JEOC 进度不会发布为有效前缀。
公共成员
-
nx_request_t base¶
-
void *frames¶
独占的生产者存储,包含填充。
-
size_t bytes¶
精确等于 frame_count * info.format.scan_stride。
-
size_t frame_count¶
完整帧数量,必须为正且不超过选定上限。
-
nx_request_t base¶
-
struct nx_adc_group_info_t¶
- #include <adc_group.h>
冷态选定的 rank 顺序、实际整数布局与调度事实。
备注
数组属于不可变的选中配置事实,其生命周期长于此端口。物理 rank 可能是芯片勘误要求丢弃的填充;format 仅描述有效逻辑结果。不承诺隐式数据打包、工程单位、采样孔径时间戳或触发计数器。
公共成员
-
nx_adc_format_t format¶
-
const uint8_t *channels¶
逻辑 rank 顺序,包含重复项。
-
const uint8_t *sample_times¶
实际逐通道采样编码。
-
const uint16_t *sample_halfcycles¶
不可变的采样编码查找表。
-
size_t sample_code_count¶
-
uint32_t adc_clock_hz¶
-
uint32_t physical_scan_halfcycles¶
包含所有丢弃的 rank。
-
uint32_t timer_period_us¶
软件触发时为零;不表示采样孔径。
-
size_t max_frames¶
-
uint16_t physical_ranks¶
-
bool active¶
-
bool fault¶
-
bool quarantined¶
-
nx_adc_format_t format¶
-
struct nx_adc_group_ops_t¶
- #include <adc_group.h>
共享只读的选定方法;普通 ADC 方法表不增加。
备注
由一个特权任务串行化所有调用。IRQ 只在同一个唯一物理所有者中记录有界事实。不提供分配、池、隐式任务、自动重新 arm 或运行时发现。
公共成员
-
nx_result_t (*submit)(void *context, nx_adc_group_request_t *request)¶
-
nx_result_t (*cancel)(void *context, nx_adc_group_request_t *request)¶
-
nx_result_t (*service)(void *context)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*info)(const void *context, nx_adc_group_info_t *info)¶
-
nx_result_t (*submit)(void *context, nx_adc_group_request_t *request)¶
-
struct nx_adc_group_port¶
- #include <adc_group.h>
不可变的选定接口,多个实例共享同一 const 方法表。
备注
接口、上下文和配置的生命周期覆盖每个请求、向量及保留责任的关闭过程。现有普通 ADC 或 PWM/ADC 接口不得暴露同一个已租用的 ADC。工厂仅返回此既有对象。
adc_observer.h¶
调用者拥有的可选 ADC 发布观察。
作者 Nexus Team
宏定义
-
NX_ADC_OBSERVATION_DISCONTINUITY¶
函数
-
nx_result_t nx_adc_observer_initialize(nx_adc_observer_t *observer, nx_adc_observation_t *records, size_t count)¶
初始化全新、尚未借用的可选观察存储。
- 参数:
observer – [out] 已对齐的新控制对象,尚未发布给读者。
records – [out] 独立且已对齐、大小精确的记录数组。
count – [in] 正数量;必须等于选中 stream 的数量。
- 返回:
成功或 INVALID/CONTEXT;被拒绝的输出保持不变。
-
nx_result_t nx_adc_observer_bind(nx_adc_observer_t *observer, nx_stream_t *stream, const void *owner, size_t owner_size)¶
仅提供者可执行的冷绑定;第一次 DMA 借用之前验证每个元数据/载荷范围。
- 参数:
observer – [inout] 已初始化的独占观察控制对象。
stream – [in] 精确的已初始化 stream,且没有尚未归还的借用。
owner – [in] provider 稳定且完整的私有状态范围。
owner_size – [in] 正的精确状态字节数。
- 返回:
成功或 INVALID/BUSY,不留下部分保留的绑定。
-
nx_result_t nx_adc_observer_record(nx_adc_observer_t *observer, const nx_stream_fill_t *fill, nx_time_us_t observed_at)¶
仅提供者可执行的记录,必须先于对应的 release 发布。
- 参数:
observer – [inout] 已绑定、由精确生产者持有的控制对象。
fill – [in] 仍为 FILLING,且已证明内存目标已分离。
observed_at – [in] 同一时钟域中的软件观察。
- 返回:
成功或 STATE/EXHAUSTED,不允许标识回绕。
-
nx_result_t nx_adc_observer_read(const nx_adc_observer_t *observer, const nx_stream_block_t *block, nx_adc_observation_t *observation)¶
只读取当前已取得块的准确 epoch 记录。
- 参数:
observer – [in] 稳定且已绑定的观察控制对象。
block – [in] 同一 stream 中仍存活且不可变的消费者借用。
observation – [out] 完整副本;拒绝时不变。
- 返回:
成功;借用缺失、陈旧或已释放时返回 INVALID/STATE。
-
nx_result_t nx_adc_observer_unbind(nx_adc_observer_t *observer)¶
全部生产者/消费者借用完成 join 后,仅提供者可解除绑定。
- 参数:
observer – [inout] 稳定且已初始化的控制对象;允许 NULL。
- 返回:
成功,或返回 BUSY 并保留已绑定的 stream。
-
struct nx_adc_observation_t¶
- #include <adc_observer.h>
一个借用的软件观察,绝不表示采样孔径。
备注
observed_at 使用目标分离读回之后的平台单调时钟,包含 IRQ 递送及发布延迟。sequence 统计观察到的有效 block 记录,不统计定时器触发、样本或推测的漏失扫描。
-
struct nx_adc_observer_t¶
- #include <adc_observer.h>
调用者拥有的可选观察者控制与准确记录。
备注
附加前先初始化;内部字段属于一个生产者。记录和控制对象必须保持存活,直到 provider 成功停止且全部消费者归还借用。不会扩大默认 stream、slot 或有限 provider 的存储。
公共成员
-
nx_stream_t *stream¶
-
nx_adc_observation_t *records¶
-
size_t count¶
-
uint64_t sequence¶
-
bool discontinuity¶
-
nx_stream_t *stream¶
advanced_pwm.h¶
可选固定互补 PWM 与锁存刹车。
作者 Nexus Team
函数
-
nx_result_t nx_advanced_pwm_set_duty(const nx_advanced_pwm_t *port, uint32_t duty_ticks)¶
依据固定声明的 PSC/ARR 与互补通道对暂存占空比。
备注
影子 duty 在下一次 update 时生效。硬件死区编码必须精确表示冷配置的 tDTS 计数;PSC 不会缩放死区。此 API 不认证引脚时序。
- 参数:
port – [in] 一个串行化的特权任务所有者。
duty_ticks – [in] 从零到维护中的周期值,含两端。
- 返回:
SUCCESS 或 INVALID/STATE/CONTEXT;不重新配置基础时钟。
-
nx_result_t nx_advanced_pwm_start(const nx_advanced_pwm_t *port)¶
仅刹车未激活且无锁存故障时启用输出。
备注
禁止自动重新使能输出及不可逆的硬件 LOCK。break 绝不会静默重新启动输出。
- 参数:
port – [in] 已审查引脚、时钟及向量租约的特权任务所有者。
- 返回:
SUCCESS 或 BUSY/STATE/IO/CONTEXT;失败时保留所有权。
-
nx_result_t nx_advanced_pwm_stop(const nx_advanced_pwm_t *port)¶
禁用并读回主输出与两个通道源。
备注
冷装配保留已审查的非活动引脚及共享向量租约,直到成功且 IRQ 静止。已锁存的 break 在停止后仍保留。
- 参数:
port – [in] 特权任务所有者;不得并发调用 duty 或生命周期操作。
- 返回:
SUCCESS 证明输出源已分离;BUSY 保留责任。
-
nx_result_t nx_advanced_pwm_state(const nx_advanced_pwm_t *port, nx_advanced_pwm_state_t *state)¶
查询暂存占空比、实际启用状态与锁存刹车事实。
- 参数:
port – [in] 特权任务所有者。
state – [out] 独立可写的快照,绝不能是 provider 存储。
- 返回:
SUCCESS 或 INVALID/STATE/CONTEXT。
-
nx_result_t nx_advanced_pwm_clear_fault(const nx_advanced_pwm_t *port)¶
仅已禁用且 BKIN 未激活时清除软件故障。
备注
重新检查物理输入及待处理的硬件 break。应用恢复策略和外部电源安全由 Nexus 之外负责。
- 参数:
port – [in] 执行恢复的特权任务所有者。
- 返回:
SUCCESS 或 BUSY/STATE/IO/CONTEXT;不会使能输出。
-
struct nx_advanced_pwm_state_t¶
- #include <advanced_pwm.h>
计数使用固定预分频后的时钟;死区使用 tDTS。
-
struct nx_advanced_pwm_ops_t¶
- #include <advanced_pwm.h>
共享不可变控制;配置是冷装配事实。
公共成员
-
nx_result_t (*set_duty)(void *context, uint32_t duty_ticks)¶
-
nx_result_t (*start)(void *context)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*state)(const void *context, nx_advanced_pwm_state_t *state)¶
-
nx_result_t (*clear_fault)(void *context)¶
-
nx_result_t (*set_duty)(void *context, uint32_t duty_ticks)¶
-
struct nx_advanced_pwm¶
- #include <advanced_pwm.h>
不可变身份;控制器状态与配置必须在所有 IRQ 完全退出前保持有效。
can.h¶
经典 CAN 值帧与调用者拥有的邮箱请求。
作者 Nexus Team
宏定义
-
NX_CAN_LOSS_SOFTWARE¶
-
NX_CAN_LOSS_HARDWARE_LOWER_BOUND¶
-
NX_CAN_LOSS_SATURATED¶
-
NX_CAN_DLC_NORMALIZED¶
枚举
函数
-
nx_result_t nx_can_tx_prepare(nx_can_tx_request_t *request, const nx_can_frame_t *frame, nx_time_us_t deadline)¶
验证并复制经典帧到未被借用的请求存储。
备注
仅限任务所有者;失败时不保留引用,也不更改帧。
- 参数:
request – [inout] 已初始化为 READY 或已消费的 SETTLED 存储。
frame – [in] 在此复制的值;忽略 remote 帧数据字节。
deadline – [in] provider 时钟中的绝对 deadline,包含准入时间。
- 返回:
成功;非经典帧返回 INVALID;借用期间返回 STATE。
-
nx_result_t nx_can_port_submit(const nx_can_port_t *port, nx_can_tx_request_t *request)¶
将一个帧准入到三个硬件邮箱之一。
备注
串行化的特权任务所有者,进入时 IRQ 屏蔽位须清零。REJECTED 不保留任何内容。TXOK 加上硬件已完成或已空,才证明成功。
- 参数:
port – [in] 稳定且不可变的接口及私有存储。
request – [inout] READY 值请求,保持存活直到 SETTLED。
- 返回:
成功表示 ACCEPTED,不表示已完成线上发送;其他结果均为拒绝。
-
nx_result_t nx_can_port_cancel(const nx_can_port_t *port, nx_can_tx_request_t *request)¶
请求中止,不撤销请求借用。
备注
中止可能与真实发送竞争;已观察到 TXOK 时仍为 SUCCESS。中止失败保持 QUARANTINED,必须保持存储存活。
- 参数:
port – [in] 由串行任务执行者拥有的稳定接口。
request – [inout] 先前由本实例接受且仍存活的请求。
- 返回:
成功表示请求排空;无关请求返回 STATE。
-
nx_result_t nx_can_port_service(const nx_can_port_t *port)¶
处理锁存完成状态与绝对超时/排空截止时间。
备注
工作量限于三个邮箱/六帧;无 worker、阻塞或重放。
- 参数:
port – [in] 串行任务所有者接口,进入时屏蔽位须清零。
- 返回:
成功;启动前返回 STATE;非法调用者返回 CONTEXT。
-
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)¶
消费值事件,不覆盖此前尚未消费的事实。
备注
每次有界记录复制均以短临界区排除元数据并发访问;待发布的丢失边界排在较旧记录之后、后续帧之前。
- 参数:
port – [in] 稳定实例;此操作由一个任务消费者拥有。
events – [out] 调用方容量;不保留输出引用。
capacity – [in] 非零的事件记录数量。
count – [out] 已复制数量;EMPTY 表示没有可用记录。
- 返回:
成功、EMPTY、INVALID 或 CONTEXT。
-
nx_result_t nx_can_port_state(const nx_can_port_t *port, nx_can_state_t *state)¶
即使 RX 已满,仍复制权威错误/准入状态。
备注
仅限任务上下文,工作量有界;bus-off 被锁存,直到显式恢复。
- 参数:
port – [in] 存活的实例和存储。
state – [out] 不保留引用的值输出。
- 返回:
成功、INVALID 或 CONTEXT。
-
nx_result_t nx_can_port_stop(const nx_can_port_t *port)¶
关闭准入、中止 TX、撤离 IRQ/RX 发布者。
备注
绝不会为释放另一个所有者的借用而复位共享主控制器。推进后重试。成功表示 provider 不再访问 RX 或 wake 存储。
- 参数:
port – [in] 串行化的所有者;还须等待外部观察者退出。
- 返回:
硬件排空后成功;BUSY 保留请求、环及 wake 借用。
-
nx_result_t nx_can_port_recover(const nx_can_port_t *port)¶
bus-off 且完整排空之后,显式重新进入初始化。
备注
无自动恢复或重传;域及 filter 标识保持不变。
- 参数:
port – [in] 已启动的所有者,且不存在 active 或 quarantined TX slot。
- 返回:
有界硬件确认后成功;借用期间返回 BUSY。
-
nx_result_t nx_can_port_attach_wake(const nx_can_port_t *port, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
检查全部四个实际 IRQ 后,借用可选唤醒目标。
备注
无隐式 OS 策略;NULL 表示分离。wake 仅为提示。sink 必须同时支持任务中的 service/cancel 及可配置 IRQ 上下文。
- 参数:
port – [in] 串行任务所有者,已启动且屏蔽位清零。
wake – [in] 不可变目标,保持存活直到成功停止或分离。
syscall_ceiling – [in] 附加的 BASEPRI 数值阈值。
- 返回:
成功;较早发布者仍存活时返回 BUSY;或返回 PERMISSION、INVALID、CONTEXT。失败时不产生新借用。
-
struct nx_can_event_t¶
- #include <can.h>
值接收事实或有序丢失边界。
备注
时间戳是 IRQ 取得或报告时间,不是硬件 SOF。硬件 overrun 仅证明损失下限。原始 DLC 9..15 规范化为 8。
公共成员
-
nx_can_frame_t frame¶
-
nx_time_us_t timestamp_us¶
-
uint64_t lost¶
-
uint32_t flags¶
-
nx_can_event_kind_t kind¶
-
uint8_t fifo¶
-
uint8_t filter¶
-
uint8_t raw_dlc¶
-
nx_can_frame_t frame¶
-
struct nx_can_ops_t¶
- #include <can.h>
共享不可变操作;执行所有者串行执行 Task 方法。
公共成员
-
nx_result_t (*submit)(void*, nx_can_tx_request_t*)¶
-
nx_result_t (*cancel)(void*, nx_can_tx_request_t*)¶
-
nx_result_t (*service)(void*)¶
-
nx_result_t (*read_events)(void*, nx_can_event_t*, size_t, size_t*)¶
-
nx_result_t (*state)(void*, nx_can_state_t*)¶
-
nx_result_t (*stop)(void*)¶
-
nx_result_t (*recover)(void*)¶
-
nx_result_t (*attach_wake)(void*, const nx_irq_wake_t*, uint8_t)¶
-
nx_result_t (*submit)(void*, nx_can_tx_request_t*)¶
can_fd.h¶
可选 CAN FD 值接口与持续借用的硬件请求。
作者 Nexus Team
宏定义
-
NX_CAN_FD_TIMESTAMP_UNAVAILABLE¶
枚举
函数
-
nx_result_t nx_can_fd_tx_prepare(nx_can_fd_tx_request_t *request, const nx_can_fd_frame_t *frame, nx_time_us_t deadline)¶
验证精确帧并复制到尚未借用的请求存储。
备注
串行任务所有者。失败时不更改帧,也不建立借用。
- 参数:
request – [inout] 已初始化为 READY 或已消费的 SETTLED 存储。
frame – [in] 复制完整值,不保留此地址。
deadline – [in] provider 时钟中的绝对 deadline,包含准入时间。
- 返回:
成功;帧格式错误时返回 INVALID;借用期间返回 STATE。
-
nx_result_t nx_can_fd_port_submit(const nx_can_fd_port_t *port, nx_can_fd_tx_request_t *request)¶
将一个精确值准入物理硬件发送元素。
备注
串行化的特权任务,进入时屏蔽位须清零。准入不隐含软件 FIFO 顺序;硬件队列按 ID 仲裁。
- 参数:
port – [in] 稳定且不可变的选中控制器接口。
request – [inout] READY 请求,保留至以 acquire 语义观察到 SETTLED。
- 返回:
SUCCESS 表示 ACCEPTED;所有失败均无效果地拒绝。
-
nx_result_t nx_can_fd_port_cancel(const nx_can_fd_port_t *port, nx_can_fd_tx_request_t *request)¶
请求取消,同时保留已接受的存储借用。
备注
物理发送可能先于取消完成,此时仍为 SUCCESS。超时或取消不会释放存储。排空失败为 QUARANTINED。
- 参数:
port – [in] 由唯一任务执行者拥有的选中接口。
request – [inout] 先前由本实例接受的精确请求。
- 返回:
成功表示请求排空;STATE 表示拒绝无关请求。
-
nx_result_t nx_can_fd_port_service(const nx_can_fd_port_t *port)¶
处理有界的硬件事实与绝对截止时间进展。
备注
无隐藏 worker、重试或阻塞等待。wake 仍仅为提示。
- 参数:
port – [in] 串行化的特权任务接口,进入时屏蔽位须清零。
- 返回:
成功;不可用时返回 STATE;非法调用者返回 CONTEXT。
-
nx_result_t nx_can_fd_port_read_events(const nx_can_fd_port_t *port, nx_can_fd_event_t *events, size_t capacity, size_t *count)¶
将有序值事件复制到不会被持续借用的调用者输出存储。
备注
较早保留的记录排在待发布的丢失边界之前。接收存储已满或提示失败,都不得抹除协议状态。
- 参数:
port – [in] 稳定实例,由一个任务消费者使用。
events – [out] 可写输出,必须与全部借用存储不重叠。
capacity – [in] 正的完整输出事件记录数。
count – [out] 不保留引用的已复制数量,与 events 不重叠。
- 返回:
成功;EMPTY 表示复制数量为零;或返回 INVALID、STATE、CONTEXT。
-
nx_result_t nx_can_fd_port_state(const nx_can_fd_port_t *port, nx_can_fd_state_t *state)¶
复制权威的锁存协议状态与所有权状态。
备注
仅限任务上下文;事件环已满不会隐藏 bus-off 或错误状态。
- 参数:
port – [in] 稳定的选中实例,包括成功停止之后。
state – [out] 可写值,与全部已借用控制对象不重叠。
- 返回:
成功、INVALID 或 CONTEXT。绝不保留输出。
-
nx_result_t nx_can_fd_port_stop(const nx_can_fd_port_t *port)¶
关闭准入、排空发送借用并撤离 IRQ 发布者。
备注
绝不可复位共享外设域来撤销另一所有者。物理推进后重试。停止成功不代表观察者已退出。
- 参数:
port – [in] 唯一任务所有者;还须另行等待独立观察者退出。
- 返回:
成功释放 provider 借用;失败保留尚未完成的租约。
-
nx_result_t nx_can_fd_port_recover(const nx_can_fd_port_t *port)¶
完整排空发送后,恢复同一硬件身份。
备注
显式恢复绝不重放帧,也不重新分配共享 RAM。
- 参数:
port – [in] 已启动的任务所有者,且没有 pending 或 quarantined 请求。
- 返回:
有界确认后成功;借用期间返回 BUSY。
-
nx_result_t nx_can_fd_port_attach_wake(const nx_can_fd_port_t *port, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
验证实际启用的 IRQ 源后借用唤醒接收端。
备注
NULL 表示分离。拒绝时保留先前的 sink。通知必须有界,并在任务及可配置 IRQ 上下文中均合法。
- 参数:
port – [in] 唯一任务所有者,已启动且进入时屏蔽位清零。
wake – [in] 不可变 sink,保留直到成功分离或停止。
syscall_ceiling – [in] 附加的 BASEPRI 数值阈值。
- 返回:
成功;发布期间返回 BUSY;或返回 PERMISSION、INVALID、CONTEXT。
-
struct nx_can_fd_frame_t¶
- #include <can_fd.h>
具有精确字节长度的值帧,不使用原始或移位后的 DLC。
备注
FD 接受 0..8/12/16/20/24/32/48/64 字节;在线上不向上取整或填充。FD remote 帧及经典帧 BRS 无效。选中硬件模式不支持某种形式时,provider 可以拒绝该形式的合法值。
公共成员
-
uint32_t id¶
-
nx_can_format_t format¶
-
nx_can_frame_kind_t kind¶
-
uint8_t payload_bytes¶
-
bool brs¶
-
uint8_t data[64]¶
-
uint32_t id¶
-
struct nx_can_fd_event_t¶
- #include <can_fd.h>
已取得的值事件,包含观察到的发送者 ESI。
备注
acquired_us 是 provider 取得时间,绝不是 SOF。硬件计数器禁用时报告 raw0 及 TIMESTAMP_UNAVAILABLE。filter 是该帧格式 filter 列表中的硬件索引。硬件丢失证明的是下限;经典 DLC9..15 规范化为 8,并附带标志。
公共成员
-
nx_can_fd_frame_t frame¶
-
nx_time_us_t acquired_us¶
-
uint64_t lost¶
-
uint32_t flags¶
-
nx_can_event_kind_t kind¶
-
uint16_t hardware_timestamp¶
-
uint8_t fifo¶
-
uint8_t filter¶
-
uint8_t raw_dlc¶
-
bool error_passive¶
-
bool nonmatching¶
-
nx_can_fd_frame_t frame¶
-
struct nx_can_fd_ops_t¶
- #include <can_fd.h>
公共成员
-
nx_result_t (*submit)(void*, nx_can_fd_tx_request_t*)¶
-
nx_result_t (*cancel)(void*, nx_can_fd_tx_request_t*)¶
-
nx_result_t (*service)(void*)¶
-
nx_result_t (*read_events)(void*, nx_can_fd_event_t*, size_t, size_t*)¶
-
nx_result_t (*state)(void*, nx_can_fd_state_t*)¶
-
nx_result_t (*stop)(void*)¶
-
nx_result_t (*recover)(void*)¶
-
nx_result_t (*attach_wake)(void*, const nx_irq_wake_t*, uint8_t)¶
-
nx_result_t (*submit)(void*, nx_can_fd_tx_request_t*)¶
cycle_probe.h¶
显式选用的原始周期观察,不作经过时间承诺。
作者 Nexus Team
宏定义
-
NX_IO_CYCLE_PROBES¶
-
NX_IO_IRQ_PROBE_DECLARE(id)¶
-
NX_IO_IRQ_PROBE_BEGIN(id)¶
-
NX_IO_IRQ_PROBE_END(id)¶
函数
-
nx_result_t nx_io_cycle_probe_begin(nx_io_cycle_probe_t *probe, nx_io_cycle_token_t *token)¶
开始一次原始观察,不启用或复位 DWT。
备注
可配置 IRQ 或唯一任务执行者。probe 失败绝不可阻止真实 I/O 派发、取消、service 或保留责任的排空。
- 参数:
probe – [inout] 存活且独占、为零或先前已完成的 sidecar。
token – [inout] 为零或非活动的 token,必须与完整 probe 不重叠。
- 返回:
即使计数器不可用仍返回 SUCCESS;INVALID/STATE/BUSY 在访问计数器前拒绝。统计同一 probe 的重入。
-
nx_result_t nx_io_cycle_probe_end(nx_io_cycle_probe_t *probe, nx_io_cycle_token_t *token)¶
结束对应令牌,发布原始事实并移除其引用。
备注
不得仅从两个计数器值推导有效的 elapsed 或预算结论。
- 参数:
probe – [inout] 与 begin 使用的同一个稳定 sidecar。
token – [inout] 精确且仍活动的 token;不得并发修改。
- 返回:
返回 SUCCESS 或 INVALID;使用其他或非活动 token 时返回 STATE。
-
nx_result_t nx_io_cycle_probe_snapshot(const nx_io_cycle_probe_t *probe, nx_io_cycle_observation_t *out)¶
保存并恢复本地中断排除状态,在保护期间复制有界 IRQ 统计。
备注
仅限特权任务。恢复进入时的屏蔽状态。对于任务 service 生产者,采样须使用同一执行者,或先等待生产者退出;IRQ 屏蔽不会等待另一个被抢占任务退出。这不是 SMP 排他。屏蔽期间不访问 provider、payload、request 或计数器。
- 参数:
probe – [in] 稳定、位于同一 CPU 的 sidecar 及存活的生产者绑定。
out – [out] 独立且已对齐的复制结果;拒绝时不变。
- 返回:
返回 SUCCESS 或 INVALID;ISR 或非特权调用者返回 CONTEXT。
-
nx_result_t nx_uart_word_port_service_observed(const nx_uart_word_port_t *port, nx_io_cycle_probe_t *probe)¶
仅派发一个字服务步骤,可选记录原始观察。
备注
无额外 ops 表、worker、请求或 payload 引用。无效观察绝不阻止派发。调用方须证明完整私有状态、借用描述符及缓冲区均与观察存储不重叠;此 API 只知道接口或方法范围及 context 标识。
- 参数:
port – [in] 原有稳定接口、方法及唯一任务执行者。
probe – [inout] 可选的存活 sidecar;NULL 表示省略观察。
- 返回:
SUCCESS 仅证明派发;INVALID/UNSUPPORTED 描述接口情况。
-
nx_result_t nx_spi_dma_transaction_service_observed(const nx_spi_dma_transaction_port_t *port, nx_io_cycle_probe_t *probe)¶
仅派发一个完整 CS 区间的 DMA 服务步骤,并记录原始观察。
备注
不重叠及执行者规则与 word wrapper 相同。诊断失败不会释放 QUARANTINED 借用,也不改变结算决定权。
- 参数:
port – [in] 原有增强控制器及其唯一任务执行者。
probe – [inout] 可选、稳定且不重叠的 sidecar,或 NULL。
- 返回:
派发后返回 SUCCESS;无效接口返回 INVALID 或 UNSUPPORTED。
-
struct nx_io_cycle_observation_t¶
- #include <cycle_probe.h>
复制的原始计数器事实;可读不表示经过时间已知。
备注
一对值是模 2^32 的余数,包含抢占及 probe 开销。不建立回绕次数、复位、频率或 epoch 连续性。elapsed_known 始终为 false。没有任何字段证明预算已满足、IRQ 到达延迟、独占 CPU 时间或物理 WCET 上界。attempts 包含当前活动尝试;其他总计描述已完成尝试。总计采用饱和而非回绕。
-
struct nx_io_cycle_probe_t¶
- #include <cycle_probe.h>
可选的零初始化附属状态;默认提供者状态不增加。
备注
每个 sidecar 由一个物理向量或一个唯一任务执行者写入。不同嵌套向量必须使用不同 sidecar。NMI、HardFault、其他核及其他安全状态不得访问此存储。只有全部生产者、token 和读者退出后,才能复位或回收。
公共成员
-
nx_io_cycle_observation_t observation¶
-
nx_io_cycle_observation_t observation¶
-
struct nx_io_cycle_token_t¶
- #include <cycle_probe.h>
零初始化栈令牌;活动期间不得复制或重新绑定。
diagnostic.h¶
有效 request 快照具有非零 epoch 和有限 observed_at;其 deadline 可以为 NX_DEADLINE_NEVER,表示无期限。SERVICE 事实要求 last_service_at 与 observed_at 在同一单调时钟域中且均为有限值,maximum_service_gap_us 为有限正值。未知事实组保持未知。
显式复制事实解释待处理 I/O,不执行恢复。
作者 Nexus Team
宏定义
-
NX_IO_FACT_REQUEST¶
-
NX_IO_FACT_STREAM¶
-
NX_IO_FACT_LIFECYCLE¶
-
NX_IO_FACT_OWNER¶
-
NX_IO_FACT_SERVICE¶
-
NX_IO_FACT_OBSERVERS¶
-
NX_IO_FACT_ALL¶
-
NX_IO_DIAG_QUEUED¶
-
NX_IO_DIAG_ACTIVE¶
-
NX_IO_DIAG_DRAINING¶
-
NX_IO_DIAG_QUARANTINED¶
-
NX_IO_DIAG_SETTLED¶
-
NX_IO_DIAG_DEADLINE_REACHED¶
-
NX_IO_DIAG_NOT_STARTED¶
-
NX_IO_DIAG_STOPPING¶
-
NX_IO_DIAG_OWNER_CLOSED¶
-
NX_IO_DIAG_NO_FREE_SLOT¶
-
NX_IO_DIAG_OWNER_PENDING¶
-
NX_IO_DIAG_SERVICE_OVERDUE¶
-
NX_IO_DIAG_OBSERVERS_PENDING¶
-
NX_IO_DIAG_STREAM_OUTSTANDING¶
-
NX_IO_DIAG_STREAM_CURSOR_BUSY¶
-
NX_IO_DIAG_STREAM_LOSS¶
函数
-
nx_result_t nx_io_diagnose(const nx_io_diagnostic_facts_t *facts, nx_io_diagnostic_t *out)¶
分类给定观察,不访问实际 I/O。
备注
任务/IRQ 中执行固定有界工作,不访问 MMIO、不加锁、不分配、不执行 service 或恢复。deadline 与 quarantine 从不撤销已接受的借用。重用存储前,调用者仍必须排空控制路径并 join observer。
- 参数:
facts – [in] 稳定且对齐的副本;不保留指针。
out – [out] 已对齐输出,与全部输入区间分离。
- 返回:
返回 SUCCESS;事实格式错误或发生别名时返回 INVALID;service 时间倒退时返回 STATE。拒绝保持输出不变。
-
const char *nx_io_diagnostic_name(uint32_t finding)¶
可选的稳定原因 key,仅接受一个 finding 位。
备注
任务/IRQ 中执行固定工作量,不格式化或分配。
- 参数:
finding – [in] 一个 NX_IO_DIAG 标志,不能是组合掩码。
- 返回:
返回不可变静态文本;零、未知位或多个位返回 NULL。
-
struct nx_io_diagnostic_facts_t¶
- #include <diagnostic.h>
稳定的调用者副本,各事实组独立声明已知。
备注
request/stream 可以为 NULL;存在时对应事实组即已知。known 仅接受 LIFECYCLE、OWNER、SERVICE 和 OBSERVERS。置零的未知值不能建立 ready、健康或漏调 service 的事实。OWNER 字段只有在 owner observer 的 diagnostic_result 成功时才能来自该观察;它们描述准入与待处理工作,不解释 service 返回 BUSY 的原因。SERVICE 时间戳使用同一单调时钟域,两者均为有限值,maximum_service_gap_us 是声明的有限正预算。该函数不自行读取时钟。副本在本次调用期间保持稳定;不同设备的观察不必同时发生。
公共成员
-
const nx_request_observation_t *request¶
-
const nx_stream_observation_t *stream¶
-
uint32_t known¶
-
nx_time_us_t last_service_at¶
-
nx_time_us_t observed_at¶
-
nx_time_us_t maximum_service_gap_us¶
-
bool started¶
-
bool stopping¶
-
bool owner_accepting¶
-
bool owner_queued¶
-
bool owner_slot_available¶
-
bool observers_pending¶
-
const nx_request_observation_t *request¶
-
struct nx_io_diagnostic_t¶
- #include <diagnostic.h>
独立 finding 与不可用事实组。
备注
零 finding 不是健康证明。SETTLED 不建立 I/O 成功或 observer 已 join 的事实。未结清 stream 块包含生产者、ready 和消费者借用;cursor busy 仅描述普通 stream cursor。Loss 是此快照尚未发布的 stream 元数据,不是累计总数;发布会把它转移到之后的块中。
dma.h¶
显式 DMA 内存域、物理流与排空事实。
作者 Nexus Team
枚举
函数
-
nx_result_t nx_dma_buffer_validate(const nx_dma_memory_region_t *regions, size_t count, const void *data, size_t length, size_t alignment, nx_dma_direction_t direction)¶
验证整个缓冲区位于一个显式内存域内。
备注
任务或 IRQ 中的有界检查,无 MMIO、分配或副作用。
- 参数:
regions – [in] 不可变的 SoC 域,在此调用期间保持存活。
count – [in] 正的域数量。
data – [in] 调用方的非空缓冲区;此 helper 绝不借用它。
length – [in] 正字节长度,包含所有 DMA 访问。
alignment – [in] 非零且为 2 的幂的传输对齐。
direction – [in] 设备读取或写入所提供的内存。
- 返回:
成功;范围或对齐格式错误返回 INVALID;范围不在所需 DMA 域内返回 PERMISSION。
-
nx_result_t nx_dma_storage_validate(const nx_dma_memory_region_t *regions, size_t count, const void *storage, size_t capacity, size_t transfer_bytes, size_t alignment, size_t cache_line_bytes, nx_dma_direction_t direction)¶
检查显式拥有的 reservation 及其 DMA payload。
备注
任务/IRQ 中进行有界验证,不分配或操作 cache。调用者独占全部 cache line 和填充区域,直到排空并 acquire 观察到 SETTLED。此处仅验证几何,不能证明所有权,也不能替代 provider 准入、真实 cache 几何、模式长度检查或 cache 维护。取消不解除该义务。
- 参数:
regions – [in] 不可变且已复核的 SoC DMA 域,不保留。
count – [in] 正的域数量。
storage – [in] 调用者拥有的 reservation,与实际存活的借用区间分离。
capacity – [in] 完整 reservation 字节数,包含自有填充区域。
transfer_bytes – [in] 正的 payload 长度,不超过 capacity。
alignment – [in] 非零且为 2 的幂的传输对齐。
cache_line_bytes – [in] 零表示无 cache 约束;否则为已复核、二次幂的 cache line 大小,地址和 capacity 必须是其整数倍。辅助函数从不对区间取整。
direction – [in] 完整存储的设备访问权限。
- 返回:
返回 SUCCESS、INVALID 或 PERMISSION;不访问或借用内存。
-
nx_result_t nx_dma_resources_validate(const nx_dma_resource_t *resources, size_t count)¶
拒绝装配资源集合中重复的物理流。
备注
冷态冲突检查;选中 SoC 在使用前必须依据真实拓扑验证全部标识。此 helper 不推断芯片支持,也不分配。
- 参数:
resources – [in] 不可变资源列表,不保留引用。
count – [in] 资源数量;为零时允许 NULL 列表。
- 返回:
成功;非空列表为 NULL 或使用保留的零控制器时返回 INVALID;物理引擎重复时返回 BUSY。
-
nx_result_t nx_dma_drain_check(const nx_dma_drain_facts_t *facts)¶
分别要求 DMA 引擎、IRQ 与外设排空。
备注
provider 必须先观察实际寄存器及顺序,才能设置这些事实。此 helper 不会停止硬件。
- 参数:
facts – [in] provider 的观察结果;不保留引用。
- 返回:
仅在全部源已分离且空闲时成功;任何源仍存在时返回 BUSY;不可能的计数器值返回 INVALID。
-
struct nx_dma_memory_region_t¶
- #include <dma.h>
已审查的 DMA 可见内存区间,不等同于 CPU 可访问性。
备注
begin 加 size 不得回绕。在带缓存的架构上,缓存维护仍是 provider 的责任。
encoder.h¶
可选的原始模数正交编码器观察。
作者 Nexus Team
枚举
函数
-
nx_result_t nx_encoder_start(const nx_encoder_t *port)¶
仅启用冷装配选定的两个编码器输入与计数器。
备注
provider 绝不在运行时改变引脚、速率、滤波或模式。时钟、引脚及向量租约从冷装配一直保持到关闭。
- 参数:
port – [in] 一个串行化的特权 Thread-mode 所有者。
- 返回:
SUCCESS 或错误;写入失败保留恢复责任。
-
nx_result_t nx_encoder_stop(const nx_encoder_t *port)¶
观察计数器与输入源均已撤离后才返回。
备注
停止保留原始位置,不释放冷资源。
- 参数:
port – [in] 同一个串行化的特权 Thread-mode 所有者。
- 返回:
SUCCESS 证明源已撤回;失败保留会话。
-
nx_result_t nx_encoder_read(const nx_encoder_t *port, nx_encoder_sample_t *sample)¶
读取一个模数位置,不推断跨回绕的行程。
备注
observed_at 是软件观察时间,不是传感器边沿采样孔径。方向、速度、机械零位及无界有符号位置,需要外部采样约束和产品策略。一次读取无法重建漏掉的完整回绕。单独读取的 DIR 位不是原子边沿历史。
- 参数:
port – [in] 串行化的特权 Thread-mode 所有者。
sample – [out] 已对齐的独立输出;拒绝时不变。
- 返回:
返回 SUCCESS 或 INVALID/STATE/CONTEXT/UNSUPPORTED。
-
nx_result_t nx_encoder_state(const nx_encoder_t *port, nx_encoder_state_t *state)¶
报告精确计数器位宽与选定的硅片过滤器编码。
备注
滤波码及其内核时钟不构成抗噪声、物理边沿速率或传感器及 Board 电气行为的资格结论。
- 参数:
port – [in] 串行化的特权 Thread-mode 所有者。
state – [out] 已对齐的独立输出;拒绝时不变。
- 返回:
返回 SUCCESS 或 INVALID/STATE/CONTEXT/UNSUPPORTED。
-
struct nx_encoder_ops_t¶
- #include <encoder.h>
共享方法;无环形缓冲、请求、分配、回调或工作线程。
公共成员
-
nx_result_t (*start)(void *context)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*read)(void *context, nx_encoder_sample_t *sample)¶
-
nx_result_t (*state)(const void *context, nx_encoder_state_t *state)¶
-
nx_result_t (*start)(void *context)¶
entropy.h¶
熵源接口提供有界、通过健康检查的源数据字。nx_entropy_fill 使用有限绝对截止时间;读取失败时擦除本次已准入的全部输出。它不分配内存、不创建工作线程,也不证明熵质量;它不是 DRBG。存在熵源不代表密码库可以按完整熵含量计入信用。时钟与关闭前提见显式 F407 构造器。GD32 熵源尚未实现。
显式熵源与有限的完整填充或全部擦除操作。
作者 Nexus Team
类型定义
-
typedef struct nx_entropy_port nx_entropy_port_t¶
含私有可变状态的静态双指针源接口。
备注
调用方串行化使用和生命周期;接口、方法表和状态必须存活至每次调用结束。返回后不保留缓冲区或请求。源启用、时钟依赖、恢复和停止由显式生命周期所有者负责,不由 TLS 或此接口负责。
函数
-
nx_result_t nx_entropy_port_try_read(const nx_entropy_port_t *port, uint32_t *word)¶
尝试复制一个完整源数据字,不等待。
备注
公共存储区间无效时,在访问 provider 前拒绝。此包装层无法推断不透明上下文的范围;调用方证明其完整区间互不重叠。provider 拒绝时绝不使用固定值或时间戳代替熵。
- 参数:
port – [in] 在其串行任务执行器中使用的有效只读接口
word – [out] 自然对齐的可写数据字,与接口、方法表及完整 provider 私有状态互不重叠
- 返回:
SUCCESS、BUSY、IO、STATE、INVALID 或 UNSUPPORTED
-
nx_result_t nx_entropy_fill(const nx_entropy_port_t *port, void *output, size_t bytes, const nx_clock_t *clock, nx_time_us_t deadline)¶
在有限截止时间前恰好填满请求的字节。
备注
仅限任务上下文的同步轮询;无堆、工作线程或 OS 等待。BUSY 导致下一次受时钟约束的轮询。所提供时钟必须在整个调用期间持续推进;更换时间域或停止计时器违反合同。拒绝 NX_DEADLINE_NEVER。完整数据字按最低有效字节在前输出;最后一个字中未用的字节被丢弃。零字节请求验证接口与时钟,但不访问时钟或源,并允许 NULL 输出。准入前拒绝保持输出不变。准入后任何错误均通过 volatile 写擦除全部输出;不得消费部分熵。输出与接口、方法表、时钟及其全部有效不透明上下文互不重叠。本函数检测已知区间别名,不推断不透明对象的范围。调理、DRBG 和信任策略由密码库负责。
- 参数:
port – [in] 有效的串行化源;不得并发生命周期变更
output – [out] 可写字节区间;仅零字节时允许 NULL
bytes – [in] 所需输出的准确大小,不是熵含量估计
clock – [in] 单一稳定时间域内有效的单调微秒时钟
deadline – [in] 该时间域内的有限绝对截止时间
- 返回:
仅完整填充返回 SUCCESS;否则为 TIMEOUT、IO、STATE 或源错误;准入前拒绝返回 INVALID/UNSUPPORTED
-
struct nx_entropy_ops_t¶
- #include <entropy.h>
共享的只读熵源方法。
备注
try_read 仅限任务上下文且执行有界,从不等待硬件。SUCCESS 复制一个完整、通过健康检查的 32 位数据字;BUSY 表示尚无数据字,IO 表示源或健康检查失败,STATE 表示不可用或已关闭。失败保持输出不变。provider 负责硬件健康检查与首样本处理。不隐含确定性回退、调理、DRBG 或密码学认证。
公共成员
-
nx_result_t (*try_read)(void *context, uint32_t *word)¶
-
nx_result_t (*try_read)(void *context, uint32_t *word)¶
ethernet.h¶
调用者拥有的无标签 Ethernet II 帧与接收借用。
作者 Nexus Team
宏定义
-
NX_ETH_FRAME_MIN¶
-
NX_ETH_FRAME_MAX¶
-
NX_ETH_RX_STORAGE_MIN¶
-
NX_ETH_RX_CRC¶
-
NX_ETH_RX_LENGTH¶
-
NX_ETH_RX_FRAGMENT¶
-
NX_ETH_RX_UNSUPPORTED¶
-
NX_ETH_RX_DMA_ERROR¶
-
NX_ETH_RX_BACKPRESSURE¶
函数
-
nx_result_t nx_eth_tx_prepare(nx_eth_tx_request_t *request, const void *data, size_t length, nx_time_us_t deadline)¶
准备已初始化、未借用的请求及不可变帧。
备注
任务所有者。仅支持 Ethernet II,不含 FCS 时为 14..1514 字节;不支持 VLAN 或以长度编码的 802.3。失败时不修改请求或 payload。
- 参数:
request – [inout] 已初始化为 READY 或已消费的 SETTLED 存储。
data – [in] 不可变、连续的 Ethernet II 帧。
length – [in] 不含 FCS 的字节数,范围为 14..1514。
deadline – [in] provider 时钟中的绝对 deadline,或 NEVER。
- 返回:
成功;帧或重叠问题返回 INVALID;借用期间返回 STATE。
-
nx_result_t nx_eth_port_submit(const nx_eth_port_t *port, nx_eth_tx_request_t *request)¶
将一个帧准入到调用者拥有的硬件描述符。
备注
串行化的特权任务,屏蔽位清零。SUCCESS 表示 ACCEPTED。借用包含请求和帧,直到以 acquire 语义观察到 SETTLED。完成报告 MAC 线上状态,绝不表示另一应用已收到数据。
- 参数:
port – [in] 稳定接口及存活的私有装配。
request – [inout] 已准备的存储,在接受时借用。
- 返回:
成功表示 ACCEPTED;BUSY/STATE/IO 或无效输入均为拒绝。
-
nx_result_t nx_eth_port_cancel(const nx_eth_port_t *port, nx_eth_tx_request_t *request)¶
关闭 TX 准入并排空共享 TX 引擎,不重放传输。
备注
任务所有者。取消作用于整个控制器:其他待处理 TX 请求也变为 CANCELLED。绝不撤销借用。源卡住时进入隔离。成功排空后,重新应用已确认的链路事实,才重新开放 TX。
- 参数:
port – [in] 串行任务所有者接口。
request – [inout] 由本实例接受且仍存活的请求。
- 返回:
成功表示请求排空;外来请求返回 STATE。
-
nx_result_t nx_eth_port_service(const nx_eth_port_t *port)¶
Task 所有者有界推进;不含执行任务、锁、池或等待。
- 参数:
port – [in] 串行任务所有者接口及存活的存储。
- 返回:
成功;启动前返回 STATE;或返回无效上下文或输入错误。
-
nx_result_t nx_eth_port_acquire(const nx_eth_port_t *port, nx_eth_rx_frame_t *frame)¶
Task 消费者取得完整帧借用;EMPTY 不产生借用。
- 参数:
port – [in] 稳定且已启动的实例,以及一个消费者。
frame – [out] 精确且不可变的帧借用,而非对输出存储的借用。
- 返回:
成功;EMPTY 表示未取得借用;或返回无效状态或上下文错误。
-
nx_result_t nx_eth_port_release(const nx_eth_port_t *port, const nx_eth_rx_frame_t *frame)¶
消费者最后一次访问;拒绝过期、外来及重复释放。
备注
已持有的描述符绝不重新 arm,即使环回绕或停止时也不例外。
- 参数:
port – [in] 与取得借用时相同的 provider 标识。
frame – [in] 消费者最后一次访问结束后的精确已取得 token。
- 返回:
成功;token 被修改时返回 STATE;或返回无效输入或上下文错误。
-
nx_result_t nx_eth_port_state(const nx_eth_port_t *port, nx_eth_state_t *state)¶
复制锁存的实例/链路/错误事实;不保留输出。
- 参数:
port – [in] 稳定的私有实例。
state – [out] 不保留引用的输出,与全部 provider 存储分离。
- 返回:
成功;输出别名返回 INVALID;或返回 CONTEXT。
-
nx_result_t nx_eth_port_apply_link(const nx_eth_port_t *port, const nx_eth_link_t *link)¶
应用外部 PHY 观察,不自动协商或虚构链路。
备注
任务所有者;更改速率或双工模式前,必须显式 link-down,并观察到 TX/RX 引擎及 FIFO 空闲。BUSY 保留旧模式。重新应用未改变的 up 事实是幂等操作。link-down 关闭准入,以 IO 排空待处理 TX;后续 up 要求真实静止。这不构成 PHY 电源、复位或电气证明。
- 参数:
port – [in] 串行任务所有者接口。
link – [in] 已观察的 up、速率及双工事实,绝非猜测。
- 返回:
成功;真实排空前返回 BUSY;或返回 STATE/IO/上下文错误。
-
nx_result_t nx_eth_port_stop(const nx_eth_port_t *port)¶
关闭准入,通过读回确认撤离 MAC/DMA/IRQ 源。
备注
任务所有者。关闭时拒绝新的 RX 借用;既有借用仍可释放。BUSY 保留硬件、存储及 wake 所有权;超时隔离待处理 TX。已持有的 RX 借用仍有效,必须在 SUCCESS 前释放。调用方回收存储前,须等待 IRQ 及消费者退出。
- 参数:
port – [in] 存活的接口和全部存储,包含已持有借用。
- 返回:
成功释放各源;BUSY/IO 保留剩余所有权。
-
nx_result_t nx_eth_port_attach_wake(const nx_eth_port_t *port, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
验证实际 IRQ 策略后绑定可选借用提示。
备注
没有待处理 TX 的任务所有者;notify 必须有界,并在 IRQ 中合法。service 不会在任务中调用 IRQ 提示。停止后再分离。
- 参数:
port – [in] 已启动的串行任务所有者接口。
wake – [in] 借用的 IRQ 提示;NULL 表示请求分离。
syscall_ceiling – [in] 精确配置的未移位 syscall 数值阈值。
- 返回:
成功;发布者存活时返回 BUSY;或返回策略或上下文错误。
-
struct nx_eth_tx_request_t¶
- #include <ethernet.h>
调用者拥有的不可变连续帧,不含硬件 FCS。
-
struct nx_eth_link_t¶
- #include <ethernet.h>
观察到的 PHY 事实,由外部链路所有者显式供给。
-
struct nx_eth_rx_frame_t¶
- #include <ethernet.h>
完整不可变帧;释放必须匹配准确实例世代。
备注
data 不含 FCS;存储保持存活直到匹配的 release。复制 token 不会建立第二个借用。时间戳为取得时间,不是 SOF。
-
struct nx_eth_state_t¶
- #include <ethernet.h>
锁存事实不因接收背压或唤醒提示失败而丢失。
-
struct nx_eth_ops_t¶
- #include <ethernet.h>
公共成员
-
nx_result_t (*submit)(void*, nx_eth_tx_request_t*)¶
-
nx_result_t (*cancel)(void*, nx_eth_tx_request_t*)¶
-
nx_result_t (*service)(void*)¶
-
nx_result_t (*acquire)(void*, nx_eth_rx_frame_t*)¶
-
nx_result_t (*release)(void*, const nx_eth_rx_frame_t*)¶
-
nx_result_t (*state)(void*, nx_eth_state_t*)¶
-
nx_result_t (*apply_link)(void*, const nx_eth_link_t*)¶
-
nx_result_t (*stop)(void*)¶
-
nx_result_t (*attach_wake)(void*, const nx_irq_wake_t*, uint8_t)¶
-
nx_result_t (*submit)(void*, nx_eth_tx_request_t*)¶
-
struct nx_eth_port¶
- #include <ethernet.h>
ethernet_frames.h¶
可选的 scatter-gather 帧及 MAC 时钟借用。
作者 Nexus Team
备注
实物资格验证与软件验证彼此独立。
宏定义
-
NX_ETH_FRAMES_CAPTURE_CORRUPT¶
捕获诊断;UNKNOWN 时间戳仍不能用于测量。
函数
-
nx_result_t nx_eth_frames_tx_prepare(nx_eth_frames_tx_request_t *request, const nx_eth_fragment_t *fragments, size_t fragment_count, bool timestamp, nx_time_us_t deadline)¶
准备尚未借用的请求存储,不产生硬件效果。
备注
串行任务所有者。验证非空 fragment、溢出及跨 fragment 的完整 Ethernet II 头;允许一个带内 C-tag。不含 FCS 时,无标签长度为 14..1514,带标签长度为 18..1518。由硬件插入填充及 FCS。拒绝以长度编码的 802.3、QinQ 及 0x88A8。失败时保留请求原状,不保留引用。deadline 为 provider 的绝对单调时间,与 PTP 时钟域不同。
-
nx_result_t nx_eth_frames_port_submit(const nx_eth_frames_port_t *port, nx_eth_frames_tx_request_t *request)¶
验证全部存储与槽后,才 ACCEPT 一个完整帧。
备注
特权且未屏蔽中断的任务所有者;无池、堆、worker 或 OS 锁。REJECTED 不保留引用或 OWN 效果。ACCEPTED 借用请求、fragment 数组及每段 payload,直到以 acquire 语义观察到 SETTLED。归还一个描述符不证明线上发送完成。仅在已证明 MAC 成功时,transferred 才为完整帧字节数,否则为零。
-
nx_result_t nx_eth_frames_port_cancel(const nx_eth_frames_port_t *port, nx_eth_frames_tx_request_t *request)¶
请求控制器范围内的 TX 撤离,不重放。
备注
其他待处理 TX 也会取消;已观察到的线上发送成功可以优先成立。取消绝不撤销借用。缺少排空证明时保留 QUARANTINED 借用。不会复位共享的 MAC/PTP/RX 所有者。
-
nx_result_t nx_eth_frames_port_service(const nx_eth_frames_port_t *port)¶
有界的任务进展;IRQ 每次在每个方向上最多处理一个描述符。
-
nx_result_t nx_eth_frames_port_acquire(const nx_eth_frames_port_t *port, nx_eth_frames_rx_loan_t *loan, nx_eth_fragment_t *fragments, size_t capacity)¶
按完整帧容量准入,取得一个完整帧。
备注
一个任务消费者。EMPTY 不建立借用;views 太少时返回 OVERFLOW,完整帧仍留在队列中,全部输出不变。停止关闭新取得操作。已持有描述符在回绕或停止时均不重新 arm。
-
nx_result_t nx_eth_frames_port_release(const nx_eth_frames_port_t *port, const nx_eth_frames_rx_loan_t *loan)¶
消费者的最终访问;拒绝过期、被修改、外来或重复释放。
-
nx_result_t nx_eth_frames_port_state(const nx_eth_frames_port_t *port, nx_eth_frames_state_t *state)¶
将锁存事实复制到不保留的输出;输出与全部借用存储不重叠。
-
nx_result_t nx_eth_frames_port_clock(const nx_eth_frames_port_t *port, nx_io_timestamp_t *stamp)¶
在硬件计数器自身时钟域中读取一致的当前计数。
备注
既不提供时钟同步、UTC 映射或 PHY 补偿,也不以取得时间作为回退值。source 为 SERVICE_OBSERVATION,不是 SFD 事件。所有者扩展秒回绕,拒绝回退、溢出及有歧义的间隔;ticks 为纳秒,rate 为 1e9,不确定度未知。
-
nx_result_t nx_eth_frames_port_apply_link(const nx_eth_frames_port_t *port, const nx_eth_link_t *link)¶
在真实 TX/RX 静默后应用显式的外部 PHY 观察。
-
nx_result_t nx_eth_frames_port_stop(const nx_eth_frames_port_t *port)¶
关闭准入,证明 DMA/MAC/IRQ 已撤离后才释放。
备注
已持有的 RX 借用及已取得引用的发布者保留所有权。任何失败均保留未完成租约。不得冲洗非空 TX FIFO 来伪造静止。调用方还须分别等待全部外部生产者、消费者及观察者退出。
-
nx_result_t nx_eth_frames_port_recover(const nx_eth_frames_port_t *port, nx_time_us_t deadline)¶
排空失败后,由独占 MAC 所有者显式恢复。
备注
任务所有者;使用有限绝对 deadline。存在已持有 RX 借用或已取得引用的发布者时,返回 BUSY 且不复位。已分离的待处理 TX 以其锁定的终结原因结算前,必须确认复位;没有实际状态时绝不报告线上成功。无自动重放。复位使旧硬件时钟 epoch 失效,并记录 RX 间隙。源失败或超时保留 QUARANTINED 借用及恢复责任。
-
nx_result_t nx_eth_frames_port_attach_wake(const nx_eth_frames_port_t *port, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
可选的借用 IRQ 提示;验证实际优先级,撤离引用并等待发布者退出。
-
struct nx_eth_fragment_t¶
- #include <ethernet_frames.h>
不可变的 TX 片段;其字节持续借用至 SETTLED。
-
struct nx_eth_vlan_t¶
- #include <ethernet_frames.h>
单个带内 0x8100 C-tag;TCI 使用主机字节序,含 PCP/DEI/VID。
-
struct nx_eth_frames_tx_request_t¶
- #include <ethernet_frames.h>
一个完整 L2 帧,不含前导码、硬件填充和硬件 FCS。
备注
ACCEPTED 后,fragment 数组及每个 fragment 均保持借用。请求 TX 捕获是可选的:即使线上成功,时间戳仍可能不可用或损坏。仅在以 acquire 语义观察到 SETTLED 后读取时间戳。
公共成员
-
nx_request_t base¶
-
const nx_eth_fragment_t *fragments¶
-
size_t fragment_count¶
-
bool timestamp_requested¶
-
nx_io_timestamp_t stamp¶
-
uint32_t capture_flags¶
-
nx_request_t base¶
-
struct nx_eth_frames_rx_loan_t¶
- #include <ethernet_frames.h>
一个帧全部描述符上的完整接收借用。
备注
输出 fragment views 不包含 FCS,即使 FCS 跨越两个缓冲区。views 数组是不保留引用的输出;底层字节在精确 release 前保持不可变。复制此 token 不建立借用。
公共成员
-
const void *identity¶
-
uint64_t epoch¶
-
size_t first_slot¶
-
size_t descriptor_count¶
-
size_t fragment_count¶
-
size_t length¶
-
nx_time_us_t acquired_us¶
-
nx_io_timestamp_source_t acquired_source¶
-
nx_eth_vlan_t vlan¶
-
nx_io_timestamp_t stamp¶
-
uint32_t capture_flags¶
-
const void *identity¶
-
struct nx_eth_frames_state_t¶
- #include <ethernet_frames.h>
锁存的引擎事实与选定时钟 epoch,不是协议状态。
-
struct nx_eth_frames_ops_t¶
- #include <ethernet_frames.h>
公共成员
-
nx_result_t (*submit)(void*, nx_eth_frames_tx_request_t*)¶
-
nx_result_t (*cancel)(void*, nx_eth_frames_tx_request_t*)¶
-
nx_result_t (*service)(void*)¶
-
nx_result_t (*acquire)(void*, nx_eth_frames_rx_loan_t*, nx_eth_fragment_t*, size_t)¶
-
nx_result_t (*release)(void*, const nx_eth_frames_rx_loan_t*)¶
-
nx_result_t (*state)(void*, nx_eth_frames_state_t*)¶
-
nx_result_t (*clock)(void*, nx_io_timestamp_t*)¶
-
nx_result_t (*apply_link)(void*, const nx_eth_link_t*)¶
-
nx_result_t (*stop)(void*)¶
-
nx_result_t (*recover)(void*, nx_time_us_t)¶
-
nx_result_t (*attach_wake)(void*, const nx_irq_wake_t*, uint8_t)¶
-
nx_result_t (*submit)(void*, nx_eth_frames_tx_request_t*)¶
-
struct nx_eth_frames_port¶
- #include <ethernet_frames.h>
exti.h¶
静态 EXTI 线路绑定、有界事件存储与排空。
作者 Nexus Team
枚举
函数
-
nx_result_t nx_exti_port_read(const nx_exti_port_t *port, nx_exti_event_t *events, size_t capacity, size_t *count)¶
从准确静态线路绑定读取排队 EXTI 事件。
- 参数:
port – [inout] 一个消费者;按配置有界的 IRQ 生产者存储。
events – [out] 调用方目的存储,绝不保留引用。
capacity – [in] 目的事件数量。
count – [out] 已复制事件;可通过事件标志观察丢失。
- 返回:
成功、EMPTY 或 INVALID。不提供消抖策略或回调。
-
nx_result_t nx_exti_port_stop(const nx_exti_port_t *port)¶
禁用线路源、清除 pending 并排空处理函数。
备注
撤回失败时,可能已经禁用了部分源。回收事件或 wake 存储前须重试并观察到成功。共享派发域仍引用接口或状态期间,二者均须保持存活。
- 参数:
port – [inout] 执行所有者;消费者及写入者必须先静止。
- 返回:
成功证明不再访问事件存储;BUSY 或 IO 保留存储、wake 目标及清理责任。共享向量保留其他线路。
-
nx_result_t nx_exti_port_attach_wake(const nx_exti_port_t *port, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
附加或解除显式事件/丢失 IRQ 唤醒目标。
备注
实际共享向量优先级必须满足目标要求。释放旧目标存储前,先停止并等待发布者退出。wake 回调观察的是已锁存的事件或丢失事实。
- 参数:
port – [in] 已初始化的 line,由一个任务执行者控制。
wake – [in] 不可变且存活的目标;NULL 表示分离。
syscall_ceiling – [in] 可选的额外未移位内核安全优先级数值下限;不得削弱生成策略。PRIMASK 内核目标要求为零。不调用内核时忽略。
- 返回:
成功或 CONTEXT/STATE/PERMISSION/UNSUPPORTED。
-
struct nx_exti_event_t¶
- #include <exti.h>
边沿事实;时间戳精度与合并行为由提供者决定。
备注
LOSS 是独立边界,排在较旧缓冲事实之后、后续事实之前。其 edge 无效;时间戳为检测或报告时间,绝不重建丢失边沿。对于 COALESCED 事实,edge 可能由 IRQ 后采样的引脚电平推导,不代表完整边沿历史。
-
struct nx_exti_ops_t¶
- #include <exti.h>
使用同一个提供者状态的共享只读方法。
备注
各方法遵循对应公共操作的所有权合同。缺失的可选方法返回 UNSUPPORTED。
公共成员
-
nx_result_t (*read)(void *context, nx_exti_event_t *events, size_t capacity, size_t *count)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*attach_wake)(void *context, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
-
nx_result_t (*read)(void *context, nx_exti_event_t *events, size_t capacity, size_t *count)¶
flash.h¶
完整物理 Flash 几何与显式有界区域。
作者 Nexus Team
枚举
函数
-
const nx_flash_geometry_t *nx_flash_port_geometry(const nx_flash_port_t *port)¶
无副作用地查询准确物理 Flash 几何。
- 参数:
port – [in] 选中的精确密度物理 Flash provider。
- 返回:
不可变几何信息;端口无效时返回 NULL。
-
nx_result_t nx_flash_port_read(const nx_flash_port_t *port, uint32_t offset, void *data, size_t length)¶
有界读取物理 Flash,不保留目标存储。
- 参数:
port – [in] 固定 provider;不得并发擦除或编程。
offset – [in] 物理相对偏移。
data – [out] 目标存储;返回后不再保留。
length – [in] 字节数;为零时允许 data 为 NULL。
- 返回:
成功或 INVALID;范围被拒绝或发生回绕时不进行访问。
-
nx_result_t nx_flash_port_program(const nx_flash_port_t *port, uint32_t offset, const void *data, size_t length, nx_time_us_t deadline)¶
对齐编程物理 Flash,并结清全部硬件脉冲。
备注
仅限任务上下文、由 CPU 主动执行的操作。从 Flash 执行时的停顿、看门狗和掉电策略由产品负责。MCU 上不以 RAM 模拟 Flash。
备注
使用 NX_FLASH_PROGRAM_REQUIRES_FRESH_ERASE 时,每个待编程单元必须经过成功擦除,且擦除后尚未经历任何编程脉冲。在带 ECC 的 Flash 上,读到全 0xff 不能证明这一点。失败或中断的脉冲会消耗该单元,直到下次成功擦除所属扇区。调用方负责此来源证明;provider 不维护隐式擦除历史位图。
备注
输入全为 0xff 的单元不得触发编程脉冲。provider 可以拒绝从可见内容判断尚未擦除的目标。
- 参数:
port – [inout] 具有有效电压/时钟策略的唯一执行所有者。
offset – [in] 按编程单元对齐的物理偏移。
data – [in] 长度已对齐的输入,仅借用到返回。
length – [in] 正的编程单元整数倍。
deadline – [in] 在硬件脉冲之间检查的绝对 deadline。
- 返回:
成功或 INVALID/TIMEOUT/IO。返回证明已无缓冲区或硬件访问;已开始的脉冲不能被抢占。
-
nx_result_t nx_flash_port_erase(const nx_flash_port_t *port, uint32_t offset, size_t length, nx_time_us_t deadline)¶
擦除完整物理扇区范围,并结清脉冲。
- 参数:
port – [inout] 唯一执行所有者。
offset – [in] 精确位于扇区起点的物理偏移。
length – [in] 若干完整扇区长度之和,且为正值。
deadline – [in] 在擦除脉冲之间检查的绝对 deadline。
- 返回:
成功或 INVALID/TIMEOUT/IO;超时或错误可能只完成部分擦除。返回前等待当前脉冲进入空闲。
-
nx_result_t nx_flash_region_validate(const nx_flash_region_t *region)¶
根据物理几何验证区域边界。
- 参数:
region – [in] 调用方显式持有的区域描述。
- 返回:
成功或 INVALID;每次操作分别检查擦除几何。
-
nx_result_t nx_flash_region_read(const nx_flash_region_t *region, uint32_t offset, void *data, size_t length)¶
在显式物理区域内读取。
- 参数:
region – [in] 有效区域。
offset – [in] 相对于区域的字节偏移。
data – [out] 目标缓冲区。
length – [in] 字节数。
- 返回:
成功或 INVALID,不访问区域以外的地址。
-
nx_result_t nx_flash_region_program(const nx_flash_region_t *region, uint32_t offset, const void *data, size_t length, nx_time_us_t deadline)¶
在显式可写物理区域内编程。
- 参数:
region – [in] 有效且可写的区域。
offset – [in] 相对于区域的已对齐偏移。
data – [in] 输入缓冲区;仅借用到返回。
length – [in] 已对齐的正长度。
deadline – [in] 绝对脉冲 deadline。
- 返回:
成功、INVALID/PERMISSION 或底层脉冲操作的结果。
-
nx_result_t nx_flash_region_erase(const nx_flash_region_t *region, uint32_t offset, size_t length, nx_time_us_t deadline)¶
在可写区域内擦除完整物理扇区。
- 参数:
region – [in] 显式有效且可写的区域。
offset – [in] 相对于区域的扇区边界。
length – [in] 完整扇区长度之和。
deadline – [in] 绝对脉冲 deadline。
- 返回:
成功、INVALID/PERMISSION 或底层脉冲操作的结果。
-
struct nx_flash_geometry_t¶
- #include <flash.h>
只读物理几何;平台不预留产品存储。
备注
program_flags 声明额外的单元要求。零值不免除所选 provider 的编程规则。
-
struct nx_flash_ops_t¶
- #include <flash.h>
使用同一个提供者状态的共享只读方法。
备注
各方法遵循对应公共操作的所有权合同。缺失的可选方法返回 UNSUPPORTED。
公共成员
-
const nx_flash_geometry_t *(*geometry)(const void *context)¶
-
nx_result_t (*read)(const void *context, uint32_t offset, void *data, size_t length)¶
-
nx_result_t (*program)(void *context, uint32_t offset, const void *data, size_t length, nx_time_us_t deadline)¶
-
nx_result_t (*erase)(void *context, uint32_t offset, size_t length, nx_time_us_t deadline)¶
-
const nx_flash_geometry_t *(*geometry)(const void *context)¶
fwd.h¶
类型化 I/O face 的轻量身份。
作者 Nexus Team
备注
访问其布局、操作、请求或值类型前,须包含对应公共头文件。前置身份既不构造也不取得任何设备。
类型定义
-
typedef struct nx_adc_group_port nx_adc_group_port_t¶
不透明身份;完整合同位于其公共头文件。
-
typedef struct nx_adc_port nx_adc_port_t¶
-
typedef struct nx_advanced_pwm nx_advanced_pwm_t¶
-
typedef struct nx_can_fd_port nx_can_fd_port_t¶
-
typedef struct nx_can_port nx_can_port_t¶
-
typedef struct nx_encoder nx_encoder_t¶
-
typedef struct nx_eth_frames_port nx_eth_frames_port_t¶
-
typedef struct nx_eth_port nx_eth_port_t¶
-
typedef struct nx_exti_port nx_exti_port_t¶
-
typedef struct nx_flash_port nx_flash_port_t¶
-
typedef struct nx_gpio_port nx_gpio_port_t¶
-
typedef struct nx_i2c_endpoint nx_i2c_endpoint_t¶
-
typedef struct nx_i2c_long_endpoint nx_i2c_long_endpoint_t¶
-
typedef struct nx_i2c_port nx_i2c_port_t¶
-
typedef struct nx_lptim_port nx_lptim_port_t¶
-
typedef struct nx_mdio_port nx_mdio_port_t¶
-
typedef struct nx_pin_state_port nx_pin_state_port_t¶
-
typedef struct nx_pwm_adc nx_pwm_adc_t¶
-
typedef struct nx_pwm_group nx_pwm_group_t¶
-
typedef struct nx_pwm_port nx_pwm_port_t¶
-
typedef struct nx_rtc_port nx_rtc_port_t¶
-
typedef struct nx_spi_dma_transaction_endpoint nx_spi_dma_transaction_endpoint_t¶
-
typedef struct nx_spi_dma_transaction_port nx_spi_dma_transaction_port_t¶
-
typedef struct nx_spi_endpoint nx_spi_endpoint_t¶
-
typedef struct nx_spi_port nx_spi_port_t¶
-
typedef struct nx_spi_transaction_endpoint nx_spi_transaction_endpoint_t¶
-
typedef struct nx_timer_capture nx_timer_capture_t¶
-
typedef struct nx_uart_port nx_uart_port_t¶
-
typedef struct nx_uart_word_port nx_uart_word_port_t¶
-
typedef struct nx_usb_activation_port nx_usb_activation_port_t¶
-
typedef struct nx_usb_device_port nx_usb_device_port_t¶
-
typedef struct nx_usb_endpoint_port nx_usb_endpoint_port_t¶
-
typedef struct nx_watchdog_port nx_watchdog_port_t¶
gpio.h¶
固定 GPIO 授权掩码与有界端口操作。
作者 Nexus Team
函数
-
nx_result_t nx_gpio_port_write(const nx_gpio_port_t *port, uint32_t set_mask, uint32_t reset_mask)¶
原子设置/复位一个端口的授权输出掩码。
备注
任务/IRQ 中均有界且不等待。一个串行化写入者拥有此绑定。停止或切换模式前必须使写入者及 IRQ 静默。
- 参数:
port – [in] 固定且已初始化的绑定,无注册表或 OS 锁。
set_mask – [in] 获授权的置位位集。
reset_mask – [in] 获授权的复位位集;须与 set_mask 不相交。
- 返回:
返回 NX_SUCCESS,或在任何寄存器写入前返回 INVALID/PERMISSION。
-
nx_result_t nx_gpio_port_read(const nx_gpio_port_t *port, uint32_t *value)¶
读取受绑定掩码限制的单次输入快照。
- 参数:
port – [in] 固定且已初始化的绑定。
value – [out] 掩码处理后的输入快照;错误时保持不变。
- 返回:
返回 NX_SUCCESS 或 NX_ERROR_INVALID。不保证跨端口同时采样。
-
nx_result_t nx_gpio_port_toggle(const nx_gpio_port_t *port, uint32_t mask)¶
在单写者合同下翻转授权输出。
备注
相对于无关写入,读改写不是原子操作。
- 参数:
port – [in] 具有串行化写入者的固定输出绑定。
mask – [in] 获授权、需要翻转的子集。
- 返回:
返回 NX_SUCCESS,或在寄存器写入前返回 INVALID/PERMISSION。
-
struct nx_gpio_ops_t¶
- #include <gpio.h>
使用同一个提供者状态的共享只读方法。
备注
各方法遵循对应公共操作的所有权合同。缺失的可选方法返回 UNSUPPORTED。
公共成员
-
nx_result_t (*write)(void *context, uint32_t set_mask, uint32_t reset_mask)¶
-
nx_result_t (*read)(const void *context, uint32_t *value)¶
-
nx_result_t (*toggle)(void *context, uint32_t mask)¶
-
nx_result_t (*write)(void *context, uint32_t set_mask, uint32_t reset_mask)¶
i2c.h¶
地址端点、重复 START 与显式 STOP 结清。
作者 Nexus Team
函数
-
nx_result_t nx_i2c_endpoint_transaction(const nx_i2c_endpoint_t *endpoint, nx_i2c_message_t *messages, size_t count, nx_time_us_t deadline, size_t *transferred)¶
执行一个轮询、7 位地址消息事务。
备注
仅限任务上下文,由一个执行者负责。没有隐式扫描或 GPIO 恢复。总线恢复失败绝不报告为传输成功。
- 参数:
endpoint – [in] 固定的地址/控制器绑定。
messages – [inout] 消息缓冲区;写入方向的数据不会被修改。
count – [in] 1..NX_I2C_MAX_MESSAGES 条。
deadline – [in] provider 时钟域中的有限绝对 deadline。
transferred – [out] provider 跨消息记录的字节进度,错误返回时也提供。TX 可能已统计交给数据寄存器的字节,而此时尚不知道线上传输或 ACK 结果。
- 返回:
成功或 INVALID/UNSUPPORTED/CONTEXT/STATE/BUSY/TIMEOUT/NACK/ARBITRATION/IO。每条消息包含 1..NX_I2C_MAX_MESSAGE_BYTES 字节,可独立选择读或写。返回前完成 STOP/中止排空并归还缓冲区。控制器结清不代表总线已恢复。
-
nx_result_t nx_i2c_port_recover(const nx_i2c_port_t *port)¶
总线故障后恢复空闲控制器。
- 参数:
port – [inout] 唯一执行者;不存在活跃事务或缓冲区借用。
- 返回:
仅观察到硬件总线空闲时成功;否则返回 BUSY/IO/UNSUPPORTED。不重放失败事务。
-
nx_result_t nx_i2c_request_prepare(nx_i2c_request_t *request, nx_i2c_message_t *messages, size_t count, nx_time_us_t deadline)¶
准备未借用请求,不复制载荷。
备注
payload 不得与控制存储重叠,读取范围也不得与不可变的写入范围重叠。限制与轮询模式一致。
- 参数:
request – [inout] 已初始化的 READY 存储,或已消费的 SETTLED 存储
messages – [inout] 1..8 个完整描述符
count – [in] 精确的描述符数量
deadline – [in] provider 时钟域中的绝对 deadline
- 返回:
返回 SUCCESS、INVALID、UNSUPPORTED 或 STATE;不产生新借用
-
nx_result_t nx_i2c_request_validate(const nx_i2c_request_t *request)¶
验证有限描述符以及载荷/控制存储分离。
备注
有界冷态检查。provider 在取得任何借用前另行验证状态、上下文及 DMA 域。
- 参数:
request – [in] 完整且由调用方持有的请求,不予保留
- 返回:
返回 SUCCESS、INVALID 或 UNSUPPORTED,不修改输入
-
nx_result_t nx_i2c_endpoint_submit(const nx_i2c_endpoint_t *endpoint, nx_i2c_request_t *request)¶
准入一个有限、异步、重复 START 事务。
备注
选中模式声明 DMA 域。仅 DMA 完成不能证明线上/STOP 排空或借用归还。任何已接受的中止均须先显式本地恢复才能复用;恢复不重放事务,也不在 Board GPIO 上产生脉冲。
- 参数:
endpoint – [in] 已初始化的固定地址及唯一执行者
request – [inout] READY 描述符及其引用的全部存储
- 返回:
SUCCESS 表示 ACCEPTED;拒绝不保留任何引用
-
nx_result_t nx_i2c_endpoint_start_admitted(const nx_i2c_endpoint_t *endpoint, nx_i2c_request_t *request)¶
启动已借用的 QUEUED 请求,不重复准入。
备注
其他错误要求由适配器结清;不回退为轮询。
- 参数:
endpoint – [in] 位于适配器精确控制器上的固定地址
request – [inout] 经适配器准入的 QUEUED 存储
- 返回:
SUCCESS 将执行权交给 provider;BUSY 保持 QUEUED
-
bool nx_i2c_endpoint_on_port(const nx_i2c_endpoint_t *endpoint, const nx_i2c_port_t *port)¶
证明控制器身份,不产生硬件效果。
- 参数:
endpoint – [in] 不可变的带地址子对象
port – [in] 精确的执行控制器
- 返回:
仅当 provider 状态匹配且方法兼容时为真
-
nx_result_t nx_i2c_port_cancel(const nx_i2c_port_t *port, nx_i2c_request_t *request)¶
请求取消,不回收任何存储。
- 参数:
port – [in] 与 submit/service 相同的唯一执行者
request – [inout] 精确的活跃描述符,不得使用陈旧裸指针
- 返回:
SUCCESS 开始排空;其他请求返回 STATE
-
void nx_i2c_port_service(const nx_i2c_port_t *port)¶
在有界 Task 上下文处理截止时间,并推进 STOP/DMA 排空。
备注
最终发布发生在来源分离及本地线上空闲之后。排空失败会隔离全部存储。不调用 payload 完成回调,也绝不自动重放。
- 参数:
port – [in] 仍然有效的唯一执行者,在整个停止过程中持续调用 service
-
nx_result_t nx_i2c_port_stop(const nx_i2c_port_t *port)¶
关闭准入,全部借用者排空后才停止。
- 参数:
port – [in] 外部生产者已静默的控制器
- 返回:
SUCCESS 证明来源已撤回;BUSY 要求继续 service
-
nx_result_t nx_i2c_port_attach_wake(const nx_i2c_port_t *port, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
检查实际 IRQ 策略后附加一个可选提示接收端。
备注
仅限任务上下文。sink 须保持有效,直到成功停止或分离。
- 参数:
port – [in] 已初始化的异步控制器
wake – [in] 借用的 sink;或在发布者退出后使用 NULL 分离
syscall_ceiling – [in] 不得削弱选中的内核策略
- 返回:
返回 SUCCESS,或在替换任何活跃绑定前拒绝
-
struct nx_i2c_request_t¶
- #include <i2c.h>
调用者拥有的有限消息序列。
备注
描述符与 payload 保持借用直到 SETTLED。写入数据保持不可变;读取数据写入调用方存储。取消、deadline 和隔离均不撤销借用。
-
struct nx_i2c_ops_t¶
- #include <i2c.h>
使用同一个提供者状态的共享只读方法。
备注
各方法遵循对应公共操作的所有权合同。缺失的可选方法返回 UNSUPPORTED。
公共成员
-
nx_result_t (*recover)(void *context)¶
-
nx_result_t (*cancel)(void *context, nx_i2c_request_t *request)¶
-
void (*service)(void *context)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*attach_wake)(void *context, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
-
nx_result_t (*recover)(void *context)¶
-
struct nx_i2c_port¶
- #include <i2c.h>
指向调用者自有状态的不可变接口。
备注
接口和状态的生命周期覆盖调用方、IRQ 及保留的借用。工厂查找既不初始化,也不取得硬件。
-
struct nx_i2c_endpoint_ops_t¶
- #include <i2c.h>
使用同一个提供者状态的共享只读方法。
备注
各方法遵循对应公共操作的所有权合同。缺失的可选方法返回 UNSUPPORTED。
公共成员
-
nx_result_t (*transaction)(void *context, nx_i2c_message_t *messages, size_t count, nx_time_us_t deadline, size_t *transferred)¶
-
nx_result_t (*submit)(void *context, nx_i2c_request_t *request)¶
-
nx_result_t (*start_admitted)(void *context, nx_i2c_request_t *request)¶
-
bool (*on_port)(const void *context, const nx_i2c_port_t *port)¶
-
nx_result_t (*transaction)(void *context, nx_i2c_message_t *messages, size_t count, nx_time_us_t deadline, size_t *transferred)¶
i2c_bus_clear.h¶
显式开漏 I2C 总线清理,保留租约。
作者 Nexus Team
宏定义
-
NX_I2C_BUS_CLEAR_MAX_PULSES¶
每次尝试中允许完成的恢复低/高电平周期上限。
函数
-
nx_result_t nx_i2c_bus_clear_init(nx_i2c_bus_clear_t *clear, nx_i2c_bus_clear_port_t port, nx_clock_t clock, nx_i2c_bus_clear_timing_t timing)¶
绑定显式电气操作,不接触引脚。
- 参数:
clear – [inout] 新的清零会话,或没有租约的会话。
port – [in] 必须具备全部五个方法;调用方须验证电气授权,不能依赖通用 GPIO API 推定。
clock – [in] 必需的、有界的同一启动域内单调时间读取。
timing – [in] 已审查且非零的低电平/高电平/STOP/轮询时长。
- 返回:
返回 SUCCESS、INVALID,或因保留租约而返回 BUSY。拒绝使会话及外部资源保持不变。
-
nx_result_t nx_i2c_bus_clear_run(nx_i2c_bus_clear_t *clear, nx_time_us_t deadline, nx_time_us_t cleanup_deadline, nx_i2c_bus_clear_result_t *result)¶
用至多九个脉冲清理一个空闲、已授权总线。
备注
仅限任务上下文,其他总线使用者均已静默。时序证据及实际开漏行为需要物理 HIL。
- 参数:
clear – [inout] 已初始化且无保留租约的会话。
deadline – [in] 主要操作的有限绝对 deadline。
cleanup_deadline – [in] 同一时钟域中的有限绝对 STOP/租约 deadline,不得早于 deadline。
result – [out] 独立的主要/清理结果及保留效果。
- 返回:
主要操作失败时返回该失败,否则返回清理结果。无效输入或已有租约会被拒绝,不调用回调,也不改变 result。主要 deadline 已到期时不产生引脚效果。每次释放 SCL 后,必须先观察到物理 HIGH,再计其高电平时长。时钟冻结或倒退时报告 IO 并退出,不持续空转。每次已取得所有权的尝试均在独立预算内显式执行 STOP 清理;STOP 或 release 方法失败会保留租约。若 release 在其 deadline 之后成功,清理报告 TIMEOUT,但 lease_held 为 false,以保留实际已经归还所有权的事实。绝不重放失败的 I2C 事务,也不重试恢复脉冲。
-
nx_result_t nx_i2c_bus_clear_finish(nx_i2c_bus_clear_t *clear, nx_time_us_t deadline, nx_i2c_bus_clear_result_t *result)¶
仅重试保留的 STOP 清理与所有权归还。
- 参数:
clear – [inout] 已初始化且保留租约的会话。
deadline – [in] 新的有限绝对清理 deadline。
result – [out] 保留的主要结果/脉冲数及最新清理结果。
- 返回:
返回最新清理结果;INVALID/STATE 拒绝且无效果。release 失败后,不重复已经证明完成的 STOP。失败保留租约,不得因此开始新的总线清理或事务。成功不会将主要操作的失败改为成功。
-
struct nx_i2c_bus_clear_ops_t¶
- #include <i2c_bus_clear.h>
授权双引脚 GPIO 交接的只读方法。
备注
仅限任务上下文,由一个执行者负责。acquire 是有界、非阻塞的交接:成功证明控制器、DMA、IRQ、其他主机及引脚使用者均已静默;两个物理引脚已按审查过的开漏 GPIO 模式独占租用,且两根线均已释放。失败不保留租约或效果。drive 只拉 LOW 或释放引脚;false 绝不表示主动驱动 HIGH。scl_low 为 true 时,drive 先建立 SCL LOW,再改变 SDA,包括从未知先前引脚状态重试的情况。sample 读取物理电平,而不是输出锁存值。方法均有界,错误时保留租约。release 仅在成功时恢复保存的外设/引脚所有权;失败保留全部租约/存储责任。wait_until 使用注入时钟中的有限绝对时间域,即使时钟停止,也须在调用方已证明的有限上界内到达 target 或报告错误。迟到的等待不能使已到期操作获得资格。任何回调均不得递归操作本会话或运行事务。适配器在 acquire 前必须验证经过审查的开漏、上拉、电压及双引脚授权事实。
公共成员
-
nx_result_t (*acquire)(void *context)¶
-
nx_result_t (*drive)(void *context, bool scl_low, bool sda_low)¶
-
nx_result_t (*sample)(void *context, bool *scl_high, bool *sda_high)¶
-
nx_result_t (*wait_until)(void *context, nx_time_us_t target)¶
-
nx_result_t (*release)(void *context)¶
-
nx_result_t (*acquire)(void *context)¶
-
struct nx_i2c_bus_clear_port_t¶
- #include <i2c_bus_clear.h>
显式不可变 GPIO 方法与调用者拥有的适配器状态。
-
struct nx_i2c_bus_clear_timing_t¶
- #include <i2c_bus_clear.h>
调用者选择的电气时序,单位为微秒。
备注
全部字段均非零。low/high 约束每个清理脉冲;stop_setup 约束观察到 SCL 高电平至释放 SDA 的间隔。stretch_poll 约束实际 SCL 采样之间的间隔。这些值需要板卡/器件电气审查;机制不提供通用安全默认值。
-
struct nx_i2c_bus_clear_result_t¶
- #include <i2c_bus_clear.h>
分别记录恢复结果与 STOP/所有权归还结果。
备注
pulses 统计已完成的恢复低/高电平周期,不统计准备 STOP 的边沿。stop_observed 证明请求的 STOP 序列结束时,两根线的采样均为 HIGH。lease_held 表示适配器、会话及上下文必须保持有效,且不得启动控制器事务。清理失败绝不替换主要失败。
-
struct nx_i2c_bus_clear_t¶
- #include <i2c_bus_clear.h>
调用者拥有、零初始化的单执行者会话。
备注
公共字段用于机制内部存储,不是调用方控制项。方法、上下文及 clock 的生命周期覆盖每个保留租约。不存在分配、worker、锁、事务缓冲区或隐式重试。放弃保留租约必须显式承接产品隔离/复位责任。
公共成员
-
nx_clock_t clock¶
-
nx_i2c_bus_clear_timing_t timing¶
-
nx_i2c_bus_clear_result_t result¶
-
nx_time_us_t last_time¶
-
bool clock_observed¶
-
bool initialized¶
-
nx_clock_t clock¶
i2c_long.h¶
可选的有界 I2C 长消息,不产生额外 START。
作者 Nexus Team
宏定义
-
NX_I2C_LONG_MAX_MESSAGE_BYTES¶
函数
-
nx_result_t nx_i2c_long_messages_validate(const nx_i2c_message_t *messages, size_t count)¶
取得任何硬件之前验证完整消息。
备注
每条消息包含 1..65535 字节。可修改的读取范围不得与写入范围或描述符存储重叠。写入数据和描述符在整个事务期间保持不可变。
- 参数:
messages – [in] 调用方持有的有限描述符及数据
count – [in] 1..NX_I2C_MAX_MESSAGES 条
- 返回:
返回 SUCCESS、INVALID 或 UNSUPPORTED;不保留任何引用
-
nx_result_t nx_i2c_long_endpoint_transaction(const nx_i2c_long_endpoint_t *endpoint, nx_i2c_message_t *messages, size_t count, nx_time_us_t deadline, size_t *transferred)¶
执行有限消息,不拆分地址阶段。
备注
仅限任务上下文,与基础 I2C 共用一个执行者。每条消息发出一次 START;只有后续消息发出重复 START。硬件 reload 不拆分消息。最终 STOP 和总线空闲观察先于成功返回。失败绝不重放前缀。中止排空失败时,不能返回并归还借用存储。不执行隐式总线恢复。
- 参数:
endpoint – [in] 选中的可选长消息 provider
messages – [inout] 借用至返回的描述符和缓冲区
count – [in] 1..NX_I2C_MAX_MESSAGES 条
deadline – [in] provider 时钟域中的有限绝对 deadline
transferred – [out] 包含失败情况的寄存器字节进度;TX 计数不能证明这些字节已在线上获得 ACK
- 返回:
本地控制器排空后返回 SUCCESS 或 INVALID/UNSUPPORTED/CONTEXT/STATE/BUSY/TIMEOUT/NACK/ARBITRATION/IO
-
struct nx_i2c_long_ops_t¶
- #include <i2c_long.h>
共享只读的可选长消息实现。
公共成员
-
nx_result_t (*transaction)(void *context, nx_i2c_message_t *messages, size_t count, nx_time_us_t deadline, size_t *transferred)¶
-
nx_result_t (*transaction)(void *context, nx_i2c_message_t *messages, size_t count, nx_time_us_t deadline, size_t *transferred)¶
-
struct nx_i2c_long_endpoint¶
- #include <i2c_long.h>
可选不可变接口;控制器状态与基础 I2C 共享。
备注
接口和私有上下文的生命周期覆盖所有调用方。不拥有队列或堆。
lptim.h¶
在独立 tick 域中执行有限的 16 位计数。
作者 Nexus Team
函数
-
nx_result_t nx_lptim_request_prepare(nx_lptim_request_t *request, const nx_lptim_domain_t *domain, uint32_t ticks, nx_time_us_t deadline)¶
把复制的计数元数据准备到已初始化且未借用的存储中。
备注
完整存储范围必须对齐、不发生地址回绕且互不重叠。该操作不建立借用、不访问时钟、不转换单位,也不证明物理速率。
- 参数:
request – [inout] READY 或结果已消费的 SETTLED 存储,且所有观察者均已 join。
domain – [in] 在此复制独立、非零的 owner/代次值。
ticks – [in] 精确的正计数,范围为 1..65536,单位是该域的 tick。
deadline – [in] 绝对 Core 单调 deadline 或 NX_DEADLINE_NEVER。
- 返回:
SUCCESS 或 INVALID/STATE;失败保持请求的每个字节不变。
-
nx_result_t nx_lptim_port_sample(const nx_lptim_port_t *port, nx_lptim_sample_t *sample)¶
由一个任务 owner 复制当前计数域和声明单位。
备注
开放且空闲时报告计数器为零且未运行。此有限接口不恢复未观察到的回绕,也不提供绝对时钟。
- 参数:
port – [in] 串行访问的只读接口面;不允许并发模型/生命周期操作。
sample – [out] 独立、对齐且可写的快照。
- 返回:
SUCCESS、关闭时的 STATE 或 INVALID/UNSUPPORTED;拒绝时输出不变。
-
nx_result_t nx_lptim_port_submit(const nx_lptim_port_t *port, nx_lptim_request_t *request)¶
完成空闲/域/范围检查后借用一个 READY 计数请求。
备注
有限 deadline 已到期时,在产生请求源效果前返回 TIMEOUT。接受请求前预留最终不回绕的域递增:EXHAUSTED 绝不丢弃此前已经接受的借用。时钟上下文生命周期、完整范围/不重叠及不可重入由装配方负责。
- 参数:
port – [in] 同一个串行 owner,持有复制的外部 Core 时钟接口面。
request – [inout] 调用方请求;没有队列或隐藏 worker。
- 返回:
SUCCESS 表示 ACCEPTED;INVALID/STATE/BUSY/TIMEOUT/EXHAUSTED/UNSUPPORTED 表示拒绝,不保留引用或效果。
-
nx_result_t nx_lptim_port_cancel(const nx_lptim_port_t *port, nx_lptim_request_t *request)¶
接受取消,但保持借用直到证明已撤源。
备注
cancel/stop 可以在尚未观察到事件/到期之前先锁存原因。首次原因保持不变;transferred 记录真实撤源时最终的请求源进度。
- 参数:
port – [in] 同一个串行执行者;没有隐式跨任务锁。
request – [inout] 精确的活动请求身份;不读取其他请求身份指向的存储。
- 返回:
SUCCESS 仍可能表示 QUARANTINED;拒绝返回 STATE/INVALID/UNSUPPORTED。
-
nx_result_t nx_lptim_port_service(const nx_lptim_port_t *port)¶
观察 deadline/事件,并继续有界的真实撤源。
备注
首次观察到的到期优先于 pending 完成事件。最终以 release 发布 SETTLED 前,清除全部请求源、pending 和 owner 引用。
- 参数:
port – [in] 同一个串行任务 owner;不隐式推进请求源。
- 返回:
空闲/已结清时返回 SUCCESS,活动或撤源被 hold 阻止时返回 BUSY;INVALID/STATE/UNSUPPORTED 可以拒绝分发。
-
nx_result_t nx_lptim_port_stop(const nx_lptim_port_t *port)¶
关闭准入;取消/到期绝不是借用已归还的证明。
备注
重复执行已完成的干净 stop 是安全的;它不重置代次或生命周期。tick 速率/请求源和备份/Stop/VBAT 连续性需要独立硬件合同;此接口不建立这些验证资格。
- 参数:
port – [in] 串行 owner,且所有外部发布者均已静止。
- 返回:
脱离引用后返回 SUCCESS,BUSY 保留隔离存储;INVALID/STATE/UNSUPPORTED 可以拒绝分发。
-
struct nx_lptim_domain_t¶
- #include <lptim.h>
owner 与不回绕的计数代次,绝不是 RTC/Core token。
备注
仅比较身份,不解引用。结束 owner 存储生命周期或复用其地址前,必须退役所有 token/观察者。
-
struct nx_lptim_sample_t¶
- #include <lptim.h>
声明单位与模计数值,不是绝对时间估计。
备注
完整的 65536 tick 计数会把计数器回绕到零。单凭计数器为零不能证明完成、空闲、遗漏回绕或低功耗连续性。tick_hz 是固定声明速率,不是物理振荡器精度。
-
struct nx_lptim_request_t¶
- #include <lptim.h>
一次由调用方持有的有限计数;transferred 是最终观察到的 tick 数。
备注
先初始化 base。ACCEPTED 后,保持整个请求有效且调用方不可修改,直到以 acquire 观察到 SETTLED 并完成外部 join。锁存的 CANCELLED/TIMEOUT 固定终止原因,而不是最终进度:撤源被 hold 阻止时,脱离前请求源仍可能继续累计 tick。
-
struct nx_lptim_ops_t¶
- #include <lptim.h>
共享只读方法实现相应公共合同。
公共成员
-
nx_result_t (*sample)(const void *context, nx_lptim_sample_t *sample)¶
-
nx_result_t (*submit)(void *context, nx_lptim_request_t *request)¶
-
nx_result_t (*cancel)(void *context, nx_lptim_request_t *request)¶
-
nx_result_t (*service)(void *context)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*sample)(const void *context, nx_lptim_sample_t *sample)¶
mdio.h¶
使用绝对截止时间的窄接口 Clause22 站点管理。
作者 Nexus Team
函数
-
nx_result_t nx_mdio_read(const nx_mdio_port_t *port, uint8_t address, uint8_t reg, uint16_t *value, nx_time_us_t deadline)¶
读取一个 Clause22 PHY 寄存器,不保留输出存储。
备注
串行化的特权任务调用,进入时中断屏蔽均清除;deadline 是 provider 时钟域中的有限绝对时间。地址和寄存器均为 0..31。BUSY 在产生新 MMIO 效果前拒绝;超时不伪称 busy 已清除。
- 参数:
port – [in] 稳定的接口及调用方持有的执行上下文。
address – [in] Clause22 PHY 地址,0..31。
reg – [in] Clause22 寄存器地址,0..31。
value – [out] 仅在及时观察到完成后写入。
deadline – [in] provider 时钟域中的有限绝对 deadline。
- 返回:
成功、不发出新命令的 BUSY,或超时/输入/上下文错误。
-
nx_result_t nx_mdio_write(const nx_mdio_port_t *port, uint8_t address, uint8_t reg, uint16_t value, nx_time_us_t deadline)¶
写入一个 Clause22 PHY 寄存器,不实现特定 PHY 策略序列。
备注
与 read 相同的任务/deadline 规则。不在屏蔽 IRQ 时忙等,也不回退。
- 参数:
port – [in] 稳定的接口及调用方持有的执行上下文。
address – [in] Clause22 PHY 地址,0..31。
reg – [in] Clause22 寄存器地址,0..31。
value – [in] 精确的 16 位寄存器值。
deadline – [in] provider 时钟域中的有限绝对 deadline。
- 返回:
成功、不发出新命令的 BUSY,或超时/输入/上下文错误。
-
struct nx_mdio_ops_t¶
- #include <mdio.h>
公共成员
-
nx_result_t (*read)(void*, uint8_t, uint8_t, uint16_t*, nx_time_us_t)¶
-
nx_result_t (*write)(void*, uint8_t, uint8_t, uint16_t, nx_time_us_t)¶
-
nx_result_t (*read)(void*, uint8_t, uint8_t, uint16_t*, nx_time_us_t)¶
model.h¶
显式主机模型夹具,不建立物理 MCU 资格。
作者 Nexus Team
函数
-
nx_result_t nx_native_clock_configure(bool enabled, nx_time_us_t now)¶
将主机模型切换到确定性时钟域。
- 参数:
enabled – [in] true 选择手动时钟,false 选择真实单调时间。
now – [in] 手动时钟的初始微秒值,须小于 UINT64_MAX。
- 返回:
成功或 INVALID。调用方必须先结清所有请求;切换会创建新时间域,使旧 deadline 失效。
-
nx_result_t nx_native_clock_advance(uint64_t duration_us)¶
推进确定性时间,不隐式触发硬件 IRQ。
- 参数:
duration_us – [in] 非负微秒增量。
- 返回:
成功;非手动模式返回 STATE,溢出返回 EXHAUSTED。
-
nx_result_t nx_native_gpio_configure(uint32_t mask, uint32_t initial)¶
写者静止后配置固定 GPIO 模型。
- 参数:
mask – [in] 获授权的输入/输出位掩码。
initial – [in] 位于掩码范围内的初始输出快照。
- 返回:
成功或 INVALID;不虚构 Board/电气资格。
-
void nx_native_gpio_input(uint32_t value)¶
在确定性模型中注入一个 GPIO 输入快照。
- 参数:
value – [in] 物理端口快照;读取时屏蔽未授权位。
-
uint32_t nx_native_gpio_output(void)¶
观察输出状态,用于主机行为断言。
- 返回:
模型输出快照;不具有实测波形语义。
-
nx_result_t nx_native_uart_configure(const nx_native_uart_config_t *config)¶
在固定 UART 上配置准确的 RX/TX 夹具容量。
- 参数:
config – [in] 调用方持有的选中配置存储描述。
- 返回:
成功、INVALID,或因仍有活跃请求而返回 BUSY。
-
nx_result_t nx_native_uart_tx_validate(void *context, const nx_uart_tx_request_t *request)¶
为选定 RS485 绑定验证准确 Native TX 上下文。
备注
仅限任务上下文;不产生模型 IRQ、准入、GPIO 或状态修改。
- 参数:
context – [in] 已配置 Native UART 接口的精确上下文。
request – [in] 仍然有效的 READY/QUEUED 描述符,不予保留。
- 返回:
执行与 Native submit/start 相同的纯检查,且可拒绝。
-
nx_result_t nx_native_uart_model_irq_configure(const nx_uart_port_t *binding, const nx_irq_policy_t *policy, const nx_irq_source_t *source)¶
将显式 IRQ 事实复制到静止的主机 UART 模型。
备注
仅限任务上下文的冷态配置;调用方已停止发布者。不得残留活跃请求、stream 或已绑定的 wake。默认准备过程显式模拟 BASEPRI/四位 IRQ;此入口可以模拟 Baseline,不虚构 SoC/Board。
- 参数:
binding – [in] 没有 IRQ 使用者的已配置 Native UART 接口。
policy – [in] 在本次调用中复制的不可变 CPU/内核事实。
source – [in] 在本次调用中复制的实际模型发布者事实。
- 返回:
成功,或在产生效果前返回 INVALID、CONTEXT、STATE 或 BUSY。
-
void nx_native_uart_irq_step(void)¶
执行一个确定性 TX IRQ 字节/TC 事件。
备注
不模拟实际硬件 IRQ、时延或线上时序。
-
nx_result_t nx_native_uart_receive(uint8_t byte, uint32_t flags)¶
将一个 RX IRQ 事实注入有界、选定配置的存储。
- 参数:
byte – [in] 接收到的字节;NO_BYTE 状态事实时忽略此值。
flags – [in] NX_UART_EVENT_* 错误事实;正常接收为零。
- 返回:
成功、OVERFLOW,或禁用时返回 STATE。
-
void nx_native_uart_fault(bool start_failure, bool hold_drain)¶
配置启动失败或无法证明硬件排空。
- 参数:
start_failure – [in] 直接准入后失败,不作为拒绝。
hold_drain – [in] 保留 QUARANTINED 请求,直到显式解除。
-
size_t nx_native_uart_transmitted(void)¶
观察捕获的 TX 字节。
- 返回:
捕获到调用方持有的 tx_log 中的数量。
-
nx_result_t nx_native_spi_configure(uint8_t *registers, size_t length)¶
配置固定 SPI 回显或寄存器文件模型。
- 参数:
registers – [inout] 可选的调用方持有的寄存器字节;NULL 表示回显。
length – [in] 寄存器容量;仅回显模式允许为零。
- 返回:
成功或 INVALID;夹具只有一个串行化执行者。
-
void nx_native_spi_fault(size_t fail_after, bool busy)¶
注入有界 SPI 部分失败或控制器占用。
- 参数:
fail_after – [in] 发生失败的字节索引;SIZE_MAX 禁用故障。
busy – [in] true 表示不访问 CS/缓冲区即拒绝事务。
-
bool nx_native_spi_cs_active(void)¶
事务结束后检查模型 CS 电平。
- 返回:
模型事务持有活跃 CS 时为真。
-
nx_result_t nx_native_i2c_configure(uint8_t *memory, size_t length, uint8_t address)¶
配置一个 7 位地址的寄存器文件 I2C 模型。
- 参数:
memory – [inout] 由调用方持有、夹具保留的寄存器字节。
length – [in] 正的寄存器容量,最多 256。
address – [in] 有效且非保留的 7 位地址。
- 返回:
成功或 INVALID。
-
void nx_native_i2c_fault(nx_result_t result, bool stuck)¶
注入 NACK、仲裁丢失或总线卡死。
- 参数:
result – [in] Success 禁用故障;支持 NACK/ARBITRATION/IO。
stuck – [in] true 使显式恢复持续失败,直到解除。
-
nx_result_t nx_native_flash_configure(uint8_t *memory, const nx_flash_geometry_t *geometry)¶
配置物理几何 RAM 模型,明确不具备持久性。
- 参数:
memory – [inout] 调用方持有、大小符合几何信息的字节存储;擦除为 0xff。
geometry – [in] 调用方持有的不可变连续扇区几何,program_flags = 0。此 NOR 模型不实现隐藏 ECC 擦除历史要求。
- 返回:
成功、因几何无效而返回 INVALID,或因编程标志不支持而返回 UNSUPPORTED;没有堆、产品预留或持久化。
-
void nx_native_flash_fault(size_t pulse_count)¶
完整模型脉冲之后注入编程/擦除失败。
- 参数:
pulse_count – [in] 允许完成的完整脉冲数;SIZE_MAX 禁用故障。
-
void nx_native_watchdog_boot(uint32_t causes)¶
复位看门狗夹具,模拟新一次启动。
备注
仅用于测试;此操作不能禁用真实 IWDG。
- 参数:
causes – [in] 锁存的复位原因掩码。
-
bool nx_native_watchdog_expired(void)¶
观察已启用确定性 IWDG 的到期。
- 返回:
标称模型 deadline 到期后为真,并锁存 IWDG。
-
nx_result_t nx_native_exti_configure(uint8_t line, nx_exti_edge_t edge, nx_exti_event_t *events, size_t capacity)¶
为一个静态 EXTI 线路配置准确存储。
- 参数:
line – [in] 0..15。
edge – [in] RISING/FALLING/BOTH 选择。
events – [inout] 夹具持有的队列存储。
capacity – [in] 正的事件容量。
- 返回:
成功或 INVALID;复位前须使生产者/消费者静默。
-
nx_result_t nx_native_exti_emit(uint8_t line, nx_exti_edge_t edge)¶
注入一个带时间戳的选定边沿事实。
- 参数:
line – [in] 已配置的静态线。
edge – [in] RISING 或 FALLING 事件。
- 返回:
成功,或 INVALID/STATE/OVERFLOW;丢失仍可被观察。
-
nx_result_t nx_native_pwm_configure(uint32_t tick_hz, uint32_t period_ticks)¶
写者静止后配置固定 PWM 模型定时器事实。
- 参数:
tick_hz – [in] 预分频后的正频率。
period_ticks – [in] 固定共享时基的正周期。
- 返回:
成功或 INVALID。
-
nx_result_t nx_native_adc_configure(const uint16_t *samples, size_t count, uint8_t resolution_bits, uint32_t reference_mv)¶
配置固定 ADC 原始计数序列与格式。
- 参数:
samples – [in] 夹具持有的标称样本序列。
count – [in] 正的通道数。
resolution_bits – [in] 1..16。
reference_mv – [in] 正的标称参考电压。
- 返回:
成功或 INVALID。
-
void nx_native_adc_fault(size_t sample_count)¶
若干完整样本之后注入 ADC 失败。
- 参数:
sample_count – [in] 允许完成的完整样本数;SIZE_MAX 禁用故障。
-
void nx_native_gpio_model_input(const nx_gpio_port_t *binding, uint32_t value)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
uint32_t nx_native_gpio_model_output(const nx_gpio_port_t *binding)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
nx_result_t nx_native_uart_model_configure(const nx_uart_port_t *binding, const nx_native_uart_config_t *config)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
void nx_native_uart_model_irq_step(const nx_uart_port_t *binding)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
nx_result_t nx_native_uart_model_receive(const nx_uart_port_t *binding, uint8_t byte, uint32_t flags)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
void nx_native_uart_model_fault(const nx_uart_port_t *binding, bool start_failure, bool hold_drain)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
size_t nx_native_uart_model_transmitted(const nx_uart_port_t *binding)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
nx_result_t nx_native_spi_model_configure(const nx_spi_endpoint_t *binding, uint8_t *registers, size_t length)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
void nx_native_spi_model_fault(const nx_spi_port_t *binding, size_t fail_after, bool busy)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
bool nx_native_spi_model_cs_active(const nx_spi_endpoint_t *binding)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
nx_result_t nx_native_i2c_model_configure(const nx_i2c_endpoint_t *binding, uint8_t *memory, size_t length, uint8_t address)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
void nx_native_i2c_model_fault(const nx_i2c_port_t *binding, nx_result_t result, bool stuck)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
nx_result_t nx_native_flash_model_configure(const nx_flash_port_t *binding, uint8_t *memory, const nx_flash_geometry_t *geometry)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
void nx_native_flash_model_fault(const nx_flash_port_t *binding, size_t pulse_count)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
void nx_native_watchdog_model_boot(const nx_watchdog_port_t *binding, uint32_t causes)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
bool nx_native_watchdog_model_expired(const nx_watchdog_port_t *binding)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
nx_result_t nx_native_exti_model_configure(const nx_exti_port_t *binding, uint8_t line, nx_exti_edge_t edge, nx_exti_event_t *events, size_t capacity)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
nx_result_t nx_native_exti_model_emit(const nx_exti_port_t *binding, uint8_t line, nx_exti_edge_t edge)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
nx_result_t nx_native_pwm_model_configure(const nx_pwm_port_t *binding, uint32_t tick_hz, uint32_t period_ticks)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
nx_result_t nx_native_adc_model_configure(const nx_adc_port_t *binding, const uint16_t *samples, size_t count, uint8_t resolution_bits, uint32_t reference_mv)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
void nx_native_adc_model_fault(const nx_adc_port_t *binding, size_t sample_count)¶
仅操作选定的 Native 模型接口面。
备注
对于空接口或其他 provider 的接口,状态操作返回 INVALID,观察返回零/false,注入无效果。所引用的夹具存储仍由调用方持有;重新配置要求写入者和 IRQ 静默,绝不撤销活跃 UART 借用。
-
void nx_native_spi_model_async_configure(const nx_spi_port_t *binding, bool automatic_irq)¶
选择显式或自动模型 SPI IRQ 推进。
备注
先使控制器静默。自动 service 每次调用至多推进一个字节或一个独立的最终空闲事实;不模拟物理 DMA 或线上时序。
-
void nx_native_spi_model_irq_step(const nx_spi_port_t *binding)¶
在准确 Native 总线上注入一个有界 SPI 字节/空闲事件。
-
void nx_native_spi_model_drain_hold(const nx_spi_port_t *binding, bool hold)¶
注入无法证明 SPI 硬件排空的失败。
备注
保留请求转为 QUARANTINED,直到解除 hold,且执行者再次 service 总线。不撤销任何借用。
-
nx_result_t nx_native_uart_model_idle(const nx_uart_port_t *binding)¶
注入 UART IDLE,并发布当前有效字节前缀。
- 返回:
成功、无前缀时返回 EMPTY、未运行块流时返回 STATE、模型写入者活跃时返回 BUSY,或其他 provider 返回 INVALID。不撤销生产者借用。
-
nx_result_t nx_native_adc_model_trigger(const nx_adc_port_t *binding)¶
向选定空闲块注入一次 ADC 定时器触发扫描。
备注
每次成功发布一次交错排列的原始计数扫描;失败的部分扫描先分离,绝不发布。
- 返回:
成功、必需 block 仍被持有时返回 OVERFLOW、扫描失败返回 IO、停止后返回 STATE,或其他 provider 返回 INVALID。不声称硬件节拍或模拟精度。
变量
-
const nx_gpio_port_t *const nx_native_gpio¶
固定模型绑定;不分配、不查找、不探测、不构造。
-
const nx_uart_port_t *const nx_native_uart¶
-
const nx_spi_endpoint_t *const nx_native_spi¶
-
const nx_spi_port_t *const nx_native_spi_port¶
-
const nx_i2c_port_t *const nx_native_i2c_port¶
-
const nx_i2c_endpoint_t *const nx_native_i2c¶
-
const nx_flash_port_t *const nx_native_flash¶
-
const nx_watchdog_port_t *const nx_native_watchdog¶
-
const nx_exti_port_t *const nx_native_exti¶
-
const nx_pwm_port_t *const nx_native_pwm¶
-
const nx_adc_port_t *const nx_native_adc¶
observation.h¶
显式时间戳来源与经过检查的服务派发。
作者 Nexus Team
枚举
函数
-
nx_result_t nx_io_timestamp_elapsed(const nx_io_timestamp_t *first, const nx_io_timestamp_t *last, nx_io_timestamp_delta_t *out)¶
比较两个关系已明确的观察事件。
备注
任务/IRQ 中均为纯操作且工作量恒定;不读取时钟、不访问硬件、不分配、不加锁,也不保留引用。输入可以重合。调用方负责证明事件配对及时间戳来源。可以比较不同的显式来源种类以观察交付时延,但不得重新标记任一观察。
- 参数:
first – [in] 稳定、已对齐且未被并发修改的首个事实。
last – [in] 同一时间域、epoch 和速率中稳定的末个事实。
out – [out] 独立且已对齐的结果,拒绝时保持不变。
- 返回:
返回 SUCCESS;存储格式无效或重叠时返回 INVALID,来源为 UNKNOWN 时返回 UNSUPPORTED,时间域不兼容或 tick 倒退时返回 STATE,上界溢出时返回 EXHAUSTED。
-
nx_result_t nx_io_timestamp_budget(const nx_io_timestamp_t *first, const nx_io_timestamp_t *last, uint64_t maximum_ticks, nx_io_timestamp_budget_result_t *out)¶
将完整时序误差区间与预算比较。
备注
纯 O(1) Task/IRQ 操作,不访问时钟、不保留引用。WITHIN 要求 upper <= maximum;EXCEEDED 要求 lower > maximum。当 lower <= maximum < upper,或误差界未知时,结果为 UNKNOWN。SUCCESS 本身不表示满足预算。既有时间戳 owner/来源合同仍适用:本函数不扩展原始 DWT、不验证 epoch 连续性、不同步采样、不建立 IRQ 到达时刻,也不证明 WCET。
- 参数:
first – [in] 稳定且对齐的扩展时间戳,须与另一事实构成因果配对。
last – [in] 同一 domain/epoch/rate 内稳定且对齐的事实。
maximum_ticks – [in] 包含边界的最大值,单位为声明的 tick。
out – [out] 独立且已对齐的结果,拒绝时保持不变。
- 返回:
与 elapsed 相同的 SUCCESS、INVALID/UNSUPPORTED/STATE;不确定度之和或上界不可表示时返回 EXHAUSTED。
-
nx_result_t nx_uart_port_service_checked(const nx_uart_port_t *port)¶
派发选定的 UART 服务,或说明服务缺失。
备注
与普通 service 采用相同的上下文、串行化和生命周期规则。SUCCESS 仅证明已派发,不证明进展、健康、结清或允许回收存储。不读取请求,不增加状态、锁或隐藏 worker。
- 参数:
port – [in] 仍然有效的不可变接口及已初始化的 provider 状态。
- 返回:
一次派发后返回 SUCCESS;接口格式无效返回 INVALID,没有 service 方法返回 UNSUPPORTED。
-
nx_result_t nx_spi_port_service_checked(const nx_spi_port_t *port)¶
派发选定的 SPI 服务,或说明服务缺失。
备注
与 nx_spi_port_service 采用相同的上下文和所有者规则;SUCCESS 仅证明已派发,绝不代表结清。
- 参数:
port – [in] 仍然有效的不可变接口及已初始化的 provider 状态。
- 返回:
派发后返回 SUCCESS,或返回 INVALID/UNSUPPORTED。
-
nx_result_t nx_i2c_port_service_checked(const nx_i2c_port_t *port)¶
派发选定的 I2C 服务,或说明服务缺失。
备注
与 nx_i2c_port_service 采用相同的上下文和所有者规则;SUCCESS 仅证明已派发,绝不代表结清。
- 参数:
port – [in] 仍然有效的不可变接口及已初始化的 provider 状态。
- 返回:
派发后返回 SUCCESS,或返回 INVALID/UNSUPPORTED。
-
struct nx_io_timestamp_t¶
- #include <observation.h>
由调用者明确提供的时间事实,不访问时钟。
备注
ticks 是扩展计数,在一个非零 domain/epoch 中单调递增。其所有者扩展计数器回绕,并在复位、不连续或速率变化时改变 epoch。domain 和 epoch 是装配内身份,不表示跨核、安全域或设备同步的时钟。UNKNOWN 不提供可用测量。频率是精确声明的 ticks/second,而非实测精度。已知且为零的不确定度表示零误差;未知不确定度使用独立标志。这些事实本身不能建立物理精度、因果配对或事件身份。
-
struct nx_io_timestamp_delta_t¶
- #include <observation.h>
同一时钟域内的差值,带明确的误差界。
备注
uncertainty_known 为 false 时,uncertainty_ticks 为零,不描述任何误差界限。不隐含时间转换、舍入或跨时钟同步。
-
struct nx_io_timestamp_budget_result_t¶
- #include <observation.h>
在声明的 tick 域内比较包含边界的区间与预算。
备注
仅当 delta.uncertainty_known 为 true 时 lower/upper 才可使用。否则两者均为零,verdict 为 UNKNOWN,绝不表示精确的零。
pin_state.h¶
显式静态默认态与睡眠态引脚配置。
作者 Nexus Team
枚举
函数
-
nx_result_t nx_pin_state_select(const nx_pin_state_port_t *port, nx_pin_state_selection_t state)¶
选择一个明确支持的 GPIO 状态,无需等待。
备注
在同一 CPU 的特权 Thread 上下文中串行调用,进入时中断屏蔽位须已清除。不得从 ISR/NMI 调用,不得有其他 pad/RCC 所有者竞争;不支持 AF 切换、时钟转换、唤醒或保持策略。部分失败仍保留租约;可重试一个明确支持的目标,或由所有者执行受检查的清理。这不证明物理瞬态、外部偏置或 PCB 安全。
- 参数:
port – [in] 静态独占 pad/gate 租约,所有写者均已静止。
state – [in] 默认态或睡眠态;两种名称均不代表电气安全。
- 返回:
实际读回目标状态后返回 SUCCESS;或在保留 provider 所有权的同时返回 INVALID/UNSUPPORTED/ CONTEXT/STATE/BUSY/IO。
-
struct nx_pin_state_ops_t¶
- #include <pin_state.h>
一个静态拥有的 provider;不执行发现,也不按寄存器分派。
公共成员
-
nx_result_t (*select)(void *context, nx_pin_state_selection_t state)¶
-
nx_result_t (*select)(void *context, nx_pin_state_selection_t state)¶
-
struct nx_pin_state_port¶
- #include <pin_state.h>
不可变公共接口对象;provider 存储与计划的生命周期须覆盖每次使用。
pwm_adc.h¶
可选的有限相干 PWM/触发 ADC 窗口。
作者 Nexus Team
函数
-
nx_result_t nx_pwm_adc_prepare(nx_pwm_adc_request_t *request, uint16_t *samples, size_t sample_count, const nx_pwm_group_frame_t *frame, nx_time_us_t deadline)¶
准备彼此独立且尚未借用的请求、帧和采样存储。
备注
请求、样本范围、源帧描述符及占空比范围必须自然对齐、地址不回绕且互不重叠。再次准备前,调用方已消费先前结果,并等待所有适配器观察者退出。拒绝 NX_DEADLINE_NEVER;可以准备已到期的有限 deadline,但不得因此准入新的物理效果。准备过程不访问样本内容、不借用硬件,也不建立速率/区域支持。失败使已初始化请求保持不变。
- 参数:
request – [inout] 已初始化为 READY,或已完全消费的 SETTLED 存储。
samples – [out] 自然对齐且可写的调用方样本数组。
sample_count – [in] 精确的正样本数;provider 检查 DMA。
frame – [in] 仅在本次调用中按值复制的可读描述符;完整占空比数组须保持有效直到 SETTLED。
deadline – [in] 整个窗口的有限绝对单调 deadline。
- 返回:
返回 SUCCESS 或 INVALID/STATE;不访问硬件,也不产生 provider 借用。
-
nx_result_t nx_pwm_adc_submit(const nx_pwm_adc_t *port, nx_pwm_adc_request_t *request)¶
由唯一任务所有者准入并布防一个完整有限窗口。
备注
准入后的 arm/预转换失败在已接受请求之下排空。正常完成在 SETTLED 前停止 PWM 来源,且绝不自动重装。仅 DMA TC 不足以证明完成或输出安全。错误/取消报告的保证有效样本数为零;中止后的 DMA 剩余计数不能建立有效前缀。成功窗口恰好报告 sample_count。普通操作成功完成后,可以另行显式准备并提交;显式停止或锁存故障则需要冷关闭/重新初始化。准入前,provider 检查上下文、固定帧、区域,以及与全部冷态描述符/MMIO 的重叠。整个窗口的完整占空比帧保持恒定;样本数不承诺精确的 PWM 脉冲数。没有可信完成时间戳时,首次在请求 deadline 时刻或之后观察到完成会报告 TIMEOUT,即使 DMA 已经完成。这一保守观察规则不承诺物理执行时间上界,也绝不放宽必需的来源排空。
- 参数:
port – [in] 已初始化且稳定的选中耦合接口及冷租约。
request – [inout] 调用方准备的精确 READY 窗口。
- 返回:
SUCCESS 表示 ACCEPTED,包括可能已经 SETTLED 的错误。拒绝表示不保留指针、不访问 payload,也不产生新效果。
-
nx_result_t nx_pwm_adc_cancel(const nx_pwm_adc_t *port, nx_pwm_adc_request_t *request)¶
锁存取消,同时保留对应活动窗口的借用。
备注
取消局限于本任务,不提供跨任务稳定身份。外部应使用既有适配器 slot/epoch 机制。先前终态故障保持保留;取消绝不清除它。
- 参数:
port – [in] 同一个仍然有效的耦合接口及串行化特权任务。
request – [inout] 精确的已准入请求,须保持有效直到 SETTLED。
- 返回:
SUCCESS 开始或观察到取消,绝不代表已经 SETTLED。
-
nx_result_t nx_pwm_adc_service(const nx_pwm_adc_t *port)¶
由同一任务所有者推进有界完成或源排空。
备注
没有隐藏 worker、等待或分配。只有观察到来源/向量撤回后,才允许最终指针分离和 release 发布。
- 参数:
port – [in] 同一个仍然有效的耦合接口及串行化特权任务。
- 返回:
推进或结清后返回 SUCCESS,排空尚未完成时返回 BUSY;或返回故障,要求继续恢复 service 并显式停止。
-
nx_result_t nx_pwm_adc_stop(const nx_pwm_adc_t *port)¶
关闭准入并尝试最终排空,不撤销借用。
备注
继续由唯一执行者 service/stop,直到静默。冷关闭还需等待向量退出并恢复保存的租约。故障恢复不自动重新启动 PWM 或恢复采集。SUCCESS 不释放引脚、时钟或私有存储;这些冷租约保持持有,直到平台最终完成退出汇合并成功关闭。
- 参数:
port – [in] 同一个仍然有效的耦合接口及串行化特权任务。
- 返回:
SUCCESS 证明来源已停止;BUSY/IO 保留恢复所需存储。
-
nx_result_t nx_pwm_adc_state(const nx_pwm_adc_t *port, nx_pwm_adc_state_t *state)¶
复制精确的固定事实与观察到的活动/故障/隔离状态。
备注
state 是观察操作,不是来源排空或归还操作。
- 参数:
port – [in] 同一个仍然有效的耦合接口及串行化特权任务。
state – [out] 独立且已对齐的输出,拒绝时保持不变。
- 返回:
返回 SUCCESS、INVALID/STATE/CONTEXT,或因缺少方法而返回 UNSUPPORTED。
-
struct nx_pwm_adc_request_t¶
- #include <pwm_adc.h>
一个有限窗口;传输数量以原始采样为单位,不以字节计。
备注
首次 prepare 前初始化 base。成功准入后,请求和占空比数组须保持有效且调用方不可修改,直到以 acquire 观察到 SETTLED。可写样本范围由 provider 独占;借用期间调用方既不读也不写。帧元数据在准备时复制。本有限窗口接口不包含后续影子提交、自动重装、控制算法或工程单位转换。硬件专有样本存储和整数编码由 state.format 报告。
公共成员
-
nx_request_t base¶
借用状态与释放发布状态。
-
uint16_t *samples¶
独占可写的原始采样存储。
-
size_t sample_count¶
请求的采样数量,必须为正。
-
nx_pwm_group_frame_t frame¶
复制的元数据;占空比数组保持借用。
-
nx_request_t base¶
-
struct nx_pwm_adc_state_t¶
- #include <pwm_adc.h>
精确的选定事实与观察到的源/恢复状态。
备注
format 描述实际支持的硬件,不建立采样孔径时间戳、模拟精度、PWM 占空比 epoch、IRQ 时延、输出脉冲数量或已检查物理电路的事实。
公共成员
-
nx_adc_format_t format¶
实际整数存储表示与来源。
-
uint32_t tick_hz¶
PWM 计数器每秒的计数刻度数。
-
uint32_t period_ticks¶
以计数器刻度表示的固定周期。
-
uint32_t trigger_ticks¶
以计数器刻度表示的固定相位。
-
uint32_t deadtime_ticks¶
以独立的 deadtime_hz 单位表示的死区时间。
-
uint32_t deadtime_hz¶
死区时钟;不得从 PSC 推断。
-
size_t pwm_channels¶
完整、固定顺序的帧通道数。
-
size_t max_samples¶
提供者/DMA 的有限窗口计数上限。
-
bool running¶
观察到的源/计数器活动状态。
-
bool fault¶
需要冷恢复的锁存故障。
-
bool quarantined¶
撤离未完成时保留所有权。
-
nx_adc_format_t format¶
-
struct nx_pwm_adc_ops_t¶
- #include <pwm_adc.h>
仅选定实例具有的操作;普通 PWM/ADC 方法表不增加。
备注
每个回调实现对应的公共函数契约。一个特权任务串行化 submit/cancel/service/stop/state;IRQ 只向同一私有所有者锁存有界物理事实。缺失回调返回 UNSUPPORTED。不进行分配,也没有隐藏 worker。
公共成员
-
nx_result_t (*submit)(void *context, nx_pwm_adc_request_t *request)¶
-
nx_result_t (*cancel)(void *context, nx_pwm_adc_request_t *request)¶
-
nx_result_t (*service)(void *context)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*state)(const void *context, nx_pwm_adc_state_t *state)¶
-
nx_result_t (*submit)(void *context, nx_pwm_adc_request_t *request)¶
pwm_group.h¶
固定时基、原子的多通道 PWM 影子提交。
作者 Nexus Team
函数
-
nx_result_t nx_pwm_group_commit(const nx_pwm_group_t *port, const nx_pwm_group_frame_t *frame)¶
暂存完整通道组及其内部触发比较值。
备注
provider 声明精确的通道数、触发范围及 ISR 预算。占空比包含零与 period。所有通道共用一个固定时基。部分硬件写入失败时必须禁用输出并保留故障责任,不能让混合新旧值的通道组进入下一次更新。停止必须显式进行;禁止 break 后自动恢复输出。
- 参数:
port – [in] 一个串行化特权任务/可配置 IRQ 所有者。
frame – [in] 完整且可读的批次;返回后不保留指针。
- 返回:
SUCCESS 表示一个一致的组已暂存,等待硬件更新,不代表更新已经发生。无效输入没有效果。
-
nx_result_t nx_pwm_group_start(const nx_pwm_group_t *port)¶
仅输出已禁用且刹车未激活、已清除时启动。
- 参数:
port – [in] 拥有全部冷租约的串行化特权任务所有者。
- 返回:
返回 SUCCESS,或返回错误并保留清理及相应故障责任。
-
nx_result_t nx_pwm_group_stop(const nx_pwm_group_t *port)¶
撤离主输出、通道、计数器与拥有的 IRQ 源。
备注
此源码层承诺不认证外部电路的电气安全。Board 空闲电平和发布者汇合属于装配职责。
- 参数:
port – [in] 同一个特权任务所有者;冷态引脚/向量租约保持持有。
- 返回:
SUCCESS 证明来源已撤回;失败保留责任。
-
nx_result_t nx_pwm_group_clear_fault(const nx_pwm_group_t *port)¶
禁用期间检查实际刹车状态后显式清除故障。
- 参数:
port – [in] 串行化特权任务恢复所有者。
- 返回:
仅在影子值一致且 break 已确认后返回 SUCCESS;绝不使能输出。产品功率级恢复策略仍由外部负责。
-
nx_result_t nx_pwm_group_state(const nx_pwm_group_t *port, nx_pwm_group_state_t *state)¶
读取固定单位与观察到的启用/故障事实,不启动硬件。
- 参数:
port – [in] 串行化特权任务所有者。
state – [out] 独立可写的输出,拒绝时保持不变。
- 返回:
返回 SUCCESS 或 INVALID/STATE/CONTEXT/UNSUPPORTED。
-
struct nx_pwm_group_frame_t¶
- #include <pwm_group.h>
一个同步影子批次;通道顺序由装配固定。
-
struct nx_pwm_group_state_t¶
- #include <pwm_group.h>
固定单位、软件故障锁存与实际硬件启用状态。
-
struct nx_pwm_group_ops_t¶
- #include <pwm_group.h>
共享操作;提交必须防止部分影子发布。
公共成员
-
nx_result_t (*commit)(void *context, const nx_pwm_group_frame_t *frame)¶
-
nx_result_t (*start)(void *context)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*clear_fault)(void *context)¶
-
nx_result_t (*state)(const void *context, nx_pwm_group_state_t *state)¶
-
nx_result_t (*commit)(void *context, const nx_pwm_group_frame_t *frame)¶
-
struct nx_pwm_group¶
- #include <pwm_group.h>
不可变身份;无默认设备状态或分配。
rtc.h¶
独立时间域中的原始日历与一次有限 alarm。
作者 Nexus Team
函数
-
nx_result_t nx_rtc_calendar_validate(const nx_rtc_calendar_t *calendar)¶
验证原始日历字段,不改变任何存储。
- 参数:
calendar – [in] 可读且自然对齐的值。
- 返回:
SUCCESS 或 INVALID;不访问时钟或 provider。
-
nx_result_t nx_rtc_alarm_validate(const nx_rtc_alarm_t *alarm)¶
验证有限 alarm 模式的日和时间范围。
- 参数:
alarm – [in] 可读且自然对齐的值。
- 返回:
SUCCESS 或 INVALID;不承诺 provider 能够 armed 该 alarm。
-
nx_result_t nx_rtc_request_prepare(nx_rtc_request_t *request, const nx_rtc_domain_t *domain, const nx_rtc_alarm_t *alarm, nx_time_us_t deadline)¶
把域/模式复制到已初始化且未被借用的调用方存储中。
备注
输入必须是完整、对齐、不回绕且与请求不重叠的范围。该冷操作不建立借用,也无法获知不透明 provider 或时钟上下文的完整范围。准入检查已知 provider 范围;不透明上下文的不重叠由装配方负责。
- 参数:
request – [inout] READY 或结果已消费的 SETTLED 存储,所有 join 已完成。
domain – [in] 在本次调用中复制非零 owner/代次。
alarm – [in] 在本次调用中复制有效模式。
deadline – [in] 绝对 Core 单调 deadline 或 NX_DEADLINE_NEVER。
- 返回:
SUCCESS 或 INVALID/STATE;所有失败均保持请求不变。
-
nx_result_t nx_rtc_port_read(const nx_rtc_port_t *port, nx_rtc_snapshot_t *snapshot)¶
由唯一串行任务执行者复制已设置的日历/域。
- 参数:
port – [in] 有效、只读且存活的接口面;不允许并发生命周期写入者。
snapshot – [out] 独立、对齐且可写的输出。
- 返回:
SUCCESS、关闭/未设置时的 STATE、INVALID 或 UNSUPPORTED;失败保持输出不变。
-
nx_result_t nx_rtc_port_set(const nx_rtc_port_t *port, const nx_rtc_calendar_t *calendar)¶
设置空闲日历,并推进不回绕的设置域。
备注
拒绝不改变状态。不隐式执行备份复位、同步、Core 时间调整,也不授予覆盖保留硬件的权限。
- 参数:
port – [in] 同一个唯一串行特权任务 owner。
calendar – [in] 独立的原始值,通过验证后复制。
- 返回:
SUCCESS、存在借用时的 BUSY、关闭时的 STATE、INVALID、EXHAUSTED 或 UNSUPPORTED。
-
nx_result_t nx_rtc_port_submit(const nx_rtc_port_t *port, nx_rtc_request_t *request)¶
借用并 armed 一个未来 alarm;没有队列、分配或 worker。
备注
关闭/域过期/已匹配当前时刻的模式返回 STATE;已有活动请求返回 BUSY。观察到有限 deadline 已到期时,在准入前返回 TIMEOUT。日历、计数器和 Core deadline 分属不同域。在整个 owner 生命周期及所有外部 join 期间,装配方保持复制的时钟接口面所借用上下文有效、不重叠且不重入。
- 参数:
port – [in] 已初始化的串行 owner,持有有效、复制的 Core 时钟接口面。
request – [inout] 精确属于当前设置域的 READY 请求。
- 返回:
SUCCESS 表示 ACCEPTED;INVALID/STATE/BUSY/TIMEOUT/UNSUPPORTED 表示拒绝,不保留引用或效果。
-
nx_result_t nx_rtc_port_cancel(const nx_rtc_port_t *port, nx_rtc_request_t *request)¶
为精确借用的请求锁存取消,但不撤销借用。
备注
在 service 前执行 cancel/stop,可以先于尚未观察的到期或事件锁存原因。等待撤源期间首次终止原因始终不变。
- 参数:
port – [in] 同一个串行执行者;跨任务控制需要适配器。
request – [inout] 精确的活动请求身份;不读取其他请求身份指向的存储。
- 返回:
SUCCESS 表示已接受取消;请求仍可能处于 QUARANTINED/被借用状态。拒绝返回 STATE/INVALID/UNSUPPORTED。
-
nx_result_t nx_rtc_port_service(const nx_rtc_port_t *port)¶
观察 deadline/事件,或继续真实撤源。
备注
首次观察时,到期优先于 pending 事件。先脱离请求源/pending 引用,再以 release 发布 SETTLED,作为 provider 的最终请求访问。
- 参数:
port – [in] 同一个串行任务执行者;有界,不隐藏等待。
- 返回:
空闲/已结清时返回 SUCCESS,活动或撤源被 hold 阻止时返回 BUSY;INVALID/STATE/UNSUPPORTED 可以拒绝分发。
-
nx_result_t nx_rtc_port_stop(const nx_rtc_port_t *port)¶
关闭准入,并在归还任何借用前证明已撤源。
备注
重复执行已完成的干净 stop 是幂等的。stop 不重置身份,也不撤销指针。请求源/provider 的生命周期仍须覆盖外部 join。
- 参数:
port – [in] 同一个串行 owner,且外部发布者均已静止。
- 返回:
已关闭且完成 join 时返回 SUCCESS;BUSY 保留隔离请求。INVALID/STATE/UNSUPPORTED 可以拒绝分发。
-
struct nx_rtc_calendar_t¶
- #include <rtc.h>
原始 YY 日历;没有 UTC、世纪、时区或振荡器策略。
备注
YY 为 00..99,YY 模 4 等于零时为闰年。星期是独立的 1..7 值,不根据日期推算。其他字段使用从 1 起算的月/日及 24 小时时/分/秒,不含闰秒。自然的 year99->00 回绕不重置设置域。
-
struct nx_rtc_domain_t¶
- #include <rtc.h>
不透明的 owner 身份与不重复的设置代次。
备注
只比较身份而不解引用。仅在该 owner 存储生命周期内有效;结束或复用前必须退役全部 token/观察者。它既不授予权限,也不是跨启动/备份复位身份。
-
struct nx_rtc_request_t¶
- #include <rtc.h>
调用方持有的 alarm,借用持续到以 acquire 观察到 SETTLED。
备注
首次 prepare 前先初始化 base。域和模式按值复制。ACCEPTED 后,完整请求持续有效,且调用方不得修改,直到 SETTLED 及所有独立控制者/观察者 join 完成。transferred 以发生次数计:SUCCESS 为 1,其他结果均为 0。
-
struct nx_rtc_ops_t¶
- #include <rtc.h>
共享只读方法实现相应公共合同。
公共成员
-
nx_result_t (*read)(const void *context, nx_rtc_snapshot_t *snapshot)¶
-
nx_result_t (*set)(void *context, const nx_rtc_calendar_t *calendar)¶
-
nx_result_t (*submit)(void *context, nx_rtc_request_t *request)¶
-
nx_result_t (*cancel)(void *context, nx_rtc_request_t *request)¶
-
nx_result_t (*service)(void *context)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*read)(const void *context, nx_rtc_snapshot_t *snapshot)¶
rtc_lptim_model.h¶
显式主机请求源推进与撤源故障。
作者 Nexus Team
函数
-
nx_result_t nx_native_rtc_model_advance(const nx_rtc_port_t *port, uint32_t seconds)¶
按有界的显式请求源秒数推进已设置的原始日历。
备注
工作量固定且有界,最多进位一天。已关闭但已设置的日历仍可推进;这不重新开放准入,也不证明备份保持。不读取/推进 Core 时钟,不发布、不结清,也不改变终止原因。请求源变化不是 IRQ、worker 或硬件验证资格。
- 参数:
port – [in] 精确的 Native RTC 接口面,与每个公共调用串行执行。
seconds – [in] 0..86400;零绝不创建事件。
- 返回:
SUCCESS、未设置/未构造时的 STATE、INVALID 或 UNSUPPORTED。
-
nx_result_t nx_native_rtc_model_hold_withdraw(const nx_rtc_port_t *port, bool hold)¶
注入/解除无法撤回已 armed 请求源的外部条件。
- 参数:
port – [in] 同一个串行 owner 上精确的 Native RTC 接口面。
hold – [in] true 阻止撤源;false 只解除故障。
- 返回:
SUCCESS 或 INVALID/STATE/UNSUPPORTED;绝不结清请求。
-
nx_result_t nx_native_lptim_model_advance(const nx_lptim_port_t *port, uint32_t ticks)¶
推进有限请求源,并在精确计数上限处饱和。
备注
达到完整的 65536 tick 时,采样的 16 位计数器为零;pending 完成标志与之独立。撤源被 hold 阻止时,进度可在观察到取消/时间条件后继续推进。不访问请求、终止原因或 Core 时钟。
- 参数:
port – [in] 精确的 Native LPTIM 接口面,与全部公共调用串行执行。
ticks – [in] 0..65536 个请求源 tick;空闲/未 armed 时不累计。
- 返回:
SUCCESS 或 INVALID/STATE/UNSUPPORTED。
-
nx_result_t nx_native_lptim_model_hold_withdraw(const nx_lptim_port_t *port, bool hold)¶
注入/解除撤源 hold;仍由真实公共 service 执行排空。
- 参数:
port – [in] 串行执行者上精确的 Native LPTIM 接口面。
hold – [in] false 不清除 provider 引用,也不发布结果。
- 返回:
SUCCESS 或 INVALID/STATE/UNSUPPORTED。
spi.h¶
单执行者轮询 SPI 端点与完整 CS 事务。
作者 Nexus Team
函数
-
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)¶
执行一个有界、全双工、8 位轮询事务。
备注
仅限任务上下文,由唯一执行者负责,不分配,也无 OS 锁。一次 CS 有效区间覆盖整个传输。deadline 不能抢占正在传输的硬件字节;外设排空可能晚于 deadline。
- 参数:
endpoint – [in] 一个控制器上的固定 CS/模式/速率绑定。
tx – [in] 发送字节;NULL 表示发送 0xff。
rx – [out] 接收字节;NULL 表示丢弃。
length – [in] 正的传输长度;至少提供一个缓冲区。
deadline – [in] 绝对 deadline;包含在适配器队列中的驻留时间。
transferred – [out] 完整字节数;执行前清零。
- 返回:
成功或 BUSY/INVALID/TIMEOUT/IO。排空后返回并归还全部缓冲区及 CS;轮询由 CPU 主动执行,不是 IRQ/DMA 异步。
-
nx_result_t nx_spi_port_recover(const nx_spi_port_t *port)¶
保留故障后恢复空闲 SPI 控制器。
- 参数:
port – [in] 唯一执行者,不存在活跃事务或 CS 借用。
- 返回:
仅在证明复位/空闲后成功;BUSY/STATE/UNSUPPORTED 保留恢复责任,绝不重放工作。
-
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)¶
准备未借用的有限请求,不复制缓冲区。
- 参数:
request – [inout] 新初始化的描述符,或已消费的 SETTLED 描述符。
tx – [in] 非空 TX 字节;所选模式支持 dummy 发送时可为 NULL;保持不可变直到最终结清。
rx – [out] RX 缓冲区;所选模式支持丢弃时可为 NULL。
length – [in] 正字节数,且至少提供一个缓冲区。
deadline – [in] 包含排队时间的绝对单调 deadline。
- 返回:
成功或 INVALID/STATE;失败不产生缓冲区借用。
-
nx_result_t nx_spi_endpoint_submit(const nx_spi_endpoint_t *endpoint, nx_spi_request_t *request)¶
提交一个有限、异步、覆盖整个 CS 区间的事务。
备注
仅限任务上下文的有界准入。所选模式声明 DMA 域/长度/缓冲区要求。仅 DMA TC 绝不证明外设空闲;总线执行者继续 service,直到 SETTLED。
- 参数:
endpoint – [in] 单执行者总线上的已初始化 endpoint。
request – [inout] READY 存储;仅在 NX_SUCCESS 后保留。
- 返回:
成功表示 ACCEPTED;所有拒绝错误均不保留引用,也不产生残余硬件效果。
-
nx_result_t nx_spi_endpoint_submit_memory(const nx_spi_endpoint_t *endpoint, nx_spi_request_t *request, uint8_t memory_flags)¶
提交显式递增或单元素 DMA 内存。
备注
固定方向需要一个字节,其他方向需要 length 字节,均位于已审查 DMA 域。实际范围不得重叠。所有地址在排空期间持续借用,直到以 acquire 观察到 SETTLED。不使用隐藏 scratch。两个 fixed 标志可显式实现仅发时钟的传输。请求准备不保留这些标志;只有本次成功准入才选择它们。普通 submit 和既有所有者仍遵循原有缓冲区契约。
- 参数:
endpoint – [in] 已初始化的单执行者 DMA endpoint
request – [inout] 具有两个非 NULL 调用方地址的 READY 请求
memory_flags – [in] TX_FIXED 重复发送一个不可变 dummy 字节;RX_FIXED 重复写入调用方持有的一个丢弃字节;零表示使用完整且地址递增的 TX/RX 缓冲区
- 返回:
SUCCESS 表示 ACCEPTED;其他结果不保留任何引用
-
nx_result_t nx_spi_endpoint_start_admitted(const nx_spi_endpoint_t *endpoint, nx_spi_request_t *request)¶
启动适配器已准入的 QUEUED 请求,不重复准入。
- 参数:
endpoint – [in] 已初始化的精确 CS 绑定及总线执行者。
request – [inout] 活跃的 QUEUED 存储,已由其适配器借用。
- 返回:
成功将执行权交给总线;BUSY 保持 QUEUED。其他错误必须由适配器执行者结清。
-
bool nx_spi_endpoint_on_port(const nx_spi_endpoint_t *endpoint, const nx_spi_port_t *port)¶
验证端点属于所推进的总线。
备注
任务/IRQ 中均为有界冷态身份检查,不查找,也不产生所有权效果。适配器在执行硬件前检查;异步准入也在借用前检查。
- 参数:
endpoint – [in] 由调用方保持有效的不可变 endpoint 身份。
port – [in] 绑定到适配器的精确执行总线。
- 返回:
仅当 provider 证明控制器状态匹配且总线方法兼容时为真;无效或缺少方法时为 false。
-
nx_result_t nx_spi_port_cancel(const nx_spi_port_t *port, nx_spi_request_t *request)¶
请求取消,不撤销 DMA/CS 缓冲区借用。
备注
跨任务控制使用稳定的适配器 slot 和 epoch。
- 参数:
port – [in] 与 submit 和 service 相同的唯一执行所有者。
request – [inout] 精确、仍然有效的活跃请求,不得使用陈旧裸指针。
- 返回:
成功开始排空或观察到先前结清;其他请求返回 STATE,仅轮询 provider 返回 UNSUPPORTED。
-
void nx_spi_port_service(const nx_spi_port_t *port)¶
由唯一 Task 执行者推进一个异步总线。
备注
有界且不等待的 service。最终发布发生在 DMA/IRQ 分离及证明外设空闲之后;排空失败会隔离。
- 参数:
port – [in] 仍然有效的 provider;停止及整个排空期间持续调用。
-
nx_result_t nx_spi_port_stop(const nx_spi_port_t *port)¶
关闭准入,完整排空之前保留活动源。
- 参数:
port – [in] 仍然有效的总线;所有外部生产者均已静默。
- 返回:
成功证明来源已撤回,BUSY 要求 service;provider 不提供异步生命周期时返回 UNSUPPORTED。
-
nx_result_t nx_spi_port_attach_wake(const nx_spi_port_t *port, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
向异步总线 IRQ 发布者附加可选提示接收端。
备注
释放唤醒存储前,等待旧发布者及等待者退出。
- 参数:
port – [in] 由任务执行者控制的一个已初始化总线。
wake – [in] 不可变的借用目标;NULL 表示分离。
syscall_ceiling – [in] 可选的额外未移位内核安全优先级数值下限;不得削弱生成策略。PRIMASK 内核目标要求为零。不调用内核时忽略。
- 返回:
成功;实际优先级不安全时返回 PERMISSION,非法控制返回 CONTEXT/STATE,仅轮询总线返回 UNSUPPORTED。
-
struct nx_spi_request_t¶
- #include <spi.h>
调用者拥有的有限 SPI 请求,包含一个完整 CS 区间。
备注
prepare 前初始化 base。已接受请求持续借用 TX/RX 中所有非 NULL 缓冲区,直到以 acquire 观察到 SETTLED,包括取消和超时排空期间。QUARANTINED 保留借用。
-
struct nx_spi_ops_t¶
- #include <spi.h>
使用同一个提供者状态的共享只读方法。
备注
各方法遵循对应公共操作的所有权合同。缺失的可选方法返回 UNSUPPORTED。
公共成员
-
nx_result_t (*recover)(void *context)¶
-
nx_result_t (*cancel)(void *context, nx_spi_request_t *request)¶
-
void (*service)(void *context)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*attach_wake)(void *context, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
-
nx_result_t (*recover)(void *context)¶
-
struct nx_spi_port¶
- #include <spi.h>
指向调用者自有状态的不可变接口。
备注
接口和状态的生命周期覆盖调用方、IRQ 及保留的借用。工厂查找既不初始化,也不取得硬件。
-
struct nx_spi_endpoint_ops_t¶
- #include <spi.h>
使用同一个提供者状态的共享只读方法。
备注
各方法遵循对应公共操作的所有权合同。缺失的可选方法返回 UNSUPPORTED。
公共成员
-
nx_result_t (*transfer)(void *context, const uint8_t *tx, uint8_t *rx, size_t length, nx_time_us_t deadline, size_t *transferred)¶
-
nx_result_t (*submit)(void *context, nx_spi_request_t *request)¶
-
nx_result_t (*start_admitted)(void *context, nx_spi_request_t *request)¶
-
bool (*on_port)(const void *context, const nx_spi_port_t *port)¶
-
nx_result_t (*submit_memory)(void *context, nx_spi_request_t *request, uint8_t memory_flags)¶
-
nx_result_t (*transfer)(void *context, const uint8_t *tx, uint8_t *rx, size_t length, nx_time_us_t deadline, size_t *transferred)¶
spi_dma_model.h¶
显式 Native 分段传输与排空故障控制。
作者 Nexus Team
函数
-
void nx_native_spi_dma_model_step(const nx_spi_dma_transaction_port_t *port)¶
推进一个模型传输字,或观察最终空闲事件。
备注
由调用方安排任务/模型 IRQ;没有隐藏 worker。有界提示之前先锁存事实。发布者汇合后绝不再调用。已停止的所有者不能驱动后继实例的模型。
- 参数:
port – [in] 精确、仍然有效的 Native 增强控制器。
-
nx_result_t nx_native_spi_dma_model_automatic(const nx_spi_dma_transaction_port_t *port, bool automatic)¶
选择在任务服务期间进行可选的单步推进。
备注
仅限任务上下文。仍可显式逐步推进。此模型不建立物理 IRQ/DMA 时序或 HIL。
- 参数:
port – [in] 精确、仍然有效且已静默的 Native 增强控制器。
automatic – [in] true 表示每次 service 推进一个模型步骤。
- 返回:
返回 SUCCESS、INVALID、STATE、CONTEXT,或因借用未结束而返回 BUSY。
-
nx_result_t nx_native_spi_dma_model_hold(const nx_spi_dma_transaction_port_t *port, bool hold)¶
注入或解除无法证明模型物理排空的故障。
备注
仅限任务上下文,借用期间允许调用。移除故障不等于结清;继续推进模型并由唯一执行者 service。
- 参数:
port – [in] 精确、仍然有效的 Native 增强控制器。
hold – [in] 为 true 时保留全部请求/CS 借用。
- 返回:
返回 SUCCESS、INVALID、STATE 或 CONTEXT。
-
nx_result_t nx_native_spi_dma_model_fault(const nx_spi_dma_transaction_port_t *port, size_t fail_after)¶
在选定的零基传输字之前使阶段失败。
备注
仅限任务上下文的模型输入;不重放,也不提前释放借用。
- 参数:
port – [in] 精确、仍然有效的 Native 增强控制器。
fail_after – [in] SIZE_MAX 禁用注入故障。
- 返回:
返回 SUCCESS、INVALID、STATE 或 CONTEXT。
spi_dma_owner_binding.h¶
可选不可变的分段 SPI 所有权与 IRQ 绑定。
作者 Nexus Team
函数
-
bool nx_spi_dma_owner_contains(const nx_spi_dma_owner_binding_t *binding, const nx_spi_dma_transaction_endpoint_t *endpoint)¶
检查精确端点归属,不产生硬件效果。
备注
不获取资源、不初始化、不分配,也不执行 service。
- 参数:
binding – [in] 由 provider 拥有、稳定且不可变的能力描述。
endpoint – [in] 所选总线上的稳定增强端点。
- 返回:
身份格式错误或归属不符时返回 false。
-
nx_result_t nx_spi_dma_owner_attach_wake(const nx_spi_dma_owner_binding_t *binding, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
将借用的提示接收端附加到实际验证过的 IRQ 发布者。
备注
仅限任务上下文。拒绝时保留原有绑定。提示不代表完成。仅 detach 不能等待已捕获接收器的发布者退出。销毁通知数据前,须停止并等待发布者和等待者退出。
- 参数:
binding – [in] 稳定的所选控制器能力描述。
wake – [in] 保持有效直到发布者退出的不可变接收器;按 provider 生命周期契约传入 NULL 可解除绑定。
syscall_ceiling – [in] 实际的未移位内核阈值。
- 返回:
SUCCESS、INVALID、CONTEXT、UNSUPPORTED 或 provider 失败。
-
struct nx_spi_dma_owner_binding_t¶
- #include <spi_dma_owner_binding.h>
仅选定实例具有的提供者能力,不修改 IO 接口。
备注
稳定的不可变存储须比执行器和发布者存活更久。contains 证明实际控制器身份;显示名称或调用方拼装的一对指针不能证明归属。attach_wake 在借用接收器前验证实际 IRQ 源。缺少钩子时,可显式周期性执行 service。
公共成员
-
const nx_spi_dma_transaction_port_t *port¶
-
bool (*contains)(const nx_spi_dma_transaction_endpoint_t*, const nx_spi_dma_transaction_port_t*)¶
-
nx_result_t (*attach_wake)(const nx_spi_dma_transaction_port_t*, const nx_irq_wake_t*, uint8_t)¶
-
const nx_spi_dma_transaction_port_t *port¶
spi_dma_transaction.h¶
可选的有限、完整 CS 区间分段 SPI DMA 请求合同。
作者 Nexus Team
函数
-
nx_result_t nx_spi_dma_transaction_prepare(nx_spi_dma_transaction_request_t *request, const nx_spi_dma_segment_t *segments, size_t count, uint8_t word_bits, nx_time_us_t deadline)¶
验证每个范围后准备尚未借用的存储。
备注
描述符和载荷不得与请求存储重叠。RX 不得覆盖任何 TX 或描述符。仅当多次 RX 指向同一个显式 FIXED 丢弃单元时,才允许重复别名。准入时检查 provider 特有的内存域。
- 参数:
request – [inout] 已初始化为 READY 或已消费的 SETTLED 存储。
segments – [in] 调用方拥有的不可变数组,最多 MAX_SEGMENTS 项。
count – [in] 正数段数;每段的 words 均为正数。
word_bits – [in] 全部段共用的 8 位或 16 位硬件位宽。
deadline – [in] 整条链的绝对单调时限。
- 返回:
SUCCESS 或 INVALID/UNSUPPORTED/STATE;失败时不建立借用。
-
nx_result_t nx_spi_dma_transaction_validate(const nx_spi_dma_transaction_request_t *request)¶
验证不可变字段,不执行准入或修改内存。
-
nx_result_t nx_spi_dma_transaction_submit(const nx_spi_dma_transaction_endpoint_t *endpoint, nx_spi_dma_transaction_request_t *request)¶
在仅限任务的单一执行者上准入一个有限链。
备注
准入前验证全部内存域和段。整条链共用一个 CS 有效区间;允许段间出现 SCK 间隔。仅有 DMA TC 不能证明线路空闲。
- 参数:
endpoint – [in] 稳定的增强 DMA 端点及 provider 状态。
request – [inout] READY 描述符;仅在 SUCCESS 时保留引用。
- 返回:
SUCCESS 表示 ACCEPTED,也可能已经 SETTLED。拒绝时不保留引用,也不产生硬件副作用。
-
nx_result_t nx_spi_dma_transaction_cancel(const nx_spi_dma_transaction_port_t *port, nx_spi_dma_transaction_request_t *request)¶
取消对应活动请求,同时保留全部借用。
- 参数:
port – [in] 与 submit 和 service 共用的同一个单执行者。
request – [inout] 精确的当前请求,或已通过 acquire 语义观测为 SETTLED 的请求。
- 返回:
SUCCESS 启动或观测取消;INVALID/STATE/CONTEXT 拒绝操作,但不撤销任何已有借用。
-
void nx_spi_dma_transaction_service(const nx_spi_dma_transaction_port_t *port)¶
推进一个有界阶段边界、完成或排空。
备注
不等待、不分配、不复制载荷,也无隐藏任务或 OS 锁。排空或释放失败时保留 QUARANTINED 存储。最终硬件引用撤离且 CS 释放后才发布 SETTLED;这是 provider 对调用方请求和描述符的最后一次访问。
- 参数:
port – [in] 仅限任务上下文的增强控制器;停止过程中仍须继续调用。
-
nx_result_t nx_spi_dma_transaction_stop(const nx_spi_dma_transaction_port_t *port)¶
关闭准入,并在源完整撤离后停止。
备注
成功停止后重复 stop 不再访问硬件;其他所有者可能已取得该控制器。
- 参数:
port – [in] 稳定的单执行者状态;生产者已静止。
- 返回:
SUCCESS 证明已停止;BUSY 表示仍须执行 service,并保留全部未完成存储,包括隔离中的请求。
-
struct nx_spi_dma_segment_t¶
- #include <spi_dma_transaction.h>
显式 DMA 字,使用调用者拥有的填充值/丢弃单元。
备注
两个地址都必须提供。FIXED 方向借用一个字;地址递增方向借用 words 个元素。全部段位宽相同。DMA 不使用轮询段的隐式 NULL/dummy 表示,也不使用隐藏暂存区。
-
struct nx_spi_dma_transaction_request_t¶
- #include <spi_dma_transaction.h>
调用者拥有的请求;每个分段持续借用至排空完成。
备注
prepare 前先初始化 base。ACCEPTED 借用本对象、描述符数组、全部 TX/RX 范围和固定单元,直到通过 acquire 语义观测到 SETTLED。中间段完成、取消和超时都不释放这些借用。完成计数以成功结算的段中的字数为单位;失败段的部分副作用不作量化。
-
struct nx_spi_dma_transaction_endpoint_ops_t¶
- #include <spi_dma_transaction.h>
公共成员
-
nx_result_t (*submit)(void *context, nx_spi_dma_transaction_request_t *request)¶
-
nx_result_t (*submit)(void *context, nx_spi_dma_transaction_request_t *request)¶
-
struct nx_spi_dma_transaction_endpoint¶
- #include <spi_dma_transaction.h>
-
struct nx_spi_dma_transaction_port_ops_t¶
- #include <spi_dma_transaction.h>
公共成员
-
nx_result_t (*cancel)(void *context, nx_spi_dma_transaction_request_t *request)¶
-
void (*service)(void *context)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*cancel)(void *context, nx_spi_dma_transaction_request_t *request)¶
-
struct nx_spi_dma_transaction_port¶
- #include <spi_dma_transaction.h>
spi_transaction.h¶
可选的多分段、完整 CS 区间 8/16 位轮询 SPI。
作者 Nexus Team
宏定义
-
NX_SPI_MAX_SEGMENTS¶
描述符数量有界;不存在隐藏的拼接缓冲。
函数
-
nx_result_t nx_spi_transaction_validate(const nx_spi_segment_t *segments, size_t count, uint8_t word_bits)¶
验证每个描述符与范围,不产生硬件效果。
备注
不借用、复制、分配或修改内存。NULL 数据指针可表示合法的填充发送或接收丢弃操作。本检查不验证 provider 特有的控制器、速率或限制。
- 参数:
segments – [in] 已对齐的不可变数组,由调用方保留。
count – [in] 正数描述符数量,最多 MAX_SEGMENTS 个。
word_bits – [in] 只能为 8 或 16;整个 CS 有效区间保持不变。
- 返回:
SUCCESS;范围格式错误、重叠或溢出时为 INVALID;描述符数量或字宽超限时为 UNSUPPORTED。
-
nx_result_t nx_spi_transaction_transfer(const nx_spi_transaction_endpoint_t *endpoint, const nx_spi_segment_t *segments, size_t count, uint8_t word_bits, nx_time_us_t deadline, size_t *transferred)¶
在同一个 CS 有效区间内执行全部分段。
备注
仅限任务上下文的单执行者;轮询持续占用 CPU。线路排空或 provider 复位,并释放 CS 后,函数返回并释放描述符及载荷借用。时限不能抢占正在传输的一个字。错误不重放先前的段。阶段之间不分配、不取得 OS 锁、不使用隐藏暂存区,也不改变位宽或切换 CS。这是同步操作:已有的有限 DMA 请求和取消契约保持不变。
- 参数:
endpoint – [in] 可选增强接口,具有稳定的私有状态。
segments – [in] 调用方拥有的描述符及其数据范围。
count – [in] 阶段数量;所有阶段均须在硬件使用前验证。
word_bits – [in] 共用的硬件帧位宽,为 8 位或 16 位。
deadline – [in] 全部阶段共用的绝对单调时限。
transferred – [out] 完整接收的字数,单位不是字节;独立可写的 size_t 存储,在执行 provider 前清零。
- 返回:
SUCCESS 或 INVALID/UNSUPPORTED/CONTEXT/STATE/BUSY/TIMEOUT/IO。
-
struct nx_spi_segment_t¶
- #include <spi_transaction.h>
单个 CS 区间内的一个阶段。
备注
字使用事务共用的 8 位或 16 位位宽。NULL TX 重复发送 dummy;NULL RX 丢弃接收。二者均可为 NULL,仅产生时钟。非 NULL 范围包含 words 个元素;16 位范围须按 uint16_t 对齐。描述符和 TX 存储在返回前保持不可变。RX 不得与描述符、TX 存储、其他 RX 范围或完成计数输出重叠。普通字节范围 SPI 仍为独立且未改变的接口。
-
struct nx_spi_transaction_ops_t¶
- #include <spi_transaction.h>
共享不可变方法;缺少传输方法时报告 UNSUPPORTED。
公共成员
-
nx_result_t (*transfer)(void *context, const nx_spi_segment_t *segments, size_t count, uint8_t word_bits, nx_time_us_t deadline, size_t *transferred)¶
-
nx_result_t (*transfer)(void *context, const nx_spi_segment_t *segments, size_t count, uint8_t word_bits, nx_time_us_t deadline, size_t *transferred)¶
-
struct nx_spi_transaction_endpoint¶
- #include <spi_transaction.h>
可选接口,与选定提供者的现有总线状态共享。
stream.h¶
调用者拥有的有界块与显式生产者/消费者借用。
作者 Nexus Team
宏定义
-
NX_STREAM_BOUNDARY_IDLE¶
-
NX_STREAM_BOUNDARY_TRIGGER¶
-
NX_STREAM_BOUNDARY_LOSS¶
-
NX_STREAM_BOUNDARY_ERROR¶
枚举
函数
-
nx_result_t nx_stream_initialize(nx_stream_t *stream, nx_stream_slot_t *slots, size_t count)¶
初始化未借用的 stream 与准确供给的块数组。
备注
仅限任务上下文的冷装配。本辅助函数不验证 DMA 内存域;硬件 provider 必须验证每个块。
- 参数:
stream – [out] 全新存储,尚未向任何生产者或消费者公开。
slots – [inout] 与全部控制及槽元数据分离的缓冲。
count – [in] 正数精确块数,不是缓冲池最大数量。
- 返回:
成功或 INVALID;不分配,也不保留无效输入。
-
nx_result_t nx_stream_reserve(nx_stream_t *stream, nx_stream_fill_t *fill)¶
为一个串行生产者预留下一个空闲块。
备注
任务/IRQ 中的有界元数据操作;载荷写入在短暂中断屏蔽区之外、返回的借用范围内执行。
- 参数:
stream – [inout] 已初始化的活动流,只有一个生产者。
fill – [out] 生产者借用,在 publish 或经证明的 abort 前有效。
- 返回:
成功;OVERFLOW 不覆盖数据;停止时返回 STATE;单调借用身份无法递增时返回 EXHAUSTED。
-
bool nx_stream_can_reserve(const nx_stream_t *stream)¶
查询下一个物理槽,不产生借用或丢失。
备注
任务/IRQ 中的有界提示。生产者仍须先调用 reserve 才能访问载荷;其他上下文不得与准入并发竞争。
- 参数:
stream – [in] 已初始化的活动流,只有一个串行化生产者。
- 返回:
仅在准入开放且下一个槽空闲时返回 true。
-
void nx_stream_note_loss(nx_stream_t *stream, uint32_t count)¶
锁存明确观察到的生产者丢弃边界。
备注
任务/IRQ 中的有界操作。在 UINT32_MAX 饱和;下一个发布块携带 LOSS,与其有效载荷长度无关。
- 参数:
stream – [inout] 由串行化生产者控制的活动流。
count – [in] 丢失块或边界的正数数量,不能猜测字节数。
-
nx_result_t nx_stream_publish(nx_stream_t *stream, const nx_stream_fill_t *fill, size_t length, uint32_t flags)¶
全部硬件写引用撤离后,发布完整块。
备注
任务/IRQ 中的有界操作。如果引擎仍能写入所发布的块,DMA 半完成/全完成标志就不足以证明可发布。消费者可见的块字节在消费者释放前保持不可变。
- 参数:
stream – [inout] 与 reserve 相同的串行化生产者。
fill – [in] 当前生产者借用;发布后不再保留该令牌引用。
length – [in] 预留容量范围内的正数已生产字节数。
flags – [in] provider 实际观测到的 IDLE/TRIGGER 边界。
- 返回:
成功、INVALID 或 STATE;失败时保留生产者所有权。
-
nx_result_t nx_stream_acquire(nx_stream_t *stream, nx_stream_block_t *block)¶
一个串行消费者取得下一个就绪块。
备注
任务/IRQ 中的有界元数据操作;消费者在屏蔽区外处理载荷。可乱序释放,且不会覆盖仍被持有的数据。
- 参数:
stream – [inout] 活动流;停止过程中消费者仍可排空。
block – [out] 带精确代次令牌的不可变消费者借用。
- 返回:
成功、EMPTY 或 INVALID;空流不建立借用。
-
nx_result_t nx_stream_release(nx_stream_t *stream, const nx_stream_block_t *block)¶
最终使用之后,仅释放匹配的消费者实例世代。
备注
任务/IRQ 中的有界操作;release 是消费者对该块的最后一次访问。
- 参数:
stream – [inout] 同一消费者所有者;不再有该块的剩余观测者。
block – [in] 精确的已获取令牌,不能重新拼装指针代替。
- 返回:
成功;过期或重复释放返回 STATE;也可能返回 INVALID。
-
nx_result_t nx_stream_abort(nx_stream_t *stream, const nx_stream_fill_t *fill, bool memory_quiesced)¶
仅内存写入源撤离之后中止生产者借用。
备注
仅取消或达到时限不能证明已静止。
- 参数:
stream – [inout] 与 reserve 相同的生产者所有者。
fill – [in] 当前的精确借用。
memory_quiesced – [in] 仅在 provider 证明 DMA/IRQ 已停止后才为 true。
- 返回:
成功;排空未获证明时为 BUSY;令牌过期时为 STATE。
-
nx_result_t nx_stream_stop(nx_stream_t *stream)¶
关闭生产者准入,保留每一个未结清借用。
备注
任务/IRQ 中的常量元数据工作量,与块数无关。本操作不停止硬件,也不撤销借用。
- 参数:
stream – [inout] 活动控制对象,须保持有效直到最后一次 stop 成功。
- 返回:
仅在全部块空闲时成功;生产者引用撤离且消费者排空并释放之前返回 BUSY;控制对象无效时返回 INVALID。
-
nx_result_t nx_stream_post_initialize(nx_stream_producer_t *producer, nx_stream_t *stream)¶
将预提交生产者绑定到静止、已初始化的 stream。
备注
仅限任务上下文的冷绑定。调用方拥有排他生产者权限,并保留控制对象直到全部待填充操作及 IRQ 排空。
- 参数:
producer – [out] 独立的调用方控制对象,不得与缓冲建立别名
stream – [inout] 准入已开放,且无未归还的生产者或消费者借用
- 返回:
SUCCESS、INVALID、BUSY 或 STATE;拒绝时输出不变
-
bool nx_stream_post_can_reserve(const nx_stream_producer_t *producer)¶
查询下一个预提交槽,不产生借用或猜测丢失。
备注
任务/IRQ 中的有界提示;写入载荷前仍须 reserve。
- 参数:
producer – [in] 同一排他且串行化的生产者
- 返回:
下次预留可以成功时返回 true
-
nx_result_t nx_stream_post_reserve(nx_stream_producer_t *producer, nx_stream_fill_t *fill)¶
预留未来填充,不提前使更早的块就绪。
备注
任务/IRQ 中为 O(1)。失败时输出和丢失计数不变;仅显式观测到边界后才可调用 note_loss。
- 参数:
producer – [inout] 活动的预提交生产者
fill – [out] 精确的待完成借用,在 FIFO 发布或 LIFO 中止前有效
- 返回:
SUCCESS、OVERFLOW、STATE、EXHAUSTED 或 INVALID
-
nx_result_t nx_stream_post_publish(nx_stream_producer_t *producer, const nx_stream_fill_t *fill, size_t length, uint32_t flags)¶
仅发布最早 pending 且已撤离引用的生产者借用。
备注
任务/IRQ 中为 O(1)。消费者通过原有流执行 acquire/release。
- 参数:
producer – [inout] 与 reserve 相同的排他生产者
fill – [in] 精确的最旧令牌,已从全部硬件目标中撤离
length – [in] 正数有效字节数,最多为块容量
flags – [in] 实际观测到的 IDLE/TRIGGER/ERROR 边界事实
- 返回:
SUCCESS、INVALID 或 STATE;拒绝时保留借用
-
nx_result_t nx_stream_post_abort(nx_stream_producer_t *producer, const nx_stream_fill_t *fill, bool memory_quiesced)¶
证明内存排空后,取消最新 pending 填充。
备注
任务/IRQ 中为 O(1)。不推进消费者或已发布游标,不会在后续发布位置前产生 FREE 空洞。停止会关闭准入,但仍允许经证明的尾部回滚。
- 参数:
producer – [inout] 同一生产者;回滚严格遵循 LIFO
fill – [in] 精确的最新待完成令牌
memory_quiesced – [in] 源已撤离,不再有剩余写入
- 返回:
SUCCESS、BUSY、STATE 或 INVALID;失败时保留借用
-
struct nx_stream_slot_t¶
- #include <stream.h>
调用者拥有的块元数据;仅初始化 data 与 capacity。
备注
存储须保持有效,直到生产者和消费者均已静止。
-
struct nx_stream_t¶
- #include <stream.h>
调用者拥有的 stream 控制,必须先初始化再发布。
备注
outstanding 统计非空闲块,包括填充中、就绪和已借用状态。仅流操作可修改该计数。
stream_budget.h¶
可选恒定工作量快照与经过检查的冷态容量计算。
作者 Nexus Team
函数
-
nx_result_t nx_stream_observe(const nx_stream_t *stream, nx_stream_observation_t *out)¶
在一个短 IRQ 临界区内快照维护的元数据。
备注
任务/IRQ 中的固定工作量,不扫描槽,也不访问载荷。调用方须保持全部存储有效;不保留观测者引用。next_free 是普通流游标,不是私有预提交游标。输出与全部载荷分离。
- 参数:
stream – [in] 已初始化的活动存储,不得并发销毁。
out – [out] 独立输出;元数据或别名检查拒绝时保持不变。
- 返回:
SUCCESS;控制事实不一致时返回 INVALID 或 STATE。
-
nx_result_t nx_stream_budget_calculate(const nx_stream_budget_t *budget, nx_stream_budget_result_t *out)¶
经过检查的冷态计算,不修改 stream 或分配存储。
备注
required = targets + spares + ceil(raterelease_delay / (block_units1000000));载荷大小为 requiredblockunit_bytes。在所声明的 FIFO 队首释放延迟界限下,此有限算术计算是保守的;乱序释放仍可能阻塞下一个游标。延迟要求 target_delay_us < floor(units_per_block*1000000/units_per_second)。本计算不建立背压,也不构成硬件资格证明。
- 参数:
budget – [in] 显式速率、最长释放延迟和流水线配置。
out – [out] 独立输出;错误或溢出时保持不变。
- 返回:
SUCCESS、INVALID;算术溢出时返回 EXHAUSTED。
-
struct nx_stream_observation_t¶
- #include <stream_budget.h>
O(1) 汇总事实;总空闲容量不证明游标位置空闲。
-
struct nx_stream_budget_t¶
- #include <stream_budget.h>
显式工程假设,不推断硬件速率。
备注
release_delay 包含每个已发布 FIFO 队首块直到释放为止的排队和消费者延迟。通过 unit_bytes 将单位转换为字节。targets/spares 是实际选择的硬件借用。除 delay/targets/spares 外,全部量均为正数。
公共成员
-
uint64_t units_per_second¶
-
size_t units_per_block¶
-
size_t unit_bytes¶
-
nx_time_us_t release_delay_us¶
-
nx_time_us_t target_delay_us¶
-
size_t hardware_targets¶
-
size_t spare_blocks¶
-
size_t configured_blocks¶
-
uint64_t units_per_second¶
-
struct nx_stream_budget_result_t¶
- #include <stream_budget.h>
依据声明假设得到的保守预算,绝不作为物理证据。
stream_profile.h¶
可选只读的连续流冷准入配置。
作者 Nexus Team
函数
-
nx_result_t nx_uart_stream_profile_start(const nx_uart_stream_profile_t *profile, nx_stream_t *stream)¶
绑定的 UART 借用缓冲池之前验证实际缓冲池。
备注
调用方须在此次冷缓冲池检查前等待全部池用户退出。在 provider 派发前失败,不会建立借用、改变 epoch 或产生硬件副作用。速率、FIFO 队首持有时间及 IRQ 延迟始终是声明的假设,不是量测。本操作不建立外部 UART 流控,也不保证无丢失。底层未使用 profile 的 API 保留其显式契约。
- 参数:
profile – [in] 稳定、只读且已经审核的绑定与假设。
stream – [inout] 已初始化且尚未借出的缓冲池,块数及各块字节容量与声明精确一致;须保持有效,直到原 provider 停止且全部消费者释放借用。
- 返回:
几何或别名不匹配时为 INVALID;停止中的元数据返回 STATE;已有借用时为 BUSY;不在中断未屏蔽任务上下文中时为 CONTEXT;溢出或预算不足时为 EXHAUSTED;目标延迟不满足要求时为 UNSUPPORTED;其余情况返回 provider 结果。
-
nx_result_t nx_adc_stream_profile_start(const nx_adc_stream_profile_t *profile, nx_stream_t *stream, uint32_t trigger_hz)¶
ADC 准入之前验证缓冲池与完整扫描速率。
备注
ADC 停止触发会产生采样缺口。任何预算都不能使这一暂停保留按实际时间连续发生的采样,也不能证明未来消费者或 IRQ 的界限。不会创建观测者或队列。
- 参数:
profile – [in] 到所选 ADC 接口的稳定只读绑定。
stream – [inout] 已初始化且未借出的精确缓冲池,要求同 UART。
trigger_hz – [in] 每秒完整扫描的正数标称次数,不大于所声明的生产速率上界。
- 返回:
冷检查错误同 UART,否则返回原 info/start 结果。provider 的扫描、定时器、DMA/cache 及别名检查仍然适用;任何被拒绝的操作都不保留新引用。
-
struct nx_uart_stream_profile_t¶
- #include <stream_profile.h>
选定的 UART 接口与不可变的字节流假设。
备注
已审核的装配绑定实际连续 provider。要求两个硬件目标及一个替补块。profile 不分配也不拥有调用方的缓冲池。普通字节接口及 provider 状态布局保持不变。冷准入以 O(n^2) 重新检查载荷互不重叠;IRQ 或稳定 I/O 路径不增加额外检查。
-
struct nx_adc_stream_profile_t¶
- #include <stream_profile.h>
选定的 ADC 接口与完整扫描流假设。
备注
一个单位是一轮完整的所选扫描,每通道存储一个 uint16_t。分辨率位数不能替代存储位宽。几何和速率是已审核的装配输入,不能据此证明采样准确度或孔径时刻。
timer.h¶
固定定时器/通道 PWM,共享同一个基准配置。
作者 Nexus Team
函数
-
nx_result_t nx_pwm_port_set(const nx_pwm_port_t *port, uint32_t period_ticks, uint32_t duty_ticks)¶
原子暂存已审查固定基准 PWM 的占空比。
备注
影子更新在下一次更新事件生效;成功暂存不代表电气输出立即改变。
- 参数:
port – [inout] 固定定时器/通道,只有一个串行化写入者。
period_ticks – [in] 已维护共享时基的正数周期。
duty_ticks – [in] 从零到 period_ticks,包含两端。
- 返回:
成功或 INVALID/STATE/BUSY。零及 100% 对应显式恒定电平。共享通道必须使用同一 PSC/ARR/时基;配置会拒绝改变其他通道的时基。
-
nx_result_t nx_pwm_port_start(const nx_pwm_port_t *port)¶
启用此前已配置的固定 PWM 输出。
- 参数:
port – [inout] Board 已设置无效电平后的执行所有者。
- 返回:
成功或 INVALID/STATE。
-
nx_result_t nx_pwm_port_stop(const nx_pwm_port_t *port)¶
以声明的 Board 非活动电气电平停止 PWM。
- 参数:
port – [inout] 已静止的执行所有者;不得并发 set/start。
- 返回:
成功或 INVALID;不承诺高级 break/capture 能力。
-
nx_result_t nx_pwm_port_state(const nx_pwm_port_t *port, nx_pwm_state_t *state)¶
查询暂存 PWM 计数与选定定时器时钟。
- 参数:
port – [in] 固定且已初始化的通道。
state – [out] 已暂存的计数、时钟及运行状态。
- 返回:
成功或 INVALID。
-
struct nx_pwm_ops_t¶
- #include <timer.h>
使用同一个提供者状态的共享只读方法。
备注
各方法遵循对应公共操作的所有权合同。缺失的可选方法返回 UNSUPPORTED。
公共成员
-
nx_result_t (*set)(void *context, uint32_t period_ticks, uint32_t duty_ticks)¶
-
nx_result_t (*start)(void *context)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*state)(const void *context, nx_pwm_state_t *state)¶
-
nx_result_t (*set)(void *context, uint32_t period_ticks, uint32_t duty_ticks)¶
timer_capture.h¶
可选原始定时器边沿捕获与调用者拥有的事件。
作者 Nexus Team
枚举
函数
-
nx_result_t nx_timer_capture_start(const nx_timer_capture_t *port, nx_timer_capture_event_t *events, size_t capacity)¶
借用准确事件环并启用固定捕获通道。
备注
环一直被借用,直到 stop 成功。ISR 对事件存储的访问仅限于该环。借用期间调用方不得修改环或其 provider。计数器按已报告位宽取模回卷;观测时间不是绝对边沿时间戳,也不构成时钟准确度资格证明。
- 参数:
port – [in] 单一特权任务所有者,与 stop/read 串行执行。
events – [inout] 已对齐的可写环,容量为正数。
capacity – [in] 事件数量;无隐藏缓冲或工作任务。
- 返回:
SUCCESS 转移环的借用;拒绝时不保留任何引用。
-
nx_result_t nx_timer_capture_stop(const nx_timer_capture_t *port)¶
归还存储之前禁用并读回通道/IRQ 源。
备注
捕获停止后,read 仍可排空事件。撤离失败绝不释放存储。仅在 stop 成功且发布者静止后,冷装配才释放 Board 引脚、定时器时钟及共享向量租约。
- 参数:
port – [in] 特权任务所有者,并保留生成的 IRQ 所有者。
- 返回:
SUCCESS 是对环的最后一次访问;仍有排队事件或硬件撤离失败时,BUSY 保留借用。
-
nx_result_t nx_timer_capture_read(const nx_timer_capture_t *port, nx_timer_capture_event_t *event)¶
在短且保存原屏蔽状态的元数据临界区内复制最早事件。
- 参数:
port – [in] 单一特权任务消费者。
event – [out] 独立可写输出;EMPTY 或拒绝时保持不变。
- 返回:
SUCCESS、EMPTY、STATE 或 INVALID;无需另行释放块。
-
nx_result_t nx_timer_capture_state(const nx_timer_capture_t *port, nx_timer_capture_state_t *state)¶
查询计数器单位与可观察队列/丢失事实。
备注
硬件过捕获和环饱和可能合并边沿。丢失事件不用于估算边沿数量、边沿频率或实际 IRQ WCET。
- 参数:
port – [in] 特权任务所有者;不得并发执行生命周期写操作。
state – [out] 独立可写快照。
- 返回:
SUCCESS 或 INVALID/STATE/CONTEXT。
-
struct nx_timer_capture_event_t¶
- #include <timer_capture.h>
硬件模计数器与独立的 IRQ 观察时间。
-
struct nx_timer_capture_state_t¶
- #include <timer_capture.h>
固定计数器单位与当前软件保留状态。
-
struct nx_timer_capture_ops_t¶
- #include <timer_capture.h>
共享不可变方法;不逐次取得资源或分配。
公共成员
-
nx_result_t (*start)(void *context, nx_timer_capture_event_t *events, size_t capacity)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*read)(void *context, nx_timer_capture_event_t *event)¶
-
nx_result_t (*state)(const void *context, nx_timer_capture_state_t *state)¶
-
nx_result_t (*start)(void *context, nx_timer_capture_event_t *events, size_t capacity)¶
-
struct nx_timer_capture¶
- #include <timer_capture.h>
不可变身份;状态和方法必须在所有调用与 IRQ 完全退出前保持有效。
uart.h¶
IRQ TX 请求与分别预算的字节/事件接收。
作者 Nexus Team
宏定义
-
NX_UART_EVENT_PARITY¶
-
NX_UART_EVENT_FRAMING¶
-
NX_UART_EVENT_OVERRUN¶
-
NX_UART_EVENT_NOISE¶
-
NX_UART_EVENT_LOSS¶
-
NX_UART_EVENT_NO_BYTE¶
枚举
函数
-
nx_result_t nx_uart_tx_prepare(nx_uart_tx_request_t *request, const uint8_t *data, size_t length, nx_time_us_t deadline)¶
准备未借用 IRQ TX 描述符,不复制数据。
- 参数:
request – [inout] 新初始化的请求,或已经消费的 SETTLED 请求。
data – [in] 非空载荷,保持不变直到 SETTLED。
length – [in] 正数字节数。
deadline – [in] nx_time_now_us 时钟域中的绝对时限。
- 返回:
NX_SUCCESS 或 INVALID/STATE;失败时不保留缓冲引用。
-
nx_result_t nx_uart_port_submit(const nx_uart_port_t *port, nx_uart_tx_request_t *request)¶
向单执行者 UART 提交一个直接请求。
备注
仅限任务上下文的有界准入。TX 完成须等待真正的 TC,即线路空闲。IRQ 仅搬运字节或发布硬件事实;所有者调用 service 以观测时限并结算请求。最先观测到的终态事实锁定其结果。后续 service、时限或取消不会覆盖已观测到的 TC。IRQ/service 延迟界限仍是 provider 与产品资格验证的输入。
- 参数:
port – [inout] 由当前执行上下文拥有、已初始化且空闲的端口。
request – [inout] READY 描述符;仅在 NX_SUCCESS 时借用。
- 返回:
NX_SUCCESS 表示 ACCEPTED,包括随后启动失败的情况。BUSY/INVALID/CONTEXT/STATE/TIMEOUT 表示 REJECTED,借用为零;直接提交时已经过期的请求不获准入。
-
nx_result_t nx_uart_port_start_admitted(const nx_uart_port_t *port, nx_uart_tx_request_t *request)¶
启动适配器已准入的 QUEUED 请求,不重复准入。
- 参数:
port – [inout] 已初始化的单执行者端口。
request – [inout] 已由适配器借用的 QUEUED 描述符。
- 返回:
BUSY 保留 QUEUED;NX_SUCCESS 将执行权转给端口。其他启动错误须由适配器执行者结算。
-
nx_result_t nx_uart_port_cancel(const nx_uart_port_t *port, nx_uart_tx_request_t *request)¶
请求取消;接受取消不表示请求结清。
- 参数:
port – [inout] 与 submit/service 相同的单一执行所有者。
request – [inout] 当前活动且有效的描述符;跨任务调用方应使用稳定的适配器槽及期望 epoch,不能使用此指针。
- 返回:
取消仍待完成或已结算时返回 NX_SUCCESS;请求不匹配时为 STATE。借用持续到 SETTLED。
-
void nx_uart_port_service(const nx_uart_port_t *port)¶
观察时间/硬件完成并排空一个活动请求。
备注
有界操作,无等待或回调;在 stop/drain 全程及所声明的最大 service 间隔内持续调用。发布完成是对请求的最后一次访问。硬件不能排空时保留 QUARANTINED。
- 参数:
port – [inout] 单一任务/主循环执行所有者。
-
nx_result_t nx_uart_port_read_events(const nx_uart_port_t *port, nx_uart_rx_event_t *events, size_t capacity, size_t *count)¶
从选定事件配置读取缓冲的 RX 事件。
- 参数:
port – [inout] 已初始化的事件 profile 端口;只有一个消费者。
events – [out] 调用方拥有的目标存储;不保留引用。
capacity – [in] 目的事件数量。
count – [out] 已复制的事件,包含显式丢失/错误标志。
- 返回:
NX_SUCCESS、EMPTY 或 INVALID/UNSUPPORTED。IRQ 只向已配置存储生产数据;溢出绝不静默覆盖。
-
nx_result_t nx_uart_port_read_bytes(const nx_uart_port_t *port, uint8_t *bytes, size_t capacity, size_t *count)¶
从选定字节配置读取缓冲字节。
- 参数:
port – [inout] 已初始化的字节 profile 端口;只有一个消费者。
bytes – [out] 调用方拥有的目标存储;不保留引用。
capacity – [in] 目标容量,单位为字节。
count – [out] 已复制的字节数;返回 OVERFLOW 时仍有效;提供者在复制字节并尝试重新启用 RX 后发生 IO 失败时也仍有效。
- 返回:
NX_SUCCESS、EMPTY、OVERFLOW 或 INVALID/UNSUPPORTED。字节模式报告累计丢失,不虚构时间戳。提供者若在复制后重新启用 RX 源失败,可以返回 IO;count 和已复制字节仍有效。准入关闭,仍保留责任的硬件必须经验证停止。
-
nx_result_t nx_uart_port_stop(const nx_uart_port_t *port)¶
关闭准入,并在释放硬件之前排空 TX。
备注
回收存储前,RX/IRQ 和外部消费者必须静止。不自动销毁任务或通知对象。
- 参数:
port – [inout] 所有者;生产者必须已经静止。
- 返回:
停止后返回 NX_SUCCESS;仍须继续 service 时返回 BUSY。
-
nx_result_t nx_uart_port_attach_wake(const nx_uart_port_t *port, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
附加或解除一个显式 IRQ 唤醒目标。
备注
回收旧目标前,须等待全部先前发布者静止。IRQ 事件在通知前锁存 RX/完成事实。解除绑定阻止未来发布;通知存储仍须等待外部等待者和回调退出。
- 参数:
port – [in] 已初始化的 provider,由单一任务执行者控制。
wake – [in] 不可变的活动目标;NULL 表示解除绑定。
syscall_ceiling – [in] 可选的额外未移位内核安全优先级数值下限;不得削弱生成策略。PRIMASK 内核目标要求为零。不调用内核时忽略。
- 返回:
成功;不在任务控制上下文时返回 CONTEXT;实际 IRQ 优先级不安全时返回 PERMISSION;也可能返回 provider 的 STATE/UNSUPPORTED。
-
nx_result_t nx_uart_port_rx_start(const nx_uart_port_t *port, nx_stream_t *stream)¶
使用调用者准确存储启动选定 RX 块模式。
备注
provider 的边界和缺口是显式能力事实。provider 绝不能覆盖被消费者借用的块。
- 参数:
port – [in] 支持块的 provider,只有一个任务执行所有者。
stream – [inout] 已初始化的块流;保留到 RX 停止且全部已获取的消费者块被释放。
- 返回:
成功或 INVALID/BUSY/UNSUPPORTED;失败准入的借用为零。所选硬件模式验证每个 DMA 块的内存域。
-
nx_result_t nx_uart_port_rx_stop(const nx_uart_port_t *port)¶
停止 RX 块生产,不撤销消费者借用。
备注
消费者单独排空 READY 块并释放借用;RX stop 成功不会销毁流或 wake 存储。
- 参数:
port – [in] 与 RX start 相同的执行者;BUSY 时存储继续有效。
- 返回:
成功证明内存访问源已撤离;BUSY 保留生产者借用;仅支持字节/事件的 provider 返回 UNSUPPORTED。
-
struct nx_uart_rx_event_t¶
- #include <uart.h>
时间戳属于提供者时钟;精度由硬件决定。
备注
NO_BYTE 标识仅含状态的 IRQ 事实:byte 无效。LOSS 是独立的 NO_BYTE 边界标记,排在更旧的已缓冲事实之后、后续接收之前。其时间戳是 provider 检测或报告的时间,绝不是为丢失字节重建的时间戳。字节 profile 读取报告累计丢失,并省略仅含状态的事实。
-
struct nx_uart_ops_t¶
- #include <uart.h>
使用同一个提供者状态的共享只读方法。
备注
各方法遵循对应公共操作的所有权合同。缺失的可选方法返回 UNSUPPORTED。
公共成员
-
nx_result_t (*submit)(void *context, nx_uart_tx_request_t *request)¶
-
nx_result_t (*start_admitted)(void *context, nx_uart_tx_request_t *request)¶
-
nx_result_t (*cancel)(void *context, nx_uart_tx_request_t *request)¶
-
void (*service)(void *context)¶
-
nx_result_t (*read_events)(void *context, nx_uart_rx_event_t *events, size_t capacity, size_t *count)¶
-
nx_result_t (*read_bytes)(void *context, uint8_t *bytes, size_t capacity, size_t *count)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*attach_wake)(void *context, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
-
nx_result_t (*rx_start)(void *context, nx_stream_t *stream)¶
-
nx_result_t (*rx_stop)(void *context)¶
-
nx_result_t (*submit)(void *context, nx_uart_tx_request_t *request)¶
uart_format.h¶
显式的载荷、校验、停止位与硬件流控格式。
作者 Nexus Team
枚举
函数
-
nx_result_t nx_uart_format_validate(nx_uart_format_t format)¶
验证公共 USART-v1 子集,不访问硬件。
备注
纯函数、有界,任务/IRQ 安全;Board 准入仍单独处理。
- 参数:
format – [in] 显式载荷位宽、奇偶校验、停止位和流控选择。
- 返回:
7E/O、8N/E/O 或 9N 配合一个或两个停止位时成功;未知值返回 INVALID,已知但不兼容的组合返回 UNSUPPORTED。
-
struct nx_uart_format_t¶
- #include <uart_format.h>
不可变的线上格式;data_bits 不含校验位。
备注
RTS/CTS 需要单独审核 Board 路由及对端接线。
uart_rs485.h¶
可选单所有者 RS485 方向与线尾适配器。
作者 Nexus Team
类型定义
-
typedef nx_result_t (*nx_uart_tx_validate_fn)(void *context, const nx_uart_tx_request_t *request)¶
准确传输端口的无副作用 TX 准入验证器。
备注
读取时钟/硬件事实,但不写 GPIO/MMIO,不准入、不启动,也不保留引用。一个执行者拥有适配器及传输接口;不允许外部直接 TX。
- 参数 context:
[in] 不可变传输接口的精确 context。
- 参数 request:
[in] 活动的 READY 或 QUEUED 描述符;绝不保留引用。
- 返回值:
采用与传输接口 submit/start 相同的可拒绝检查。
函数
-
nx_result_t nx_uart_rs485_initialize(nx_uart_rs485_state_t *state, const nx_uart_rs485_config_t *config)¶
绑定独占传输端口并建立非活动 DE。
备注
仅限任务上下文,不等待。不推定物理收发器存在。成功置有效 DE 后开始 setup;通过 acquire 语义观测到传输真正结算后才开始 hold。传输时限包括 setup 和线路完成;必须执行的 drain/hold 可使借用持续到该时限之后。TX 被拒绝时 DE 和传输接口均不变。排空或 DE 撤离失败时,保留 QUARANTINED 外层存储及 DE 所有权,直到 service 重试。
- 参数:
state – [inout] 调用方拥有的全新零初始化控制对象。
config – [in] 生命周期内不可变的绑定;一个获授权的 DE 位、实际板级极性,以及 nx_time_now_us 域中的 setup/hold。
- 返回:
成功或 INVALID/CONTEXT/STATE/GPIO 失败;无 TX 借用。
变量
-
const nx_uart_ops_t nx_uart_rs485_ops¶
-
struct nx_uart_rs485_config_t¶
- #include <uart_rs485.h>
不可变的选定电气/时序事实,不含任务或堆。
备注
绑定期间,配置、接口、ops 及 context 身份不得改变。它们与可变适配器、请求及载荷存储分离;精确引脚所有权由外部负责。
公共成员
-
const nx_uart_port_t *transport¶
-
const nx_gpio_port_t *direction¶
-
nx_uart_tx_validate_fn validate¶
-
uint32_t mask¶
-
nx_time_us_t setup_us¶
-
nx_time_us_t hold_us¶
-
bool active_high¶
-
const nx_uart_port_t *transport¶
-
struct nx_uart_rs485_state_t¶
- #include <uart_rs485.h>
调用者显式选择的适配器,init 前零初始化。
备注
初始化后控制对象为私有。不可变配置、两个接口、引脚所有权及全部存储,须保持有效直到 stop 成功且外部观测者退出。默认 UART 状态不变。
公共成员
-
const nx_uart_rs485_config_t *config¶
-
nx_uart_tx_request_t inner¶
-
nx_uart_tx_request_t *active¶
-
nx_time_us_t boundary¶
-
nx_result_t terminal¶
-
size_t transferred¶
-
uint8_t phase¶
-
bool initialized¶
-
bool closing¶
-
const nx_uart_rs485_config_t *config¶
uart_word.h¶
独立的九位接口与调用者拥有的字请求。
作者 Nexus Team
函数
-
nx_result_t nx_uart_word_tx_prepare(nx_uart_word_tx_request_t *request, const uint16_t *data, size_t words, nx_time_us_t deadline)¶
准备尚未借用的九位载荷,不执行准入。
备注
任务所有者;载荷值在 provider 准入前检查。
- 参数:
request – [inout] 已初始化的 READY 或已消费的 SETTLED 描述符。
data – [in] 已对齐的不可变字数组,与描述符分离。
words – [in] 正数字数,可表示为字节范围。
deadline – [in] nx_time_now_us 单调域中的绝对传输时限。
- 返回:
成功、INVALID 或 STATE;拒绝时不保留引用,也不产生副作用。
-
nx_result_t nx_uart_word_port_submit(const nx_uart_word_port_t *port, nx_uart_word_tx_request_t *request)¶
将一个 READY 请求准入唯一、未屏蔽中断的任务执行者。
备注
计数以字为单位;完成要求实际线路 TC。
- 参数:
port – [in] 已初始化的活动接口、私有状态及 IRQ 绑定。
request – [inout] 调用方拥有的描述符;成功时借用。
- 返回:
成功表示 ACCEPTED;拒绝时不借用,也不产生硬件副作用。
-
nx_result_t nx_uart_word_port_start_admitted(const nx_uart_word_port_t *port, nx_uart_word_tx_request_t *request)¶
接管适配器的 QUEUED 借用,不再次准入。
- 参数:
port – [in] 活动的单所有者接口。
request – [inout] 已有适配器借用。
- 返回:
成功转移执行权;BUSY 保留 QUEUED 及其借用。
-
nx_result_t nx_uart_word_port_cancel(const nx_uart_word_port_t *port, nx_uart_word_tx_request_t *request)¶
请求取消,不撤销请求/载荷的所有权。
备注
排空期间继续 service;排空失败时保留 QUARANTINED。
- 参数:
port – [in] 与 submit/service 相同的中断未屏蔽任务执行者。
request – [inout] 活动请求;跨任务控制使用稳定的槽。
- 返回:
当前请求返回成功;其他活动请求返回 STATE。
-
void nx_uart_word_port_service(const nx_uart_word_port_t *port)¶
由所有者执行有界的截止时间、排空与结清工作。
备注
IRQ 仅发布事实;SETTLED 是 provider 的最后一次访问。无等待、隐藏工作任务或回调;须遵守所声明的最大 service 间隔。
- 参数:
port – [in] 单一中断未屏蔽任务所有者,保持有效直到 stop 完成。
-
nx_result_t nx_uart_word_port_read(const nx_uart_word_port_t *port, uint16_t *words, size_t capacity, size_t *count)¶
复制字,不持续借用目标存储。
备注
丢失不会虚构硬件时间戳,也不会虚构缺失字数。
- 参数:
port – [in] 已初始化的接口,由任务执行者控制且只有一个消费者。
words – [out] 已对齐的目标,与 provider/RX 存储分离。
capacity – [in] 正数目标容量,单位为字。
count – [out] 已复制数量;OVERFLOW 时也有效。
- 返回:
成功、EMPTY、OVERFLOW、INVALID、CONTEXT 或 STATE。
-
nx_result_t nx_uart_word_port_stop(const nx_uart_word_port_t *port)¶
关闭准入,并在活动 TX 与 IRQ 源排空后停止。
备注
回收 provider 存储前,调用方须等待全部正在执行的 IRQ 退出。
- 参数:
port – [in] 单一任务所有者;外部生产者和观测者已静止。
- 返回:
硬件引用撤离后成功;仍须继续 service 时返回 BUSY。
-
struct nx_uart_word_tx_request_t¶
- #include <uart_word.h>
每个 uint16_t 包含 0..511;按字计数,不以字节计且不包含校验位。
备注
请求及保持不变的载荷持续被借用,直到以 acquire 语义观测到 SETTLED。
-
struct nx_uart_word_ops_t¶
- #include <uart_word.h>
公共成员
-
nx_result_t (*submit)(void *context, nx_uart_word_tx_request_t *request)¶
-
nx_result_t (*start_admitted)(void *context, nx_uart_word_tx_request_t *request)¶
-
nx_result_t (*cancel)(void *context, nx_uart_word_tx_request_t *request)¶
-
void (*service)(void *context)¶
-
nx_result_t (*read)(void *context, uint16_t *words, size_t capacity, size_t *count)¶
-
nx_result_t (*stop)(void *context)¶
-
nx_result_t (*submit)(void *context, nx_uart_word_tx_request_t *request)¶
-
struct nx_uart_word_port¶
- #include <uart_word.h>
独立不可变接口;默认字节接口/状态不增加。
备注
静态身份;查找不分配、不发现设备,也不初始化。
usb_activation.h¶
可选的非零 USB endpoint 显式激活接口。
作者 Nexus Team
函数
-
nx_result_t nx_usb_activation_set(const nx_usb_activation_port_t *port, uint64_t epoch, uint8_t endpoint_address, bool active)¶
显式激活或反激活一个已选定的非零 endpoint 方向。
备注
不借用任何 request 或 buffer。目标变更之前,必须显式取消并排空该目标的既有借用;失败从不撤销其他借用。配置/类策略仍由外部负责。
- 参数:
port – [in] 已启动;由序列化特权 Task owner 调用,进入时 IRQ masks 须 clear。
epoch – [in] 当前软件 USB epoch;冷态 epoch 0 合法。
endpoint_address – [in] USB 地址字节;不准入 EP0。
active – [in] 请求的 active 状态;此操作从不提交 packet。
- 返回:
证明成立后成功;操作缺失时返回 UNSUPPORTED。INVALID/CONTEXT/STATE/BUSY 在写入前拒绝。IO 可能已有部分效果,并关闭 controller 准入,直到显式恢复。
-
struct nx_usb_activation_ops_t¶
- #include <usb_activation.h>
可选的 controller 操作;操作缺失时返回 UNSUPPORTED。
公共成员
-
nx_result_t (*set)(void *context, uint64_t epoch, uint8_t endpoint_address, bool active)¶
-
nx_result_t (*set)(void *context, uint64_t epoch, uint8_t endpoint_address, bool active)¶
-
struct nx_usb_activation_port¶
- #include <usb_activation.h>
不可变的借用 face,使用既有 controller context。
usb_device.h¶
全速设备数据包与调用者拥有的端点借用。
作者 Nexus Team
枚举
函数
-
nx_result_t nx_usb_in_prepare(nx_usb_request_t *request, const uint8_t *bytes, size_t length, nx_usb_stage_t stage, uint64_t epoch, nx_time_us_t deadline)¶
准备一个 IN 数据包,不读取或借用其字节。
- 参数:
request – [inout] 已初始化且未借出的请求。
bytes – [in] 不可变报文字节;仅在长度为零时允许 NULL。
length – [in] 报文长度;不自动追加终止 ZLP。
stage – [in] DATA 或控制 STATUS;STATUS 长度必须为零。
epoch – [in] EP0 使用当前 SETUP epoch;非零端点使用零。
deadline – [in] 独立单调时钟中的绝对时限。
- 返回:
成功、INVALID 或 STATE;拒绝时不保留引用。
-
nx_result_t nx_usb_out_prepare(nx_usb_request_t *request, uint8_t *bytes, size_t capacity, nx_usb_stage_t stage, uint64_t epoch, nx_time_us_t deadline)¶
准备 OUT 数据包容量,不修改其存储。
- 参数:
request – [inout] 已初始化且未借出的请求。
bytes – [out] 仅在提交被接受后借用,持续到 SETTLED。
capacity – [in] 最多为端点 MPS;短包正常完成。
stage – [in] DATA 或容量为零的控制 STATUS。
epoch – [in] EP0 使用当前 SETUP epoch;非零端点使用零。
deadline – [in] 独立单调时钟中的绝对时限。
- 返回:
成功、INVALID 或 STATE;拒绝时不建立借用。
-
nx_result_t nx_usb_endpoint_submit(const nx_usb_endpoint_port_t *port, nx_usb_request_t *request)¶
仅准入一个数据包,不隐式建立队列或执行完整 USB 事务。
备注
单一特权任务执行者,IRQ 屏蔽须解除。写入 IN FIFO 不能证明主机已 ACK。OUT 过长时仍排空全部报文字,不使目标缓冲溢出。
- 参数:
port – [in] 稳定的端点接口及私有状态。
request – [inout] READY 报文;缓冲须保持有效,直到以 acquire 语义观测到 SETTLED。
- 返回:
成功表示 ACCEPTED;第四方缓冲不会被提前复制。
-
nx_result_t nx_usb_endpoint_cancel(const nx_usb_endpoint_port_t *port, nx_usb_request_t *request)¶
请求端点禁用/排空,不撤销缓冲区借用。
备注
控制 OUT0 没有硬件禁用命令:取消可能需要完整停止设备才能结算。缺少证明时进入 QUARANTINED。Reset/SETUP 使 epoch 失效,但只有实际源排空后才释放借用。
- 参数:
port – [in] 同一个串行化特权任务所有者。
request – [inout] 由此精确端点接受的活动请求。
- 返回:
成功表示请求排空;失败时保留全部先前接受的借用。
-
nx_result_t nx_usb_endpoint_stall(const nx_usb_endpoint_port_t *port, bool stalled)¶
仅端点无存活传输时设置/清除 STALL。
- 参数:
port – [in] 已启动的串行化所有者,IRQ 屏蔽须解除。
stalled – [in] 期望的 STALL;清除 bulk/interrupt STALL 时同时复位 DATA0。
- 返回:
回读验证后成功;BUSY 保留待完成请求。
-
nx_result_t nx_usb_device_service(const nx_usb_device_port_t *port)¶
仅 Task 有界推进;截止时间绝不依赖 USB SOF。
- 参数:
port – [in] 串行化特权所有者;进入时 IRQ 屏蔽须解除。
- 返回:
成功表示请求推进;不提前释放时钟或端点借用。
-
nx_result_t nx_usb_device_read_events(const nx_usb_device_port_t *port, nx_usb_event_t *events, size_t capacity, size_t *count)¶
消费有界值事件,绝不保留输出。
备注
Invalid/STATE 拒绝时,两个输出均保持不变。
- 参数:
port – [in] 单一任务消费者及稳定控制器。
events – [out] 调用方记录,与 provider 及活动借用分离。
capacity – [in] 正数输出数量。
count – [out] 独立的计数输出;EMPTY 表示零。
- 返回:
成功、EMPTY 或拒绝;state 中的最新 SETUP 才是权威事实。
-
nx_result_t nx_usb_device_state(const nx_usb_device_port_t *port, nx_usb_device_state_t *state)¶
仅 Task 的权威快照,与事件环可用空间无关。
- 参数:
port – [in] 串行化特权所有者,IRQ 屏蔽须解除。
state – [out] 与其他存储分离的调用方快照;不保留引用。
- 返回:
成功时复制状态;别名或上下文检查拒绝时输出不变。
-
nx_result_t nx_usb_device_address(const nx_usb_device_port_t *port, uint64_t epoch, uint8_t address)¶
为匹配的零数据标准 SETUP 暂存 SET_ADDRESS。
- 参数:
port – [in] 串行化特权控制器所有者。
epoch – [in] 当前 SETUP 身份。
address – [in] 0..127,与 SETUP wValue 匹配。
- 返回:
成功仅暂存地址;实际 status-IN XFRC 后地址才生效。
-
nx_result_t nx_usb_device_attach_wake(const nx_usb_device_port_t *port, const nx_irq_wake_t *wake, uint8_t syscall_ceiling)¶
附加/解除被借用且兼容 Task/IRQ 的唤醒提示。
- 参数:
port – [in] 已启动的串行化所有者,IRQ 屏蔽须解除。
wake – [in] 不可变目标;NULL 表示解除绑定。
syscall_ceiling – [in] 附加的 IRQ 优先级数值下限。
- 返回:
实际优先级策略检查通过后成功;发布者仍活动时返回 BUSY;拒绝时不保留新接收器。
-
nx_result_t nx_usb_device_stop(const nx_usb_device_port_t *port)¶
断开连接、禁用、排空、撤离 IRQ,再释放时钟消费者。
备注
PIO OUT0 可以继续启用:全局 stop 成功意味着在最终 SETTLED 前已证明断开连接、OUT NAK、无 DMA、RX FIFO 为空、IRQ 引用撤离且发布者退出。强制复位不能撤销尚未证明安全释放的已接受借用。
- 参数:
port – [in] 串行化的所有者;还须等待外部观察者退出。
- 返回:
成功结束 provider 对端点/环/wake 存储的访问;BUSY 保留全部存储及 48MHz 所有权,直到实际推进。
-
struct nx_usb_request_t¶
- #include <usb_device.h>
公共成员
-
nx_request_t base¶
-
const uint8_t *in¶
-
uint8_t *out¶
-
size_t length¶
-
uint64_t control_epoch¶
-
nx_usb_stage_t stage¶
-
nx_request_t base¶
-
struct nx_usb_setup_t¶
- #include <usb_device.h>
-
struct nx_usb_event_t¶
- #include <usb_device.h>
-
struct nx_usb_device_state_t¶
- #include <usb_device.h>
-
struct nx_usb_endpoint_ops_t¶
- #include <usb_device.h>
共享只读数据包方法;上下文为选定端点。
公共成员
-
nx_result_t (*submit)(void*, nx_usb_request_t*)¶
-
nx_result_t (*cancel)(void*, nx_usb_request_t*)¶
-
nx_result_t (*stall)(void*, bool)¶
-
nx_result_t (*submit)(void*, nx_usb_request_t*)¶
-
struct nx_usb_endpoint_port¶
- #include <usb_device.h>
-
struct nx_usb_device_ops_t¶
- #include <usb_device.h>
控制器身份与端点身份保持分离。
公共成员
-
nx_result_t (*service)(void*)¶
-
nx_result_t (*read_events)(void*, nx_usb_event_t*, size_t, size_t*)¶
-
nx_result_t (*state)(void*, nx_usb_device_state_t*)¶
-
nx_result_t (*address)(void*, uint64_t, uint8_t)¶
-
nx_result_t (*attach_wake)(void*, const nx_irq_wake_t*, uint8_t)¶
-
nx_result_t (*stop)(void*)¶
-
nx_result_t (*service)(void*)¶
-
struct nx_usb_device_port¶
- #include <usb_device.h>
usb_profile.h¶
仅针对选定实例的不可变 USB 事实。
作者 Nexus Team
备注
选定事实不构成经实际观测建立的物理资格。
枚举
函数
-
nx_result_t nx_usb_profile_validate(const nx_usb_device_profile_t *profile)¶
校验精确的选定 FS 事实,不观测 controller。
备注
在 Task/ISR 中有界且只读。事实标识选定的软件支持;绝不表示 PCB 布线、VBUS 接线或物理资格。公共元数据、endpoint 数组、face 及 operations table 须按其 C 类型自然对齐,存储范围不能回绕。数值检查中的拒绝不能用于探测任意地址或不透明的私有 context。 EP0 选择 control/64;非零 bulk 选择 8/16/32/64-byte MPS。interrupt 选择非零 IN,MPS 为 1..64-byte。host 轮询间隔属于外部 descriptor,不属于此 profile。
- 参数:
profile – [in] 稳定、可读且不可变的事实、face 及 endpoint 数组。
- 返回:
成功或 INVALID,公共元数据未对齐也会拒绝;不分配内存,不访问 MMIO,不发现设备,也不影响生命周期。
-
const nx_usb_endpoint_profile_t *nx_usb_profile_endpoint(const nx_usb_device_profile_t *profile, uint8_t number, bool in)¶
在先前已校验的不可变 profile 中查找一个方向。
备注
在 Task/ISR 中执行只读有界查找;所有输入的生命周期仍由外部管理。
- 参数:
profile – [in] 稳定、已校验的选定事实及 endpoint 数组。
number – [in] 与方向独立的 endpoint 编号。
in – [in] true 表示 IN 方向;false 表示 OUT 方向。
- 返回:
返回选定的稳定成员或 NULL;profile/array 元数据未对齐时也返回 NULL。不能发现新 endpoint。
-
nx_result_t nx_usb_setup_reject(const nx_usb_setup_decision_port_t *port, uint64_t epoch)¶
通过经检查的 EP0 IN STALL 拒绝一个已发布的 SETUP epoch。
备注
使用同一个特权单 Task 执行者,进入时中断未屏蔽。provider 在同一局部 IRQ 临界区中检查其已发布的 epoch 并执行 STALL,保留进入时的 mask。该保护排除已由软件发布的替代 SETUP;不保证与尚未被 IRQ 采集的物理总线包之间的原子性。不隐含取消、全局停止、内存分配、class 策略或地址提交。
- 参数:
port – [in] 稳定的选定 decision face,使用同一个 controller owner。
epoch – [in] 要拒绝的非零、已由软件发布的 SETUP 身份。
- 返回:
guard 检查及 STALL 读回成功后返回成功;epoch 已被替代或源正在 closing 时返回 STATE,任一 EP0 packet 仍活动时返回 BUSY,元数据不合法时返回 INVALID,执行者不合法时返回 CONTEXT,STALL 读回失败时返回 IO,未提供可选操作时返回 UNSUPPORTED。拒绝不保留借用。
-
struct nx_usb_endpoint_profile_t¶
- #include <usb_profile.h>
公共成员
-
const nx_usb_endpoint_port_t *port¶
-
uint16_t max_packet¶
-
uint8_t number¶
-
bool in¶
-
nx_usb_profile_transfer_t transfer¶
-
const nx_usb_endpoint_port_t *port¶
-
struct nx_usb_setup_decision_ops_t¶
- #include <usb_profile.h>
可选的 epoch 绑定 EP0 拒绝接口,与 generic ops 独立。
公共成员
-
nx_result_t (*reject)(void*, uint64_t)¶
-
nx_result_t (*reject)(void*, uint64_t)¶
-
struct nx_usb_setup_decision_port_t¶
- #include <usb_profile.h>
-
struct nx_usb_device_profile_t¶
- #include <usb_profile.h>
公共成员
-
const nx_usb_device_port_t *port¶
-
const nx_usb_endpoint_profile_t *endpoints¶
-
size_t endpoint_count¶
-
uint32_t phy_clock_hz¶
-
uint16_t fifo_words¶
-
uint16_t rx_fifo_words¶
-
uint8_t endpoint_numbers¶
-
nx_usb_profile_speed_t speed¶
-
nx_usb_profile_engine_t engine¶
-
nx_usb_setup_decision_port_t setup_decision¶
-
const nx_usb_device_port_t *port¶
wake.h¶
显式借用 IRQ 唤醒目标与系统调用阈值检查。
作者 Nexus Team
枚举
函数
-
nx_result_t nx_irq_wake_validate(const nx_irq_wake_t *wake, const nx_irq_policy_t *policy, const nx_irq_source_t *source)¶
依据显式内核策略验证实际 IRQ 事实。
备注
无绑定或回调副作用的冷检查。NONE 不接受任何会调用内核的目标。PRIMASK 在固定为零的优先级分组下允许全部有效可配置 IRQ。会调用内核的 BASEPRI 目标要求已维护的抢占分组,且优先级数值不小于阈值。非内核提示不强制内核分组。绑定不授权后续违反 CPU 上下文要求的操作。
- 参数:
wake – [in] 可选不可变目标;NULL 禁用通知。
policy – [in] 已验证的不可变 CPU 和内核配置。
source – [in] 外部 IRQ 编号、未移位的优先级及分组。
- 返回:
成功;事实或目标格式错误时返回 INVALID;会调用内核的目标处于不安全中断域时返回 PERMISSION。
-
nx_result_t nx_irq_wake_signal(const nx_irq_wake_t *wake)¶
权威状态锁存后发送一个有界提示。
备注
按目标允许的任务/IRQ 上下文执行,无隐藏任务或重试。wake 失败不撤销状态,也不撤销请求所有权。
- 参数:
wake – [in] 先前已验证的活动目标或 NULL。
- 返回:
回调结果;NULL 返回成功;无效目标返回 INVALID。
-
struct nx_irq_wake_t¶
- #include <wake.h>
IRQ 提供者借用的可选不可变唤醒目标。
备注
notify 在发布者上下文中运行,必须有界且在该 IRQ 中合法。存储及 context 须比全部发布者存活更久。销毁接收器前,须停止并等待发布者退出。wake 仅为提示;已锁存的 RX/请求谓词仍为权威依据。
watchdog.h¶
不可逆 IWDG 效果与中立硬件复位原因。
作者 Nexus Team
宏定义
-
NX_RESET_POWER_ON¶
-
NX_RESET_PIN¶
-
NX_RESET_SOFTWARE¶
-
NX_RESET_IWDG¶
-
NX_RESET_WWDG¶
-
NX_RESET_LOW_POWER¶
-
NX_RESET_BROWNOUT¶
函数
-
nx_result_t nx_watchdog_port_enable(const nx_watchdog_port_t *port, uint32_t timeout_us, bool debug_freeze, nx_watchdog_state_t *state)¶
启用 IWDG,并报告其生效状态及已知的时间范围;激活不可逆。
备注
成功证明标称硬件编程已完成,不保证时限。振荡器界限未知时,两个超时界限均保持零。需要有界时序的产品必须在激活前准入振荡器配置。Enable 在特权任务中执行,并与 feed、state 和 platform stop 串行化。仅在本调用返回后才可安装 IRQ 喂狗;激活不支持在影子寄存器编程期间并发重载。
- 参数:
port – [inout] 固定 provider;产品拥有喂狗和恢复策略。
timeout_us – [in] 所请求的标称超时,须处于已维护范围内。
debug_freeze – [in] 请求由 CPU 管理的调试冻结设置;外部调试器配置不属于此请求。
state – [out] 实际超时界限及剩余副作用;若启用后后续配置失败,也包括 enabled=true。
- 返回:
成功,或返回 INVALID/STATE/UNSUPPORTED/IO;绝不声称回滚禁用了已启用的硬件。已有启用状态会被识别。无法由 CPU 访问调试控制的提供者在激活前以 UNSUPPORTED 拒绝 true;它既不查询,也不改变外部调试器控制。
-
nx_result_t nx_watchdog_port_feed(const nx_watchdog_port_t *port)¶
喂已启用 IWDG,不改变产品健康策略。
- 参数:
port – [inout] 固定且已启用的 provider,只有一个串行化喂狗所有者。
- 返回:
成功或 INVALID/STATE;任务/IRQ 中有界,不分配。
-
nx_result_t nx_watchdog_port_state(const nx_watchdog_port_t *port, nx_watchdog_state_t *state)¶
查询当前看门狗效果与超时不确定性。
- 参数:
port – [in] 固定 provider。
state – [out] 当前硬件状态或已记忆的初始化状态。
- 返回:
成功或 INVALID;不能确定超时界限时,UNSUPPORTED 保留已观测硬件副作用,并将两个超时界限保持为零。绝不能因查询失败或超时未知而推断看门狗已禁用。
-
uint32_t nx_reset_cause(void)¶
读取清除标志前捕获的锁存启动复位原因。
备注
不隐式确认、不重启,也不作产品分类。
- 返回:
NX_RESET_* 位掩码;可同时报告多个原因。
-
struct nx_watchdog_state_t¶
- #include <watchdog.h>
硬件选定的超时边界,包含声明的 LSI 不确定性。
备注
最小值和最大值均为零表示超时边界未知,例如硬件影子寄存器更新尚未完成,或振荡器限制尚未复核。enabled 和 irreversible 事实仍然有效。debug_freeze 报告提供者支持的固件配置。能够由 CPU 读取调试控制的提供者会观察该设置。不具备 CPU 调试控制访问能力的提供者仅支持 false;该值既未观察,也不描述外部调试器的设置。
-
struct nx_watchdog_ops_t¶
- #include <watchdog.h>
使用同一个提供者状态的共享只读方法。
备注
各方法遵循对应公共操作的所有权合同。缺失的可选方法返回 UNSUPPORTED。
公共成员
-
nx_result_t (*enable)(void *context, uint32_t timeout_us, bool debug_freeze, nx_watchdog_state_t *state)¶
-
nx_result_t (*feed)(void *context)¶
-
nx_result_t (*state)(const void *context, nx_watchdog_state_t *state)¶
-
nx_result_t (*enable)(void *context, uint32_t timeout_us, bool debug_freeze, nx_watchdog_state_t *state)¶
-
struct nx_watchdog_port¶
- #include <watchdog.h>
指向调用者自有状态的不可变接口。
备注
接口和状态的生命周期覆盖调用方、IRQ 及保留的借用。工厂查找既不初始化,也不取得硬件。