# C++ 到 NCS (C) 移植清单

## ✅ 已完成模块

### 1. **config** - 配置管理 ✅
- **原文件**: `firmware/src/config.cpp`, `config.hpp`
- **新文件**: `firmware-ncs/src/config.c`, `config.h`
- **状态**: ✅ 已完成
- **功能**: NVS 持久化存储、配置读写

### 2. **model** - 数据结构 ✅
- **原文件**: `firmware/src/model.hpp`
- **新文件**: `firmware-ncs/src/model.c`, `model.h`
- **状态**: ✅ 已完成
- **功能**: 数据模型定义（State, PowerSample, BatterySample, Vec3f 等）

### 3. **utils** - 工具函数 ✅
- **原文件**: `firmware/src/utils.hpp` (可能在 model 或其他地方)
- **新文件**: `firmware-ncs/src/utils.c`, `utils.h`
- **状态**: ✅ 已完成
- **功能**: 时间工具、数学工具（clamp, lerp 等）

### 4. **scheduler** - 定时任务调度器 ✅ (框架)
- **原文件**: `firmware/src/main.cpp` 中的多个 `app_timer`
- **新文件**: `firmware-ncs/src/scheduler.c`, `scheduler.h`
- **状态**: ✅ 框架已创建，但只是占位符
- **功能**: 线程框架已建立，等待具体功能实现

### 5. **BLE NUS 日志** - 远程调试 ✅
- **原文件**: 无（新功能）
- **新文件**: `firmware-ncs/src/ble_nus_log.c`, `ble_nus_log.h`
- **状态**: ✅ 已完成
- **功能**: BLE NUS 远程日志、调试消息发送

### 6. **error_log** - Flash 错误日志 ✅
- **原文件**: `firmware/src/fault.hpp` (部分功能)
- **新文件**: `firmware-ncs/src/error_log.c`, `error_log.h`
- **状态**: ✅ 已完成
- **功能**: Flash 错误日志存储、CRC 校验

### 7. **debug_output** - 调试输出 ✅
- **原文件**: 无（新功能）
- **新文件**: `firmware-ncs/src/debug_output.c`, `debug_output.h`
- **状态**: ✅ 已完成
- **功能**: BLE_Message 函数

---

## ⏳ 待移植模块

### 核心数据采集模块

#### 1. **acq (Acquisition)** - 数据采集核心 ⚡ **高优先级**
- **原文件**: `firmware/src/acq.hpp`
- **复杂度**: ⭐⭐⭐⭐⭐ (非常高)
- **依赖**: imu, cadence, fs, model, config
- **功能**:
  - IMU 数据采集（通过 imu 模块）
  - ADC 数据采集（电池电压、应变传感器）
  - SMA (Simple Moving Average) 滤波
  - 扭矩计算
  - 踏频计算（通过 cadence 模块）
  - 分阶段采集状态机（rickytry: 上电→采样→下电）
- **关键函数**:
  - `rickytry()` - 5ms 高频采集（分阶段状态机）
  - `updateBatterySync()` - 电池更新
  - `updatePowerSync()` - 功率数据更新
  - `powerSample()` - 获取功率样本
  - `batterySample()` - 获取电池样本
- **RAM 需求**: ~2.1 KB (SMA 缓冲区)
- **建议**: 这是核心功能，建议优先实现

#### 2. **imu** - IMU 驱动 (LSM6DSM) ⚡ **高优先级**
- **原文件**: `firmware/src/imu.cpp`, `imu.hpp`
- **依赖文件**: `drv_lsm6dsm.c`, `drv_lsm6dsm.h`
- **复杂度**: ⭐⭐⭐⭐ (高)
- **依赖**: SPI 驱动、GPIO
- **功能**:
  - LSM6DSM IMU 初始化
  - 加速度计数据读取
  - 陀螺仪数据读取
  - 温度读取
  - 低功耗模式（suspend/resume）
- **关键函数**:
  - `createInstance()` - 创建 IMU 实例
  - `sample()` - 采样数据
  - `suspend()` / `resume()` - 低功耗控制
- **建议**: 数据采集的基础，建议与 acq 一起实现

