NRF52832学习笔记(39)——设备信息服务(DIS)

Posted Leung_ManWah

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NRF52832学习笔记(39)——设备信息服务(DIS)相关的知识,希望对你有一定的参考价值。

一、简介

Device Information Service(DIS)服务,它是对设备的制造商,设备软硬件版本控制,生产信息披露的一个非常好的方式。因此也建议大家在开发时都加入这个由SIG定义的标准服务。DIS服务可通过使用GATT在LE、BR/EDR或HS设备上传输。

协议细节可在 Bluetooth SIG官网——设备信息服务1.1 中查看。

二、服务内容

Specification NameSpecification TypeAssign NumberSpecification Level
Device InformationOrg.bluetooth.service.device_information0x180AAdopted

它的16位短UUID是0x180A,用于公开设备制造商的信息,不依赖任何其他服务可独立存在。一个设备上只能有一个实例。在经典蓝牙和LE上都得到支持。

DIS服务包含以下特征:

编号特征名UUID特征行为实例描述
1Manufacturer Name String0x2A29只读Newbit Studio设备制造商的名称,写设备制造商为外界所熟识的名称。
2Model Number String0x2A24只读MI_Scale由设备制造商定义,建议写为某个产品的型号。
3Serial Number String0x2A25只读AAAA-S032-4321由制造商定义的产品编号,为每个产品赋一唯一的编号,可以按实际应用定义自己产品SN的格式。
4Hardware Revision String0x2A27只读0.9.0产品的硬件编号,建议使用三位数以点相隔,分别表示主版本号,副版本号,发行编号(偶数发行,奇数调试)。
5Firmware Revision String0x2A26只读BLE-1.4.0设备内固件的版本号,建议可以写该应用程序建立所使用的协议栈版本。
6Software Revision String0x2A27只读0.9.0应用软件版本号,建议使用三位数以点相隔,分别表示主版本号,副版本号,发行编号(偶数发行,奇数调试)。
7System ID0x2A23只读-包含OUI(Oranizationally Unique Identifier)和一个由制造商为该产品编排的唯一编号。
8IEEE 11073-20601 Regulatory Certification Data List0x2A2A只读-设备要求的一个混合结构体,长度不定。这里的数据通常用于监管或者认证。
9PnP ID0x2A50只读-包含由国标组织颁给制造商的编号,制造商定义的产品ID,由制造商定义的产品版本信息。

以上9个特征值并非都要包含到设备上,但越全面越好,若受限于代码空间,或者公司暂未加入国际组织,可以优先将 Manufacturer Name, Model Number, Serial Number, HW Revision, SW Revision, System ID 包含进来,其他 System ID 中的 OUI 可以没用 IC 原厂的编号。如 TI 公司的 OUI 便可取 0x000D。

三、添加服务

3.1 添加.c文件

需要把官方驱动例程添加到我们的工程目录里面:
路径是:工程目录\\components\\ble\\ble_services\\ble_dis

3.2 添加头文件路径

3.3 修改sdkconfig

在nRF_BLE_Services中勾选DIS服务

3.4 包含头文件和宏定义

#include "ble_dis.h"

#define MANUFACTURER_NAME               "test"                                  /**< Manufacturer. Will be passed to Device Information Service. */
#define HARDWARE_REVISION               "v1.0.0"
#define SOFTWARE_REVISION               "v1.0.0"
#define FIRMWARE_REVISION               "s132_nrf52_7.2.0"

3.5 修改服务初始化函数

在服务初始化函数中services_init()

添加以下内容:

ble_nus_init_t     nus_init;

// Initialize Device Information Service.
memset(&dis_init, 0, sizeof(dis_init));
    
ble_srv_ascii_to_utf8(&dis_init.manufact_name_str, (char *)MANUFACTURER_NAME);
ble_srv_ascii_to_utf8(&dis_init.hw_rev_str, (char *)HARDWARE_REVISION);
ble_srv_ascii_to_utf8(&dis_init.sw_rev_str, (char *)SOFTWARE_REVISION);
ble_srv_ascii_to_utf8(&dis_init.fw_rev_str, (char *)FIRMWARE_REVISION);

dis_init.dis_char_rd_sec = SEC_OPEN;
 
err_code = ble_dis_init(&dis_init);
APP_ERROR_CHECK(err_code);

3.6 查看服务

使用手机nRF Connect APP连接设备后查看:


• 由 Leung 写于 2021 年 11 月 20 日

• 参考:NRF51822蓝牙服务(6)——显示设备信息

以上是关于NRF52832学习笔记(39)——设备信息服务(DIS)的主要内容,如果未能解决你的问题,请参考以下文章

nrf52832 学习笔记蓝牙主机发现服务

nrf52832 学习笔记蓝牙主机发现服务

NRF52832学习笔记(38)——修改发射功率

nrf52832 学习笔记蓝牙从机Proflies开发

nrf52832 学习笔记蓝牙从机Proflies开发

nrf52832 学习笔记蓝牙从机Proflies开发