蓝牙插座信号大小错误

时间:2017-08-15 08:31:16

标签: android bluetooth master-slave bluetooth-socket

我在Android上使用Master-Slave设计为蓝牙编写应用程序。微微网中的主控可以拥有多达7个活跃的奴隶。我已经阅读了Android蓝牙开发指南和BluetoothSocket.java源代码,但是没有提到最大数量的从属。所以我试着接受以下代码中的7个以上的奴隶:

private void startServerSocket(String name) {
    BluetoothServerSocket serverSocket = null;
    try {
        serverSocket = mAdapter.listenUsingInsecureRfcommWithServiceRecord(macMap.get(name), uuidMap.get(name));
        for (int i = 0; i < 8; i++) {
            BluetoothSocket socket = null;

            Log.d(TAG, i + " waitting for " + name + " to accpet...");
            socket = serverSocket.accept();
            Log.d(TAG, i + " " + name + " accepted");

            // corresponding slave thread on master side
            MasterSocketThread mst = new MasterSocketThread(socket, socket.getRemoteDevice().getName());
            mst.start();

            // register slave thread to master manager
            mCallback.registerSocketThread(mst);
        }
        serverSocket.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

作为第8次迭代的结果,我从accept()方法得到了这个异常:

android io.IOException: Connection failure, wrong signal size: 27763

我的问题是它是否与蓝牙标准(7个活跃的奴隶)有关,还是有另一个我不知道的事件?

2 个答案:

答案 0 :(得分:0)

使用不同设备(平板电脑,智能设备)进行测试后,此错误与蓝牙核心规范(我查看4.2规范版本)有关,该规范仅允许微微网中的8个活动设备(主设备+最多7个从设备)。

有趣的事实: 我使用Java的BlueCove库为我的笔记本电脑创建应用程序,它充当微微网中的主设备,它不会将从设备限制为7.我设法连接9个从设备,同时处于活动状态。这不是蓝牙规范所说的。为了解决这个问题,我以编程方式将限制设置为7个从属。

答案 1 :(得分:0)

我不认为此错误与蓝牙核心规范有关。由于LT_ADDR是一个3位值,因此有超过7个活动从站不可能,其中0保留用于广播。

来自规范Vol.2 Part B Section 4.2

  

微微网中活动的每个从站都被分配了一个主要的3位逻辑传输   地址(LT_ADDR)。 [...] LT_ADDR只有在从机处于活动模式时才有效。

同样来自第6.4.1节

  

此字段[LT_ADDR]表示目标从站(或从站中的从站)   对于主从传输时隙中的分组的广播情况   表示从主站到主站传输时隙的源从站。

我认为关键是活动这个词。第8.6节定义了活动模式和活动从属。我认为你设法拥有超过7个奴隶,​​因为并非所有奴隶都处于活动模式,例如,有些可能被置于嗅探模式。或者主设备上的蓝牙控制器可以完成其他一些技巧。

为了了解发生了什么,我建议您检查主人的HCI日志,您可以按照here所述检索。