BLEWord下载.docx

上传人:b****6 文档编号:16258806 上传时间:2022-11-22 格式:DOCX 页数:13 大小:108.69KB
下载 相关 举报
BLEWord下载.docx_第1页
第1页 / 共13页
BLEWord下载.docx_第2页
第2页 / 共13页
BLEWord下载.docx_第3页
第3页 / 共13页
BLEWord下载.docx_第4页
第4页 / 共13页
BLEWord下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

BLEWord下载.docx

《BLEWord下载.docx》由会员分享,可在线阅读,更多相关《BLEWord下载.docx(13页珍藏版)》请在冰豆网上搜索。

BLEWord下载.docx

int

错误返回err_code,成功返回NRF_SUCCESS

将ble_evt_hanler函数注册成时间派发函数

uint32_tsoftdevice_ble_evt_handler_set(ble_evt_handler_tble_evt_handler)

 

ble_evt_handler_t

时间派发函数

uint32_t

NRF_SUCCESS

2)GAP初始化就是设置必要的GAP参数,具体有设备名称、连接时间、超时时间等。

设置GAP参数,通过调用sd_ble_gap_device_name_set(&

sec_mode,(constuint8_t*)(gap_name)设置设备名字,调用sd_ble_gap_ppcp_set(&

gap_conn_params)设置连接时间等参数

voidgap_params_init(void)

void

void

SetGAPdevicename

sd_ble_gap_device_name_set(ble_gap_conn_sec_mode_tconst*p_write_perm,uint8_tconst*p_dev_name,uint16_tlen));

ble_gap_conn_params_t*p_conn_params

设置设备名的写权限

uint8_tconst*p_dev_name

设备名指针

uint16_tlen

设备名长度

NRF_SUCCESSGAPdevicenameandpermissionssetsuccessfully.

NRF_ERROR_INVALID_ADDRInvalidpointersupplied.

NRF_ERROR_INVALID_PARAMInvalidparameter(s)supplied.

NRF_ERROR_DATA_SIZEInvaliddatasize(s)supplied.

设置连接参数

sd_ble_gap_ppcp_set(ble_gap_conn_params_tconst*p_conn_params));

ble_gap_conn_params_tconst*p_conn_params

struct{

uint16_tmin_conn_interval;

:

NRF_ERROR_INVALID_PARAMInvalidparameter(s)supplied.

3)添加服务也就是设置服务UUID,以及添加接收特征和发送特征,使得服务能够接收和发送信息。

设置GAP参数,通过调用sd_ble_uuid_vs_add(&

ble_ancs_base_uuid128,&

type)添加服务,sd_ble_gatts_service_add(BLE_GATTS_SRVC_TYPE_PRIMARY,&

ble_uuid,

&

mp_dmble->

dms_service_handle)添加通讯服务,ble_dms_init()设置特征值

voidservice_add(void)

用于注册16bit服务到BLE协议栈列表中

sd_ble_uuid_vs_add(ble_uuid128_tconst*p_vs_uuid,uint8_t*p_uuid_type));

ble_uuid128_tconst*p_vs_uuid

16位的UUID

uint8_t*p_uuid_type

UUID存储文件相应的地址

NRF_SUCCESSSuccessfullyaddedtheVendorSpecificUUID.

NRF_ERROR_INVALID_ADDRIfp_vs_uuidorp_uuid_typeisNULLorinvalid.

NRF_ERROR_NO_MEMIftherearenomorefreeslotsforVSUUIDs.

用于注册16bit服务到gatt属性列表中

sd_ble_gatts_service_add(uint8_ttype,ble_uuid_tconst*p_uuid,uint16_t*p_handle));

uint8_ttype

gattservice类型:

invalid、private、secondary

ble_uuid_tconst*p_uuid

16bytesUUID

uint16_t*p_handle

分配给该服务的句柄handle

NRF_SUCCESSSuccessfullyaddedaservicedeclaration.

NRF_ERROR_INVALID_PARAMInvalidparameter(s)supplied,VendorSpecificUUIDsneedtobepresentinthetable.

NRF_ERROR_FORBIDDENForbiddenvaluesupplied,certainUUIDsarereservedforthestack.

NRF_ERROR_NO_MEMNotenoughmemorytocompleteoperation.

添加一个关键字申明,并将关键字描述申明添加到属性表中

sd_ble_gatts_characteristic_add(uint16_tservice_handle,ble_gatts_char_md_tconst*p_char_md,ble_gatts_attr_tconst*p_attr_char_value,ble_gatts_char_handles_t*p_handles));

uint16_tservice_handle

服务的关键字句柄

ble_gatts_char_md_tconst*p_char_md

关键字设置信息,包含关键字读写属性

ble_gatts_attr_tconst*p_attr_char_value

属性结构指针,包含关键字的UUID、属性值长度(20Bytes)/偏移量/最大长度,数据指针

ble_gatts_char_handles_t*p_handles

分配的句柄结构指针

NRF_SUCCESSSuccessfullyaddedacharacteristic.

NRF_ERROR_INVALID_PARAMInvalidparameter(s)supplied,servicehandle,VendorSpecificUUIDs,lengths,andpermissionsneedtoadheretotheconstraints.

NRF_ERROR_INVALID_STATEInvalidstatetoperformoperation,aservicecontextisrequired.

operation.

4)设置广播间隔、广播模式、广播超时时间、广播字段信息后开始广播。

在初始化广播参数时设置为快速广播和超时30s。

调用d_ble_gap_adv_data_set(advdata,21,NULL,0)设置广播字段,调用sd_ble_gap_adv_start(&

m_adv_params)设置广播参数并开启广播

intdmble_core_adv(adv_state_tadv_state)

adv_state_tadv_state

广播方式:

