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);
}

猜你喜欢

转载自blog.csdn.net/u011559046/article/details/79307954