Android NDK的低功耗蓝牙

时间:2018-01-10 21:37:38

标签: android bluetooth android-ndk bluetooth-lowenergy

所以我正在开发一个通过BLE连接到EEG board的应用程序。 我的应用程序正在构建Google BLE Gatt Sample,用于接收前面提到的电路板的EEG样本。 这些样本以100个数据包/秒的速度传输,因为这是根据它们的限制,然后才会出现重大数据包丢失。

在我们用于测试的平板电脑(华为Mediapad T3 10)上遇到一些数据包丢失(大约6%)之后,我想找到导致此问题的原因。 我删除了用于处理数据的每一段代码,只留下代码来计算和跟踪丢失的数据包的数量:

private static void updatePacketsCount(int packetID){
        // Update last packet ID and dropped packets
        totalPackets++;
        int packets_dropped;
        if (last_id == -1){
            last_id = packetID;
            return;
        }
         // ID loops every 101 packets
        if (packetID > last_id){
            packets_dropped = packetID - last_id - 1;
        } else{
            packets_dropped = packetID + 101 - last_id - 1;
        }
        last_id = packetID;
        if (packets_dropped > 0){
            if (packets_dropped==100)
                return;
            Log.e(TAG, "Warning: dropped " + packets_dropped + " packets.");
            lostPackets = lostPackets + packets_dropped;
        }
    }

在取出可能的CPU密集型代码后,我仍然遇到相同的数据包丢失,因此我总共测试了4台设备

使用蓝牙v4.1的Android 5.0.2上的Redmi Note 3(MTK):

A / GanglionBluetoothLeService:丢失:64509%的损失中的0 = 0.0

带有蓝牙v4.0的Android 6.0上的Doogee X5max pro

E / GanglionBluetoothLeService:丢失:损失的63550%中的3596 = 5.658536585365853

使用蓝牙v4.0的Android 7.0上的华为Mediapad T3 10

E / GanglionBluetoothLeService:丢失:损失42640%中的2689 = 6.306285178236398

采用蓝牙v4.0的Android 5.1.1上的Teclast X98 Plus II

A / GanglionBluetoothLeService:丢失:损失65388%中的808 = 1.235700740196978

所有设备都放在靠近电路板约20厘米的桌子上。

现在我的实际问题是,这是硬件还是软件问题?与具有4.0的设备相比,具有蓝牙4.1的设备似乎按预期执行? 或者这可能是由于CPU延迟/性能不佳?有人建议使用Android NDK来获得更好的结果,但我想知道这是否会比官方Google示例代码提供更好的改进。

修改 eeg板正在运行固件https://github.com/OpenBCI/OpenBCI_Ganglion_Library 发送数据如下所示:

void OpenBCI_Ganglion::sendCompressedPacket19() {
  radioBuffer[0] = ringBufferLevel + 100;
  for (int i = 0; i < 19; i++) {
    radioBuffer[i+1] = compression_ring[ringBufferLevel][i];
  }
  ringBufferLevel++;
  if (BLEconnected) {
    SimbleeBLE.send(radioBuffer, 20);
  }
}

0 个答案:

没有答案