你好,
我在DA1469x芯片上使用SDK 10.0.4.66.2(基本上我也在开发板上测试这个问题)。我的问题是,当我添加带有一个特定特性的定制服务时,SUOTA特性就不再适合我了。因此,在Dialog的SUOTA应用程序中,尽管我看到了我的设备(我可以连接到它),但我看不到任何设备信息(来自DIS的数据,如制造商、型号、固件版本和软件版本),固件更新也没有开始,保持在0包发送。
所以,我的自定义服务UUID是0xFFFD和特征UUID 0x2A28 - UUID是我需要实现的特性所需要的,所以我不能更改它们。我添加它们的方式是这样的:
Uint16_t m_service_revision_handle = 0;att_uuid_t uuid;Uint16_t num_attr = ble_gatts_get_num_attr(0, 1, 0);static const uint16_t U2F_SERVICE_UUID = 0xFFFD;static const uint16_t SOME_UUID = 0x2A31;static const uint16_t WRONG_UUID = 0x2A28;ble_uuid_create16 (U2F_SERVICE_UUID uuid);ble_gatts_add_service (uuid, GATT_SERVICE_PRIMARY num_attr);ble_uuid_create16 (WRONG_UUID uuid);ble_gatts_add_characteristic(&uuid, GATT_PROP_READ, ATT_PERM_READ, 20, GATTS_FLAG_CHAR_READ_REQ, // Flags只有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/demo /pxp_reporter)。[由于附件中我只能添加pdf文件,您需要从扩展名中删除.pdf]
谁能看一下,帮我解决这个问题?为什么这个特殊的UUID会导致SUOTA不能工作?它是否不仅适用于对话框的Android应用程序,它也将适用于任何其他东西?提前感谢你的帮助
关键词:
设备:
嗨mcisek,
谢谢你的问题。为了复制你的问题,你能分享给我创建自定义服务的代码吗?另外,你附上了一个pdf文件,但是我无法打开,所以我建议你把它压缩后再附上。关于uuid,使用相同的uuid并不是最佳实践——DIS配置文件中一直在使用0x2A28。与此同时,我建议你去看看DA1469x自定义蓝牙服务教程来自我们的支持网站,演示如何实现自定义服务。
我做了一个简短的演示,其中使用了2个相同的16位uuid,并且工作正常。要做到这一点,问题可能与UUID无关——但让我们先检查您正在使用的代码!
当使用0x2A28 UUID时,只有SUOTA功能有问题吗?
谢谢,PM_Dialog
你好,
在附件中,我将发送pxp_reporter示例项目,我修改添加了我的自定义特征。
是的,这是正确的,从我所看到的,只有SUOTA功能是不运行的。我检查了使用NRFconnect应用程序可用的服务,一切看起来都很好,但是使用你的SUOTA应用程序是不工作的。会不会是Android应用程序中的一个bug ?
你确定特征的UUID应该是唯一的吗?即使特性在不同的服务(如我的DIS和我的定制服务)?
谢谢,mcisek
嗨mcisek,
谢谢你提供给我这个项目。让我检查一下,试着重现你的问题。我会尽快给你回电话。
谢谢,PM_Dialog
嗨mcisek,
DIS服务中使用0x2A28定义“软件修订字符串”特征,因此不建议在自定义服务中使用它。UUID代表全球唯一ID,所以我建议你不要有两个相同的UUID。自定义服务的UUID应该是128位而不是16位。根据您的代码,自定义服务的UUID是0xFFFD,但是如果您连接BLE通用移动应用程序,您将看到它被自动转换为一个随机的128位UUID。当使用0x2A28时,自定义服务包含“Software Revision String”特征。然而,正如我前面提到的,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章。奇怪的是,他们决定使用与DIS(我想DIS是最流行的服务之一)相同的UUID。
嗨mcisek,
您是否已经实现了自己的U2F服务?SDK10中支持的可用服务,位于sdk\interfaces\ble\services\include sdk路径下。我检查了您的代码,在您的定制服务中,特征是“软件修订字符串”。另外,您不能将U2F服务作为自定义服务使用,因为它是由Bluetooth SIG定义的DIS服务。UUID可以是16位,用于正式采用的BLE服务,该服务是通过蓝牙SIG认证的,也可以是128位,用于自定义服务,该服务不通过认证。如果你发现任何有用的答案,请标记为接受。
谢谢,PM_Dialog