BLE协议栈之Central事件慢慢谈

本文深入探讨BLE协议栈中Central的角色,详细分析了广播、连接建立过程中的关键事件,包括板级初始化事件、搜索从机事件、连接建立事件和连接超时事件。通过这些事件,Central能实时发现并连接到从设备,获取RSSI信息。
摘要由CSDN通过智能技术生成

 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
  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值