NORDIC GATT事件

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

注册的事件为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;
 }
}

 

转载于:https://www.cnblogs.com/yeshenmeng/p/11351857.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值