一套么、簡介
Device Information Service(DIS)服務拯爽,它是對設(shè)備的制造商索抓,設(shè)備軟硬件版本控制,生產(chǎn)信息披露的一個非常好的方式毯炮。因此也建議大家在開發(fā)時都加入這個由SIG定義的標準服務逼肯。DIS服務可通過使用GATT在LE、BR/EDR或HS設(shè)備上傳輸桃煎。
協(xié)議細節(jié)可在 Bluetooth SIG官網(wǎng)——設(shè)備信息服務1.1 中查看篮幢。
二、服務內(nèi)容
Specification Name | Specification Type | Assign Number | Specification Level |
---|---|---|---|
Device Information | Org.bluetooth.service.device_information | 0x180A | Adopted |
它的16位短UUID是0x180A备禀,用于公開設(shè)備制造商的信息洲拇,不依賴任何其他服務可獨立存在。一個設(shè)備上只能有一個實例曲尸。在經(jīng)典藍牙和LE上都得到支持赋续。
DIS服務包含以下特征:
編號 | 特征名 | UUID | 特征行為 | 實例 | 描述 |
---|---|---|---|---|---|
1 | Manufacturer Name String | 0x2A29 | 只讀 | Newbit Studio | 設(shè)備制造商的名稱,寫設(shè)備制造商為外界所熟識的名稱另患。 |
2 | Model Number String | 0x2A24 | 只讀 | MI_Scale | 由設(shè)備制造商定義纽乱,建議寫為某個產(chǎn)品的型號。 |
3 | Serial Number String | 0x2A25 | 只讀 | AAAA-S032-4321 | 由制造商定義的產(chǎn)品編號昆箕,為每個產(chǎn)品賦一唯一的編號鸦列,可以按實際應用定義自己產(chǎn)品SN的格式。 |
4 | Hardware Revision String | 0x2A27 | 只讀 | 0.9.0 | 產(chǎn)品的硬件編號鹏倘,建議使用三位數(shù)以點相隔薯嗤,分別表示主版本號,副版本號纤泵,發(fā)行編號(偶數(shù)發(fā)行骆姐,奇數(shù)調(diào)試)。 |
5 | Firmware Revision String | 0x2A26 | 只讀 | BLE-1.4.0 | 設(shè)備內(nèi)固件的版本號,建議可以寫該應用程序建立所使用的協(xié)議棧版本玻褪。 |
6 | Software Revision String | 0x2A27 | 只讀 | 0.9.0 | 應用軟件版本號肉渴,建議使用三位數(shù)以點相隔,分別表示主版本號带射,副版本號同规,發(fā)行編號(偶數(shù)發(fā)行,奇數(shù)調(diào)試)窟社。 |
7 | System ID | 0x2A23 | 只讀 | - | 包含OUI(Oranizationally Unique Identifier)和一個由制造商為該產(chǎn)品編排的唯一編號券勺。 |
8 | IEEE 11073-20601 Regulatory Certification Data List | 0x2A2A | 只讀 | - | 設(shè)備要求的一個混合結(jié)構(gòu)體,長度不定桥爽。這里的數(shù)據(jù)通常用于監(jiān)管或者認證朱灿。 |
9 | PnP ID | 0x2A50 | 只讀 | - | 包含由國標組織頒給制造商的編號昧识,制造商定義的產(chǎn)品ID钠四,由制造商定義的產(chǎn)品版本信息。 |
以上9個特征值并非都要包含到設(shè)備上跪楞,但越全面越好缀去,若受限于代碼空間,或者公司暫未加入國際組織甸祭,可以優(yōu)先將 Manufacturer Name, Model Number, Serial Number, HW Revision, SW Revision, System ID 包含進來缕碎,其他 System ID 中的 OUI 可以沒用 IC 原廠的編號。如 TI 公司的 OUI 便可取 0x000D池户。
三咏雌、添加服務
3.1 添加.c文件
需要把官方驅(qū)動例程添加到我們的工程目錄里面:
路徑是:工程目錄\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 修改服務初始化函數(shù)
在服務初始化函數(shù)中services_init()
添加以下內(nèi)容:
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連接設(shè)備后查看:
? 由 Leung 寫于 2021 年 11 月 20 日