SDK_APP/BLUETOOTH_DATA_FLOW_GUIDE.md

174 lines
4.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 蓝牙数据流处理指南
## 🎯 数据流处理架构
### 数据流向
```
蓝牙设备 → BluetoothManager → MainActivity → DataManager → ECG图表显示
```
### 处理流程
1. **蓝牙数据接收**: `BluetoothManager.onCharacteristicChanged`
2. **数据传递**: `MainActivity.onDataReceived`
3. **数据解析**: `DataManager.onBleNotify`
4. **信号处理**: `DataManager.processStreamingData`
5. **图表更新**: `MainActivity.onProcessedDataAvailable`
## 🔧 已完成的修改
### 1. BluetoothManager ✅
- **Nordic UART Service (NUS)** 协议支持
- **自动UUID匹配**: `6e400001-b5a3-f393-e0a9-68716563686f`
- **数据接收**: `onCharacteristicChanged` 回调
- **状态管理**: 连接状态、错误处理
### 2. MainActivity ✅
- **蓝牙回调实现**: `BluetoothManager.BluetoothCallback`
- **数据接收处理**: `onDataReceived` 方法
- **实时数据回调**: `DataManager.RealTimeDataCallback`
- **图表更新**: `onProcessedDataAvailable` 方法
### 3. DataManager ✅
- **蓝牙数据处理**: `onBleNotify` 方法
- **流式数据处理**: `processStreamingData` 方法
- **信号处理**: 高通滤波 → 低通滤波 → 陷波滤波
- **实时回调**: `onProcessedDataAvailable` 回调
### 4. ECG图表 ✅
- **实时更新**: `ECGRhythmView``ECGWaveformView`
- **数据缓冲**: 性能优化的数据缓冲机制
- **双视图显示**: 10秒节奏视图 + 2.5秒波形视图
## 📱 测试步骤
### 第一步:连接蓝牙设备
1. **点击"连接蓝牙"按钮**
2. **等待扫描完成**
3. **选择你的ECG设备**
4. **等待连接成功**
### 第二步:验证数据接收
1. **观察状态信息**
```
蓝牙状态: 设备已连接
蓝牙状态: 服务发现成功
蓝牙状态: 发现服务: 6e400001-b5a3-f393-e0a9-68716563686f
蓝牙状态: 发现特征: 6e400002-b5a3-f393-e0a9-68716563686f
蓝牙状态: 数据通道已建立,开始接收数据
```
2. **检查数据接收**
```
接收到蓝牙数据: X 字节
解析出 X 个数据包
```
### 第三步:验证图表显示
1. **ECG图表变为可见**
2. **实时波形开始显示**
3. **双视图同步更新**
- **节奏视图**: 10秒显示窗口
- **波形视图**: 2.5秒显示窗口
### 第四步:验证信号处理
1. **观察处理进度**
```
=== 实时流式处理 ===
处理进度: XX%
总样本数: XXX
已处理样本: XXX
实时曲线图已更新 ✓
```
2. **检查滤波效果**
- 信号应该更加平滑
- 噪声应该被有效抑制
- 波形应该清晰可见
## 🔍 关键代码位置
### 1. 蓝牙数据接收
```kotlin
// BluetoothManager.kt - 第468行
override fun onCharacteristicChanged(gatt: BluetoothGatt, characteristic: BluetoothGattCharacteristic) {
val data = characteristic.value
callback?.onDataReceived(data)
}
```
### 2. 数据传递处理
```kotlin
// MainActivity.kt - 第656行
override fun onDataReceived(data: ByteArray) {
Thread {
dataManager.onBleNotify(data)
runOnUiThread {
binding.ecgChartContainer.visibility = View.VISIBLE
}
}.start()
}
```
### 3. 数据解析处理
```kotlin
// DataManager.kt - 第73行
fun onBleNotify(chunk: ByteArray) {
ensureParser()
nativeCallback.streamParserAppend(parserHandle, chunk)
val packets = nativeCallback.streamParserDrainPackets(parserHandle)
processStreamingData(packets)
}
```
### 4. 图表更新
```kotlin
// MainActivity.kt - 第558行
override fun onProcessedDataAvailable(channelIndex: Int, processedData: List<Float>) {
binding.ecgRhythmView.updateData(processedData)
binding.ecgWaveformView.updateData(processedData)
}
```
## 🎉 预期效果
### 连接成功时:
- ✅ 蓝牙设备连接成功
- ✅ 数据通道建立
- ✅ 开始接收ECG数据
### 数据处理时:
- ✅ 实时数据解析
- ✅ 信号滤波处理
- ✅ 通道映射完成
### 图表显示时:
- ✅ ECG图表可见
- ✅ 实时波形显示
- ✅ 双视图同步更新
- ✅ 平滑的动画效果
### 性能优化:
- ✅ 后台数据处理
- ✅ UI线程不阻塞
- ✅ 数据缓冲机制
- ✅ 实时回调更新
## ⚠️ 注意事项
### 1. 数据格式
- **Nordic UART Service**: 原始字节流
- **数据解析**: 自动协议解析
- **通道映射**: 8通道 → 12通道
### 2. 性能考虑
- **后台处理**: 避免UI阻塞
- **数据缓冲**: 优化内存使用
- **更新频率**: 平衡实时性和性能
### 3. 错误处理
- **连接失败**: 自动重试机制
- **数据异常**: 错误日志记录
- **UI异常**: 异常捕获处理
现在你的应用已经完全支持蓝牙数据流处理可以实时接收、处理和显示ECG数据了🚀