# BLE NUS 协议设计

## 协议格式

### 数据包结构

所有数据包的第一个字节是**类型字节**，用于区分日志数据和控制命令。

```
[类型字节 (1 byte)][数据 (N bytes)]
```

### 类型定义

| 类型值 | 名称 | 方向 | 说明 |
|--------|------|------|------|
| `0x00` | `BLE_NUS_TYPE_LOG_DATA` | 设备 → 手机 | 日志数据 |
| `0x01` | `BLE_NUS_TYPE_CMD` | 手机 → 设备 | 控制命令 |
| `0x02` | `BLE_NUS_TYPE_CMD_RESP` | 设备 → 手机 | 命令响应 |

## 控制命令

### 命令格式

```
[0x01][命令字节 (1 byte)][命令数据 (N bytes)]
```

### 命令列表

| 命令值 | 名称 | 数据 | 说明 |
|--------|------|------|------|
| `0x01` | `BLE_NUS_CMD_ENABLE_LOG` | 无 | 启用日志输出 |
| `0x02` | `BLE_NUS_CMD_DISABLE_LOG` | 无 | 禁用日志输出 |
| `0x03` | `BLE_NUS_CMD_SET_LOG_LEVEL` | `[级别 (1 byte)]` | 设置日志级别 (0=ERR, 1=WRN, 2=INF, 3=DBG) |
| `0x04` | `BLE_NUS_CMD_DUMP_LOGS` | 无 | 读取所有缓冲的历史日志 |
| `0x05` | `BLE_NUS_CMD_CLEAR_LOGS` | 无 | 清除日志缓冲 |
| `0x06` | `BLE_NUS_CMD_GET_STATUS` | 无 | 获取状态信息 |

### 命令响应格式

```
[0x02][命令字节 (1 byte)][状态 (1 byte)][响应数据 (N bytes)]
```

- **命令字节**：对应的命令值
- **状态**：`0x00` = 成功，`0x01` = 参数错误，`0xFF` = 未知命令
- **响应数据**：命令特定的数据（可选）

## 使用示例

### 1. 启用日志

**发送**：`[0x01][0x01]`
**响应**：`[0x02][0x01][0x00]` （成功）

### 2. 设置日志级别为 INF

**发送**：`[0x01][0x03][0x02]`
**响应**：`[0x02][0x03][0x00][0x02]` （成功，返回设置的级别）

### 3. 获取状态

**发送**：`[0x01][0x06]`
**响应**：`[0x02][0x06][0x00][0x01][0x01][0x02][0x0A]`
- `0x01` = 日志启用
- `0x01` = BLE 已连接
- `0x02` = 日志级别 (INF)
- `0x0A` = 缓冲的日志数量 (10)

### 4. 读取历史日志

**发送**：`[0x01][0x04]`
**响应**：设备会发送多条日志数据包：
- `[0x00][日志内容 1]`
- `[0x00][日志内容 2]`
- ...
- `[0x02][0x04][0x00]` （最后发送命令响应）

## 日志数据格式

### 从设备发送的日志

```
[0x00][日志文本内容]
```

日志文本是标准的 Zephyr 日志格式，例如：
```
[00:00:10.123] <inf> main: System starting...
```

## 实现状态

### ✅ 已完成

1. 协议定义和数据结构
2. 命令处理框架
3. 日志缓冲和过滤

### ⏳ 待完成（等 BLE 模块迁移后）

1. `bt_nus_send()` 实现
2. NUS 数据接收回调集成
3. 实际测试和验证

