Kalyan 0 28 августа, 2018 Опубликовано 28 августа, 2018 · Жалоба Добрый день. Работаю с BLE - создаю BLE peripheral device. В GATT профайле определен один сервис в котором определена одна характеристика со свойством read. Эта характеристика описана двумя атрибутами (Declaration - uuid -0x2803 и само value c 16 байтным uuid). Вопрос относительно длины данных для атрибута value этой характеристики. Возможно ли как то указать что длина данных у этой характеристики переменная? Например инит длинна = 0 и максимальная длина = 2 байта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 29 августа, 2018 Опубликовано 29 августа, 2018 · Жалоба ...Работаю с BLE... Здесь как-то бсе больше про ARMы... А по сути: если только "read" - то нет. Для жтого нужно "notification". И минимальная длина "0" для "read" выглядит несколько странно... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kalyan 0 29 августа, 2018 Опубликовано 29 августа, 2018 · Жалоба Здесь как-то бсе больше про ARMы... Да, извиняюсь, не нашел более подходящего места. И минимальная длина "0" для "read" выглядит несколько странно... Да, тут такая логика необходима: Центральное устройство периодически читает эту характеристику, там содержится статус некой операции. Если операция еще не завершилась, то эта характеристика должна быть пустая (data len = 0), то есть центральное устройство не должно получать вообще данных, а уже если операция завершилась, то в этой характеристике должен быть 2-х байтный статус. Вот исходя с этой логики хотел менять длину данных в характеристике. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 29 августа, 2018 Опубликовано 29 августа, 2018 · Жалоба Центральное устройство периодически читает эту характеристику... Так вроде для этого есть "indication". Хотя в Вашем случае восможно проще было-бы ввести статусный байт (передавать 2 или 3 байта - разница не драматическая). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 29 августа, 2018 Опубликовано 29 августа, 2018 · Жалоба Возможно ли как то указать что длина данных у этой характеристики переменная? Задаете соответствующий дескриптор - https://www.bluetooth.com/specifications/gatt/descriptors Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 29 августа, 2018 Опубликовано 29 августа, 2018 · Жалоба Задаете соответствующий дескриптор... В дескрипторе вроде как можно только ограничить размер (сверху и снизу). Длину конкретной транзакции все равно надо сообщать через "notification" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alechek 0 30 августа, 2018 Опубликовано 30 августа, 2018 · Жалоба Возможно ли как то указать что длина данных у этой характеристики переменная? Например инит длинна = 0 и максимальная длина = 2 байта. Сферический конь в вакууме? Или чип nRF52? Вообще что клиент сколько имеет, столько и выдаст, в рамках MTU-1 4.8 CHARACTERISTIC VALUE READ 4.8.1 Read Characteristic Value The Read Response only contains a Characteristic Value that is less than or equal to (ATT_MTU – 1) octets in length. If the Characteristic Value is greater than (ATT_MTU – 1) octets in length, the Read Long Characteristic Value procedure may be used if the rest of the Characteristic Value is required. Длину конкретной транзакции все равно надо сообщать через "notification" Ничего подобного. Более того, Notification опять таки ограничен MTU. Чтобы вычитать полную характеристику, нужно следом вызывать Read Long Да, извиняюсь, не нашел более подходящего места. Более подходящее место тут: Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Wireless/Optic Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 2 30 августа, 2018 Опубликовано 30 августа, 2018 · Жалоба В дескрипторе вроде как можно только ограничить размер (сверху и снизу). Длину конкретной транзакции все равно надо сообщать через "notification" Если хочется менять длину переменной в пакете, то надо ее обновить в базе данных GATT дивайса. Для этого база должна храниться в RAM. Что редко кто делает, ибо она большая. А клиент перед чтением характеристики должен заново перечитать содержимое сервисов. Новый смысл характеристики клиент узнает читая дескрипторы. Нотификации тут только может быть можно использовать для того чтобы уведомить клиента о необходимости перечитать сервисы. Короче много действий надо совершить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 30 августа, 2018 Опубликовано 30 августа, 2018 · Жалоба ...Нотификации тут только может быть можно использовать для того чтобы уведомить клиента о необходимости перечитать сервисы. Может оно и так... Я недавно соорудил что-то типа "bulk" сервиса на базе примера UART (Nordic). Там все нормально работает: notification сообщает объем, и все, что приготовил, нормально прилетает , естественно в пределах MTU (244 байта). Со стороны телефона использовал для отладки nRF connect. В том, что происходит внутри нее, не разбирался (пока). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alechek 0 31 августа, 2018 Опубликовано 31 августа, 2018 · Жалоба естественно в пределах MTU (244 байта). BLE 4.2? Так вроде MTU 251 байт. И максимум объем данных в нотификации 248 байт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Axel 1 31 августа, 2018 Опубликовано 31 августа, 2018 · Жалоба BLE 4.2? Так вроде MTU 251 байт. И максимум объем данных в нотификации 248 байт. BLE5.0. В SDK от Nordic MTU определена 247 байт. Объяснение где-то видел (но где - сейчас не помню). Минус три служебных байта (opcode и connection handle) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться