使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之三

3 最小BLE应用简介

这个章节简单介绍了在nRF51822芯片上使用S110 SoftDevice协议栈构建一个最小的BLE应用的过程。

3.1初始化介绍

有一些初始化函数通常在执行一个BLE应用之前调用,下面的表格中列出了这些初始化调用函数,在后面将对它们进行详细的介绍。

 使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之三

大部分采用数据结构的形式作为输入参数,这些数据结构包含一系列的配置和选项信息,阅读代码中的注释能更好地理解它们。

在广播开始之后,你就进入了main函数中的for循环。

3.2 协议栈S110 SoftDevice

为了使用独特的射频特性,你必须使能S110 SoftDevice协议栈。见《S110 nRF51822 SoftDevice Specification》(S110 nRF51822  SoftDevice协议栈说明书)中对硬件资源的详细需求。

3.3 广播

用于广播的数据结构如下:

        ble_gap.h      中  ble_gap_conn_sec_mode_t

        ble_advdata.h   中  ble_advdata_t

err_code = sd_ble_gap_device_name_set(&device_name_sec_mode, DEVICE_NAME

strlen(DEVICE_NAME));

err_code = sd_ble_gap_appearance_set(BLE_APPEARANCE_UNKNOWN);

err_code = ble_advdata_set(&advdata);

注意:传递给sd_ble_gap_device_name_set()的安全模式仅适于设备本身的名字。

 

广播参数(ble_gap_adv_params_t)必须通过sd_ble_gap_adv_start()来传递:

err_code = sd_ble_gap_adv_start(&m_adv_params);

3.4 连接参数

SDK提供了一个名为ble_conn_params的模块用于管理连接参数更新,它通过SoftDevice API进行处理,包括请求的时间和第一次请求被拒绝再发送一个新的请求。

在初始化结构体ble_conn_params_init_t中,定义了更新过程的有关参数,例如,是否开始连接,什么开始写入一个特定的CCCD,是否使用连接参数,发送更新请求的延时等等。

在初始化函数ble_conn_params_init()中,使用封装了初始化连接参数(ble_gap_conn_params_t)的结构体ble_conn_params_init_t作为输入参数进行连接参数初始化。

err_code = ble_conn_params_init(&cp_init);

       ble_conn_params SDK模块确保与主机(集中器)的连接参数相适应,如果不适应,外围设备将要求更改连接参数,超过设定的更新次数都没有更新成功后,它就会断开连接或者根据设置返回一个事件到应用层。

3.5 服务

服务可以通过sd_ble_gatts_service_add()进行添加,最好不要在应用层代码中建立服务,而是在一个单独的文件中建立服务。一个服务不是主服务就是次服务,但是在通常实际的应用中大部分使用主服务。变量service_uuid就是你想用于服务的UUID。变量service_handle是一个输出变量,当创建一个服务的时候将会返回一个唯一的句柄值,这个句柄可以在以后用于识别不同的服务。

err_code = sd_ble_gatts_service_add( BLE_GATTS_SVC_TYPE_PRIMARY,

&p_lbs->service_uuid,

&p_lbs->service_handle );

3.6 特性

       特性可以通过sd_ble_gatts_characteristic_add()函数进行添加,它有4个参数。为了代码清晰,这个函数应该只能出现在服务文件中,而不能出现在应用层中。

第1个参数是特性要加入的服务的句柄,第2个参数是特性的结构体,它是一个全局变量,它包含了特性可能用到的性质(读,写,通知等)。第3个参数是值属性的描述,它包含了它的UUID,长度和初始值。第4个参数是返回的特性和描述符的唯一句柄,这个句柄可以在以后用于识别不同的特性。例如,在写事件中用于识别哪一个特性被写入。

err_code = sd_ble_gatts_characteristic_add( p_lbs->service_handle, &char_md,

&attr_char_value,

&p_lbs->led_char_handles);

你可能感兴趣的:(入门)