BLE协议栈Central 工程中与广播连接建立的事件
最近在改写BLE协议栈,需要实现实时发现周边从设备,并建立连接,获取RSSI的功能,没什么难度,但着实将各个事件好好看了一遍。曾经看到一位大神说相同的任务使用事件触发方式,不同的任务使用消息传递方式。冥冥之中突然来了感觉~
BLE进行广播和建立连接的事件主要实现是在simpleBLECentralEventCB的回调函数中:
所有使用到的变量都在联合体gapCentralRoleEvent_t中:
typedef union
{
gapEventHdr_t gap; //!< GAP_MSG_EVENT and status.
gapDeviceInitDoneEvent_t initDone; //!< GAP initialization done. 本机信息
gapDeviceInfoEvent_t deviceInfo;//!< Discovery device information event structure. 从机信息
gapDevDiscEvent_t discCmpl;//!< Discovery complete event structure.从机信息(全部)
gapEstLinkReqEvent_t linkCmpl; //!< Link complete event structure.
gapLinkUpdateEvent_t linkUpdate; //!< Link update event structure.
gapTerminateLinkEvent_t linkTerminate; //!< Link terminated event structure.
} gapCentralRoleEvent_t; // central.h
1 板级初始化事件:GAP_DEVICE_INIT_DONE_EVENT
case GAP_DEVICE_INIT_DONE_EVENT: // 初始化 // 是本机GAP层的初始化信息 在运行到GAPCentralRole_StartDevice函数被回调
{
LCD_WRITE_STRING( bdAddr2Str( pEvent->initDone.devAddr ), HAL_LCD_LINE_2 );
}
break;
详解:
作用:进行GAP层的初始化
详解:
/**
* GAP_DEVICE_INIT_DONE_EVENT message format. This message is sent to the
* app when the Device Initialization is done [initiated by calling
* GAP_DeviceInit()]. gap.h
*/
typedef struct
{
osal_event_hdr_t hdr; //!< GAP_MSG_EVENT and status
uint8 opcode; //!< GAP_DEVICE_INIT_DONE_EVENT
uint8 devAddr[B_ADDR_LEN]; //!< Device's BD_ADDR 本机的MAC地址
uint16 dataPktLen; //!< HC_LE_Data_Packet_Length 初始化长度为27
uint8 numDataPkts; //!< HC_Total_Num_LE_Data_Packets 初始化为4
} gapDeviceInitDoneEvent_t;
2 搜索从机事件(每搜到一个从机进入一次):GAP_DEVICE_INFO_EVENT
case GAP_DEVICE_INFO_EVENT: //过程量 从机的广播数据 搜索到之后添加到从机列表中
{
char temprssiarg[4]={0};
// if filtering device discovery results bas