蓝牙连接名字在gaprole setparameter层修改吗

他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)低功耗蓝牙 cc2541(34)
使用的蓝牙芯片是CC2541, 本文章介绍修改蓝牙名称和蓝牙MAC地址的方法。
修改蓝牙名称:
在数组scanRspData[ ]里,存放的就是蓝牙名称,你可以自己设置。GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanRspData ), scanRspData );&
修改蓝牙MAC地址:
蓝牙的MAC是全球唯一的,在Flash中有一块只读区域,从地址0x780E开始,蓝牙的MAC以小端方式存放在里面。
在TI的Peripheral例程里面,添加一个特征值,只读属性,6字节长度(蓝牙MAC长度为48-bit,6字节)。
读取蓝牙MAC地址时有一种非常简便的方法,就是直接去读寄存器里的MAC地址 ,
The Information Page is a 2-KB read-only region that stores various device information. Among other
things, it contains for IEEE 802.15.4 or Bluetooth low energy compliant devices a unique IEEE address
from the TI range of addresses. For CC253x, this is a 64-bit IEEE address stored with least-significant
byte first at XDATA address 0x780C. For&/41, this is a 48-bit IEEE address stored with
least-significant byte first at XDATA address&0x780E
于是读出寄存器中的值,就可以得到MAC地址了 ,这里是只读空间。
void&ReadMac(unsigned&char&*TempMacAddress,int&len)&&&&{&&&&&TempMacAddress[5]=XREG(0x780E);&&&&&&TempMacAddress[4]=XREG(0x780F);&&&&&TempMacAddress[3]=XREG(0x7810);&&&&&TempMacAddress[2]=XREG(0x7811);&&&&&&&&&&&&&&&&&&&&&TempMacAddress[1]=XREG(0x7812);&&&&&TempMacAddress[0]=XREG(0x7813);&&&&&return&;&&} &
顺便说一下XREG的定义
#define XREG(addr)&&&&&& ((unsigned char volatile __xdata *) 0)[addr]
volatile 是为了在优化的时候值被改写,xdata是放在xdata空间中。
这句话是为了直接读出addr地址的内容!!!
议栈中也可以调用系统的API获取MAC地址
static&uint8&MAC_Address[B_ADDR_LEN]={0};&&
GAPRole_GetParameter(GAPROLE_BD_ADDR,&ownAddress); &
osal_memcpy(&MAC_Address,ownAddress,B_ADDR_LEN); &
上面说的是安卓读取MAC的方法。
苹果手机无法在连接中获得MAC,苹果手机没有提供读取底层MAC的API,所以只能通过广播MAC的方式传给苹果手机。
但是将MAC放在广播中,同时也会导致数据的不安全。还有一种方法是把MAC地址放在广播数组里,发送出去。将MAC地址放在scanRspData(GAP - SCAN RSP data)数组里。
上面说的是读取BLE的MAC地址,要是修改的话,可以如下修改:
unsigned char DeviceMAC[6] = {0x88,0x88,0x88,0x88,0x88,0x88};
HCI_EXT_SetBDADDRCmd(DeviceMAC);
之后,蓝牙的mac地址就修改为88:88:88:88:88:88.
有问题,请咨询,我的个人公众号。
访问:13359次
排名:千里之外
原创:31篇
转载:31篇
(1)(6)(5)(34)(3)(1)(12)& 相关文章 &
to open up, build, and debug projects on the CC2540 using IAR Embedded Workbench and the CC Debugger 使用IAR嵌入式工作平台和CC Debugger工具打开编译调试CC2540工程 oBe able to modify the existing GAP role profiles 学会修改已存在的GAP角色配置 oBe able to modify existing GATT attribute profiles, or create new ones 学会修改已存在的GATT属性配置,或者创建一个新的 oUnderstand the sample applications 理解示例应用程序
蓝牙4.0BLE cc2540 cc2541 ios OAD教程(空中更新固件)[原创,多图]
分类: 蓝牙4.0 BLE CC2540 CC-20 14:47
1404人阅读
举报 cc2540 cc2540 cc2541 蓝牙4.0 iBeacon android 蓝牙
蓝牙4.0BLE cc2540 cc2541 ios OAD教程(空中更新固件) 为 阿莫单片机论坛
www.AmoMcu.com 原创,只发布于csdn博客, 如需转载,请注明出处,谢谢!
如果需要蓝牙4.0BLE开发开发板和资料, 请看这里
链接地址 , 这里能提供基于cc2540或cc2541的蓝牙4.0BLE开发的详细硬件和软件资料, QQ群,
阿莫单片机论坛
www.AmoMcu.com
提供技术, 更多项目实例介绍持续更新中。
CC2540开发套件资料更新日志
(中文).pdf 目录:CC2540DK_baidu\用户手册 【13】
&&添加四个关于TI cc2540的网络资料 所在目录:CC2540DK_baidu\网络资料 【11】
添加TI ble测试工具BTool的使用指南:BTool使用指南.pdf 【10】
添加基于蓝牙ble4.0的串口透传程序(目前为单向:主机通过蓝牙把数据发送到从机) 【9】
&&添加《BLE协议栈UART调试指南.pdf》中
《二》CC2540和CC2541上实现ANCS(Apple Notification Center Service)
如何利用TI BLE协议栈在CC2540/41上开发ANCS的NC,这应该是许多开发者共同的愿望,在协议栈demo:TimeApp基础上修改,是最快的选择。 TimeApp实现的是SIG发布的标准Service,但Apple ANCS与SIG标准Service非常相似,在上一篇文章中,我们有提到ANCS中的三个Characteristics,但这三个并不是整个ANCS,上图中显示的电池电量 以及时间,均是由ANCS通知而来。 与其他BLE外设不同,直接打开蓝牙,就可以与TimeApp连接,并且
and controller) allows for host to communicate with controller over a standard interface (UART, USB, SDIO, etc.) 在双芯片的解决方案(host和controller分开的情况),允许host通过标准接口(UART/USB/SDIO等)与controller进行通讯。 oUsed internally by the CC2540 BLE protocol stack for communication
Android平台BLE应用程序开发指南
进行了介绍,并结合例子代码对如何使用Android BLE API进行了讲解。所用的例子源代码在AOSP/developers/samples/android/connectivity/bluetooth/BluetoothLeGatt/。 开发中需要用到的BLE profile的spec,可以在蓝牙组织的官方网站上找到《Specification Adopted Documents》,该页面的“GATT-Based Specifications“即是BLE profile and service
Android 蓝牙4.0 BLE调试
配备低功耗蓝牙的可穿戴式设备应该是未来的一大趋势。 继IOS去年支持蓝牙BLE之后,Android最新的4.3版本也有了官方的支持。 受软硬件限制,目前的尝试基于第三方SDK。 Host端:支持蓝牙4.0的GS4手机,配合三星的蓝牙BLE开发包 链接地址 Device端:支持蓝牙BLE的单片机CC2540,配合TI开发板 链接地址 目标:手机监测CC2540的距离和方向 1. 设备匹配 与普通蓝牙设备的匹配类似,区别在于要判断是否是BLE设备。 [java]
Android 蓝牙4.0 BLE调试
配备低功耗蓝牙的可穿戴式设备应该是未来的一大趋势。 继IOS去年支持蓝牙BLE之后,Android最新的4.3版本也有了官方的支持。 受软硬件限制,目前的尝试基于第三方SDK。 Host端:支持蓝牙4.0的GS4手机,配合三星的蓝牙BLE开发包 链接地址 Device端:支持蓝牙BLE的单片机CC2540,配合TI开发板 链接地址 目标:手机监测CC2540的距离和方向 1. 设备匹配 与普通蓝牙设备的匹配类似,区别在于要判断是否是BLE设备。 mBtAdapter
[Android分享] android 蓝牙4.0 开发经验分享
一下我们产品的视频上来。有兴趣的人,持续关注下我的博客。
看到网上很多人在找三星连接BLE设备的方法,等在过几天,应用完全稳定了,几个重启的bug解决了之后,还有就是我们暂时只能连接TI的CC2540。所有问题解决了之后,打算把蓝牙连接的这个模块独立出来,源代码免费开放给大家参考。 蓝牙4.0是一个蛮大的市场,还在刚刚起步的阶段,完全还没有饱和,所以,大家一起努力吧。有什么问题可以在下面留言。 日更新
终于连接上了CSR1000了。之前的TI
BlueTooth: 蓝牙4.0设计 CC2540
是中国和西方人世界观的主要差别。
问:蓝牙有什么优势? 答:首先是低功耗,以BLE 4.0为例,一节钮扣电池在静态工作状态可以支持一年;其次是低成本,TI公司的CC2540蓝牙SOC方案芯片出售价仅1美元,可以让人们低廉使用蓝牙技术;再次是开放性,2.4GHz的频段全球开放,没有政府监管;最后是适合时代潮流,现在是手机的时代,蓝牙技术本来就为它而生。
问:蓝牙4.0协议和BLE是什么? 答:蓝牙4.0协议是2010年6月由SIG(Special Interest
蓝牙4.0设计 CC2540
世界观的主要差别。
问:蓝牙有什么优势? 答:首先是低功耗,以BLE 4.0为例,一节钮扣电池在静态工作状态可以支持一年;其次是低成本,TI公司的CC2540蓝牙SOC方案芯片出售价仅1美元,可以让人们低廉使用蓝牙技术;再次是开放性,2.4GHz的频段全球开放,没有政府监管;最后是适合时代潮流,现在是手机的时代,蓝牙技术本来就为它而生。
问:蓝牙4.0协议和BLE是什么? 答:蓝牙4.0协议是2010年6月由SIG(Special Interest Group
蓝牙4.0设计 CC2540
世界观的主要差别。
问:蓝牙有什么优势? 答:首先是低功耗,以BLE 4.0为例,一节钮扣电池在静态工作状态可以支持一年;其次是低成本,TI公司的CC2540蓝牙SOC方案芯片出售价仅1美元,可以让人们低廉使用蓝牙技术;再次是开放性,2.4GHz的频段全球开放,没有政府监管;最后是适合时代潮流,现在是手机的时代,蓝牙技术本来就为它而生。
问:蓝牙4.0协议和BLE是什么? 答:蓝牙4.0协议是2010年6月由SIG(Special Interest Group
BlueTooth: TI低功耗蓝牙(BLE)介绍
转自:链接地址 TI低功耗蓝牙(BLE)介绍
本文档翻译和修改自参考资料:CC2540Bluetooth Low Energy Software Developer’s Guide (Rev. B),部分图片直接引用自该文档,不一一说明。初稿,待修改。
1、BLE蓝牙协议栈结构 附图6 BLE蓝牙协议栈结构图 分为两部分:控制器和主机。对于4.0以前的蓝牙,这两部分是分开的。所有profile(姑且称为剧本吧,用来定义设备或组件的角色)和应用都建构在GAP或GATT之上
TI_ble低功耗蓝牙
TI低功耗蓝牙(BLE)介绍 本文档翻译和修改自参考资料:CC2540Bluetooth Low Energy Software Developer’s Guide (Rev. B),部分图片直接引用自该文档,不一一说明。初稿,待修改。 一、概述 1、BLE蓝牙协议栈结构 附图6 BLE蓝牙协议栈结构图 分为两部分:控制器和主机。对于4.0以前的蓝牙,这两部分是分开的。所有profile(姑且称为剧本吧,用来定义设备或组件的角色)和应用都建构在GAP或GATT之上。下面由结构图的底层组件开始
关于samsung连接BLE设备的一些资料汇总和开发过程一些经验总结
的一些问题。 链接地址 samsung开发者论坛,里面有很多开发者对samsung开发人员的提问。我认真的看了每一条留言(当然是用翻译软件先翻译一遍啦~我用的是Chrome浏览器+有道翻译插件,可以自定义翻译级别) 链接地址 stackoverflow里面关于ble开发问题集合,也包含了ios的ble开发和android其他品牌手机的开发 链接地址 关于用broadcomSDK开发蓝牙4.0,教你怎么使用add-on属性 链接地址 此人号称已经用broadcom搜索到CC2540,使用CC2540
今天在使用使用CC2540的时候,想下载个程序到CC2540底板上,结果出现Not able to reset SmartRF04DD的错误。如下图 经过一番摸索,最终是按下CCDEBUG上的reset键才成功的。
CC2540 BLE PeripheralBroadcaster Example(蓝牙4.0从机和广播者多角色实例)
实验环境: 蓝牙版本:TI CC2540 协议栈:1.2.1 参考手册:协议栈参考文档 TI_BLE_Software_Developer's_Guide.pdf 实验目的:实现CC240从机在连接以后,还可以继续以广播者的身份广播告知其他设备从机的存在。
Peripheral device sending out advertisements while connected 所修改的工程:协议栈中SimpleBLEPeripheral文件夹下
BlueTooth: 低功耗蓝牙bluetooth 4.0 (BLE) CC2540
低功耗蓝牙bluetooth 4.0 (BLE) CC2540/1透传模块 iBeacons
模块可以工作在桥接模式(透传模式)和直驱模式。 模块启动后会自动进行广播,已打开特定APP的手机会对其进行扫描和对接,成功之后便可以通过BLE协议对其进行监控。 桥接模式下,用户CPU可以通过模块的通用串口和移动设备进行双向通讯,用户也可以通过特定的串口AT指令,对某些通讯参数进行管理控制。用户数据的具体含义由上层应用程序自行定义。移动设备可以通过APP对模块进行写操作,写入的数据将通过串口发送给
BlueTooth: CC2540 BLE PeripheralBroadcaster Example(蓝牙4.0从机和广播者多角色实例)
实验环境: 蓝牙版本:TI CC2540 协议栈:1.2.1 参考手册:协议栈参考文档 TI_BLE_Software_Developer's_Guide.pdf 实验目的:实现CC240从机在连接以后,还可以继续以广播者的身份广播告知其他设备从机的存在。
Peripheral device sending out advertisements while connected 所修改的工程:协议栈中SimpleBLEPeripheral文件夹下
蓝牙4.0 For IOS
相关SDK可以进行开发,开源的博通BLE SDK开发出来的没有手机可以使用。 目前市场上销量最好的android蓝牙4.0的就是三星GS3,但系统本身的蓝牙功能连搜索BLE的设备都搜索不到,更别说连接使用了,持续关注了几个月也只有些零散的资料有些牛人整出了些framework但需要root的用户才能使用,跟苹果需要越狱一样,买GS3这种手机的人除了开发人员估计很多都不会root的,因为一root就失去了保修服务。 最近有看到了些希望,有人用三星的开发包弄出可以搜索到所有蓝牙设备的应用了,但没有真机
& 2012 - 2016 & aiuxian.com &All Rights Reserved. &
/*爱悠闲图+*/
var cpro_id = "u1888441";[转载]蓝牙4.0&BLE&&peripheral&广播设置
广播advertising,只有从设备处于广播状态,主机才能够搜索到;
扫描回应scan
当我们使用lightblue软件或者CC254X的Central程序来扫描从机时,如果从机正在广播,将被扫描到并且可以看到从机的设备名,发射功率等信息,而这些数据并没有出现在广播数据中,这是为什么呢?下图是lightblue扫描到的信息:
当从机接收到主机发来的扫描请求时,会有一个扫描回应scan response
,这个response中,携带了从机的设备名,发射功率等信息
1、定义扫描数据
static uint8
scanRspData[] =
& // complete name
第一段长度指的是从机名的长度+1,这个1是GAP_ADTYPE_LOCAL_NAME_COMPLETE这个宏
GAP_ADTYPE_LOCAL_NAME_COMPLETE,
'a','b','c','d','e',
& // 连接时间范围 Min 和 Max
值的连接时间间隔&
& //(2 个八位字节 Min,2 个八位字节最大)
(0xFFFF 表示没有 conn 间隔 min 或 max)
& 0x05, & //
length of this data
GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,
& LO_UINT16(
DEFAULT_DESIRED_MIN_CONN_INTERVAL ), & //
& HI_UINT16(
DEFAULT_DESIRED_MIN_CONN_INTERVAL ),
& LO_UINT16(
DEFAULT_DESIRED_MAX_CONN_INTERVAL ), & //
& HI_UINT16(
DEFAULT_DESIRED_MAX_CONN_INTERVAL ),
& &//TX 电源级别:
0xXX:-127 到 + 127 dBm &发射功率
& 0x02, & //
length of this data
GAP_ADTYPE_POWER_LEVEL,
& & // 0dBm
2、定义广告数据
static uint8 advertData[] =
这将设置要使用有限可发现模式 (广告 30 秒的时间) 的设备而不是一般可发现模式 (无限期地做广告)
& 0x02, & //
length of this data
GAP_ADTYPE_FLAGS,//发现模式
& DEFAULT_DISCOVERABLE_MODE |
GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,
//不支持BR/EDR,CC2540是单模芯片,不支持BR/EDR
& //服务的
UUID,通知中央设备什么服务包括在此外围设备
& 0x03, & //
length of this data
& GAP_ADTYPE_16BIT_MORE,
& & &// s服务: 更多的
16 位 &可用 Uuid 但不是全部
& LO_UINT16(
SIMPLEPROFILE_SERV_UUID ), //0xFFF0
& HI_UINT16(
SIMPLEPROFILE_SERV_UUID ),
一般从机为service,因此从机设备会有一个
&attDeviceName &和
主机扫描时发现设备的名称
主机扫面到的设备名称 &我们在scanRspData中的前几位定义格式为
长度+标记(判定数组表达的数据是什么意思比如设备名 间隔时间
&发射功率等等)+设备名称
attDeviceName
& 我们可以单独定义,例如&static uint8 attDeviceName[GAP_DEVICE_NAME_LEN] =
"Osama"; &
& GGS_SetParameter(
GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, attDeviceName );//GAP
GATT服务器参数设置 &这一句修改的是service的名称
将数据加载到GATT层
3、设置 GAP
Peripheral Role Profile
defined( CC2540_MINIDK )
& // For the CC2540DK-MINI keyfob, device doesn't
start advertising until button is pressed
& uint8 initial_advertising_enable =
& // For other hardware platforms, device starts
advertising upon initialization
& uint8 initial_advertising_enable =
setting this to zero, the device will go into the waiting state
& & // being
discoverable for 30.72 second, and will not being advertising
& & // until
the enabler is set back to TRUE
& & uint16
gapRole_AdvertOffTime = 0;
enable_update_request = DEFAULT_ENABLE_UPDATE_REQUEST;
& & uint16
desired_min_interval =
DEFAULT_DESIRED_MIN_CONN_INTERVAL;
& & uint16
desired_max_interval =
DEFAULT_DESIRED_MAX_CONN_INTERVAL;
& & uint16
desired_slave_latency = DEFAULT_DESIRED_SLAVE_LATENCY;
& & uint16
desired_conn_timeout = DEFAULT_DESIRED_CONN_TIMEOUT;
& & // Set the
GAP Role Parameters
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ),
&initial_advertising_enable );//广播使能
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ),
&gapRole_AdvertOffTime );//表示外设关闭广播持续时间,
//该值为零表示无限期关闭广播直到下一次
&//广播使能信号到来。
GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanRspData
), scanRspData ); &//外设用于回复主机扫描请求的信息
GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertData ),
advertData ); & &
& &//包含在广播里的信息
GAPRole_SetParameter( GAPROLE_PARAM_UPDATE_ENABLE, sizeof( uint8 ),
&enable_update_request
);//使能自动更新连接参数,可以让外设连接失败时自动调整连接
& & //参数以便重新连接。
GAPRole_SetParameter( GAPROLE_MIN_CONN_INTERVAL, sizeof( uint16 ),
&desired_min_interval
);//设置最小连接间隙,缺省值为80个单位(每单位1.25ms)
GAPRole_SetParameter( GAPROLE_MAX_CONN_INTERVAL, sizeof( uint16 ),
&desired_max_interval );//设置最大连接间隙,缺省值为3200个单位
GAPRole_SetParameter( GAPROLE_SLAVE_LATENCY, sizeof( uint16 ),
&desired_slave_latency );//外设鄙视参数,缺省为零。
GAPRole_SetParameter( GAPROLE_TIMEOUT_MULTIPLIER, sizeof( uint16 ),
&desired_conn_timeout );//最大耐心等待时间,缺省为1000个单位
4、设置广告时间
& & uint16
advInt = DEFAULT_ADVERTISING_INTERVAL;
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt );
//最小的广告时间间隔,在有限的可发现模式时
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt );
//最大的广告时间间隔,在有限的可发现模式时
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advInt
);//最小的广告时间间隔,在一般可发现模式时
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advInt
);//最大的广告时间间隔,在一般可发现模式时
5、// Setup the GAP Bond Manager&&&//GAP
绑定管理器设置
& uint32 passkey = 0; // passkey "000000"
& uint8 pairMode =
GAPBOND_PAIRING_MODE_WAIT_FOR_REQ;//配对模式,配置成等待主机的配对请求
& uint8 mitm = TRUE;
& uint8 ioCap =
GAPBOND_IO_CAP_DISPLAY_ONLY;//只显示设备
& uint8 bonding = TRUE;
& GAPBondMgr_SetParameter(
GAPBOND_DEFAULT_PASSCODE, sizeof ( uint32 ), &passkey );
//密钥,范围是 0-999999,默认值为 0
& GAPBondMgr_SetParameter( GAPBOND_PAIRING_MODE,
sizeof ( uint8 ), &pairMode
);//告诉绑定管理器是否配对通过,不论它等待一个请求从控制设备或者是自己发起配对.默认的设置是等待一个请求从控制设备.
配对模式:配置成等待主机的配对请求
& GAPBondMgr_SetParameter(
GAPBOND_MITM_PROTECTION, sizeof ( uint8 ), &mitm
);//设置中间人保护是否使能.如果使能了,配对请求将鉴定连接在从和主之间.profile默认的值为FALSE,即使应用设置它为TRUE在初始化的时候.
打开密钥保护的配对算法
& GAPBondMgr_SetParameter(
GAPBOND_IO_CAPABILITIES, sizeof ( uint8 ), &ioCap
);//告诉绑定管理器设备的输入和输出的能力.为了判断设备是否有显示屏或者输入键盘这个参数是需要的.然而,默认的值为GAPBOND_IO_CAP_DISPLAY_ONLY,表明设备有一个显示屏但没有键盘.即使设备没有物理意义上的显示器,一个展示的钥匙(在用户指导中)被认为是一个显示器.默认的万能钥匙是一个六位数字字符串”000000”.
& GAPBondMgr_SetParameter(
GAPBOND_BONDING_ENABLED, sizeof ( uint8 ), &bonding
);//使能绑定.profile默认的值为FALSE,即使SimpleBLEPeripheral应用设置它为TRUE在初始化时.
Server的相关设置函数。
& // Initialize GATT attributes
& GGS_AddService( GATT_ALL_SERVICES
);&&&&&&&&&&&
// GAP Service
& GATTServApp_AddService( GATT_ALL_SERVICES
);&&& // GATT
attributes
DevInfo_AddService();&&&&&&&&&&&&&&&&&&&&&&&&&&
// Device Information Service
& SimpleProfile_AddService( GATT_ALL_SERVICES
);& // Simple GATT Profile
通常一个GATT中GAP server和GATT server是必须强制存在的(Mandatory)以及自己设计的profile
作为GATT的server和client,主要通过Attribute来进行交互,当client请求server读取数据时,通过如下注册的回调函数来进行访问。
& // Register callback with
SimpleGATTprofile
& VOID SimpleProfile_RegisterAppCBs(
&simpleBLEPeripheral_SimpleProfileCBs );//给应用注册回调函数
在回调函数中对时间做出处理。
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 gaprole connected 的文章

 

随机推荐