关闭

BLE-NRF51822教程19-Battery Service

504人阅读 评论(0) 收藏 举报
分类:

    Battery Service是有关电池特性方面的服务,如果需要它,在初始化时将它加入到蓝牙协议栈。

    如果通过ble_bas_battery_level_update(),电池电量将会通知,Battery Service将发送事件到应用程序。

(1)Battery Service事件类型

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /**@brief Battery Service event type. */  
  2. typedef enum  
  3. {  
  4.     BLE_BAS_EVT_NOTIFICATION_ENABLED,                             /**< Battery value notification enabled event. */  
  5.     BLE_BAS_EVT_NOTIFICATION_DISABLED                             /**< Battery value notification disabled event. */  
  6. } ble_bas_evt_type_t;  
  7.   
  8. /**@brief Battery Service event. */  
  9. typedef struct  
  10. {  
  11.     ble_bas_evt_type_t evt_type;                                  /**< Type of event. */  
  12. } ble_bas_evt_t;  

(2)Battery Service事件处理函数

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. // Forward declaration of the ble_bas_t type.   
  2. typedef struct ble_bas_s ble_bas_t;  
  3.   
  4. /**@brief Battery Service event handler type. */  
  5. typedef void (*ble_bas_evt_handler_t) (ble_bas_t * p_bas, ble_bas_evt_t * p_evt);  

(3)ble_bas_init_t:初始化用到的结构体

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /**@brief Battery Service init structure. This contains all options and data needed for 
  2.  *        initialization of the service.*/  
  3. typedef struct  
  4. {  
  5.     ble_bas_evt_handler_t         evt_handler;                    /**< Event handler to be called for handling events in the Battery Service. */  
  6.     bool                          support_notification;           /**< TRUE if notification of Battery Level measurement is supported. */  
  7.     ble_srv_report_ref_t *        p_report_ref;                   /**< If not NULL, a Report Reference descriptor with the specified value will be added to the Battery Level characteristic */  
  8.     uint8_t                       initial_batt_level;             /**< Initial battery level */  
  9.     ble_srv_cccd_security_mode_t  battery_level_char_attr_md;     /**< Initial security level for battery characteristics attribute */  
  10.     ble_gap_conn_sec_mode_t       battery_level_report_read_perm; /**< Initial security level for battery report read attribute */  
  11. } ble_bas_init_t;  

(4)包含可变状态信息的结构体ble_bas_t:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. /**@brief Battery Service structure. This contains various status information for the service. */  
  2. typedef struct ble_bas_s  
  3. {  
  4.     ble_bas_evt_handler_t         evt_handler;                    /**< Event handler to be called for handling events in the Battery Service. */  
  5.     uint16_t                      service_handle;                 /**< Handle of Battery Service (as provided by the BLE stack). */  
  6.     ble_gatts_char_handles_t      battery_level_handles;          /**< Handles related to the Battery Level characteristic. */  
  7.     uint16_t                      report_ref_handle;              /**< Handle of the Report Reference descriptor. */  
  8.     uint8_t                       battery_level_last;             /**< Last Battery Level measurement passed to the Battery Service. */  
  9.     uint16_t                      conn_handle;                    /**< Handle of the current connection (as provided by the BLE stack, is BLE_CONN_HANDLE_INVALID if not in a connection). */  
  10.     bool                          is_notification_supported;      /**< TRUE if notification of Battery Level is supported. */  
  11. } ble_bas_t;  

(5)几个函数说明:

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. uint32_t  ble_bas_init (ble_bas_t *p_bas, const ble_bas_init_t *p_bas_init) //服务初始化  
  2. void  ble_bas_on_ble_evt (ble_bas_t *p_bas, ble_evt_t *p_ble_evt)  //处理协议栈事件的回调函数  
  3. uint32_t  ble_bas_battery_level_update (ble_bas_t *p_bas, uint8_t battery_level) //更新电池电量时调用  

(6)初始化操作

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. // Here the sec level for the Battery Service can be changed/increased.  
  2. BLE_GAP_CONN_SEC_MODE_SET_OPEN(&bas_init.battery_level_char_attr_md.cccd_write_perm);  
  3. BLE_GAP_CONN_SEC_MODE_SET_OPEN(&bas_init.battery_level_char_attr_md.read_perm);  
  4. BLE_GAP_CONN_SEC_MODE_SET_NO_ACCESS(&bas_init.battery_level_char_attr_md.write_perm);  
  5.   
  6. BLE_GAP_CONN_SEC_MODE_SET_OPEN(&bas_init.battery_level_report_read_perm);  
  7.   
  8. bas_init.evt_handler          = NULL;  
  9. bas_init.support_notification = true;  
  10. bas_init.p_report_ref         = NULL;  
  11. bas_init.initial_batt_level   = 100;  
  12.   
  13. err_code = ble_bas_init(&bas, &bas_init);  
  14. APP_ERROR_CHECK(err_code);  
