cc2540一主多从
来源:互联网 发布:网络qos管理 编辑:程序博客网 时间:2024/05/18 20:47
个人调试笔记, 语言组织能力有限,敬请原谅。
主机为smartRF开发板,从机为两个cc2540设备,首先搜索设备,然后选择设备连接,一次选择一个进行连接,连接好了再同样操作连接下一个(能不能同时连接?)。连接好了之后给设备发命令,其实还是一个一个发数据的,还没找到同时发数据的方法。程序在SimpleBLECentral基础上改的。
主要修改的地方有:
回调函数中显示所有搜索到的从设备地址:
static void simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )
{
switch ( pEvent->gap.opcode )
{
case GAP_DEVICE_INIT_DONE_EVENT: //设备初始化
{
LCD_WRITE_STRING( "BLE Central", HAL_LCD_LINE_1 );
LCD_WRITE_STRING( bdAddr2Str( pEvent->initDone.devAddr ), HAL_LCD_LINE_2 );
LCD_LINE_= 0x04;
simpleBLEConnHandle_num = 0;
}
break;
case GAP_DEVICE_INFO_EVENT:
{
// if filtering device discovery results based on service UUID
if ( DEFAULT_DEV_DISC_BY_SVC_UUID == TRUE )
{
if ( simpleBLEFindSvcUuid( SIMPLEPROFILE_SERV_UUID,
pEvent->deviceInfo.pEvtData,
pEvent->deviceInfo.dataLen ) )
{
simpleBLEAddDeviceInfo( pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType );//向设备发现列表中添加一个设备
LCD_WRITE_STRING( "AdvDevice_Addr:", HAL_LCD_LINE_3 );
LCD_WRITE_STRING( bdAddr2Str( pEvent->deviceInfo.addr ), LCD_LINE_);//显示所有广告设备地址
LCD_LINE_++;//每增加一个设备屏幕换一行
}
}
}
break;
case GAP_DEVICE_DISCOVERY_EVENT://设备发现完成
{
// discovery complete
simpleBLEScanning = FALSE;
// if not filtering device discovery results based on service UUID
if ( DEFAULT_DEV_DISC_BY_SVC_UUID == FALSE )
{
// Copy results
simpleBLEScanRes = pEvent->discCmpl.numDevs;
osal_memcpy( simpleBLEDevList, pEvent->discCmpl.pDevList,
(sizeof( gapDevRec_t ) * pEvent->discCmpl.numDevs) );
}
LCD_WRITE_STRING_VALUE( "Devices Found", simpleBLEScanRes,
10, HAL_LCD_LINE_1 );
if ( simpleBLEScanRes > 0 )
{
LCD_WRITE_STRING( "<- To Select", HAL_LCD_LINE_2 );
}
// initialize scan index to last device
simpleBLEScanIdx = simpleBLEScanRes;
}
break;
case GAP_LINK_ESTABLISHED_EVENT://设备连接
{
if ( pEvent->gap.hdr.status == SUCCESS )
{
simpleBLEState = BLE_STATE_CONNECTED;
simpleBLEConnHandle= pEvent->linkCmpl.connectionHandle;
ConnHandle[simpleBLEConnHandle_num] =pEvent->linkCmpl.connectionHandle;//将handle存起来,供主机发送数据的时候使用
simpleBLEConnHandle_num++;//每连接一个设备增加一次
simpleBLEProcedureInProgress = TRUE;
发起连接请求:
if ( keys & HAL_KEY_CENTER )//建立连接
{
uint8 addrType;
uint8 *peerAddr;
// Connect or disconnect
// if ( simpleBLEState == BLE_STATE_IDLE )//屏蔽状态判断,任何时候都可以建立连接
// {
// if there is a scan result
if ( simpleBLEScanRes > 0 )
{
// connect to current device in scan result
peerAddr = simpleBLEDevList[simpleBLEScanIdx].addr;
addrType = simpleBLEDevList[simpleBLEScanIdx].addrType;
simpleBLEState = BLE_STATE_CONNECTING;
GAPCentralRole_EstablishLink( DEFAULT_LINK_HIGH_DUTY_CYCLE,
DEFAULT_LINK_WHITE_LIST,
addrType, peerAddr );//发起建立连接请求
LCD_WRITE_STRING( "Connecting", HAL_LCD_LINE_1 );
LCD_WRITE_STRING( bdAddr2Str( peerAddr ), HAL_LCD_LINE_2 );
}
发送数据的时候调用函数(算不上实际意义上的同时控制):
GATT_WriteCharValue( ConnHandle[0], &req, simpleBLETaskId );//发给设备1
GATT_WriteCharValue( ConnHandle[1], &req, simpleBLETaskId ); //发给设备2
………………
- cc2540一主多从
- cc2540一主多从
- CC2540 一主多从
- CC2540一主多从的限制条件
- <蓝牙BLE>cc2540从机连接时的动态广播
- <BLE>CC2540主机获取各个从机广播
- cc2540 communication
- cc2540加密
- [CC2540] Notes
- CC2540 BLE PeripheralBroadcaster Example(蓝牙4.0从机和广播者多角色实例)
- BlueTooth: CC2540 BLE PeripheralBroadcaster Example(蓝牙4.0从机和广播者多角色实例)
- 蓝牙一主三从, 基于cc2540 cc2541 AMOMCU 蓝牙4.0开发板
- BlueTooth: CC2540 BLE PeripheralBroadcaster Example(蓝牙4.0从机和广播者多角色实例)
- CC2540 Central与CC2540 Peripheral 密码配对
- 蓝牙4.0设计 CC2540
- 解决CC2540 XDATA内存不足
- 蓝牙4.0设计 CC2540
- 蓝牙4.0设计 CC2540
- 递归 练习
- varchar2转化nvarchar2类型乱码
- 图(有向图、无向图)
- ORA-01017 11G用户名称区分大小写引起的数据库链错误
- wince触摸屏驱动
- cc2540一主多从
- 微软C#语言程序设计教程 视频 免费下载
- SE-程序编码
- C#的Socket实现UDP协议通信
- 关于android 横竖屏切换问题阐述
- 穿透Session 0 隔离(一)
- 作业
- 第15周项目一(部分)二维数组
- ASP.NET App_Code中的类文件如何继承System.Web.UI.Page