初学 BLE — NRF52832 代码逻辑

芯片: NRF52832
Nordic SDK 8.16.0 ,蓝牙协议栈: s132

代码参考 青风电子 蓝牙LED读写服务。

   这里采用的是观察者模式的一个形式,既我们应用端所操作的每一件事情,协议栈都会上抛一个事件,每一个观察者都会接受到这样的一个事件,在决定是否需要执行相应的操作,以蓝牙点灯为例。
   通过 ble_lbs_init()led_char_add(p_lbs,p_lbs_init) 两个函数来完成这整一个LED灯服务的添加。

   在ble_lbs_init() 中调用 sd_ble_gatts_service_add()函数来添加主服务,所添加的服务可以在手机 APP Nordic Connect 中看到。
   在led_char_add(p_lbs,p_lbs_init) 中调用 sd_ble_gatts_characteristic_add()来添加一个灯的读写特性。然后在上面的ble_lbs_init() 中在进行调用。在 手机 APP Nordic Connect 中为主服务的 下拉选项。

   一个服务可以包含几个特性。

   在主函数中,通过BLE_LBS_DEF(_name) 声明一个观察者。具体的定义是在 ble_lbs.h 中完成。

#define BLE_LBS_DEF(_name)  
static ble_lbs_t name;  \ 
NRF_SDH_BLE_OBSERVER(_name ## obs, BLE_LBS_BLE_OBSERVER_PRIO, \
ble_lbs_on_ble_evt, &_name)

   由此也就是调用了 NRF_SDH_BLE_OBSERVER() 来完成了这整一个操作。其中ble_lbs_on_ble_evt 也是事件派发函数。

在蓝牙点灯中,会通过 BLE_LBS_DEF(m_bls) 来声明一个 m_lbs的观察者,当LED的特性被写入时,会产生一个GATT写事件。这时候就会回调上面 的事件派发函数 ble_lbs_on_ble_evt ()

ble_lbs_on_ble_evt(ble_evt_t const *p_ble_evt, void *p_context )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值