嗨,对话,
我的客户希望使用设备名(0x2A00)作为通用访问(0x1800)的特征来修改设备名。
我在user\u config.h中修改了user\u gapm\u conf,如下所示。。。
。att_cfg = gapm_mask_att_svc_chg_en |gapm_mask_att_name_perm,
我还在“default_app_on_set_dev_info”函数中添加一些调试登录,但似乎不起作用。
有什么不对吗?
我的设备信息。DA14585,SDK:6.0.4
谢谢。
设备:

嗨,斯坦利·尤耶,
好吧,似乎在回调函数eapc_set_dev_info_req_ind_handler()发送确认是task_gapc而不是task_gapm的任务中的一个问题,也是回调实际上没有改变设备名称,所以只要您收到回调即可更改应用程序回调中的设备名称。我正在检查SDK团队,我会尽快让你知道一些反馈。
谢谢你的对话
非常感谢!
嗨mt_dialog,
我试图在app\u entry\u point\u handler和gapc\u set\u dev\u info\u req\u ind\u handler函数中打印一些消息。
然而,DA14585似乎没有收到任何事件。
我能自己解决这个问题吗?这个问题是否必须更新system_library.lib,我无法修复它?
谢谢。
嗨,斯坦利·尤耶,
当前实现允许您在某人在该特定特性写入时,您可以使用回调通知您,但在数据库中的名称中没有实际实现,这是SDK团队正在调查的。所以,如果您对刚刚在某人写在那些特定的特征时,您有兴趣才能在您所要做的所有特性写入的情况下是以下更改:
在上述更改之后,您应该会看到默认的\u app \u on \u set \u dev \u info()回调发生,但这同样只是表示中央已写入该特性,这不会更改数据库中的名称。
谢谢你的对话
嗨mt_dialog,
非常感谢你。我现在可以接收事件了。
很抱歉,我不明白下列句子的意思:
1. "这不会更改数据库中的名称。”
你能告诉我如果数据库中的名字不能更改会有什么风险吗?
您的意思是设备名是SDK中的定义(#define USER_device_name“DA14585”),所以没有实际的实现来更改它吗?
实际上,我已经实现了一个函数,可以将设备名存储到外部flash中。所以你说的那句话对我的案子没有影响,对吧?
2.“为特定特征提供没有安全性的写入。”
我的客户表示写知必须具有安全性。我无法理解为什么GAPM_MASK_ATT_NAME_PERM不起作用?
谢谢。
嗨,斯坦利·尤耶,
1) 关于将要发生的事情,就像SDK一样,在你在设备上写的任何东西,SDK都不会存储你提供的名称,它只会将值发送到设备,你将能够得到它,但是设备的名称一旦你再次读取它就不会改变,设备将报告与以前相同的名称。所以,是的,在SDK中没有实际的实现来改变它。我不知道你所说的你实现了一个在外部闪存中存储设备名称的函数的确切含义。但是为了能够通过该特性更改设备的名称,您必须将更改应用到SDK本身,显然,您必须为用户\u设备\u名称指定指针,而不是固定名称,指针将指向一个数组,该数组将用于存储实际设备的名称,每当通过写入该特性更改名称时,必须将写入的数据复制到该数组。
2)每个特征都具有一些安全功能,如果启用。这意味着,如果您已将0x03(GapM_Mask_Att_Name_Perm)的值分配给设备的名称特征,这意味着为了能够在该特征上写入设备,该设备需要通过身份验证来保护链接。因此,如果链接没有身份验证,这意味着设备不会允许您在该特定特征上写入,因为您不遵守设备已设置的要求。另一方面,如果您应用0x01的值,这意味着您可以启用特性的写作,而无需额外的安全性,这意味着连接到设备的人能够编写特征。
谢谢你的对话
嗨mt_dialog,
我非常感谢您的详细信息。
对于第一个问题,我可以自己保存设备名称。那没问题。
对于第二个问题,我仍然需要安全功能,请告诉我是否有任何新的SDK版本。
非常感谢。
嗨,斯坦利·尤耶,
SDK的最新版本是6.0.6,有一个项目实现了安全allready(ble\u app\u security),我不太明白到底是什么问题。如果应用值GAPM_MASK_ATT_SVC_CHG|EN | 0x03,则为了写入特征需要安全性,如果未启动配对,则无法写入特征。如果您不想保护该特性,那么.ATT\u cfg的GAPM\u MASK\u ATT\u SVC\u CHG\u EN | 0x01将允许您在没有安全性的情况下写入该特性。
谢谢你的对话
嗨mt_dialog,
我现在使用的是sdk6.0.6,我还设置了“.att\u cfg=(GAPM\u MASK\u att\u SVC\u CHG\u EN | 0x03)”作为安全设置。
我第一次给特征写一个字符串时,应用程序显示它们是结合在一起的。
绑定后,我仍然无法设置设备名称。该应用程序显示“错误0x5:gatt Insuf身份验证”
我是否应该在“GAPC\u set\u dev\u info\u req\u ind\u handler”函数中将参数TASK\u GAPM修改为TASK\u GAPC,如下所示?
struct gapc_set_dev_info_cfm * cfm = ke_msg_alloc(gapc_set_dev_info_cfm,
任务\u GAPC,/*任务\u GAPM*/
任务应用程序,
gapc\设置\开发\信息\ cfm);
你能给我一些建议吗?
谢谢。
嗨,斯坦利·尤耶,
正如我上一篇文章中所说的那样SDK不实现更改设备的名称,但它会触发应用程序级别的指示,所以我想你已经应用了自定义修改,你也必须从task_gapm更改为task_gapc为了向您接受或不更改的对等设备发送验证。关于gatt_insuf_authentication这是您第一次尝试设置名称和中央发起的(在ble_app_security的情况下)的第一次,将发生回调(default_app_on_set_dev_info),您必须处理接收应用程序中的名称并决定接受或拒绝新名称,然后通过相应的状态发送填充填充_set_dev_info_cfm,以便正确发送确认您必须从task_gapm转换为task_gapc。
谢谢你的对话