你好,
我正在为DA1469x芯片使用SDK 10.0.4.66.2(基本上我也在该板的开发板上测试这个问题)。我的问题是,当我添加我的定制服务与一个特定的特点,索塔功能停止为我工作。因此,在Dialog的SUOTA应用程序中,尽管我看到了我的设备(我可以连接到它),但我看不到任何设备信息(来自DIS的数据,如制造商、型号、固件版本和软件版本),而且固件更新未启动,停留在0。
所以,我的定制服务UUID是0xFFFD,我需要实现的特性需要特征uuid0x2a28-UUID,所以我无法更改它们。我添加这些的方式是这样的:
uint16\t m\u服务\u修订\u句柄=0;附件;uint16\u t num\u attr=ble\u gatts\u get\u num\u attr(0,1,0);静态常数uint16\u t U2F\u服务\u UUID=0xFFFD;静态常数16\u t SOME\u UUID=0x2A31;静态常量uint16\u UUID=0x2A28;ble_uuid \u create16(U2F\u服务\u uuid,&uuid);ble\u gatts\u add\u service(&uuid,GATT\u service\u PRIMARY,num\u attr);ble\u uuid\u create16(错误的\u uuid,&uuid);ble\u gatts\u add\u characteristic(&uuid,GATT\u PROP\u READ,ATT\u PERM\u READ,20,gatts\u FLAG\u CHAR\u READ\u REQ,//标志只有gatts\u FLAG\u CHAR\u READ\u REQ 0,&m\u service\u revision\u handle);ble\u gatts\u register\u service(&m\u service\u revision\u handle,0);
有趣的是,如果我将特征UUID从0x2A28改为ex.0x2A31,一切都正常。
我准备了pxp\u reporter\u task.c文件,这个附加服务使SUOTA无法运行。我附加了这个文件,所以您可以替换SDK的pxp\u reporter示例项目(project/dk\u apps/demos/pxp\u reporter)中的一个[因为在附件中我只能添加pdf文件,所以您需要从扩展名中删除.pdf]
有人能帮我解决这个问题吗?为什么这种特殊的UUID特征导致SUOTA不起作用?它不仅适用于Dialog的Android应用程序,还适用于其他应用程序吗?事先谢谢你的帮助
关键词:
设备:
嗨,麦基塞克,
谢谢你的问题。你能告诉我创建定制服务的代码以便复制你的问题吗?此外,你有一个pdf文件附件,但我无法打开它,所以我建议你压缩它,再附加一次。关于uuid,使用相同的uuid并不是最佳实践–DIS概要文件中一直使用0x2A28。在此期间,我建议你在DA1469x自定义蓝牙服务来自我们的支持网站的教程,演示了如何实现自定义服务。
我做了一个简短的演示,其中使用了两个相同的16位uuid,而且工作正常。为此,问题可能与UUID无关,但让我们先检查一下您正在使用的代码!
使用0x2A28 UUID时,只有SUOTA功能有问题?
谢谢,下午好
你好,
在附件中,我发送了pxpƏreporter示例项目,我通过添加自定义特性修改了该项目。
是的,这是正确的,从我所看到的只有索塔功能是不运作的。我使用NRFconnect应用程序检查了哪些服务可用,我觉得一切都很好,但是使用SUOTA应用程序的SUOTA无法工作。这可能是你的Android应用程序中的一个bug吗?
你确定特征的UUID应该是唯一的吗?即使特性在不同的服务中(比如我的DIS和我的定制服务)?
谢谢你,麦克伊塞克
嗨,麦基塞克,
谢谢你为我提供这个项目。让我检查一下,再重复一下你的问题。我会尽快给你回电。
谢谢,下午好
嗨,麦基塞克,
0x2A28在DIS服务中用于定义“软件修订字符串”特性,因此不建议在自定义服务中使用。UUID代表普遍唯一的ID,所以我建议您不要有两个相同的UUID。自定义服务应具有128位UUID,而不是16位UUID。根据您的代码,定制服务的UUID是0xFFFD,但是如果您连接一个BLE通用移动应用程序,您将看到它会自动转换为一个随机的128位UUID。使用0x2A28时,自定义服务包含“软件修订字符串”特性。但是,正如我前面提到的,DIS服务中使用了相同的特性。一旦您将设备与SUOTA移动应用程序连接,您将看到应用程序使用“软件修订字符串”来定义“软件修订”。通常,“软件版本”应具有“1.0.0.1”值。请检查sw\u version.h头文件和sw\u版本定义。为此,当自定义特征的UUID为0x2A28时,它可能无法执行SUOTA–我也从我的身边复制了它。使用0x2A31 UUID时,您可以执行SUOTA,因为DIS服务不使用此UUID。但是,SCPS服务使用这个UUID来定义“扫描刷新”特性,但是在PXP reporter示例中没有使用SCPS服务,因此该过程按预期运行。
我的建议是遵循DA1469x自定义蓝牙服务用于创建自定义服务,然后对不使用的自定义特征使用UUID。
在你最初的帖子中,你提到你不能改变UUID,所以我可以知道是否有什么具体的原因吗?
谢谢,下午好
谢谢你的回答。我之所以不能更改UUID,是因为我需要实现FIDO U2F服务,如下所述:https://fidoalliance.org/specs/fido-u2f-v1.2-ps-20170411/fido-u2f-bt-protocol-v1.2-ps-20170411.html#u2f-服务在第6.1章。也就是说,他们决定使用与DIS相同的UUID(我想这是最流行的服务之一)。
嗨,麦基塞克,
你自己实现过U2F服务吗?SDK10支持的可用服务位于sdk\interfaces\ble\services\include sdk path下。我检查了您的代码,在您的定制服务中,特征是“软件修订字符串”。此外,您不能将U2F服务用作自定义服务,因为它由Bluetooth SIG定义为DIS服务。UUID可以是16位,用于通过蓝牙SIG认证的正式采用的BLE服务,也可以是128位,用于不合格的定制服务。如果您发现任何有用的答案,请将其标记为已接受。
谢谢,下午好