BLE 有限可发现模式&普通可发现模式

-------------------------------------------------------simple_peripheral.c

// General discoverable mode: advertise indefinitely

#define DEFAULT_DISCOVERABLE_MODE             GAP_ADTYPE_FLAGS_GENERAL

-------------------------------------------------------Gap.h

#define GAP_ADTYPE_FLAGS_LIMITED                0x01 //!< Discovery Mode: LE Limited Discoverable Mode
#define GAP_ADTYPE_FLAGS_GENERAL                0x02 //!< Discovery Mode: LE General Discoverable Mode

#define GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED    0x04 //!< Discovery Mode: BR/EDR Not Supported

-------------------------------------------------------peripheral.c

#define DEFAULT_ADVERT_OFF_TIME       30000   // 30 seconds

uint16_t advertOffTime = 0;

GAPRole_SetParameter(GAPROLE_ADVERT_OFF_TIME, sizeof(uint16_t),&advertOffTime);

-------------------------------------------------------Gap.h

/**
  * @brief Minimum time to remain advertising, when in general discoverable mode (ms) Setting this parameter to 0 turns off the timeout, thus allowing infinite advertising
  * 保持广告的最小时间,当一般可发现模式(ms)将该参数设置为0时,关闭超时,从而允许无限广告
  * default: 0
  *
  * range: 0-65535
  */
#define TGAP_GEN_DISC_ADV_MIN          0

/**
  * @brief Time to remain advertising in limited discovery mode (sec)
  *  在有限的发现模式下(sec)继续做广告的时间
  * default: 180
  *
  * range: 1-65535
  */

#define TGAP_LIM_ADV_TIMEOUT           1

--------------------------------------------------------------

低功耗蓝牙的发现模式主要分为有限可发现模式和普通(无限)可发现模式。

注意发现模式的定义必须在广播数据的开头处,不能在扫描回应数据中定义。

设备就处于有限可发现模式,当设备处于有限可发现模式时,很多人以及网上的一些资料提到广播会在使能打开之后的 30.72s 之后停止广播。但是实际测试并不是这样,而是180s

在有限可发现模式下,默认是180s之后停止广播,如果想设置这个值,可以用下面的方式:GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT, ADV_TIMEOUT );  

为了实现在设置的时间或者是默认的时间之后,广播停止,过了一段时间(默认应该是 30s 之后),广播又重新开启了。出现这种情况的时候应关注GAPROLE_ADVERT_OFF_TIME的设置,如果不设置该值,就会出现停止广播 30s(默认值)之后重新广播的情况。

--------------------------------------------------------------

最常用的场景,一直持续广播

  1. #define DEFAULT_DISCOVERABLE_MODE             GAP_ADTYPE_FLAGS_GENERAL  
  2. // Duration of slow advertising duration in ms (set to 0 for continuous advertising)  
  3. #define DEFAULT_SLOW_ADV_DURATION             0  
  4. GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_SLOW_ADV_DURATION ); 

--------------------------------------------------------------

广播使能开启之后,限制广播在 30s 之后停止,并且在应用部分没有使能打开的情况下不再广播

  1. #define DEFAULT_DISCOVERABLE_MODE             GAP_ADTYPE_FLAGS_LIMITED 
  2. uint16 gapRole_AdvertOffTime = 0;  
  3. GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );//GAPROLE_ADVERT_OFF_TIME设置的时间单位是ms,默认是30s 
  4. uint16 ADV_TIMEOUT = 30;  
  5. GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT, ADV_TIMEOUT );//设置的单位是s,不设置的话,默认是180s 

--------------------------------------------------------------

广播使能开启之后,限制广播在 20s 之后停止,然后过 15s 之后自动重新广播,如此反复。

  1. #define DEFAULT_DISCOVERABLE_MODE             GAP_ADTYPE_FLAGS_LIMITED  
  2. uint16 gapRole_AdvertOffTime = 15000;  
  3. GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );//GAPROLE_ADVERT_OFF_TIME设置的时间单位是ms,默认是30s  
  4. uint16 ADV_TIMEOUT = 20;  
  5. GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT, ADV_TIMEOUT );//设置的单位是s,不设置的话,默认是180s 


你可能感兴趣的:(BLE 有限可发现模式&普通可发现模式)