首页 > 其他 > 详细

NORDIC GATT事件

时间:2019-08-14 15:04:21      阅读:141      评论:0      收藏:0      [点我收藏+]

假设有两个服务,每个服务注册相应事件

技术分享图片

技术分享图片

注册的事件为ble_dev_cfg_on_ble_evt、ble_lora_cfg_on_ble_evt

当在任何一个服务中发生GATT特征读或写的时候,注册的这两个服务事件都会发生而不是只发生在相应特征项所属的事件

这点在特征项读写权限访问的时候需要注意,因为会在两个服务事件中发生,所以要避免重复回复的问题,否则会导致权限功能异常

void ble_lora_cfg_on_ble_evt(ble_evt_t const * p_ble_evt, void * p_context) //发生GATT特性项读写的时候会进入此事件
{
    ble_lora_cfg_t * p_lora_cfg = (ble_lora_cfg_t *)p_context;
    switch (p_ble_evt->header.evt_id)
    {
        case BLE_GATTS_EVT_WRITE:
            on_write(p_lora_cfg, p_ble_evt);
            break;
  
        case BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST:
             on_read_write_auth(p_lora_cfg, p_ble_evt);
             break;
        default:
            // No implementation needed.
            break;
    }
}
 
void ble_dev_cfg_on_ble_evt(ble_evt_t const * p_ble_evt, void * p_context) //发生GATT特性项读写的时候也会进入此事件
{
    ble_dev_cfg_t * p_dev_cfg = (ble_dev_cfg_t *)p_context;
    switch (p_ble_evt->header.evt_id)
    {
        case BLE_GATTS_EVT_WRITE:
            on_write(p_dev_cfg, p_ble_evt);
            break;
  
        case BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST:
            on_read_write_auth(p_dev_cfg, p_ble_evt);
            break;
        default:
            // No implementation needed.
            break;
    }
}

也可以在ble事件中去处理GATT事件而不是在每个服务事件中处理:

static void ble_evt_handler(ble_evt_t const * p_ble_evt, void * p_context)
{
 ret_code_t err_code;
 switch (p_ble_evt->header.evt_id)
 {
  case BLE_GATTS_EVT_WRITE:
   //处理GATT写事件
   break;
  
  case BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST:
   //处理GATT读写权限请求事件
   break;
 }
}

 

NORDIC GATT事件

原文:https://www.cnblogs.com/yeshenmeng/p/11351857.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!