GATT外围模式写字符大小

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
4个职位/ 0个新职位
最后发表
ltdev
离线
最后看到:4周1天前
加入:2018-11-12 09:19
GATT外围模式写字符大小

你好,我们实现了一个项目的关贸总协定外围模式。服务中有1个服务和2个属性。每个属性都有一个特征。

const struct attm_desc_128 custs1_att_db[SVC_INDEX_MAX] =

[SVC_INDEX_SERVICE] = {(uint8_t*)&att_decl_service, ATT_UUID_128_LEN, PERM(RD, ENABLE),
sizeof (lt_service_uuid), sizeof (svc_uuid), (uint8_t *) &svc_uuid},

[SVC_INDEX_GET_CHAR] = {(uint8_t*)&att_decl_characteristic, ATT_UUID_16_LEN, PERM(RD, DISABLE),
0 0零},

[SVC_INDEX_GET_VAL] = {get_char_uuid, ATT_UUID_128_LEN, PERM(WR, ENABLE) | PERM(WRITE_REQ, ENABLE),
Perm (ri, enable) | 1024,0, null},


[SVC_INDEX_SEND_CHAR] = {(uint8_t*)&att_decl_characteristic, ATT_UUID_16_LEN, PERM(RD, ENABLE),
0, 0, null},

[SVC_INDEX_SEND_VAL] = {send_char_uuid, ATT_UUID_128_LEN, PERM(RD, ENABLE),
Perm (ri, enable) | 1024, 0, null},

};

我们定义了cust_att_db。但是当我们连接它们时,我们可以在一个命令中发送256字节。但我们希望在接受写请求(来自user_catch_rest_hndl中的CUSTS1_ATT_INFO_REQ)后将512字节写入冻结的应用程序。

总结,有多少字节(从中央)写入da14585外设模式?我们在哪里犯了错误?

另外,我们如何捕获写入缓冲区溢出?我们是否可以给custs1_att_db另一个缓冲区。这样的例子吗?

走读生userBuffer [1024];

const struct attm_desc_128 custs1_att_db[SVC_INDEX_MAX] =

[SVC_INDEX_SERVICE] = {(uint8_t*)&att_decl_service, ATT_UUID_128_LEN, PERM(RD, ENABLE),
sizeof (lt_service_uuid), sizeof (svc_uuid), (uint8_t *) &svc_uuid},

[SVC_INDEX_GET_CHAR] = {(uint8_t*)&att_decl_characteristic, ATT_UUID_16_LEN, PERM(RD, DISABLE),
0 0零},

[SVC_INDEX_GET_VAL] = {get_char_uuid, ATT_UUID_128_LEN, PERM(WR, ENABLE) | PERM(WRITE_REQ, ENABLE),
PERM(RI,ENABLE) | 1024,0, userBuffer},


[SVC_INDEX_SEND_CHAR] = {(uint8_t*)&att_decl_characteristic, ATT_UUID_16_LEN, PERM(RD, ENABLE),
0, 0, null},

[SVC_INDEX_SEND_VAL] = {send_char_uuid, ATT_UUID_128_LEN, PERM(RD, ENABLE),
Perm (ri, enable) | 1024, 0, null},

};

最好的祝福……

设备:
PM_Dialog
离线
最后看到:56分1秒前
工作人员
加入:2018-02-08 11:03
嗨ltdev,

嗨ltdev,

根据BKLE规范,一个属性的最大长度为512字节。SDK的ble_app_peripheral示例包含一个“写长特性”。请看看SDK的这个例子。如果要写入的特征值的长度大于20字节,则会触发user_catch_rest_hndl()函数中的user_svc1_long_val_att_info_req_handler()。如果长度小于20字节,将执行user_svc1_long_val_wr_ind_handler()。因此,如果希望在不进行MTU交换的情况下发送超过20个字节,则应该执行与ble_app_peripheral示例中的user_svc1_long_val_att_info_req_handler()函数相同的实现。因为你这样做,主服务器将发送一个“准备写请求”,从服务器将响应一个“准备写响应”。当然,特征应该有512字节的长度- DEF_SVC1_LONG_VALUE_CHAR_LEN。

谢谢,PM_Dialog

ltdev
离线
最后看到:4周1天前
加入:2018-11-12 09:19
嗨,我想我不能

嗨,我想我无法解释我的问题。我已经可以写超过20个字节了。但是当我定义CHAR_LEN为512字节时,我只能写315字节。如果我试图写超过315字节,应用程序冻结和看门狗不工作。

我可以捕获写缓冲区溢出吗?我可以使用任何字符值缓冲区吗?

编辑:在我的调试与nrf连接移动;

我定义;#定义DEF_SVC1_LONG_VALUE_CHAR_LEN 50

我想发送51Bytes的nrf连接得到GATT_ATTR_LEN错误。我能在我的申请中写出来吗?

PM_Dialog
离线
最后看到:56分1秒前
工作人员
加入:2018-02-08 11:03
嗨ltdev,

嗨ltdev,

有没有可能分享一个屏幕截图,显示应用程序在哪里冻结?是因为WDOG过期吗?

如果增加DEF_SVC1_LONG_VALUE_CHAR_LEN,是否能够发送超过51个字节?

>>> " Additionaly can catch write buffer overflow? "

你能澄清一下上述说法吗?

谢谢,PM_Dialog