亲爱的所有,
我已经跟随AN-B-029文档来实现一个具有两个特征的定制服务(我使用SDK 5.0.3,但相应的changelog,使用5.0.4必须没有好处)。
在Application Note中,第一个是read/write,而第二个是read/notify。在我的应用程序中,第一个特征必须是只写的,所以我从arr_char128_desc特征定义中删除了ATT_CHAR_PROP_RD:
static const struct att_char128_desc custs1_cmd_message_char = {ATT_CHAR_PROP_WR,
{0},
DEF_CUST1_CMD_MESSAGE_UUID_128};
其结果是,APP继续将特征视为READ/WRITE。如果我试图读取特性,我正确地收到一个GATT错误(GATT_READ_NOT_PERMIT)。
我错过了什么?
谢谢,
托马索马
设备:
嗨montmarc,
预计您会得到一个GATT错误,因为您没有设置您的特性的权限。为了将权限设置为您的特性,您必须找到保持您想要读或写的值的属性,并提供以下命令PERM(RD, ENABLE)。例如,为了能够读写整个特征,您应该设置PERM(WR, ENABLE)|PERM(RD, ENABLE)的权限。我建议你看一下SDK的ble_app_profile例子,以便弄清楚这些特征是如何声明的。同时强烈推荐使用5.0.4 SDK,这是最新的一个,而不是5.0.3,在最新的SDK上有相当多的修复,请检查DA1458x_Software_Release_Notes_v5.0.4。
谢谢,PM_Dialog
亲爱的PM_Dialog,
谢谢你抽出时间。
下面的代码行定义了我的特征值的属性:
[cust1_idx_cmd_message_val] = {cust1_cmd_message_uuid_128, att_uuid_128_len, perm (wr, auth),
DEF_CUST1_CMD_MESSAGE_CHAR_LEN 0零},
我把它设置为只写安全,但是,正如我在我之前的邮件中描述的,当我连接到我的APP,它的特征是读,写。我还试图添加PERM(RD, DISABLE),但没有改变。
如何设置该特征以只获得WRITE属性?
BR
托马索
嗨montmarc,
我建议您检查一下ble_app_peripheral为了理解如何使用适当的属性设置和配置特征。在本例中控制点特征是唯一的写特征,可以在配置中检查user_custs1_def.c函数(检查CUST1_IDX_CONTROL_POINT_VAL),当使用通用应用程序连接到该函数时,应该只看到可用的WRITE属性。请注意,如果您将该特征设置为AUTH,这意味着您必须在项目中添加安全性,以便能够访问该特征并完成授权。如果你想要一个简单的“写”特征,你应该删除AUTH
谢谢,PM_Dialog