Java-клиент рабочего стола Bluetooth не может найти службы
Я новичок в программировании Bluetooth, поэтому, пожалуйста, имейте это в виду.
Я пытаюсь подключиться к датчику импульсов с настольного компьютера, в частности, Zephyr HxM BT. Я не использую какие-либо драйверы для конкретных устройств, я использую библиотеку Java bluetooth - Bluecove, а мой стек bluetooth - 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 и документацию javax.bluetooth на DiscoveryAgent.searchServices:
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.");
}
}
Я установил для атрибута значение null, потому что в документации говорится, что он будет искать службы с атрибутами по умолчанию, однако я также попытался использовать только ServiceID (0x0003) в качестве атрибута, но безуспешно.
Вот где я застрял, я передаю правильное устройство BT в функцию, и он начинает поиск, но никогда не дает мне никаких результатов, он просто ищет навсегда все, что я знаю, без исключения, без вызовов
public void servicesDiscovered(int arg0, ServiceRecord[] arg1)
или же
public void serviceSearchCompleted(int arg0, int arg1)
Итак, я думаю, мои вопросы: - Я делаю что-то не так? Какие-либо предложения? - Каковы другие подходы к подключению к устройству BT, и какую информацию я должен знать об устройстве для этого?
Вот некоторая информация, которая, на мой взгляд, уместна в руководстве по эксплуатации устройства:
Для подключения к устройству HxM необходимо выполнить следующие шаги. 1) Активируйте службу Bluetooth устройства / компьютера, желающего подключиться к HxM. 2) Сканирование устройств Bluetooth в диапазоне 3) Сопряжение с устройством HxM, обнаруженным в диапазоне 4) Обнаружение служб сопряженного HxM 5) Подключение к последовательному порту HxM устройство
Диаграмма выше показывает, что Bluetooth HxM обычно связывается с мобильным устройством по каналу Bluetooth. HxM поддерживает только одну ссылку за раз и использует Bluetooth SPP (профиль последовательного порта) для связи с другими устройствами по следующему низкоуровневому протоколу: • 115 200 бод • 8 бит данных • 1 стоповый бит • Нет четности
Любые предложения очень ценятся
редактировать: я просто хочу добавить, что я тестирую код с помощью цикла ввода с консоли, поэтому программа не сразу завершается после вызова searchServices, она должна иметь время для завершения, если я не неправильно понимаю асинхронные задачи
1 ответ
Я просто хотел обновить это и сказать, что обнаружил проблему, похоже, мне пришлось использовать короткий UUID вместо длинного. Я должен был попробовать оба этих варианта, прежде чем я решил, что застрял, но я не думал, что это будет иметь значение.