0
0
查看评论

nrf51822如何让自己定义的服务也被识别为有意义的名称,如Battery Service?

作者:李大闯 2017/08/26 17:40 在nrf51822开发的过程中我们会发现,当自己创建一个服务和特征值的时候,用手机端的master control panel扫描时显示的名称都是unknown,如下图: 而官方的例程(如心率计)和例程都是显示自己设...
  • ldcung
  • ldcung
  • 2017-08-26 17:45
  • 289

低功耗蓝牙4.0BLE编程-nrf51822开发(6)-Battery Service

Battery Service是有关电池特性方面的服务,如果需要它,在初始化时将它加入到蓝牙协议栈。     如果通过ble_bas_battery_level_update(),电池电量将会通知,Battery Service将发送事件到应用程序。 (1)Batte...
  • u011034150
  • u011034150
  • 2016-01-12 18:07
  • 871

nrf52832之添加自己的service

nrf52中添加自己的servece,不用自己全部手写添加,可以从demo中复制修改为自己需要的service,以下已心率demo为例,修改为自己的service,其中包含两个character,char1属性为通知(长度通知时可以设置,灵活变换长度),char2为可读。 一、添加ble_all...
  • gyb510
  • gyb510
  • 2016-06-30 12:16
  • 2457

低功耗蓝牙4.0BLE编程-nrf51822开发(6)-Battery Service

Battery Service是有关电池特性方面的服务,如果需要它,在初始化时将它加入到蓝牙协议栈。     如果通过ble_bas_battery_level_update(),电池电量将会通知,Battery Service将发送事件到应用程序。 (1)Battery Ser...
  • xgbing
  • xgbing
  • 2015-01-07 23:00
  • 6263

低功耗蓝牙4.0BLE编程-nrf51822开发(6)-Battery Service

Battery Service是有关电池特性方面的服务,如果需要它,在初始化时将它加入到蓝牙协议栈。     如果通过ble_bas_battery_level_update(),电池电量将会通知,Battery Service将发送事件到应用程序。 (1)Batte...
  • yd4330152763132
  • yd4330152763132
  • 2015-11-04 09:44
  • 865

BLE-NRF51822教程12-sdk中按键功能的使用

原文地址:BLE-NRF51822教程12-sdk中按键功能的使用 作者:ifndef 这一讲介绍一下sdk9.0中如何使用按键模块来实现自定义的按键功能。   关于sdk5.1中如何使用按键。在教程 剖析心率demo 教程中有关于按键...
  • qq_17270067
  • qq_17270067
  • 2017-10-12 09:24
  • 126

BLE-NRF51822教程16-BLE地址

本教程基于 sdk9+sd8.0 51822的 BLE的设备地址 可以通过如下函数函数来获得 地址的设置可以调用如下函数设置。 官方的demo工程中,都是没有主动调用过 sd_ble_gap_address_set函数来设置设备地址的。所以...
  • qutiezhu
  • qutiezhu
  • 2016-08-25 20:58
  • 1153

BLE-NRF51822教程-RSSI获取

当手机和设备连接上后,设备端可以通过获取RSSI来 在一定程度上判断手机离设备的相对距离的远近。   获取函数很简单直接调用sd_ble_gap_rssi_get 接口函数就行了,传入连接句柄和buff就能获取到 最近一次连接事件中的 接收信号强度。   调用该...
  • qutiezhu
  • qutiezhu
  • 2016-08-25 20:35
  • 653

BLE-NRF51822教程18-overview

转自:http://blog.csdn.net/xgbing 蓝牙协议栈 nrf51822开发中,蓝牙协议栈和应用开发是分开的。 (1)兼容蓝牙4.0低功耗协议栈基带层,L2CAP\AAT\SM\GAP\GATT协议,设备和广播,GATT客户端和服务器,SMP支持(包含...
  • qutiezhu
  • qutiezhu
  • 2016-08-29 23:55
  • 355

BLE-NRF51822教程1-常用概念

1:主机如何知道外围设备的存在:   a: 外围设备广播信息。 b: 主机主动扫描,外围设备回复扫描响应以告知主机。 2:可发现模式:由广播中的flag标志设置。   a: 有限可发现模式:广播间隔快,但最大只能持续最多30s  ...
  • u011034150
  • u011034150
  • 2016-02-01 11:10
  • 1179
    最新评论
    个人资料
    • 访问:71335次
    • 积分:213
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:111篇
    • 译文:1篇
    • 评论:3条