蓝牙学习3

static void ble_evt_dispatch(ble_evt_t * p_ble_evt)
{
 ble_conn_params_on_ble_evt(p_ble_evt);
 ble_nus_on_ble_evt(&m_nus, p_ble_evt);
 on_ble_evt(p_ble_evt);
}

在任何与BLE相关的事件被协议栈上抛上来给app时,ble_evt_dispatch就会被调用。从而将事件抛给各个
服务函数或处理模块,这里是将事件抛给了
连接参数管理处理函数ble_conn_params_on_ble_evt
Uart服务的事件处理函数ble_nus_on_ble_evt (nus为Nordicuart server)
通用的事件处理函数on_ble_evt

    不同的事件在事件结构体ble_evt_t中通过id来区分。不同是事件处理函数通常也只是处理自己感情
去的事件。


static uint32_t rx_char_add(ble_nus_t *p_nus, const ble_nus_init_t *p_nus_init)


sec_params_init

安全参数的初始化。主要设置:

超时时间:比如配对过程中某一步的确认超过这个时间还未收到那么便是超时。

Bond:是否绑定。如果需要绑定,配对过程会有第三步的密钥分发,然后app将密钥存储在flash这样下次
就可以避免了下次重复配对的过程。

MITM:是否需要中间人保护。

Io_caps:本设备的I/O能力。比如有显示屏,有键盘。
当使能了MITM并且两端设备一个有键盘,一个有显示屏时,配对过程中就会显示一个配对码,对端设备
通过键盘再输入。

    如果没有MITM保护配对过程中的信息是很容易被监听到的。但是如果有了MITM因为这个配对码信息是
一端显示一端输入,并不会通过链路传输。因为除了两端设备不会有第三个设备知道。因此后续的链路加密
就很难被破解。

OOB:与MITM类似,只是配对码不是通过键盘输入而是通过两端设备的通信通道传输,比如NFC,当然前提
是该通信链路是安全的。不如也没必要绕个弯而不直接用BLE来传输了。

    加密密钥的大小在7-16字节之间。

advertising_start:

    广播的类型有四种:

通用广播:用途最广的广播方式。可以被扫描到,以及可以被连接。

定向广播:用来快速建立和目标设备建立连接。报文中包含自己以及目标地址。

不可连接广播:只广播数据,不可以被扫描以及连接。

可发现广播:可以被扫描(回复扫描相应数据),不可以被连接。

 

静态密码设置:

交换的信息包括:
   
    两端设备的输入输出能力如:是否有显示屏,键盘等。

    是否需要绑定(如果设置了绑定配对的)。
 
    是否需要MITM,是否使用OOB等

   
配对的过程不仅只是输入配对码这样,后续还会根据输入的配对码,以及两端设备交换的随机数来生成
链路密钥来加密链路以及分配后续的长期密钥,身份解析密钥等需要的密钥。

   
typedef struct BlkMyServiceTag{
 uint16_t conn_handle; // 连接后用 来记录下句柄,供续使连接后用
 uint16_t service_handle; // 保存服务的句柄
 ble_gatts_char_handles_t handle; //保存特性句柄
}BlkMyService;

BlkMyService my_service; // 这个全局变量保存了我们的服务相关信息


Nordic的SDK将flash操作封装成一个pstorage模块。模块提供了很好用的flash操作接口。

实现动态广播的方法是:  广播->停止广播->修改参数->重启广播

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值