你好,
我正在使用SDK 10.0.4.66.2的DA1469X芯片(基本上我也在那个板上的DEV板上测试这个问题)。我的问题是,当我用一个特定的特征添加我的自定义服务时,苏达特功能停止为我工作。结果在Dialog的Suota应用程序中,尽管我看到了我的设备(我可以连接到它)我看不到任何设备信息(来自DIS的数据,就像制造商一样,型号,固件版本和软件版本),也是固件更新未开始,留下来在0个数据包发送。
因此,我的自定义服务UUID是0xFFFD,并且特征uuid 0x2a28 - uuids是我需要实现的特征,所以我无法改变它们。我添加的方式就是这样的方式:
uint16_t m_service_revision_handle = 0;ATT_UUID_T UUID;uint16_t num_attr = ble_gatts_get_num_attr(0,1,0);静态const16_t u2f_service_uuid = 0xFFFD;static const16_t some_uuid = 0x2a31;static const16_t错误_uuid = 0x2a28;BLE_UUID_CREATE16(U2F_SERVICE_UUID,&UUID);ble_gatts_add_service(&uuid,gatt_service_primary,num_attr);BLE_UUID_CREATE16(错误_UUID,&UUID);BLE_GATTS_ADD_CHARACTION(&UUID,GATT_PROP_READ,ATT_PERM_READ,20,GATTS_FLAG_CHAR_READ_REQ,//标志仅具有GATTS_FLAG_CHAR_READ_REQ 0,&M_SERVICE_REVISION_HANDLE); ble_gatts_register_service( &m_service_revision_handle, 0 );
有趣的事情是,如果我将特征uuid从0x2a28更改为Ex。0x2a31一切正常好。
我使用此附加服务编写了pxp_reporter_task.c文件,使Suota不可运行。我正在附加文件,这样您就可以替换在SDK的PXP_Reporter(Project / DK_Apps / Demos / PXP_Reporter)中的示例项目中的一个。[由于在附件中我只能添加PDF文件,您需要从其扩展中删除.pdf]
有人可以看看那个并帮助我解决这个问题吗?为什么这个特殊的特征uuid导致偶像不起作用?它不仅仅与对话框的Android应用程序一起工作,它将与其他任何东西一起工作吗?预先感谢您的帮助
关键词:
设备:
麦迪塞克,
谢谢你的问题。您能否分享我的代码来创建自定义服务,以便复制您的问题?此外,您还有一个PDF文件,但我无法打开它,所以我建议您zip zip并再次附加它。关于UUID,它不是使用相同的UUID的最佳实践 - 0x2a28在DIS配置文件中使用。与此同时,我建议你带走DA1469x自定义蓝牙服务来自我们支持网站的教程,展示如何实现自定义服务。
我做了一个简短的演示,其中使用了2个相同的16位UUID,它正常工作。为此,问题可能与UUID无关 - 但让我们检查您使用的代码!
使用0x2A28 UUID时,只有SUOTA功能有问题?
谢谢,PM_Dialog
你好,
在附件中,我通过添加我的自定义字符来发送我占用的pxp_reporter示例项目。
是的,这是正确的,从我所能看到的只有SUOTA功能是不运行的。我检查了哪些服务可用使用NRFconnect应用程序和一切看起来很好,但SUOTA使用你的SUOTA应用程序不工作。它可能是你的Android应用程序中的一个bug吗?
你确定,uuid的特征应该是独一无二的吗?即使表征在不同的服务中,即使是不同的服务(喜欢我和我的自定义)?
谢谢,mcisek
麦迪塞克,
谢谢你为我提供这个项目。让我检查一下,试着复制一下你的问题。我会尽快回复你的。
谢谢,PM_Dialog
麦迪塞克,
在DIS服务中使用0x2A28来定义“软件修订字符串”特征,因此不建议在自定义服务中使用它。UUID代表统一唯一ID,所以我建议不要使用两个相同的UUID。自定义服务应该有128bit的UUID,而不是16bit的UUID。根据您的代码,自定义服务的UUID是0xFFFD,但是如果您连接BLE通用移动应用程序,您将看到它被自动转换为随机的128bit UUID。当使用0x2A28时,自定义服务包含“软件修订字符串”特征。然而,正如我前面提到的,同样的特性正在DIS服务中使用。一旦你有设备连接到SUOTA移动应用程序,你会看到“软件修订字符串”被应用程序用来定义“软件修订”。一般情况下,“软件修订版本”应有“1.0.0.1”值。请检查SW_VERSION .h头文件和SW_VERSION定义。为此,当您的自定义特征的UUID是0x2A28时,预计它不能执行SUOTA—我也从我的侧复制了它。 When using 0x2A31 UUID, you are able to perform SUOTA because this UUID is not used by the DIS service. However, this UUID is used by the SCPS service for defining the “Scan Refresh” characteristic, but the SCPS service is not used in the PXP reporter example, so that’s why the procedure runs as expected.
我的建议将遵循DA1469x自定义蓝牙服务创建一个自定义服务,然后使用一个UUID的自定义特征,这是不被使用的。
在您的初始帖子中,您提到您无法更改UUID,所以我可以知道是否存在任何特定原因?
谢谢,PM_Dialog
谢谢您的回答。我无法更改UUID的原因是我需要实现这里描述的FIDO U2F服务:https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-bt-protocol-v1.2-ps-20170411.html#u2f-service在第6.1章中。这是WERID,他们决定使用与DIS中相同的UUID(我猜是最受欢迎的服务之一)。
麦迪塞克,
你们自己实施U2F服务了吗?SDK10中支持的可用服务位于sdk接口ble服务下,包括sdk路径。我检查了你的代码,在你的自定义服务中,特征是“软件修订字符串”。此外,您不能将U2F服务作为自定义服务使用,因为它是由蓝牙SIG定义的,作为DIS服务。UUID,可以是16位的正式采用BLE服务,并通过蓝牙SIG合格,也可以是128位的自定义服务,不合格。如果你发现任何有用的答案,请标记为接受。
谢谢,PM_Dialog