#### 3. **cadence** - 踏频计算 ⚡ **高优先级**
- **原文件**: `firmware/src/cadence.cpp`, `cadence.hpp`
- **依赖**: `libcadence/cadence.hpp` (第三方库)
- **复杂度**: ⭐⭐⭐ (中)
- **依赖**: model, utils
- **功能**:
  - 踏频计算（从陀螺仪数据）
  - 功率计算（扭矩 × 踏频）
  - SMA 滤波
  - 校准功能
- **关键函数**:
  - `mdpsToRPM()` - 角速度转踏频
  - `torqueToWatt()` - 扭矩转功率
  - `WindowedAverage` - SMA 实现
- **建议**: 与 acq 紧密相关，建议一起实现

---

### BLE 服务模块

#### 4. **radio_ble_bas** - BLE Battery Service 📡 **中优先级**
- **原文件**: `firmware/src/radio_ble_bas.cpp`, `radio_ble_bas.hpp`
- **复杂度**: ⭐⭐ (低)
- **依赖**: BLE GATT, config
- **功能**: BLE 电池服务（通知电池百分比）
- **状态**: scheduler 中已有占位符
- **建议**: 相对简单，可以较早实现

#### 5. **radio_ble_cps** - BLE Cycling Power Service 📡 **中优先级**
- **原文件**: `firmware/src/radio_ble_cps.cpp`, `radio_ble_cps.hpp`
- **复杂度**: ⭐⭐⭐ (中)
- **依赖**: BLE GATT, acq (需要功率数据)
- **功能**: BLE 功率服务（通知功率、扭矩、踏频）
- **建议**: 需要 acq 模块完成后实现

#### 6. **radio_ble_fcs** - BLE Fitness Control Service 📡 **中优先级**
- **原文件**: `firmware/src/radio_ble_fcs.hpp`
- **复杂度**: ⭐⭐⭐ (中)
- **依赖**: BLE GATT, acq, config
- **功能**: BLE 健身控制服务（校准、配置）
- **特殊**: 需要支持暂停/恢复功能
- **建议**: 需要 acq 模块完成后实现

#### 7. **radio_ble_esm** - BLE Extended Sensor Measurement 📡 **中优先级**
- **原文件**: `firmware/src/radio_ble_esm.hpp`
- **复杂度**: ⭐⭐⭐ (中)
- **依赖**: BLE GATT, acq
- **功能**: BLE 扩展传感器测量（IMU 数据）
- **RAM 需求**: ~2.5 KB (ESM 缓冲区)
- **建议**: 需要 acq 模块完成后实现

#### 8. **radio_ble_ess** - BLE Environmental Sensor Service 📡 **低优先级**
- **原文件**: `firmware/src/radio_ble_ess.hpp`
- **复杂度**: ⭐⭐ (低)
- **依赖**: BLE GATT, acq (温度数据)
- **功能**: BLE 环境传感器服务（温度）
- **建议**: 可选功能，可以稍后实现

#### 9. **radio_ble_dfu** - BLE DFU (Device Firmware Update) 📡 **低优先级**
- **原文件**: `firmware/src/radio_ble_dfu.cpp`, `radio_ble_dfu.hpp`
- **复杂度**: ⭐⭐⭐⭐ (高)
- **依赖**: BLE GATT, MCUboot
- **功能**: 通过 BLE 进行固件更新
- **建议**: 可以最后实现，或使用 NCS 的 DFU 模块

#### 10. **radio_ble_gatt** - BLE GATT 基础 📡 **中优先级**
- **原文件**: `firmware/src/radio_ble_gatt.cpp`, `radio_ble_gatt.hpp`
- **复杂度**: ⭐⭐⭐ (中)
- **依赖**: BLE 协议栈
- **功能**: BLE GATT 服务管理、连接管理
- **建议**: BLE 服务的基础，需要先实现

---

### ANT 协议模块

#### 11. **radio_ant** - ANT 协议基础 📻 **中优先级**
- **原文件**: `firmware/src/radio_ant.hpp`
- **复杂度**: ⭐⭐⭐⭐ (高)
- **依赖**: ANT 协议栈（需要安装 sdk-ant 模块）
- **功能**: ANT 协议初始化、连接管理
- **RAM 需求**: ~1.5 KB
- **状态**: ✅ **NCS 支持 ANT**（需要安装 sdk-ant，详见 `ANT_SUPPORT_STATUS.md`）
- **建议**: 先安装 sdk-ant 模块，然后迁移代码

