3.8 KiB
3.8 KiB
蓝牙原始数据显示测试指南
🎯 功能说明
现在应用已经支持立即显示蓝牙接收到的原始数据,无需等待信号处理完成。
数据流处理顺序
- 蓝牙数据接收 → 立即解析
- 原始数据显示 → 立即画图(新增)
- 信号处理 → 后台处理
- 处理后数据显示 → 可选显示
📱 测试步骤
第一步:连接蓝牙设备
- 点击"连接蓝牙"按钮
- 等待扫描完成
- 选择你的ECG设备
- 等待连接成功
第二步:验证原始数据显示
-
观察状态信息:
蓝牙状态: 设备已连接 蓝牙状态: 服务发现成功 蓝牙状态: 数据通道已建立,开始接收数据 -
检查数据接收日志:
接收到蓝牙数据: X 字节 解析出 X 个数据包 立即发送原始数据到图表,处理 X 个数据包 发送原始数据到通道 X,数据长度: X 显示原始数据到图表,通道: X,数据长度: X -
观察图表显示:
- ✅ ECG图表立即变为可见
- ✅ 原始波形立即开始显示
- ✅ 双视图同步更新(10秒节奏视图 + 2.5秒波形视图)
第三步:验证实时性
- 数据接收延迟:应该几乎无延迟
- 图表更新频率:与蓝牙数据接收频率一致
- 波形连续性:原始数据应该连续显示
🔍 关键代码位置
1. 原始数据发送
// 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. 原始数据显示
// 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
状态检查
- 蓝牙连接状态
- 数据接收频率
- 图表更新状态
- 通道数据完整性
现在你的应用可以立即显示蓝牙接收到的原始数据了!连接设备后就能看到实时波形。🚀