我是蓝牙编程的新手,所以请记住这一点。
我正在尝试从台式电脑连接到脉冲传感器,特别是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设备传递给该功能,它开始搜索但从未给我任何结果,它只是永远搜索我所知道的一切,没有异常,没有调用< / p>
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后程序没有立即终止,它应该有时间完成,除非我误解了async任务
答案 0 :(得分:0)
我只想更新这个并说我发现了问题,似乎我不得不使用短UUID而不是长。在我认为自己陷入困境之前,我应该尝试过这两种选择,但我认为这不会产生任何影响。