你好,
我对作为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。
设备:
嗨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
Q1:是的。我理解根据数据类型的确切大小应该添加到总大小中。我的意思是,如果我的数据类型是不透明的struct,而不是uint8, uint16或string(当值被读或写时动态添加的tlv列表),那么我将不知道准确的大小,因为它将为每个读/写调用而变化。对于这种类型的特征,我应该在total_size中添加什么?
Q2:即使我没有为任何特征设定价值,它仍然是必需的吗?如果应用程序不使用它,堆栈什么时候使用为特征值分配的值?
Q3:我理解19个字节的划分。但是,如果我的特征支持读写,并且它具有用于用户描述的描述符,该描述符只支持读取,那么如何适用相同的权限?
有关更多清晰度,请您提供以下总体规模:
服务:128位
1特性:128位:读写权限:可存储1个字节的数据
1特征描述符:128位(自定义):只读:存储2字节数据
嗨dhrishi,
Q1:你应该提供一个固定长度时宣布为了特征数据库分配的数量,你不能动态地分配数据库的大小取决于你当前的需求,你可以把最大的你希望处理的数据量。
Q2:您可以在没有值的情况下留下特性的值属性,您不必设置它。什么是必须在创建数据库时,您必须调用Set Stative函数以设置特征声明属性的值,以便设置该特定属性的权限和UUID,如果是您所在的询问。
第三季度:如果我正确地理解了你的问题,你可以设置你的描述符,如你想(读或写),但是BLE规范为特征描述符定义了固定的属性(例如客户端特征配置应该是可读或可写的),属性仅应用于构成特征的“用户定义”属性。当中央连接到外围,它将不是现在的属性描述符,它会假设它可以读或写(基于描述符,它读取),所以你不需要分配额外的空间在您的数据库,因为这些属性被中央基于类型的描述符。如果您对在描述符上设置特殊权限感兴趣,BLE规范指定了一个额外的描述符,以指定名为“特征扩展属性”的描述符的属性。
由于MT_dialog
Q1。设置最大可能的大小有点困难,因为我们在这些特定特征上获得了超过1000字节的数据,这就是我们不打算在DA14580上存储数据的原因。
Q2。由于我没有初始设置或存储DA14580上的特征值,堆栈什么时候使用为该特定特征值保留的存储?
第三季。好的。关于权限我明白。现在,我想知道的是,为什么堆栈不分配大小存储的描述符的值(例如2字节的CCC描述符,告诉是否通知/指示是启用或禁用)。
此外,根据我以前的问题,我的特征描述符将是自定义(16字节UUID)不是标准,它将存储2个字节的数据值。我需要多少字节来保留此描述符。简而言之,我需要总体大小:
1服务:128位=>
1 charcteristic:128位:读写权限:存储1字节的数据=> 19 + 1
1个特征描述符:128位(自定义):只读权限:存储2字节的数据=> ??
嗨dhrishi,
Q1:正如我所提到的那样,您无法根据当前需要分配数据库的数量,您需要指定固定金额。
Q2:除了在创建时分配空间本身,我不认为堆栈在任何其他情况下都使用该区域。
Q3:因为你声明了一个描述符特征,堆栈将自己分配指定的数量,而且你在创建服务时声明了数据库中包含的16位UUID的数量。您为描述符声明的字节(描述符将拥有的实际数据是通过向服务声明声明应该分配的存储为2个字节来分配的)。
关于你的问题,据我所知,你想声明一个自定义128UUID描述符,据我所知,特征描述符不能自定义,而是由BLE规范描述的标准标签,为了描述自定义或采用的特征,例如0x2902客户端特征配置,0x2901用户特征描述等。为了让BLE理解这是一个描述符,您必须声明所采用的标记之一。
由于MT_dialog