File tree Expand file tree Collapse file tree 22 files changed +1172
-0
lines changed
i18n/en/docusaurus-plugin-content-docs/current/basic_coding/driver Expand file tree Collapse file tree 22 files changed +1172
-0
lines changed Original file line number Diff line number Diff line change
1
+ ---
2
+ id : device-coding
3
+ title : 外设驱动
4
+ sidebar_position : 5
5
+ ---
6
+
7
+ # 外设驱动(Device Drivers)
8
+
9
+ 本模块汇总 LibXR 对常见硬件外设的抽象接口,提供统一的面向对象编程方式,支持异步操作、配置封装、平台适配等特性。
10
+
11
+ LibXR 所有设备接口均遵循以下设计原则:
12
+
13
+ - ** 平台无关** :抽象类接口统一命名、统一行为,不依赖底层硬件寄存器或驱动结构;
14
+ - ** 支持异步操作** :基于 ` ReadPort ` / ` WritePort ` 的通用操作模型,适配中断、DMA 等硬件机制;
15
+ - ** 类型安全** :接口参数和配置结构体使用强类型封装,提升可靠性与代码可读性;
16
+ - ** 最小依赖** :核心模块仅依赖 C++17 特性和 LibXR 基础组件,适用于裸机和各种 RTOS 平台;
17
+ - ** 灵活扩展** :每种外设可根据平台能力裁剪实现,支持复用系统资源(如共享总线);
18
+
19
+ ---
20
+
21
+ ## 快速导航
22
+
23
+ - [ GPIO(通用输入输出)] ( ./gpio.md )
24
+ - [ UART(串口通信)] ( ./uart.md )
25
+ - [ I2C(I2C 总线)] ( ./i2c.md )
26
+ - [ SPI(SPI 接口)] ( ./spi.md )
27
+ - [ CAN / FDCAN(控制器局域网)] ( ./can.md )
28
+ - [ ADC(模数转换)] ( ./adc.md )
29
+ - [ PWM(脉宽调制)] ( ./pwm.md )
30
+ - [ Flash(闪存接口)] ( ./flash.md )
31
+ - [ Power(电源管理)] ( ./power.md )
32
+ - [ Timebase(时间基准)] ( ./timebase.md )
33
+
34
+ ---
35
+
36
+ ## 使用示例
37
+
38
+ 每个外设抽象类通常包含以下组成:
39
+
40
+ - ` Configuration ` 配置结构体
41
+ - ` SetConfig() ` 设置接口
42
+ - ` Read() ` / ` Write() ` 数据传输接口
43
+ - ` Enable() ` / ` Disable() ` 控制接口(若适用)
44
+ - ` Callback ` 事件响应注册(如中断)
45
+
46
+ 用户无需关心底层是STM32UART、ESP32UART还是LinuxUART,只需拿到基类指针并调用接口即可。
Original file line number Diff line number Diff line change
1
+ ---
2
+ id : adc
3
+ title : 模数转换
4
+ sidebar_position : 6
5
+ ---
6
+
7
+ # ADC(模数转换)
8
+
9
+ ` LibXR::ADC ` 提供平台无关的模拟数字转换(ADC)接口,用于读取模拟输入电压值,适用于电压检测、传感器读取等应用场景。
10
+
11
+ ## 接口定义
12
+
13
+ ``` cpp
14
+ class ADC {
15
+ public:
16
+ ADC() = default;
17
+
18
+ // 读取 ADC 电压值,单位为伏特(float 类型)
19
+ virtual float Read() = 0;
20
+ };
21
+ ```
22
+
23
+ - `Read()` 是纯虚函数,子类需实现具体的采样逻辑;
24
+ - 返回值通常为 0 ~ 3.3V 或芯片支持的其他范围;
25
+ - 接口简单明了,适合平台移植与模拟信号读取抽象。
26
+
27
+ ## 特性总结
28
+
29
+ - 提供统一的模拟电压读取接口;
30
+ - 避免平台差异,便于上层逻辑复用;
31
+ - 适用于温度、电压、光照等传感器输入;
32
+ - 所有平台需实现 `Read()` 方法完成采样。
Original file line number Diff line number Diff line change
1
+ ---
2
+ id : can
3
+ title : 控制器局域网
4
+ sidebar_position : 5
5
+ ---
6
+
7
+ # CAN / FDCAN(控制器局域网)
8
+
9
+ ` LibXR::CAN ` 与 ` LibXR::FDCAN ` 提供跨平台的控制器局域网通信接口,支持经典 CAN 消息与 FD CAN 消息收发,具备回调注册与过滤功能,适用于车辆通信、传感器网络等场景。
10
+
11
+ ## CAN 接口说明
12
+
13
+ ### 消息类型
14
+
15
+ ``` cpp
16
+ enum class Type : uint8_t {
17
+ STANDARD, // 标准帧
18
+ EXTENDED, // 扩展帧
19
+ REMOTE_STANDARD, // 标准远程帧
20
+ REMOTE_EXTENDED, // 扩展远程帧
21
+ };
22
+ ```
23
+
24
+ ### 消息结构
25
+
26
+ ```cpp
27
+ struct ClassicPack {
28
+ uint32_t id; // 消息 ID
29
+ Type type; // 消息类型
30
+ uint8_t data[8]; // 数据,最多 8 字节
31
+ };
32
+ ```
33
+
34
+ ### 注册回调
35
+
36
+ ``` cpp
37
+ using Callback = LibXR::Callback<const ClassicPack &>;
38
+ void Register (Callback cb, Type type,
39
+ FilterMode mode = FilterMode::ID_RANGE,
40
+ uint32_t start_id_mask = 0,
41
+ uint32_t end_id_match = UINT32_MAX);
42
+ ```
43
+
44
+ - 支持掩码或区间两种过滤模式
45
+ - 可按消息类型分别注册回调
46
+ - 回调类型为 `Callback<const ClassicPack&>`
47
+
48
+ ### 添加消息
49
+
50
+ ```cpp
51
+ virtual ErrorCode AddMessage(const ClassicPack &pack) = 0;
52
+ ```
53
+
54
+ - 派生类需实现该接口完成消息注入
55
+
56
+ ---
57
+
58
+ ## FDCAN 接口扩展
59
+
60
+ ### FD 消息结构
61
+
62
+ ``` cpp
63
+ struct FDPack {
64
+ uint32_t id; // 消息 ID
65
+ Type type; // 消息类型
66
+ uint8_t len; // 数据长度
67
+ uint8_t data[ 64] ; // 数据,最多 64 字节
68
+ };
69
+ ```
70
+
71
+ ### 注册回调
72
+
73
+ ```cpp
74
+ using CallbackFD = LibXR::Callback<const FDPack &>;
75
+ void Register(CallbackFD cb, Type type,
76
+ FilterMode mode = FilterMode::ID_RANGE,
77
+ uint32_t start_id_mask = 0,
78
+ uint32_t end_id_mask = UINT32_MAX);
79
+ ```
80
+
81
+ - 支持按 ID 区间或掩码过滤
82
+ - 每种类型可独立注册多个回调
83
+
84
+ ### 添加 FD 消息
85
+
86
+ ``` cpp
87
+ virtual ErrorCode AddMessage (const FDPack &pack) = 0;
88
+ ```
89
+
90
+ ---
91
+
92
+ ## 特性总结
93
+
94
+ - 支持标准 CAN 与 FDCAN 协议;
95
+ - 消息过滤灵活,支持掩码与范围;
96
+ - 可在 ISR 安全调用回调;
97
+ - 支持多订阅者、无锁列表;
98
+ - 抽象接口适用于多平台驱动扩展。
Original file line number Diff line number Diff line change
1
+ ---
2
+ id : flash
3
+ title : 闪存接口
4
+ sidebar_position : 8
5
+ ---
6
+
7
+ # Flash(闪存接口)
8
+
9
+ ` LibXR::Flash ` 提供跨平台的抽象闪存访问接口,用于块擦除与写入操作,适配 NOR/NAND Flash、EEPROM、NVS 等非易失性存储设备。
10
+
11
+ ## 接口定义
12
+
13
+ ``` cpp
14
+ class Flash {
15
+ public:
16
+ Flash(size_t min_erase_size, size_t min_write_size, RawData flash_area);
17
+
18
+ // 擦除指定区域(起始偏移与长度)
19
+ virtual ErrorCode Erase(size_t offset, size_t size) = 0;
20
+
21
+ // 写入数据到指定偏移地址
22
+ virtual ErrorCode Write(size_t offset, ConstRawData data) = 0;
23
+
24
+ size_t min_erase_size_ ; // 最小可擦除块大小(字节)
25
+ size_t min_write_size_ ; // 最小可写入块大小(字节)
26
+ RawData flash_area_ ; // 映射的闪存内存区域
27
+ };
28
+ ```
29
+
30
+ ## 使用说明
31
+
32
+ - 所有写入必须对齐 `min_write_size_`,擦除对齐 `min_erase_size_`;
33
+ - `flash_area_` 指向实际用于存储的内存区域或 Flash 映射地址;
34
+ - 上层可基于该接口实现参数存储、文件系统、日志管理等功能。
Original file line number Diff line number Diff line change
1
+ ---
2
+ id : gpio
3
+ title : GPIO
4
+ sidebar_position : 1
5
+ ---
6
+
7
+ # GPIO(通用输入输出)
8
+
9
+ ` LibXR::GPIO ` 提供跨平台的通用输入输出(General Purpose Input/Output)抽象接口,支持多种输入输出模式及中断回调机制。用户可继承此接口实现具体平台的 GPIO 控制逻辑。
10
+
11
+ ## 接口概览
12
+
13
+ ### 配置枚举
14
+
15
+ ``` cpp
16
+ enum class Direction : uint8_t {
17
+ INPUT, // 输入模式
18
+ OUTPUT_PUSH_PULL, // 推挽输出
19
+ OUTPUT_OPEN_DRAIN, // 开漏输出
20
+ FALL_INTERRUPT, // 下降沿中断
21
+ RISING_INTERRUPT, // 上升沿中断
22
+ FALL_RISING_INTERRUPT // 双沿中断
23
+ };
24
+
25
+ enum class Pull : uint8_t {
26
+ NONE, // 无上下拉
27
+ UP, // 上拉
28
+ DOWN // 下拉
29
+ };
30
+ ```
31
+
32
+ ### 配置结构体
33
+
34
+ ```cpp
35
+ struct Configuration {
36
+ Direction direction; // 引脚方向
37
+ Pull pull; // 上下拉设置
38
+ };
39
+ ```
40
+
41
+ ### 回调类型
42
+
43
+ ``` cpp
44
+ using Callback = LibXR::Callback<>;
45
+ ```
46
+
47
+ ### 构造与配置
48
+
49
+ ``` cpp
50
+ GPIO (); // 默认构造函数
51
+ virtual ErrorCode SetConfig (Configuration config) = 0;
52
+ ```
53
+
54
+ ### 引脚控制
55
+
56
+ ```cpp
57
+ virtual bool Read() = 0; // 读取引脚电平
58
+ virtual ErrorCode Write(bool value) = 0; // 写入引脚电平
59
+ ```
60
+
61
+ ### 中断控制
62
+
63
+ ``` cpp
64
+ virtual ErrorCode EnableInterrupt () = 0; // 使能中断
65
+ virtual ErrorCode DisableInterrupt () = 0; // 禁用中断
66
+ ```
67
+
68
+ ### 注册事件回调
69
+
70
+ ``` cpp
71
+ using Callback = LibXR::Callback<>;
72
+ ErrorCode RegisterCallback (Callback callback); // 注册中断处理函数
73
+ ```
74
+
75
+ ## 特性总结
76
+
77
+ - 支持输入/输出/中断等多种模式配置;
78
+ - 提供类型安全的配置结构体;
79
+ - 事件处理使用统一回调接口,可在 ISR 或任务中触发;
80
+ - 平台实现需完整覆盖虚函数定义;
81
+ - 可与其他 LibXR 模块配合使用,如 Topic、Timer 等。
Original file line number Diff line number Diff line change
1
+ ---
2
+ id : i2c
3
+ title : I2C
4
+ sidebar_position : 3
5
+ ---
6
+
7
+ # I2C(串行总线)
8
+
9
+ ` LibXR::I2C ` 提供平台无关的 I2C 总线通信接口,支持读写设备与寄存器、通信速率配置,适用于外设控制、传感器访问等场景。
10
+
11
+ ## 接口概览
12
+
13
+ ### 枚举类型
14
+
15
+ ``` cpp
16
+ enum class MemAddrLength : uint8_t {
17
+ BYTE_8,
18
+ BYTE_16
19
+ };
20
+ ```
21
+
22
+ ### 配置结构
23
+
24
+ ```cpp
25
+ struct Configuration {
26
+ uint32_t clock_speed; // 通信时钟速率(单位 Hz)
27
+ };
28
+ ```
29
+
30
+ ### 主要方法
31
+
32
+ ``` cpp
33
+ virtual ErrorCode Read (uint16_t slave_addr, RawData read_data, ReadOperation& op) = 0;
34
+ virtual ErrorCode Write(uint16_t slave_addr, ConstRawData write_data, WriteOperation& op) = 0;
35
+ virtual ErrorCode SetConfig(Configuration config) = 0;
36
+
37
+ virtual ErrorCode MemRead(uint16_t slave_addr, uint16_t mem_addr,
38
+ RawData read_data, ReadOperation& op,
39
+ MemAddrLength mem_addr_size = MemAddrLength::BYTE_8) = 0;
40
+
41
+ virtual ErrorCode MemWrite(uint16_t slave_addr, uint16_t mem_addr,
42
+ ConstRawData write_data, WriteOperation& op,
43
+ MemAddrLength mem_addr_size = MemAddrLength::BYTE_8) = 0;
44
+ ```
45
+
46
+ ## 特性总结
47
+
48
+ - 支持 I2C 设备读写与寄存器读写;
49
+ - 支持配置通信时钟频率;
50
+ - 寄存器访问支持 8/16 位地址;
51
+ - 接口统一,兼容异步/同步调用模型;
52
+ - 便于派生平台相关实现,支持跨平台适配。
Original file line number Diff line number Diff line change
1
+ ---
2
+ id : power
3
+ title : 电源管理
4
+ sidebar_position : 9
5
+ ---
6
+
7
+ # Power(电源管理)
8
+
9
+ ` LibXR::PowerManager ` 提供统一的电源管理接口,适用于实现系统复位、关机或进入低功耗模式等功能,供平台或电源控制驱动实现。
10
+
11
+ ## 接口定义
12
+
13
+ ``` cpp
14
+ class PowerManager {
15
+ public:
16
+ PowerManager() = default;
17
+ virtual ~ PowerManager() = default;
18
+
19
+ // 系统复位操作(由子类实现具体逻辑)
20
+ virtual void Reset() = 0;
21
+
22
+ // 系统关机操作(由子类实现具体逻辑)
23
+ virtual void Shutdown() = 0;
24
+ };
25
+ ```
26
+
27
+ ## 使用说明
28
+
29
+ - `Reset()` 可用于软复位控制器、重新启动系统等;
30
+ - `Shutdown()` 用于关机、掉电、进入睡眠等低功耗控制;
31
+ - 可用于平台的电源按钮、远程命令、低电量策略等情境;
32
+ - 由具体平台实现其底层行为,接口保持一致,便于移植与抽象封装。
You can’t perform that action at this time.
0 commit comments