реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> BLE
Kalyan
сообщение Aug 28 2018, 18:22
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 4-11-10
Пользователь №: 60 656



Добрый день.
Работаю с BLE - создаю BLE peripheral device. В GATT профайле определен один сервис в котором определена одна характеристика со свойством read.
Эта характеристика описана двумя атрибутами (Declaration - uuid -0x2803 и само value c 16 байтным uuid).
Вопрос относительно длины данных для атрибута value этой характеристики. Возможно ли как то указать что длина данных у этой характеристики переменная?
Например инит длинна = 0 и максимальная длина = 2 байта.
Go to the top of the page
 
+Quote Post
Axel
сообщение Aug 29 2018, 05:55
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(Kalyan @ Aug 28 2018, 21:22) *
...Работаю с BLE...

Здесь как-то бсе больше про ARMы... А по сути: если только "read" - то нет. Для жтого нужно "notification". И минимальная длина "0" для "read" выглядит несколько странно...
Go to the top of the page
 
+Quote Post
Kalyan
сообщение Aug 29 2018, 06:56
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 108
Регистрация: 4-11-10
Пользователь №: 60 656



Цитата
Здесь как-то бсе больше про ARMы...

Да, извиняюсь, не нашел более подходящего места.

Цитата
И минимальная длина "0" для "read" выглядит несколько странно...

Да, тут такая логика необходима:
Центральное устройство периодически читает эту характеристику, там содержится статус некой операции. Если операция еще не завершилась, то эта характеристика должна быть пустая (data len = 0), то есть центральное устройство не должно получать вообще данных, а уже если операция завершилась, то в этой характеристике должен быть 2-х байтный статус. Вот исходя с этой логики хотел менять длину данных в характеристике.
Go to the top of the page
 
+Quote Post
Axel
сообщение Aug 29 2018, 07:16
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(Kalyan @ Aug 29 2018, 09:56) *
Центральное устройство периодически читает эту характеристику...

Так вроде для этого есть "indication". Хотя в Вашем случае восможно проще было-бы ввести статусный байт (передавать 2 или 3 байта - разница не драматическая).
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 29 2018, 10:47
Сообщение #5


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Kalyan @ Aug 28 2018, 21:22) *
Возможно ли как то указать что длина данных у этой характеристики переменная?

Задаете соответствующий дескриптор - https://www.bluetooth.com/specifications/gatt/descriptors
Go to the top of the page
 
+Quote Post
Axel
сообщение Aug 29 2018, 12:19
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(AlexandrY @ Aug 29 2018, 13:47) *
Задаете соответствующий дескриптор...

В дескрипторе вроде как можно только ограничить размер (сверху и снизу). Длину конкретной транзакции все равно надо сообщать через "notification"
Go to the top of the page
 
+Quote Post
Alechek
сообщение Aug 30 2018, 06:15
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(Kalyan @ Aug 28 2018, 23:22) *
Возможно ли как то указать что длина данных у этой характеристики переменная?
Например инит длинна = 0 и максимальная длина = 2 байта.

Сферический конь в вакууме? Или чип nRF52?
Вообще что клиент сколько имеет, столько и выдаст, в рамках MTU-1

Цитата("BLUETOOTH SPECIFICATION Version 4.2 |Vol 3 @ Part G|")
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.


Цитата(Axel @ Aug 29 2018, 17:19) *
Длину конкретной транзакции все равно надо сообщать через "notification"

Ничего подобного.
Более того, Notification опять таки ограничен MTU. Чтобы вычитать полную характеристику, нужно следом вызывать Read Long

Цитата(Kalyan @ Aug 29 2018, 11:56) *
Да, извиняюсь, не нашел более подходящего места.

Более подходящее место тут: Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Wireless/Optic

Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Aug 30 2018, 07:58
Сообщение #8


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Axel @ Aug 29 2018, 15:19) *
В дескрипторе вроде как можно только ограничить размер (сверху и снизу). Длину конкретной транзакции все равно надо сообщать через "notification"

Если хочется менять длину переменной в пакете, то надо ее обновить в базе данных GATT дивайса.
Для этого база должна храниться в RAM. Что редко кто делает, ибо она большая.
А клиент перед чтением характеристики должен заново перечитать содержимое сервисов.
Новый смысл характеристики клиент узнает читая дескрипторы.
Нотификации тут только может быть можно использовать для того чтобы уведомить клиента о необходимости перечитать сервисы.
Короче много действий надо совершить.
Go to the top of the page
 
+Quote Post
Axel
сообщение Aug 30 2018, 10:29
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(AlexandrY @ Aug 30 2018, 10:58) *
...Нотификации тут только может быть можно использовать для того чтобы уведомить клиента о необходимости перечитать сервисы.

Может оно и так... Я недавно соорудил что-то типа "bulk" сервиса на базе примера UART (Nordic). Там все нормально работает: notification сообщает объем, и все, что приготовил, нормально прилетает , естественно в пределах MTU (244 байта). Со стороны телефона использовал для отладки nRF connect. В том, что происходит внутри нее, не разбирался (пока).
Go to the top of the page
 
+Quote Post
Alechek
сообщение Aug 31 2018, 07:04
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(Axel @ Aug 30 2018, 15:29) *
естественно в пределах MTU (244 байта).

BLE 4.2? Так вроде MTU 251 байт. И максимум объем данных в нотификации 248 байт.
Go to the top of the page
 
+Quote Post
Axel
сообщение Aug 31 2018, 15:32
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(Alechek @ Aug 31 2018, 10:04) *
BLE 4.2? Так вроде MTU 251 байт. И максимум объем данных в нотификации 248 байт.

BLE5.0. В SDK от Nordic MTU определена 247 байт. Объяснение где-то видел (но где - сейчас не помню). Минус три служебных байта (opcode и connection handle)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 10th July 2025 - 14:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01461 секунд с 7
ELECTRONIX ©2004-2016