你好,
我使用SDK 10.0.4.66.2用于DA1469x芯片(基本上我也在开发板上测试这个问题)。我的问题是,当我添加我的自定义服务与一个特定的特点,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_feature (&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无法运行。我附加了这个文件,所以您可以替换在pxp_reporter的SDK示例项目(project/dk_apps/demos/pxp_reporter)中的一个。[因为附件中我只能添加pdf文件,你需要从扩展名中移除。pdf]
谁能看一下,帮我解决这个问题?为什么这个特殊的特征UUID导致SUOTA不能工作?它是否只与Dialog的Android应用程序工作,它将与其他任何东西工作?提前感谢你的帮助
关键词:
设备:
嗨mcisek,
谢谢你的问题。你能分享我的代码创建自定义服务,以复制您的问题?另外,你有一个附带的pdf文件,但我无法打开,所以我建议你把它压缩后再附加。关于uuid,使用相同的uuid不是最佳实践-在DIS配置文件中一直使用0x2A28。同时,我建议你去看看DA1469x自定义蓝牙服务来自我们支持网站的教程,演示了如何实现自定义服务。
我做了一个简短的演示,其中使用了2个相同的16位uuid,它工作正确。要做到这一点,问题可能与UUID无关——但让我们先检查一下您正在使用的代码!
使用0x2A28 UUID时,只有SUOTA功能有问题?
谢谢,PM_Dialog
你好,
在附件中,我正在发送pxp_reporter示例项目,我通过添加我的自定义特征修改。
是的,这是正确的,从我所能看到的只有SUOTA功能是不运行的。我检查了哪些服务可用使用NRFconnect应用程序和一切看起来很好,但SUOTA使用你的SUOTA应用程序不工作。它可能是你的Android应用程序中的一个bug吗?
你确定特征的UUID应该是唯一的吗?即使特征在不同的服务中(比如我的DIS和我的定制服务)?
谢谢,mcisek
嗨mcisek,
谢谢你为我提供这个项目。让我检查一下,试着复制一下你的问题。我会尽快回复你的。
谢谢,PM_Dialog
嗨mcisek,
在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章。很奇怪,他们决定使用与DIS相同的UUID(我猜这是最流行的服务之一)。
嗨mcisek,
你们自己实施U2F服务了吗?SDK10中支持的可用服务位于sdk接口ble服务下,包括sdk路径。我检查了你的代码,在你的自定义服务中,特征是“软件修订字符串”。此外,您不能将U2F服务作为自定义服务使用,因为它是由蓝牙SIG定义的,作为DIS服务。UUID,可以是16位的正式采用BLE服务,并通过蓝牙SIG合格,也可以是128位的自定义服务,不合格。如果你发现任何有用的答案,请标记为接受。
谢谢,PM_Dialog