NRF52832学习笔记(39)——设备信息服务(DIS)
2021-11-20 本文已影响0人
Leung_ManWah
一、简介
Device Information Service(DIS)服务,它是对设备的制造商,设备软硬件版本控制,生产信息披露的一个非常好的方式。因此也建议大家在开发时都加入这个由SIG定义的标准服务。DIS服务可通过使用GATT在LE、BR/EDR或HS设备上传输。
协议细节可在 Bluetooth SIG官网——设备信息服务1.1 中查看。
二、服务内容
Specification Name | Specification Type | Assign Number | Specification Level |
---|---|---|---|
Device Information | Org.bluetooth.service.device_information | 0x180A | Adopted |
它的16位短UUID是0x180A,用于公开设备制造商的信息,不依赖任何其他服务可独立存在。一个设备上只能有一个实例。在经典蓝牙和LE上都得到支持。
DIS服务包含以下特征:
编号 | 特征名 | UUID | 特征行为 | 实例 | 描述 |
---|---|---|---|---|---|
1 | Manufacturer Name String | 0x2A29 | 只读 | Newbit Studio | 设备制造商的名称,写设备制造商为外界所熟识的名称。 |
2 | Model Number String | 0x2A24 | 只读 | MI_Scale | 由设备制造商定义,建议写为某个产品的型号。 |
3 | Serial Number String | 0x2A25 | 只读 | AAAA-S032-4321 | 由制造商定义的产品编号,为每个产品赋一唯一的编号,可以按实际应用定义自己产品SN的格式。 |
4 | Hardware Revision String | 0x2A27 | 只读 | 0.9.0 | 产品的硬件编号,建议使用三位数以点相隔,分别表示主版本号,副版本号,发行编号(偶数发行,奇数调试)。 |
5 | Firmware Revision String | 0x2A26 | 只读 | BLE-1.4.0 | 设备内固件的版本号,建议可以写该应用程序建立所使用的协议栈版本。 |
6 | Software Revision String | 0x2A27 | 只读 | 0.9.0 | 应用软件版本号,建议使用三位数以点相隔,分别表示主版本号,副版本号,发行编号(偶数发行,奇数调试)。 |
7 | System ID | 0x2A23 | 只读 | - | 包含OUI(Oranizationally Unique Identifier)和一个由制造商为该产品编排的唯一编号。 |
8 | IEEE 11073-20601 Regulatory Certification Data List | 0x2A2A | 只读 | - | 设备要求的一个混合结构体,长度不定。这里的数据通常用于监管或者认证。 |
9 | PnP ID | 0x2A50 | 只读 | - | 包含由国标组织颁给制造商的编号,制造商定义的产品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 日