文档章节

CC2540/CC2541做蓝牙BLE中心设备

h
 houj
发布于 2014/10/22 22:03
字数 538
阅读 422
收藏 2

CC2540/CC2541做蓝牙BLE中心设备

1)搜索设备

//开始搜索
GAPCentralRole_StartDiscovery( DEFAULT_DISCOVERY_MODE, DEFAULT_DISCOVERY_ACTIVE_SCAN, DEFAULT_DISCOVERY_WHITE_LIST);

...

//在GAP_DEVICE_INFO_EVENT事件将得到搜索到的设备的 MAC地址,RSSI,支持的服务等信息,在这里可以判断设备是否提供了需要的服务,把符合要求的设备保存起来;
//GAP_DEVICE_DISCOVERY_EVENT事件表明搜索已经结束了,这里可以选择需要连接的设备,或者重新搜索设备;

2)连接设备

//知道设备的地址就可以建立连接
GAPCentralRole_EstablishLink( DEFAULT_LINK_HIGH_DUTY_CYCLE, DEFAULT_LINK_WHITE_LIST, addrType, peerAddr);

...

//GAP_LINK_ESTABLISHED_EVENT事件表明连接动作已经完成,可能成功,也可能失败,如下面方式判断
if (pEvent->gap.hdr.status == SUCCESS) {
   //连接成功
   //这里开始发现服务,延迟执行
   osal_start_timerEx(simpleBLETaskId, START_DISCOVERY_EVT, DEFAULT_SVC_DISCOVERY_DELAY);
}
else{
   //连接失败
}

3)发现服务

//开始发现指定的服务
GATT_DiscPrimaryServiceByUUID(app_ble_connHandle, (uint8*) uuid, ATT_BT_UUID_SIZE, simpleBLETaskId);
//在pMsg->method == ATT_FIND_BY_TYPE_VALUE_RSP时表明得到了指定的服务,这时可以开始发现特性

4)发现特性

ttReadByTypeReq_t req;
req.startHandle = simpleBLESvcStartHdl;//handle可以认为是一个逻辑地址,对应的是外设在注册服务时(GATTServApp_RegisterService)的一个gattAttribute_t[]结构中的下标,  我们实际上是在这个结构范围内寻找特性
req.endHandle = simpleBLESvcEndHdl;
req.type.len = ATT_BT_UUID_SIZE;
req.type.uuid[0] = LO_UINT16(THERMOMETER_SERV_CHAR1_UUID);
req.type.uuid[1] = HI_UINT16(THERMOMETER_SERV_CHAR1_UUID);
//GATT_ReadUsingCharUUID(app_ble_connHandle, &req, simpleBLETaskId);
GATT_DiscCharsByUUID(app_ble_connHandle, &req, simpleBLETaskId);

...

if(pMsg->method == ATT_READ_BY_TYPE_RSP){
   //发现特性,从此可以读写特性值,对于NOTIFY或INDICATE类型的需要先激活
}

5)激活NOTIFY/INDICATE型的特性

//实际上就是修改特性配置项的值
req.handle = simpleBLECharHdl + 2; // simpleBLECharHdl对应的是描述,描述后是值,值后才是配置;直接+2感觉不好,但没有找到搜索的办法.
uint8 tv = GATT_CLIENT_CFG_INDICATE;//GATT_CLIENT_CFG_NOTIFY
req.len = 2;
req.value[0] = tv;
req.value[1] = 0;
req.sig = 0;
req.cmd = 0;//这个值是什么?看有资料是1,但1不成功
bStatus_t r = GATT_WriteCharValue(app_ble_connHandle, &req, simpleBLETaskId);

...

if(pMsg->method == ATT_WRITE_RSP){
   //就是修改配置项已经完成
}

...

if(pMsg->method == ATT_HANDLE_VALUE_IND || pMsg->method == ATT_HANDLE_VALUE_NOTI){
   //外设发来数据
   ATT_HandleValueCfm(pMsg->connHandle);//TODO 特别重要,告诉外设ind已经收到,没有这一行就只会收到一次
}

© 著作权归作者所有

上一篇: 蓝牙标准服务
h
粉丝 9
博文 81
码字总数 57985
作品 0
长沙
技术主管
私信 提问
蓝牙4.0 BLE与传统蓝牙之间的兼容性

蓝牙分为三种:Bluetooth Smart Ready、Bluetooth Smart(Smart是低功耗蓝牙的标识)、以及标准 Bluetooth。根据 Bluetooth SIG的说法,这样是为了要分辨装置间的相容性以及标识各版本的传输...

Gobert
2015/04/26
0
0
介绍TTC CC2541 SDK 蓝牙4.0开发套件

简介 TTC CC2541 SDK 是由我司针对TI的CC2541芯片开发提供的快速开发工具。旨在让开发人员不再需要将大量精力放在蓝牙调试方面,只需将精力放在对CC2541芯片功能的应用开发上。 TTC CC2541 S...

昇润科技
2018/05/21
0
0
蓝牙4.0 BLE与传统蓝牙之间的兼容性

蓝牙分为三种:Bluetooth Smart Ready、Bluetooth Smart(Smart是低功耗蓝牙的标识)、以及标准 Bluetooth。根据 Bluetooth SIG的说法,这样是为了要分辨装置间的相容性以及标识各版本的传输...

IcedBeer
2016/11/03
406
0
这有一个通过蓝牙5认证的BLE蓝牙模块及配套SDK,请签收

物联网是一种新兴的产业,也是信息化时代重要发展的产物。 目前,全球物联网应用增长态势明显,据知名机构发布的数据显示,预计到2018年,全球物联网市场规模超过千亿美元,年均复合增长率保...

昇润科技
2017/12/22
0
0
蓝牙4.0和低功耗蓝牙是一回事吗?它们之间有什么区别与关联,全文解答

相信一部分人在了解蓝牙的时候都有过这样的一个疑问,蓝牙4.0和低功耗蓝牙是一回事吗?这个说法是错误的,是对蓝牙4.0的绝对错误的认识。蓝牙4.0标准包括两个蓝牙标准:一个是双模标准,它包...

昇润科技
2017/11/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Netty整合Protobuffer

现在我们都知道,rpc的三要素:IO模型,线程模型,然后就是数据交互模型,即我们说的序列化和反序列化,现在我们来看一下压缩比率最大的二进制序列化方式——Protobuffer,而且该方式是可以跨...

算法之名
29分钟前
16
0
如何用C++实现栈

栈的定义 栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压...

BWH_Steven
47分钟前
5
0
编程作业20190210900169

1编写一个程序,提示用户输入名和姓,然后以“名,姓”的格式打印出来。 #include <stdio.h>#include <stdlib.h> int main(){ char firstName[20]; char lastName[20]; print......

1李嘉焘1
59分钟前
12
0
补码的优点及原理分析

只讨论整数 1.计算机内部为什么没有减法器? 减法运算本身其实就是加法,如x - y即x +(-y),所以只需要将负数成功表示出来并可以参加加法运算,那加法器就可同时实现“+”和“-”的运算。这...

清自以敬
今天
76
0
Docker 可视化管理 portainer

官网安装指南: https://portainer.readthedocs.io/en/latest/deployment.html docker-compose.yml 位置,下载地址:https://downloads.portainer.io/docker-compose.yml...

Moks角木
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部