Skip to content

Commit 302e367

Browse files
committed
Add driver.
1 parent 4473720 commit 302e367

File tree

22 files changed

+1172
-0
lines changed

22 files changed

+1172
-0
lines changed

docs/basic_coding/driver/README.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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,只需拿到基类指针并调用接口即可。

docs/basic_coding/driver/adc.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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()` 方法完成采样。

docs/basic_coding/driver/can.md

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
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+
- 抽象接口适用于多平台驱动扩展。

docs/basic_coding/driver/flash.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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+
- 上层可基于该接口实现参数存储、文件系统、日志管理等功能。

docs/basic_coding/driver/gpio.md

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
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 等。

docs/basic_coding/driver/i2c.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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+
- 便于派生平台相关实现,支持跨平台适配。

docs/basic_coding/driver/power.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
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+
- 由具体平台实现其底层行为,接口保持一致,便于移植与抽象封装。

0 commit comments

Comments
 (0)