# 蓝牙原始数据显示测试指南

## 🎯 功能说明

现在应用已经支持**立即显示蓝牙接收到的原始数据**，无需等待信号处理完成。

### 数据流处理顺序
1. **蓝牙数据接收** → 立即解析
2. **原始数据显示** → 立即画图（新增）
3. **信号处理** → 后台处理
4. **处理后数据显示** → 可选显示

## 📱 测试步骤

### 第一步：连接蓝牙设备
1. **点击"连接蓝牙"按钮**
2. **等待扫描完成**
3. **选择你的ECG设备**
4. **等待连接成功**

### 第二步：验证原始数据显示
1. **观察状态信息**：
   ```
   蓝牙状态: 设备已连接
   蓝牙状态: 服务发现成功
   蓝牙状态: 数据通道已建立，开始接收数据
   ```

2. **检查数据接收日志**：
   ```
   接收到蓝牙数据: X 字节
   解析出 X 个数据包
   立即发送原始数据到图表，处理 X 个数据包
   发送原始数据到通道 X，数据长度: X
   显示原始数据到图表，通道: X，数据长度: X
   ```

3. **观察图表显示**：
   - ✅ ECG图表立即变为可见
   - ✅ 原始波形立即开始显示
   - ✅ 双视图同步更新（10秒节奏视图 + 2.5秒波形视图）

### 第三步：验证实时性
1. **数据接收延迟**：应该几乎无延迟
2. **图表更新频率**：与蓝牙数据接收频率一致
3. **波形连续性**：原始数据应该连续显示

## 🔍 关键代码位置

### 1. 原始数据发送
```kotlin
// DataManager.kt - 第97行
sendRawDataToCharts(packets)

// DataManager.kt - 第177行
private fun sendRawDataToCharts(packets: List<SensorData>) {
    // 直接处理原始数据包，不进行通道映射
    for (packet in packets) {
        val channelData = packet.getChannelData()
        if (channelData != null) {
            for ((channelIndex, channel) in channelData.withIndex()) {
                // 立即发送原始数据到图表
                realTimeCallback?.onRawDataAvailable(channelIndex, channel)
            }
        }
    }
}
```

### 2. 原始数据显示
```kotlin
// MainActivity.kt - 第572行
override fun onRawDataAvailable(channelIndex: Int, rawData: List<Float>) {
    // 立即显示原始数据到图表
    binding.ecgChartContainer.visibility = View.VISIBLE
    binding.ecgRhythmView.updateData(rawData)
    binding.ecgWaveformView.updateData(rawData)
}
```

## 🎉 预期效果

### 连接成功时：
- ✅ 蓝牙设备连接成功
- ✅ 数据通道建立
- ✅ 开始接收ECG数据

### 原始数据显示时：
- ✅ ECG图表立即可见
- ✅ 原始波形立即显示
- ✅ 双视图同步更新
- ✅ 无延迟实时显示

### 数据特点：
- **原始性**：未经任何滤波处理
- **实时性**：接收即显示
- **连续性**：数据流连续
- **完整性**：包含所有通道数据

## ⚠️ 注意事项

### 1. 数据格式
- **支持的数据类型**：所有已定义的数据类型
- **通道数量**：根据设备类型自动识别
- **采样率**：根据数据类型自动设置

### 2. 显示特点
- **原始信号**：包含噪声和基线漂移
- **实时更新**：与蓝牙数据接收同步
- **多通道**：支持多通道同时显示

### 3. 性能考虑
- **UI线程**：原始数据显示在主线程
- **内存使用**：图表自动管理数据缓冲
- **更新频率**：与蓝牙数据接收频率一致

## 🔧 调试信息

### 关键日志
```
DataManager: 立即发送原始数据到图表，处理 X 个数据包
DataManager: 发送原始数据到通道 X，数据长度: X
MainActivity: 显示原始数据到图表，通道: X，数据长度: X
```

### 状态检查
- 蓝牙连接状态
- 数据接收频率
- 图表更新状态
- 通道数据完整性

现在你的应用可以立即显示蓝牙接收到的原始数据了！连接设备后就能看到实时波形。🚀
