CC2540 BLE PeripheralBroadcaster Example(蓝牙4.0从机和广播者多角色实例)
来源:互联网 发布:三唑仑片淘宝网上名称 编辑:程序博客网 时间:2024/05/16 12:36
实验环境:
蓝牙版本:TI CC2540
协议栈:1.2.1
参考手册:协议栈参考文档 TI_BLE_Software_Developer's_Guide.pdf
实验目的:实现CC240从机在连接以后,还可以继续以广播者的身份广播告知其他设备从机的存在。
Peripheral device sending out advertisements while connected
所修改的工程:协议栈中SimpleBLEPeripheral文件夹下的SimpleBLEPeripheral.eww工程
实验现象:上电时,从机广播,然后连接从机后,按键HAL_KEY_SW_1,切换到广播者状态(连接中的广播状态),再次搜索还是可以搜索到该设备,但是不可以连接
预编译选项如下所示:
INT_HEAP_LEN=3072
HALNODEBUG
OSAL_CBTIMER_NUM_TASKS=1
HAL_AES_DMA=TRUE
HAL_DMA=TRUE
PLUS_BROADCASTER
HAL_LCD=TRUE
HAL_LED=TRUE
HAL_UART=TRUE
xPOWER_SAVING
需要强调的是,部分内容需要根据自己的平台做相应修改
一、广播的相关设置
首先不要忘记在预编译中加入PLUS_BROADCASTER;
在peripheralBroadcaster.c文件中查看void GAPRole_Init( uint8 task_id )这个函数中确保一下设置为:
gapRole_profileRole = (GAP_PROFILE_PERIPHERAL);
二、从机的相关设置
1、为了方便起见,首先设置从机的广播模式为一直广播,在simpleBLEPeripheral.c中
// Limited discoverable mode advertises for 30.72s, and then stops
// General discoverable mode advertises indefinitely
///受限广播 和 通用广播
///测试阶段修改为一直广播
#if defined ( CC2540_MINIDK )
#define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_LIMITED
#else
#define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_GENERAL
#endif // defined ( CC2540_MINIDK )
根据自己的实际情况修改为一直广播就可以,我这里预编译里面没有定义CC2540_MINIDK
2、设置广播者切换在simpleBLEPeripheral.c中
找到函数static void simpleBLEPeripheral_HandleKeys( uint8 shift, uint8 keys )
可以按照下列给HAL_KEY_SW_1做修改:
if ( keys & HAL_KEY_SW_1 ) { ///SK_Keys |= SK_KEY_LEFT; HalUARTWrite(0,"KEY1\n",5); /// osal_start_timerEx( simpleBLEPeripheral_TaskID, SBP_ADVDATA_EVT, 50 ); }
需要注意的是SBP_ADVDATA_EVT事件要在simpleBLEPeripheral.h中定义:
// Simple BLE Peripheral Task Events#define SBP_START_DEVICE_EVT 0x0001#define SBP_PERIODIC_EVT 0x0002#define SBP_ADV_IN_CONNECTION_EVT 0x0004 ///#define SBP_ADVDATA_EVT 0x0008
然后在simpleBLEPeripheral.c中,找到函数:
uint16 SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events )
在此函数中添加SBP_ADVDATA_EVT事件的执行代码:
if ( events & SBP_ADVDATA_EVT ) { static uint8 advMfgDataValue = 1; static uint8 advData[]= {0x03,0xFF,0x01}; uint8 connAdv = TRUE; advMfgDataValue++; advData[2] = advMfgDataValue; //update adv data GAPRole_SetParameter( GAPROLE_ADVERT_DATA,advData[0], advData ); // GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &connAdv ); GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &connAdv ); return (events ^ SBP_ADVDATA_EVT); }
编译时需要注意:要将peripheral.c和peripheral.h排除编译;并且将peripheralBroadcaster.c和peripheralBroadcaster.h加入编译。具体操作如下:
如下图所示的四个文件
右击文件,点击Options选项,如下图所示:
点击左上角的Exclude from build就表示排除编译了,否则就是加入编译
三、实验结果
使用USB Dongle利用TI自带的BTool工具进行测试
1、以下是从机已经处于连接状态
2、当我们按下HAL_KEY_SW_1所对应的KEY1键时,进入搜索状态
3、最后发现的设备还是同一台设备,所以地址是一样的,但是这是广播者的身份,是不能连接的。
4、这是一台只有从机功能的设备,处于连接状态时,再次搜索后,是不会再次被发现的
如需转载请标明出处:http://blog.csdn.net/itas109
- CC2540 BLE PeripheralBroadcaster Example(蓝牙4.0从机和广播者多角色实例)
- BlueTooth: CC2540 BLE PeripheralBroadcaster Example(蓝牙4.0从机和广播者多角色实例)
- BlueTooth: CC2540 BLE PeripheralBroadcaster Example(蓝牙4.0从机和广播者多角色实例)
- <蓝牙BLE>cc2540从机连接时的动态广播
- <蓝牙BLE>cc2540修改动态广播
- <BLE>CC2540主机获取各个从机广播
- Galaxy S3 设备调试蓝牙4.0BLE (cc2540)
- android ble 蓝牙4.0 cc2540 开发(一)
- 蓝牙4.0BLE 芯片cc2540和cc2541 128x64 oled显示屏驱动
- BlueTooth: 蓝牙4.0BLE 芯片cc2540和cc2541 128x64 oled显示屏驱动
- 蓝牙4.0BLE cc2540 cc2541 ios OAD教程(空中更新固件)[原创,多图]
- 蓝牙4.0BLE cc2540 cc2541 ios OAD教程(空中更新固件)[原创,多图]
- 蓝牙4.0BLE cc2540 cc2541 ios OAD教程(空中更新固件)[原创,多图]
- 基于TI CC2540汽车检测蓝牙4.0 BLE方案
- BlueTooth: 低功耗蓝牙bluetooth 4.0 (BLE) CC2540
- iOS蓝牙4.0(BLE)-LightBlue与cc2540开发板通信
- iOS蓝牙4.0(BLE)-LightBlue与cc2540开发板通信
- <蓝牙BLE>cc2540发现多个特征值句柄
- 数据在存储器中的存放方式
- 谈下自己认识的c++常识!
- C语言Main函数中的参数
- 变量初始化,构造代码块,静态代码块,执行顺序
- 【2014校招】小米笔试
- CC2540 BLE PeripheralBroadcaster Example(蓝牙4.0从机和广播者多角色实例)
- IT桔子沙龙第6期:本地生活服务探路者
- C program for 折半查找
- D3D学习001----D3D程序的基本结构
- ARM中的FCLK、HCLK、PCLK
- IT富豪强势崛起 创新的商业价值日渐显著
- 一个程序的ALV显示之后还可以进行数据操作。
- ubuntu+bochs2.2.1+gdb+gcc3.4.1+linux0.11=内核雏形研究神器
- nosql数据存储分类