#### 12. **radio_ant_bpwr** - ANT+ Bike Power 📻 **中优先级**
- **原文件**: `firmware/src/radio_ant_bpwr.cpp`, `radio_ant_bpwr.hpp`
- **复杂度**: ⭐⭐⭐ (中)
- **依赖**: radio_ant, acq
- **功能**: ANT+ 功率数据发送
- **建议**: 需要 radio_ant 和 acq 完成后实现

#### 13. **radio_ant_io** - ANT+ I/O 📻 **低优先级**
- **原文件**: `firmware/src/radio_ant_io.hpp`
- **复杂度**: ⭐⭐ (低)
- **依赖**: radio_ant
- **功能**: ANT+ I/O 数据
- **建议**: 可选功能

---

### 系统模块

#### 14. **led** - LED 控制 💡 **中优先级**
- **原文件**: `firmware/src/led.hpp`
- **复杂度**: ⭐⭐ (低)
- **依赖**: GPIO, PWM (如果需要)
- **功能**: RGB LED 控制、闪烁、颜色设置
- **关键函数**:
  - `createInstance()` - 创建 LED 实例
  - `enable()` / `disable()` - 开关控制
  - `enableBlink()` - 闪烁控制
- **建议**: 相对简单，可以较早实现

#### 15. **fs (File System)** - 文件系统 💾 **低优先级**
- **原文件**: `firmware/src/fs.hpp`
- **复杂度**: ⭐⭐⭐ (中)
- **依赖**: Flash 驱动
- **功能**: 文件读写、配置持久化
- **状态**: 已部分实现为 NVS (config 模块使用)
- **建议**: 如果需要更多功能，可以扩展

#### 16. **fault** - 错误处理 ⚠️ **低优先级**
- **原文件**: `firmware/src/fault.hpp`
- **复杂度**: ⭐⭐⭐ (中)
- **依赖**: Flash, fs
- **功能**: 错误记录、HardFault 处理
- **状态**: 已部分实现为 error_log 模块
- **建议**: 如果需要更多功能，可以扩展

#### 17. **FSM (Finite State Machine)** - 状态机 🔄 **高优先级**
- **原文件**: `firmware/src/main.cpp` 中的状态机逻辑
- **依赖**: `libmcu/fsm.hpp` (第三方库)
- **复杂度**: ⭐⭐⭐⭐ (高)
- **依赖**: timer (singleShotTimer), config, model
- **功能**:
  - 设备状态管理（7 个状态）
  - 状态转换逻辑
  - 状态持久化
- **关键状态**:
  - 待机、激活、校准、错误等
- **建议**: 核心功能，建议在数据采集完成后实现

#### 18. **timer** - 定时器 ⏱️ **低优先级**
- **原文件**: `firmware/src/timer.hpp`
- **复杂度**: ⭐⭐ (低)
- **依赖**: Zephyr 定时器 API
- **功能**: 定时器封装（已迁移为 scheduler）
- **状态**: 已部分实现为 scheduler 模块
- **建议**: 如果需要更多功能，可以扩展

---

### 驱动层模块

#### 19. **drv_lsm6dsm** - LSM6DSM IMU 驱动 🔧 **高优先级**
- **原文件**: `firmware/src/drv_lsm6dsm.c`, `drv_lsm6dsm.h`
- **复杂度**: ⭐⭐⭐ (中)
- **依赖**: SPI 驱动
- **功能**: LSM6DSM 底层驱动（SPI 通信）
- **建议**: imu 模块的基础，需要先实现

#### 20. **drv_lsm6ds3** - LSM6DS3 IMU 驱动 🔧 **低优先级**
- **原文件**: `firmware/src/drv_lsm6ds3.c`, `drv_lsm6ds3.h`
- **复杂度**: ⭐⭐⭐ (中)
- **依赖**: SPI 驱动
- **功能**: LSM6DS3 底层驱动（如果使用此型号）
- **建议**: 如果产品使用 LSM6DSM，可以忽略

---

## 推荐实施顺序

