nrf51822代码阅读笔记三

Device Information Service

这里来看下nordic nrf51822定义设备信息的service.This module implements the Device Information Service,这个模块用来实现设备信息服务。During initialization it adds the Device Information Service to the BLE stack database. It then encodes the supplied information, and adds the corresponding characteristics.在初始化的时候,他将设备信息服务添加到BLE堆栈数据库。然后提供编码信息,并添加相应的特征值。

供应商ID的来源

51822 的库中提供了两种供应商ID的来源

#define  BLE_DIS_VENDOR_ID_SRC_BLUETOOTH_SIG   1 
#define  BLE_DIS_VENDOR_ID_SRC_USB_IMPL_FORUM   2 

来自蓝牙联盟SIG和论坛。

DIS

这里其实是想说明下nodic 的一些函数的缩写来源,像在使用device information service 的时候很多的时候会用到带 dis缩写的函数,其实是Device Information Service的缩写,还有在用到uart service的时候会用到nus 的缩写,其实是 nordic uart service 的缩写。
在使用Device Information Service 时需要引用头文件

     #include <ble_dis.h>

主要的数据结构

系统ID参数

主要包括生产厂家:manufacturer_id 和组织认证的I:Dorganizationally_unique_id

/**@brief System ID parameters */
typedef struct
{
    uint64_t manufacturer_id;                                   /**< Manufacturer ID. Only 5 LSOs shall be used. */
    uint32_t organizationally_unique_id;                        /**< Organizationally unique ID. Only 3 LSOs shall be used. */
} ble_dis_sys_id_t;
ble_dis_reg_cert_data_list_t
/**@brief IEEE 11073-20601 Regulatory Certification Data List Structure */
typedef struct
{
    uint8_t *  p_list;                                          /**< Pointer the byte array containing the encoded opaque structure based on IEEE 11073-20601 specification. */
    uint8_t    list_len;                                        /**< Length of the byte array. */
} ble_dis_reg_cert_data_list_t;
ble_dis_pnp_id_t

vendor_id 供应商ID
product_id 产品ID

/**@brief PnP ID parameters */
typedef struct
{
    uint8_t  vendor_id_source;                                  /**< Vendor ID Source. see @ref DIS_VENDOR_ID_SRC_VALUES. */
    uint16_t vendor_id;                                         /**< Vendor ID. */
    uint16_t product_id;                                        /**< Product ID. */
    uint16_t product_version;                                   /**< Product Version. */
} ble_dis_pnp_id_t;

ble_srv_security_mode_t

设置,蓝牙的读写权限。

    /**@brief Security settings structure.
     * @details This structure contains the security options needed during initialization of the
     *          service.
     */
    typedef struct
    {
        ble_gap_conn_sec_mode_t read_perm;                  /**< Read permissions. */
        ble_gap_conn_sec_mode_t write_perm;                 /**< Write permissions. */
    } ble_srv_security_mode_t;
ble_dis_init_t

设备信息服务初始化结构,其包含了所有的设备信息可能的特性。

/**@brief Device Information Service init structure. This contains all possible characteristics needed for initialization of the service.
 */
typedef struct
{
    ble_srv_utf8_str_t             manufact_name_str;           /**< Manufacturer Name String. */
    ble_srv_utf8_str_t             model_num_str;               /**< Model Number String. */
    ble_srv_utf8_str_t             serial_num_str;              /**< Serial Number String. */
    ble_srv_utf8_str_t             hw_rev_str;                  /**< Hardware Revision String. */
    ble_srv_utf8_str_t             fw_rev_str;                  /**< Firmware Revision String. */
    ble_srv_utf8_str_t             sw_rev_str;                  /**< Software Revision String. */
    ble_dis_sys_id_t *             p_sys_id;                    /**< System ID. */
    ble_dis_reg_cert_data_list_t * p_reg_cert_data_list;        /**< IEEE 11073-20601 Regulatory Certification Data List. */
    ble_dis_pnp_id_t *             p_pnp_id;                    /**< PnP ID. */
    ble_srv_security_mode_t        dis_attr_md;                 /**< Initial Security Setting for Device Information Characteristics.设备信息特征的初始安全设置。 */
} ble_dis_init_t;

dis_init

/**@brief Function for initializing the Device Information Service.
 */
void dis_init(uint8_t* app_version_string,uint8_t* hard_version_string)
{
    uint32_t       err_code;
    ble_dis_init_t dis_init_obj;

memset(&dis_init_obj, 0, sizeof(dis_init_obj));

//生产厂家
dis_init_obj.manufact_name_str.length = ; 
dis_init_obj.manufact_name_str.p_str  =;

dis_init_obj.model_num_str.length = ;
dis_init_obj.model_num_str.p_str  = ;

dis_init_obj.serial_num_str.length = ;
dis_init_obj.serial_num_str.p_str  = ;

dis_init_obj.hw_rev_str.length = ;
dis_init_obj.hw_rev_str.p_str  = ;

dis_init_obj.fw_rev_str.length = ;
dis_init_obj.fw_rev_str.p_str  = ;

dis_init_obj.sw_rev_str.length = ;
dis_init_obj.sw_rev_str.p_str  = ;
//设置dis可读属性。
BLE_GAP_CONN_SEC_MODE_SET_OPEN(&dis_init_obj.dis_attr_md.read_perm);
//设置dis信息写无法访问即信息无法写入。
BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&dis_init_obj.dis_attr_md.write_perm);

err_code = ble_dis_init(&dis_init_obj);
APP_ERROR_CHECK(err_code);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

002237

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值