赞
踩
蓝牙主机从机建立连接绑定过程
center与simplePeripheral建立连接过程
center首先进行osal_init_system()初始化各个任务,SimpleBLECentral_Init->osal_set_event( simpleBLETaskId, START_DEVICE_EVT );进入SimpleBLECentral_ProcessEvent()
调用
typedef union
{
} gapCentralRoleEvent_t;
联合体,只有deviceInfo里面的数据是正确的
typedef struct
{
} gapDeviceInitDoneEvent_t;
能获得如设备地址等信息
设备初始化完成
通过串口发送'1'触发设备发现
进行设备扫描
GAP_DEVICE_INFO_EVENT
GAP_DEVICE_DISCOVERY_EVENT
当发现一个设备时,触发一个设备info事件同样是在simpleBLECentralEventCB处理此时pEvent改变为deviceInfo可以获得广告设备的类型,地址。rssi强度,还有广告数据,内容如下。
typedef struct
{
} gapDeviceInfoEvent_t;
center代码是通过设备服务器的uuid来查找设备,一旦找到相应的设备,将设备加入
设备表simpleBLEDevList[]中simpleBLEScanRes扫描到的个数自加一。
typedef struct
{
} gapDevRec_t;
设备表的结构体
addrType有:
#define
#define
#define
#define
case GAP_DEVICE_INFO_EVENT:
此时已经获得了扫描到的设备个数,以及设备地址,还有广告内容等信息。
通过串口发送‘3’来 建立连接
建立连接:
typedef struct
{
} gapEstLinkReq_t;
调用 GAP_EstablishLinkReq(gapEstLinkReq_t
#define GAP_LINK_ESTABLISHED_EVENT
typedef struct
{
} gapEstLinkReqEvent_t;
可以得到设备地址。连接的handle连接完成
连接过程中发送START_DISCOVERY_EVT事件进行服务器发现。就可以对相应的handle,characteristic value进行读写操作,或者用于向主机,从机发送数据。
获得服务器相应特性值的handle有三种方法:
1.通过主服务的uuid(uuid已知)来查找。
bStatus_t GATT_DiscPrimaryServiceByUUID
uint8 *
uint8
uint8
)
发送 ATT_FIND_BY_TYPE_VALUE_RSP 或者 ATT_ERROR_RSP由相应任务接收处理
static void simpleBLEGATTDiscoveryEv
2.查找所有的服务
bStatus_t GATT_DiscAllPrimaryServices
uint8
)
到此连接完成。
3、GATT_DiscAllCharDescs() 这个接口,这个能自动把所有service 查找完,应该能发现你要的UUID。
终止连接:
调用
GAP_TerminateLinkReq(任务id,handle)发送断开连接event
GAP_LINK_TERMINATED_EVENT
typedef struct
{
} gapEstLinkReqEvent_t;
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。