关于数据库中的gatt服务的total_size

6个帖子/ 0新
最后一篇
Dhrishi.
离线
最后一次露面:3年6个月前
加入:2017-02-10 09:56
关于数据库中的gatt服务的total_size

你好,

我对作为attmdb_add_service()给出的总大小参数有一些问题

假设,我有:
1 128位服务
1 128位uint8_t型位特征

以下是正确的:
Total_Size = 16 + 19 + 1
nb_att_16 = 2
nb_att_32 = 0.
nb_att_128 = 1

问:1
现在,如果我的上述特性是不透明结构(0x1b,根据BT SIG格式值)而不是UINT8_T
然后,我输入的是它的大小(而不是上面的+ 1在Total_size方程中)

问:2
另外,正在添加特征值大小(取决于类型)到强制性总尺寸?
我的意思是,如果我正在保存和处理在UART上获取读/写请求的不同控制器上的特征读/写值,那么它必须在上面添加+1?

简而言之,我不会在对话框上保存GATT树中的特征或描述符的值。我是否仍然需要在Total_size字段中解释它们的值大小?

问:3
在示例示例中,我注意到,对于特征描述符(例如CCC或特征描述或任何自定义),在Total_size中添加的大小仅用于由描述符存储而不是描述符本身存储的值。这样对吗?如果是,则SDK在哪里存储描述符的UUID和权限?

我有引用的函数:attm_svc_create_db_128()在开始时,计算Total_size和NO属性。

设备:
mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Dhrishi,

嗨Dhrishi,

Q1:我不确定我知道这个问题,如果你想要有一个值超过1个字节的值,你只需将额外的字节添加到总大小计算,例如在你的例子上而不是+1你添加您希望值特性的字节,例如,如果您希望拥有16位值,则会添加+2。请查看AN-B-029.PDF,并在支持AN-B-029文档的补充教程中。检查项目示例128_AFTER部分7.2,将第一个特征的长度增加到8字节。

Q2:是的:是您必须声明特性的大小,以便堆栈分配数据库的大小,无论您在其他位置处理这些值还存储在创建的内部数据库中。

Q3:是的,当CCC包含在数据库中时,仅计算两个字节,这是描述符本身的值,每个特征的权限存储在特征声明属性(每个特征声明具有19个字节大小数据的原因,uuid的16个字节,指向权限的权限和句柄+2字节的特征的值属性+1字节)。

谢谢mt_dialog.

Dhrishi.
离线
最后一次露面:3年6个月前
加入:2017-02-10 09:56
Q1:是的。我明白那个

Q1:是的。我理解,根据数据类型的确切尺寸应添加到总大小。我的意思是,如果我的数据类型是不透明结构而不是UINT8,UINT16或字符串(当读取或写入值时动态添加的TLV列表)那么我将不知道每个人都会有所不同读/写呼叫。对于这种类型的特征,我在total_size中添加了什么。

Q2:即使我没有为任何特征设定价值,它仍然需要吗?如果应用程序不使用它,则堆栈何时使用分配的值为特征值?

Q3:我理解19个字节的划分。但是,如果我的特征支持读写,并且它具有用于用户描述的描述符,该描述符只支持读取,那么如何适用相同的权限?
有关更多清晰度,请您提供以下总体规模:
1服务:128位
1 Charcteristic:128位:读写权限:存储1个数据
1特征描述符:128位(自定义):只读权限:存储2个字节的数据

mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Dhrishi,

嗨Dhrishi,

Q1:您应该在声明特性时提供固定长度,以便为要分配的数据库的量,根据您当前的需求,您无法动态分配数据库大小,您只能放置最大数据量你期望处理。

Q2:您可以在没有值的情况下留下特性的值属性,您不必设置它。什么是必须在创建数据库时,您必须调用Set Stative函数以设置特征声明属性的值,以便设置该特定属性的权限和UUID,如果是您所在的询问。

Q3:如果我正确地提出问题,你可以根据需要设置你的描述符(读取或写入),但是BLE规范定义了特征描述符的固定属性(例如,客户端特征配置应是可读的或可写的),仅适用于构成特征的“用户定义的”属性。当中央连接到外围设备时,它现在不会关于描述符的属性,它只假设它可以写入或读取(基于它读取的描述符),因此您不需要在您的额外分配额外的空间数据库,因为这些属性是基于描述符的类型已知的。如果您有兴趣在描述符上设置特殊权限,则BLE SP指定其他描述符,以便指定名为“特征扩展属性”的描述符的属性。

谢谢mt_dialog.

Dhrishi.
离线
最后一次露面:3年6个月前
加入:2017-02-10 09:56
Q1。设置最大尺寸

Q1。设置最大可能的大小有点困难,因为我们在那些特定特征上获得了超过1000个字节的数据,这就是我们不将在DA14580上存储数据的原因。

Q2。由于我没有初始集或存储DA14580上的特征值,堆栈何时使用保存的存储器以用于该特定特征值?

Q3。行。我得到了关于权限的。现在,我想知道为什么堆栈不分配存储描述符的值的大小(对于例如,用于CCC描述符的2个字节,其允许启用或禁用通知/指示符)。
此外,根据我以前的问题,我的特征描述符将是自定义(16字节UUID)不是标准,它将存储2个字节的数据值。我需要多少字节来保留此描述符。简而言之,我需要总体大小:

1服务:128位=> 16
1 charcteristic:128位:读写权限:存储1字节的数据=> 19 + 1
1特征描述符:128位(自定义):只读权限:存储2个字节的数据=> ??

mt_dialog.
离线
最后一次露面:5个月2周前
职员
加入:2015-06-08 11:34
嗨Dhrishi,

嗨Dhrishi,

Q1:正如我所提到的那样,您无法根据当前需要分配数据库的数量,您需要指定固定金额。

Q2:除了在创建时分配空间本身,我不认为堆栈在任何其他情况下都使用该区域。

Q3:由于声明描述符特征,因此堆栈将自行分配指定的金额,并且在创建服务数据库中包含的16位UUID的数量时,您也有折叠。为描述符声明的字节(描述符将通过的实际数据被分配给服务声明,以便分配的存储是2个字节)。

关于您的问题,据我所知,您想声明一个自定义128uuId描述符,就我知道的特征描述符不能是自定义的,但是BLE规范描述的标准标签,以便描述自定义或所采用的特征例如0x2902客户端特性配置,0x2901特征用户致意等。为了使这是您必须声明其中一个采用的标签的描述符。

谢谢mt_dialog.