|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
06.11.2013, 14:20 | #1 |
Регистрация: 02.07.2013
Сообщений: 7
|
Как подключиться к Bluetooth low energy устройству?
День добрый!
Пишу программy для планшета под Win 8. Мне нужно подключить внешнее BLE-устройство используя встроенный Bluetooth планшета. Само устройство уже спарено с Windows и его видно в Диспетчере устройств. А вот как к нему подключиться я никак не могу разобраться. С помощью SetupDiEnumDeviceInfo и SetupDiGetDeviceProperty я могу получить какую-то информацию о BLE-устройстве, но для выполнения, BluetoothGATTGetServices требуется Handle устройства. Я не понимаю где его брать.Если использовать CreateFile, то не понятно что подставлять в качестве первого аргумента lpFileName. Вот кусок программки, с помощью которого я ищу свое BLE-устройство. Код:
|
08.11.2013, 12:43 | #2 | |||
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
С bluetooth'ом не работал, но могу предположить, что сначала нужно выполнить поиск устройства.
Возможно подойдет для этих целей функция BluetoothFindFirstDevice. Первым параметром передается структура BLUETOOTH_DEVICE_SEARCH_PARAMS, которая задает параметры поиска. Цитата:
Цитата:
Стоит обратить внимание и на параметр fIssueInquiry. Цитата:
|
|||
11.11.2013, 13:05 | #3 |
Регистрация: 02.07.2013
Сообщений: 7
|
Я уже немного дальше продвинулся, но пока все равно не разобрался до конца.
В случае Bluetooth 4 BluetoothFindFirstDevice не подходит. На сайте MSDN они предлагают воспользоваться функциями SetupDiEnumDeviceInfo и SetupDiGetDeviceProperty. http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx Но они обманывают. На самом деле путь к устройству BLE (bluetooth low energy) удается найти используя функции SetupDiEnumDeviceInterfaces и SetupDiGetDeviceInterfaceDetail. С помощью SetupDiGetDeviceInterfaceDetail я получаю Device Interface path, который можно использовать при вызове CreateFile. Но дальше опять затыки. Удается считать из устройства какие оно поддерживает сервисы и характеристики внутри сервисов. Но при попытке считать значения характеристик получаю ACCESS_DENIED |
11.11.2013, 13:48 | #4 | |
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
А как читаете данные?
Возможно нужно установить таймаут на чтение из девайса... ReadFile Цитата:
|
|
11.11.2013, 16:37 | #5 |
Регистрация: 02.07.2013
Сообщений: 7
|
Не, у них новый набор API для Bluetooth Low Energy Functions:
BluetoothGATTGetServices BluetoothGATTGetCharacteristics BluetoothGATTGetCharacteristicValue и т.д. http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx Вот первые две функции выполняются нормально и возвращают нужные структуры, а последняя BluetoothGATTGetCharacteristicValue шиш. |
13.11.2013, 20:58 | #6 | ||
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
Цитата:
Цитата:
В общем нужно смотреть код. Ну или как-то пытаться понять взаимосвязь сервисов и хэндлов для них. |
||
14.11.2013, 17:15 | #7 |
Регистрация: 02.07.2013
Сообщений: 7
|
Документация у микрософта не супер. :/
Для вот этих 3-х функций: Код:
в первом случае они про этот параметр пишут развернуто а потом все меньше и меньше. Код:
Вот тут есть диаграмма, как связанны сервисы и характеристики. http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx К сообщению приложил файл. В нем большая часть содрана как раз из WDK. До 165 строки. До туда все работает. И вот дальше первый же вызов BluetoothGATTGetCharacteristicValue выдает ошибку. В общем не понятно, что делать. Последний раз редактировалось AndreySh; 14.11.2013 в 17:55. |
14.11.2013, 17:40 | #8 |
Регистрация: 02.07.2013
Сообщений: 7
|
Еще я заметил, что в общем-то не важно работает ли само BLE-устройство или нет. Поведение программы не меняется. Т. е. в обоих случаях я могу считать "структуру" сервисов-характеристик устройства, но не могу считать значение этих характеристик. CreateFile в обоих случаях срабатывает без ошибок и возвращает HANDLE устройства.
И еще, на свой IPhone 4S поставил программку LightBlue она умеет работать с bluetooth 4 LE. Так вот с ее помощью я нормально получаю данные с этого устройства. Т. е. проблема именно в программе под винду, а не в железке. |
15.11.2013, 12:00 | #9 | |
Регистрация: 02.07.2013
Сообщений: 7
|
Ура, проблема решена! На форуме MSDN наконец-то ответили. Может кому-то пригодится.
Цитата:
|
|
15.11.2013, 12:44 | #10 | ||
Участник клуба
Регистрация: 18.10.2008
Сообщений: 1,409
|
Перед выполнением BluetoothGATTGetCharacteristicValue нужно проверить значение hr. Ибо после этого могут быть проблемы:
Код:
Тут еще вопрос такой может быть: откуда пытается читать значение BluetoothGATTGetCharacteristicValue . Это касательно флагов BLUETOOTH_GATT_FLAG_FORCE_READ_FROM _DEVICE и BLUETOOTH_GATT_FLAG_FORCE_READ_FROM _CACHE. Так же стоит проверить значение PBTH_LE_GATT_CHARACTERISTIC::IsRead able перед чтением значений. И что-то мне кажется, что параметр hDevice [in] Handle to the service это не то, что ты туда скармливаешь. Попробуй передавать туда PBTH_LE_GATT_CHARACTERISTIC::Servic eHandle. А вообще как-то мутно все это описано на MSDN Цитата:
Цитата:
|
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
bluetooth клавиатура как отдельное устройство | Mozgunov | Общие вопросы Delphi | 11 | 31.03.2013 12:09 |
FTP как подключиться | aank10 | C++ Builder | 1 | 13.09.2012 15:49 |
Как можно обратиться к устройству, которое подключено через USB порт | Mikhail Bakurov | Общие вопросы Delphi | 8 | 17.11.2008 20:42 |
Как соединить 2 компьютера через Bluetooth | kikoz | Операционные системы общие вопросы | 6 | 27.10.2008 23:08 |
как подключиться к БД из dll? | fLytarget | Помощь студентам | 3 | 18.08.2008 17:42 |