我是蓝牙编程的新手,所以请记住这一点。
我正在尝试从台式电脑连接到脉搏传感器,特别是 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 后程序不会立即终止,除非我误解了异步任务,否则它应该有时间完成