Есть желание сделать несложную программку для конфигурирования BlueTooth устройства. Нашел в интернете статью: https://habr.com/ru/post/339146/ и пытаюсь по мотивам сделать своё что-то. Сразу скажу, в Java, Script и вообще в ООП я ни бум-бум. Проблему еще вызывает то, что эта штука, похоже, на PC не работает. Но я пытаюсь...
Страничку я сделал на GitPages. Мммм, не знаю остальным оно доступно или нет...
Пока я пытаюсь, то что понимаю переделать под своё. Пока проблема следующая - в функции
Код:
// Подключение к определенному устройству, получение сервиса и характеристики function connectDeviceAndCacheCharacteristic(device){ if (device.gatt.connected && characteristicCache){ return Promise.resolve(characteristicCache); }
log('Connecting to GATT server...');
return device.gatt.connect(). then(server =>{ log('GATT server connected, getting service...');
getPrimaryService - как записать 128 битный UUID? Пока я его написал так как выковырнул из программы. Не нужно ли его записать как-то иначе? Может привести к BigInt? Собственно, мне так же нужно будет ввести UUID характеристик. А вот еще проблема, что у меня характеристик две. Можно ли этими средствами сделать доступ разом к двум характеристикам?
p.s. Ага, так UUID писать нельзя - Uncaught Synax Error. А как?
p.p.s оказывается, надо просто писать в кавычках... Но второй вопрос, как быть с двумя характеристиками - всиле.
Ммм, возможно, возможно.... но я еще не понимаю, где оно возвращается. А пока очередная ошибка:
Код:
// Запрос выбора Bluetooth устройства function requestBluetoothDevice(){ log('Search bluetooth device...');
return navigator.bluetooth.requestDevice('AcceptAllDevices').// <-- ТУТ ОШИБКА then(device =>{ log('"'+ device.name +'" bluetooth device selected'); deviceCache = device;
return deviceCache; }); }
В функции requestDevice может быть указан фильтр, а может быть указано acceptAllDevices, но я не понимаю, как это записать? Фильтр мне не нужен, так как фильтровать по UUID я, наверное, не буду, так как моё устройство в адвертисменте не передаёт список UUID сервисов.
С true чего-то не получается. Вообще ничего не получается. Проблема в том, что этот блютус, похоже, на PC не работает. Я по образцу из той странички, сделал так:
Код:
// Запрос выбора Bluetooth устройства let options ={ filters:[ {name:'Bargraph thermometer'}, ] };
// let options = true;
function requestBluetoothDevice(){ log('Search bluetooth device...');
Так вот на PC это выдаёт ошибку "Uncaught TypeError: Cannot read property 'requestDevice' of undefined". Но на планшете - работает. Вывалило окошко и показало моё устройство. Когда let options с фильтром закомментировал и откомментировал let options = true - на планшете перестало, возможно, работать. в Log выдало TypeError: Failed to execute 'requestDevice' on 'Bluetooth': cannot convert to dictionary. Но на андроиде я не знаю как войти в консоль, да и не знаю, какая страница работает - только что исправленная или еще из кэша?
Я JS знаю неплохо, но на уровне 2014 года; а так есть форум javascript.ru , где хорошие спецы. По отладке - ну наверное в курсе, в браузере F12 консоль, можно ставить брекпойнты и пошагово трейсить. Лучше в хроме , хотя ФФ тоже ничего, на любителя.
Про F12 в курсе, но на ноутбуке (это его я зову "PC") этот блютус не работает. Хотя Хром у меня регулярно всякие апдейты ставит (значит актуальная версия). Может надо еще что доинсталлировать? А вот как на планшете нажать F12 - ума не приложу. Придется отлаживаться по записям в лог.
Ну хорошо, устройство я вижу, но дальше что-то не идёт. Проблема в этом коде:
Код:
// Подключение к определенному устройству, получение сервиса и характеристики function connectDeviceAndCacheCharacteristic(device){ if (device.gatt.connected && characteristicCache){ return Promise.resolve(characteristicCache); }
log('Connecting to GATT server...');
return device.gatt.connect(). then(server =>{ log('GATT server connected, getting service...');
Вот что выдаёт лог: Search bluetooth device... "Bargraph thermometer" bluetooth device selected Connecting to GATT server... GATT server connected, getting service... SecurityError: Origin is not allowed to access any service. Tip: Add the service UUID to 'optionalServices' in requestDevice() options. https://goo.gl/HxfxSQ
вот тут затык. при чем тут безопасность?
Пошел почитать по ссылке. Оно хочет, чтобы было в фильтре объявлено хотябы optionalServices. Но как только добавляю фильтр, так функция жалуется на acceptAllDevices - противоречие. Пока работает так:
Код:
// Запрос выбора Bluetooth устройства let options ={ filters:[ {name:'Bargraph thermometer'} ], optionalServices:['c3766409-8778-63d8-3cbb-dcf0e0c36022'] }
Но зато уже даже одной характеристике cache записал...
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения