Central 扫描过程的参数设置



1. 设置Central Role 参数
GAPCENTRALROLE_IRK 
GAPCENTRALROLE_SRK 
GAPCENTRALROLE_SIGNCOUNTER 
GAPCENTRALROLE_BD_ADDR 
<-只读参数:Device address read from controller. This can be set with the HCI_EXT_SetBDADDRCmd(). 
GAPCENTRALROLE_MAX_SCAN_RES  
<-最多扫描回应数量,可以理解:有N个广播事件,那Central最多可以回复多少个
    uint8 scanRes = DEFAULT_MAX_SCAN_RES;
    GAPCentralRole_SetParameter ( GAPCENTRALROLE_MAX_SCAN_RES, sizeof( uint8 ), &scanRes );


===================================================================
2. 设置GAP,链路相关参数
    GAP_SetParamValue( TGAP_GEN_DISC_SCAN, DEFAULT_SCAN_DURATION );
<-通用模式下,扫描时间(ms)
——————————————————————————————————————————————
    GAP_SetParamValue( TGAP_LIM_DISC_SCAN, DEFAULT_SCAN_DURATION );
<-有限模式下,扫描时间(ms)
——————————————————————————————————————————————
    GGS_SetParameter( GGS_DEVICE_NAME_ATT, GAP_DEVICE_NAME_LEN, (uint8 *) simpleBLEDeviceName );
<-设置ATT NAME,该名字需要建立连接后,才能访问
=======================================================================


3. 设置Bond 参数,建立连接参数,握手过程参数
    uint32 passkey = DEFAULT_PASSCODE;
<-匹配密码
——————————————————————————————————————————————
    uint8 pairMode = DEFAULT_PAIRING_MODE;
<-主机配对模式 ->GAPBOND_PAIRING_MODE_NO_PAIRING   不允许配对
->GAPBOND_PAIRING_MODE_WAIT_FOR_REQ 等待从机配对请亲
->GAPBOND_PAIRING_MODE_INITIATE 不用等待,直接接收匹配
——————————————————————————————————————————————
    uint8 mitm = DEFAULT_MITM_MODE;
<-防止攻击  TRUE:需要密码配对, FALSE:不需要密码配对
——————————————————————————————————————————————
    uint8 ioCap = DEFAULT_IO_CAPABILITIES;
<-设置 Bond IO 功能 ->GAPBOND_IO_CAP_DISPLAY_ONLY               Display Only Device
->GAPBOND_IO_CAP_DISPLAY_YES_NO           Display and Yes and No Capable
->GAPBOND_IO_CAP_KEYBOARD_ONLY           Keyboard Only
->GAPBOND_IO_CAP_NO_INPUT_NO_OUTPUT        No Display or Input Device
->GAPBOND_IO_CAP_KEYBOARD_DISPLAY   Both Keyboard and Display Capable
——————————————————————————————————————————————
    uint8 bonding = DEFAULT_BONDING_MODE;
<是否绑定: TRUE:绑定 FALSE:不绑定
    参数设置过程:->>>>>>>>>>>>>>>>>>>
    GAPBondMgr_SetParameter( GAPBOND_DEFAULT_PASSCODE, sizeof( uint32 ), &passkey );
    GAPBondMgr_SetParameter( GAPBOND_PAIRING_MODE, sizeof( uint8 ), &pairMode );
    GAPBondMgr_SetParameter( GAPBOND_MITM_PROTECTION, sizeof( uint8 ), &mitm );
    GAPBondMgr_SetParameter( GAPBOND_IO_CAPABILITIES, sizeof( uint8 ), &ioCap );
    GAPBondMgr_SetParameter( GAPBOND_BONDING_ENABLED, sizeof( uint8 ), &bonding );
================================================================


4. 事件回调函数
    4.1。如何理解? CentralRole 产生事件,通过回调函数给APP处理
     | typedef struct 
     |   { 
     |          pfnGapCentralRoleRssiCB_t   rssiCB;   //!< RSSI callback. 
     |     pfnGapCentralRoleEventCB_t  eventCB;  //!< Event callback.
     |   } gapCentralRoleCB_t; 
     |—————————————————————————————————
     | typedef void (*pfnGapCentralRoleRssiCB_t) 
     |  
     |      uint16 connHandle,                  //!< Connection handle of the current RSSI. 
     |      int8  rssi                            //!< New RSSI value. 
     | ); 
|———————————————————————————————
| typedef uint8 (*pfnGapCentralRoleEventCB_t) 
|
| gapCentralRoleEvent_t *pEvent         //!< Pointer to event structure. 
| ); 
————————————————————————————————————
    4.2。CentralRole有两个回调函数,先分析事件回调函数  (*pfnGapCentralRoleEventCB_t) 
     | 函数有一个形参,类型是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;
|
| 里面每一个“结点”又是一个结构体,用来描述该事件,具体描述可以参考
| TI CC254x Bluetooth Low Energy Software Developer’s Guide  ->GAP API ->Events
| 和 BLE_API_Guide_main.htm
| 《文档最后有常用的事件描述》
——————————————————————————————————————————
     4.3。注册回调函数(回调函数编写放在最后)
     | 4.3.1  定义回调函数结构体
     | static  const gapCentralRoleCB_t  simpleBLERoleCB =
     | {
     | simpleBLECentralRssiCB,       // RSSI callback
|   simpleBLECentralEventCB       // Event callback
| };
4.3.2  注册回调函数并启动齐备
| // 启动设备,同时 注册了回调函数
    | VOID GAPCentralRole_StartDevice( (gapCentralRoleCB_t *) &simpleBLERoleCB );
——————————————————————————————————————
      4.4 编写回调函数
     | static uint8 simpleBLECentralEventCB( gapCentralRoleEvent_t *pEvent )
| {
| switch ( pEvent->gap.opcode )
| {
| case GAP_DEVICE_INIT_DONE_EVENT : 用户代码;break;
| case GAP_DEVICE_DISCOVERY_EVENT :用户代码;break;
| case GAP_LINK_ESTABLISHED_EVENT : 用户代码;break;
| case GAP_DEVICE_INFO_EVENT: 用户代码;  break;
| }
| }
     |  
5. 启动扫描
|使用函数GAPCentralRole_StartDiscovery,函数包含3个参数
|——————————————————————————————————————————————————————————————————————————————
|5.1 参数1:DISCOVERY_MODE
| DEVDISC_MODE_NONDISCOVERABLE
| DEVDISC_MODE_GENERAL
| DEVDISC_MODE_LIMITED
| DEVDISC_MODE_ALL
|
| 参数2:TURE/FALSE  是否自动扫描
| 非主动扫描(被动扫描): Central 只监听广播者,而不发起任何数据
| 主动扫描:Central会要求广播者发起scan request,广播者会做出scan response
|
| 参数3:TRUE/FALSE 是否支持白名单
|
|5.2 实现
| GAPCentralRole_StartDiscovery( DEFAULT_DISCOVERY_MODE,
     |                                  DEFAULT_DISCOVERY_ACTIVE_SCAN,
     |                                  DEFAULT_DISCOVERY_WHITE_LIST );
|
======================================================================================


GAP_DEVICE_INIT_DONE_EVENT
在4.3.2 中,注册回调函数,并启动设备之后,会产生GAP_DEVICE_INIT_DONE_EVENT


GAP_DEVICE_INFO_EVENT
在发现设备过程中,产生的事件,如在主动扫描模式中,广播者发出的scan response包
事件的用户代码如下:
DEFAULT_DEV_DISC_BY_SVC_UUID是APP中的宏定义,是否过滤UUID
if ( DEFAULT_DEV_DISC_BY_SVC_UUID == TRUE )
        {
  判断当前发现设备的UUID是否SIMPLEPROFILE_SERV_UUID,
          if ( simpleBLEFindSvcUuid( SIMPLEPROFILE_SERV_UUID,
                                     pEvent->deviceInfo.pEvtData,
                                     pEvent->deviceInfo.dataLen ) )
          {
登记设备信息
            simpleBLEAddDeviceInfo( pEvent->deviceInfo.addr, pEvent->deviceInfo.addrType );
 《还可以获取scan response包数据信息》
          }
        }
  
GAP_LINK_ESTABLISHED_EVENT
如果设备连接成功,那么就把参数改成设备连接成功的参数并且如果句柄值没有读到过,则进行发现服务事件。
如果连接失败,就把连接参数改为空闲的状态。


GAP_DEVICE_INFO_EVENT
设备发现过程完成后产生该事件

















你可能感兴趣的:(Central 扫描过程的参数设置)