0

我是蓝牙编程的新手,所以请记住这一点。

我正在尝试从台式电脑连接到脉搏传感器,特别是 Zephyr HxM BT。我没有使用任何设备特定的驱动程序,我使用的 Java 蓝牙库是 Bluecove,而我的蓝牙堆栈是 BlueSoleil。

据我了解,我进行的方式是

1) 扫描BT设备

public void startSearch() throws BluetoothStateException{
    System.out.println("Inquiry started");
    localdevice.getDiscoveryAgent().startInquiry(DiscoveryAgent.GIAC, this);
}

这很好用,它会发现我的脉搏带并打电话

public void deviceDiscovered(RemoteDevice arg0, DeviceClass arg1)

2) 在设备中搜索服务

发现设备后,应将其添加到 DiscoveryAgent 的缓存设备列表中,这是我的第一个问题,因为即使我发现了我的腰带,缓存(和预先知道的设备)总是空的。

所以我现在这样做的方式是要么保留我自己的设备列表,要么直接从 deviceDiscovered 开始服务搜索。

我仍然有点不确定我是否使用了正确的参数,但是通过阅读 BT 设备手册和 DiscoveryAgent.searchServices 上的 javax.bluetooth 文档:

public int searchServices(int[] attrSet,
                      UUID[] uuidSet,
                      RemoteDevice btDev,
                      DiscoveryListener discListener)
               throws BluetoothStateException

我的代码:

public void searchServices(RemoteDevice device){
    UUID[] uuidSet = new UUID[1];
    uuidSet[0]=new UUID("1101",false); //Serial Port
    System.out.println("Searching for services on " + device.getBluetoothAddress() );
    try{
    agent.searchServices(null,uuidSet, device,this);}
    catch (BluetoothStateException e){
    System.out.println("BluetoothStateException caught.");
    }

    }

我已将 attributes 参数设置为 null,因为文档指出这将使其搜索具有默认属性的服务,但是我也尝试仅使用 ServiceID (0x0003) 作为属性,但没有成功。

这就是我卡住的地方,我将正确的 BT 设备传递给函数,它开始搜索但从不给我任何结果,它只是永远搜索我所知道的一切,没有例外,没有调用

public void servicesDiscovered(int arg0, ServiceRecord[] arg1) 

或者

public void serviceSearchCompleted(int arg0, int arg1)

所以我想我的问题是: - 我做错了吗?有什么建议么?- 连接到 BT 设备的其他方法是什么,我需要了解哪些有关设备的信息才能做到这一点?

以下是我认为与设备手册相关的一些信息:

必须执行以下步骤才能连接到 HxM 设备。1) 激活要连接 HxM 的设备/计算机的蓝牙服务 2) 扫描范围内的蓝牙设备 3) 与范围内找到的 HxM 设备配对 4) 发现已配对 HxM 的服务 5) 连接到 HxM 的串口设备

上图显示蓝牙 HxM 通常通过蓝牙链路与移动设备通信。HxM 一次仅支持一个链接,并使用蓝牙 SPP(串行端口规范)通过以下低级协议与其他设备通信: • 115,200 波特 • 8 个数据位 • 1 个停止位 • 无奇偶校验

非常感谢任何建议

编辑:我只想补充一点,我正在使用控制台输入循环测试代码,因此在调用 searchServices 后程序不会立即终止,除非我误解了异步任务,否则它应该有时间完成

4

1 回答 1

0

我只是想更新这个并说我发现了问题,看来我必须使用短 UUID 而不是长 UUID。在我认为自己陷入困境之前,我应该尝试这两种选择,但我认为这不会有任何区别。

于 2015-01-27T17:15:16.460 回答