510
个编辑
更改
→实验现象
其中我们的从机设备一般是作为GATT服务器去提供服务的,主机设备作为GATT客户端去向服务的特性数据库中写入或者读取数据。
====实验现象====
主机设备流程:
2、成功连接我们的从机设备,并且更新连接参数和MTU
====工程及源码讲解====
===== 主机部分 =====
====== gy_profile_led_c.c\.h ======
我们首先查看一下主机的服务客户端文件,里面包含了好几个函数,我们按个介绍一下这些函数的功能。
第一个还是客户端的初始化函数,<syntaxhighlight lang="c" line="1" start="83">
//******************************************************************************
// fn :ble_led_c_init
//
// brief : LED服务客户端初始化函数
//
// param : p_ble_led_c -> 指向LED客户端结构的指针
// p_ble_led_c_init -> 指向LED初始化结构的指针
//
// return : none
uint32_t ble_led_c_init(ble_led_c_t * p_ble_led_c, ble_led_c_init_t * p_ble_led_c_init)
{
uint32_t err_code;
ble_uuid_t led_uuid;
ble_uuid128_t led_base_uuid = {LED_UUID_BASE};
VERIFY_PARAM_NOT_NULL(p_ble_led_c);
VERIFY_PARAM_NOT_NULL(p_ble_led_c_init);
VERIFY_PARAM_NOT_NULL(p_ble_led_c_init->evt_handler);
p_ble_led_c->peer_led_db.led_handle = BLE_GATT_HANDLE_INVALID;
p_ble_led_c->conn_handle = BLE_CONN_HANDLE_INVALID;
p_ble_led_c->evt_handler = p_ble_led_c_init->evt_handler;
err_code = sd_ble_uuid_vs_add(&led_base_uuid, &p_ble_led_c->uuid_type);
if (err_code != NRF_SUCCESS)
{
return err_code;
}
VERIFY_SUCCESS(err_code);
led_uuid.type = p_ble_led_c->uuid_type;
led_uuid.uuid = LED_UUID_SERVICE;
return ble_db_discovery_evt_register(&led_uuid);
}
</syntaxhighlight>
===== 从机部分 =====
======gy_profile_led.c\.h======
可以看到这个服务初始化ble_led_init函数中对于服务以及他的特征值属性的初始化过程,首先我们先初始化一个回调(p_led->led_write_handler = p_led_init->led_write_handler;),这个回调是用来将gy_profile_led这一层的数据,上传给mian文件去处理。