### 阶段 1: 基础驱动层（必须先完成）🔧
1. **drv_lsm6dsm** - IMU 驱动
2. **led** - LED 控制（相对简单，可以验证 GPIO）

### 阶段 2: 数据采集核心（核心功能）⚡
3. **imu** - IMU 模块
4. **cadence** - 踏频计算
5. **acq** - 数据采集核心（最复杂，最重要）

### 阶段 3: BLE 服务（通信功能）📡
6. **radio_ble_gatt** - BLE GATT 基础
7. **radio_ble_bas** - 电池服务（简单）
8. **radio_ble_cps** - 功率服务（需要 acq）
9. **radio_ble_fcs** - 控制服务（需要 acq）
10. **radio_ble_esm** - 扩展传感器（需要 acq）

### 阶段 4: 状态机和系统（整体协调）🔄
11. **FSM** - 状态机（需要所有数据采集完成）

### 阶段 5: ANT 协议（可选）📻
12. **radio_ant** - ANT 基础
13. **radio_ant_bpwr** - ANT+ 功率

### 阶段 6: 其他功能（可选）💾
14. **radio_ble_ess** - 环境传感器（可选）
15. **radio_ble_dfu** - DFU（可选）
16. **fs** - 文件系统扩展（如果需要）
17. **fault** - 错误处理扩展（如果需要）

---

## 模块依赖关系图

```
config ──┐
model ──┼──> acq ──> radio_ble_cps
utils ──┘     │         radio_ble_fcs
              │         radio_ble_esm
              │
              ├──> imu ──> drv_lsm6dsm
              │
              └──> cadence
                    │
                    └──> libcadence (需要移植或重写)

acq ──> FSM ──> scheduler
  │
  └──> radio_ant_bpwr ──> radio_ant

led (独立)
```

---

## 优先级建议

### 🔴 **最高优先级**（核心功能）
1. **drv_lsm6dsm** - IMU 驱动（基础）
2. **imu** - IMU 模块（基础）
3. **acq** - 数据采集（核心）
4. **cadence** - 踏频计算（核心）

### 🟡 **高优先级**（主要功能）
5. **radio_ble_gatt** - BLE 基础
6. **radio_ble_bas** - 电池服务
7. **radio_ble_cps** - 功率服务
8. **FSM** - 状态机

### 🟢 **中优先级**（重要功能）
9. **radio_ble_fcs** - 控制服务
10. **radio_ble_esm** - 扩展传感器
11. **led** - LED 控制
12. **radio_ant** - ANT 基础
13. **radio_ant_bpwr** - ANT+ 功率

### ⚪ **低优先级**（可选功能）
14. **radio_ble_ess** - 环境传感器
15. **radio_ble_dfu** - DFU
16. **fs** - 文件系统扩展
17. **fault** - 错误处理扩展

---

## 📌 ANT 支持确认

✅ **NCS 支持 ANT 协议**

- **状态**: NCS v2.5.1 支持 ANT，但需要安装 `sdk-ant` 模块
- **安装方法**: 使用 `west init` 安装 sdk-ant 仓库
- **详细说明**: 请查看 `ANT_SUPPORT_STATUS.md`
- **建议**: 在迁移 ANT 相关模块前，先安装并验证 sdk-ant 模块

---

## 下一步建议

根据您的需求，建议按以下顺序进行：

### 选项 A: 快速验证（推荐开始）
1. **led** - 简单，可以快速验证 GPIO 和基本功能
2. **drv_lsm6dsm** - IMU 驱动基础

### 选项 B: 核心功能（推荐优先）
1. **drv_lsm6dsm** - IMU 驱动
2. **imu** - IMU 模块
3. **acq** - 数据采集核心

### 选项 C: 通信功能（如果先需要通信）
1. **radio_ble_gatt** - BLE 基础
2. **radio_ble_bas** - 电池服务

---

## 注意事项

1. **libcadence 和 libmcu**: 这些是第三方库，需要：
   - 移植到 C 语言
   - 或者找到 NCS/Zephyr 的替代方案
   - 或者重写核心功能

2. **RAM 使用**: 实现每个模块后检查 RAM 使用情况

3. **测试**: 每个模块实现后，建议先测试再继续

4. **依赖关系**: 注意模块之间的依赖，按顺序实现

