你好,
我有一些关于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
那么我输入什么作为它的大小(而不是上面total_size方程中的+ 1)
问:2
另外,在总大小中添加特征值大小(取决于类型)是强制性的吗?
我的意思是,如果我在不同的控制器上保存和处理特征读/写值,它在UART上获得读/写请求,那么有必要在上面添加+1吗?
简而言之,我不会在对话框上保存GATT树中的特征或描述符的值。我是否仍然需要在Total_size字段中解释它们的值大小?
问:3
在示例示例中,我注意到对于一个特征描述符(比如CCC或characteristic Description或任何自定义描述符),total_size中添加的大小仅用于描述符存储的值,而不是描述符本身。这是正确的吗?如果是,SDK在哪里存储描述符的UUID和权限?
我有引用的函数:attm_svc_create_db_128()在开始时,计算Total_size和NO属性。
设备:
嗨Dhrishi,
Q1:我不确定我是否理解了这个问题,如果你想让值的特征值大于1字节你只要把额外的字节加到总大小的计算中,例如,在上面的例子中,你只需要添加你想要的值特征的字节,而不是+1,如果你想有一个16位的值,你将添加+2。请查看AN-B-029.pdf和支持AN-B-029文件的补充教程文件。检查项目sample128_After第7.2节,它将第一个特征的长度增加到8字节。
Q2:是的:是您必须声明特性的大小,以便堆栈分配数据库的大小,无论您在其他位置处理这些值还存储在创建的内部数据库中。
第三季度:是的,当CCC包含在数据库中,只计算两个字节,这是描述符本身的值,每个特征的权限存储在特征声明属性(这就是为什么每个特征声明有19字节大小的数据,指向feature值属性的UUID的16字节+1字节表示权限,+2字节表示句柄)。
谢谢mt_dialog.
Q1:是的。我理解,根据数据类型的确切尺寸应添加到总大小。我的意思是,如果我的数据类型是不透明结构而不是UINT8,UINT16或字符串(当读取或写入值时动态添加的TLV列表)那么我将不知道每个人都会有所不同读/写呼叫。对于这种类型的特征,我在total_size中添加了什么。
Q2:即使我没有为任何特征设定价值,它仍然需要吗?如果应用程序不使用它,则堆栈何时使用分配的值为特征值?
Q3:我理解19字节的除法。但是,如果我的特性支持读和写,并且它的User Description描述符只支持读,那么相同的权限如何适用于两者?
为了更清楚,请给出这个的总大小:
1服务:128位
1 Charcteristic:128位:读写权限:存储1个数据
1特征描述符:128位(自定义):只读权限:存储2个字节的数据
嗨Dhrishi,
Q1:您应该在声明特性时提供固定长度,以便为要分配的数据库的量,根据您当前的需求,您无法动态分配数据库大小,您只能放置最大数据量你期望处理。
Q2:你可以让特性的value属性没有值,你不需要设置它。必须是在创建数据库时你必须调用设置attribue函数为了设置特点声明属性的值来设置权限和特定属性的UUID,如果这是你在问什么。
Q3:如果我正确地提出问题,你可以根据需要设置你的描述符(读取或写入),但是BLE规范定义了特征描述符的固定属性(例如,客户端特征配置应是可读的或可写的),仅适用于构成特征的“用户定义的”属性。当中央连接到外围设备时,它现在不会关于描述符的属性,它只假设它可以写入或读取(基于它读取的描述符),因此您不需要在您的额外分配额外的空间数据库,因为这些属性是基于描述符的类型已知的。如果您有兴趣在描述符上设置特殊权限,则BLE SP指定其他描述符,以便指定名为“特征扩展属性”的描述符的属性。
谢谢mt_dialog.
Q1。设置最大可能的大小有点困难,因为我们在那些特定特征上获得了超过1000个字节的数据,这就是我们不将在DA14580上存储数据的原因。
Q2。由于我没有初始集或存储DA14580上的特征值,堆栈何时使用保存的存储器以用于该特定特征值?
Q3。好的。我得到了关于权限的。现在,我想知道为什么堆栈不分配存储描述符的值的大小(对于例如,用于CCC描述符的2个字节,其允许启用或禁用通知/指示符)。
此外,正如我之前的问题,我的特征描述符将是一个自定义(16字节UUID)不是标准的,它将存储2字节的数据值。我需要为这个描述符保留多少字节。简而言之,我需要的总大小:
1服务:128位=> 16
1特性:128位:读写权限:存储1字节的数据=> 19 + 1
1特征描述符:128位(自定义):只读权限:存储2个字节的数据=> ??
嗨Dhrishi,
正如我提到的,您不能根据当前的需求分配数据库的数量,您需要指定一个固定的数量。
Q2:除了在创建时分配空间,我不认为堆栈在任何其他情况下使用该区域。
Q3:由于声明描述符特征,因此堆栈将自行分配指定的金额,并且在创建服务数据库中包含的16位UUID的数量时,您也有折叠。为描述符声明的字节(描述符将通过的实际数据被分配给服务声明,以便分配的存储是2个字节)。
关于您的问题,据我所知,您想声明一个自定义128uuId描述符,就我知道的特征描述符不能是自定义的,但是BLE规范描述的标准标签,以便描述自定义或所采用的特征例如0x2902客户端特性配置,0x2901特征用户致意等。为了使这是您必须声明其中一个采用的标签的描述符。
谢谢mt_dialog.