你好,
我使用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时,只有upota功能有问题?
谢谢,PM_DIALOG.
你好,
在附件中,我正在发送pxp_reporter示例项目,我通过添加我的自定义特征修改。
是的,这是正确的,从我只能看到偶像功能没有操作。我检查了使用NRFConnect应用程序可用的服务,并且一切都看起来很好,但是使用Suota应用程序的Suota无法正常工作。它可以是您的Android应用程序中的错误吗?
你确定特征的UUID应该是唯一的吗?即使特征在不同的服务中(比如我的DIS和我的定制服务)?
谢谢,Mcisek.
嗨mcisek,
谢谢你为我提供这个项目。让我检查一下并尝试重现你的问题。我会尽快回复你。
谢谢,PM_DIALOG.
嗨mcisek,
0x2a28用于DIS服务以定义“软件修订字符串”特性,因此不建议在自定义服务中使用。UUID代表普遍唯一的ID,所以我建议你没有2个相同的uuids。自定义服务应该有一个128bit uuid而不是16bit uuid。根据您的代码,自定义服务的UUID为0xFFFD,但如果与BLE通用移动应用程序连接,则会看到它会自动转换为随机128bit UUID。使用0x2a28时,自定义服务包含“软件修订字符串”特征。然而,在DIS服务时,在之前提到的差异是相同的特征。只要您拥有与Suota Mobile应用程序连接的设备,您将看到应用程序使用“软件修订字符串”,以便定义“软件修订版”。通常,“软件修订”应具有“1.0.0.1”值。请检查sw_version.h头文件和sw_version定义。为此,预计当您的自定义特征的UUID是0x2A28时,它将无法执行课题 - 我也将其复制。 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 \ interfaces \ BLE \ Services \ Include SDK路径。我检查了代码,在您的自定义服务中,该特性是“软件修订字符串”。此外,您无法使用U2F服务作为自定义服务,因为它由Bluetooth SIG定义为DIS服务。UUID,可以是官方采用的BLE服务的16位,这些BLE服务由蓝牙SIG合格,或者它可以是128位,用于无限制的自定义服务。如果您发现任何答案有用,请将其标记为已接受。
谢谢,PM_DIALOG.