快广播、慢广播、不广播

设置参数成功返回0,否则返回-1;

开启广播成功返回0,否则返回-1;

设置广播自定义字段数据

sd_ble_gap_adv_data_set(uint8_tconst*p_data,uint8_tdlen,uint8_tconst*p_sr_data,uint8_tsrdlen));

uint8_tconst*p_data

广播字段数据指针,包括厂商信息,标志位与UUID

uint8_tdlen

广播字段数据长度

uint8_tconst*p_sr_data

扫描回复数据指针

uint8_tsrdlen

扫描回复数据长度

NRF_SUCCESSAdvertisingdatasuccessfullyupdatedorcleared.

NRF_ERROR_INVALID_PARAMInvalidparameter(s)supplied,bothp_dataandp_sr_datacannotbeNULL.

设置广播间隔、超时时间、广播类型等参数并启动广播

sd_ble_gap_adv_start(ble_gap_adv_params_tconst*p_adv_params));

ble_gap_adv_params_tconst*p_adv_params

p_adv_params->

type:

广播类型有Connectableundirected、Connectabledirected、Scannableundirected、Nonconnectableundirected

interval:

广播间隔,快广播间隔是25ms,慢广播是2s

timeout:

超时时间,快广播间隔是30s,慢广播是180s

NRF_SUCCESSTheBLEstackhasstartedadvertising.

NRF_ERROR_INVALID_STATEInvalidstatetoperformoperation

5)判断30s快速广播是否有连接事件,如果有那么就建立连接,如果超时则SoftDevice会抛出一个BLE_GAP_TIMEOUT_SRC_ADVERTISING事件,这个事件的派发到staticvoidon_ble_evt(ble_evt_t*p_ble_evt)函数中处理,广播超时后设置进入慢速广播。

voidon_ble_evt(ble_evt_t*p_ble_evt)

{

switch(p_ble_evt->

caseBLE_GAP_EVT_TIMEOUT:

if(p_ble_evt->

BLE_GAP_TIMEOUT_SRC_ADVERTISING)

{

dmble_core_adv(BLE_SLOW_ADVERTISING);

}

}

在了解蓝牙与APP建立连接配对前,首先需要理解芯片集成的BLE协议栈是基于时间驱动。

也就是说协议栈与app之间的数据信息交互都是基于事件。

当芯片底层上抛一个时间,这个事件上抛的过程是协议栈触发软中断。

事件最终会调用ble_evt_dispatch函数进行处理,这个函数会再将时间分配给各个服务以及模块的事件处理函数处理。

蓝牙设备与APP连接的过程就是数据信息交互的过程,蓝牙协议栈将APP发过来的数据处理成一个个单独的事件,具体流程如下图:

事件派发函数ble_evt_dispatch(ble_evt_t*p_ble_evt)最终包含三个处理函数dm_ble_evt_handler(p_ble_evt);

dmble_on_ble_evt(p_ble_evt);

on_ble_evt(p_ble_evt)。

其中dm_ble_evt_handler(p_ble_evt)管理蓝牙GAP事件,GAP事件包含连接过程中的所有事件。

管理蓝牙GAP事件,GAP事件包含连接过程中的所有事件

voiddm_ble_evt_handler(ble_evt_t*p_ble_evt)

ble_evt_t*p_ble_evt

处理的事件有:

BLE_GAP_EVT_CONNECTED

BLE_GAP_EVT_DISCONNECTED,

BLE_GAP_EVT_CONN_PARAM_UPDATE,

BLE_GAP_EVT_SEC_PARAMS_REQUEST,

BLE_GAP_EVT_SEC_INFO_REQUEST,

BLE_GAP_EVT_PASSKEY_DISPLAY,

BLE_GAP_EVT_AUTH_KEY_REQUEST,

BLE_GAP_EVT_AUTH_STATUS,

BLE_GAP_EVT_CONN_SEC_UPDATE,

BLE_GAP_EVT_TIMEOUT,

BLE_GAP_EVT_RSSI_CHANGED,

BLE_GAP_EVT_ADV_REPORT,

BLE_GAP_EVT_SEC_REQUEST,

BLE_GAP_EVT_CONN_PARAM_UPDATE_REQUEST,

BLE_GAP_EVT_SCAN_REQ_REPORT,

 

蓝牙数据处理包括两个部分,数据发送与数据接收。

我们在蓝牙栈初始化的时候添加了一个服务,该服务有两个特征值:

一个特征值属性为write,另一个特征值属性为notify&

write。

特征值属性为write就可以接受从APP端发来的数据,特征值属性为notify就可发送数据到APP端。

通过特征值发送来的数据都是在state_running_on_ble_evt(ble_evt_t*p_ble_evt)中处理。

处理数据的接收与发送,当event_id是BLE_GATTS_EVT_WRITE,调用pm_recv_dmble_pkt接受APP端来的数据;

当event_id是BLE_GATTC_EVT_HVX调用dmble_ancs_frame_from_ios(evt_hvx->

data,evt_hvx->

len,DMBLE_IOS_RECV_DATA_TYPE_ANCS_NS)向APP端发送数据

voidstate_running_on_ble_evt(ble_evt_t*p_ble_evt)

BLE_GATTS_EVT_WRITE

BLE_GATTC_EVT_HVX

将数据处理后存入中

voidpm_recv_dmble_pkt(uint8_t*buf,uint16_tlen)

uint8_t*buf

APP端发送过来的数据指针

APP端发送过来的数据长度

将需要发送的数据存入中

voiddmble_ancs_frame_from_ios(constuint8_t*p_data,uint16_tlength,uint8_ttype)

constuint8_t*p_data

向APP端发送的数据指针

uint16_tlength

向APP端发送过来的数据长度

服务类型

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 商业计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1