转载自:
https://blog.csdn.net/Life_Maze/article/details/79775105
-------------------------------------------------------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(默认值)之后重新广播的情况。
--------------------------------------------------------------
最常用的场景,一直持续广播
- #define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_GENERAL
- // Duration of slow advertising duration in ms (set to 0 for continuous advertising)
- #define DEFAULT_SLOW_ADV_DURATION 0
- GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_SLOW_ADV_DURATION );
--------------------------------------------------------------
广播使能开启之后,限制广播在 30s 之后停止,并且在应用部分没有使能打开的情况下不再广播
- #define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_LIMITED
- uint16 gapRole_AdvertOffTime = 0;
- GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );//GAPROLE_ADVERT_OFF_TIME设置的时间单位是ms,默认是30s
- uint16 ADV_TIMEOUT = 30;
- GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT, ADV_TIMEOUT );//设置的单位是s,不设置的话,默认是180s
--------------------------------------------------------------
广播使能开启之后,限制广播在 20s 之后停止,然后过 15s 之后自动重新广播,如此反复。
- #define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_LIMITED
- uint16 gapRole_AdvertOffTime = 15000;
- GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );//GAPROLE_ADVERT_OFF_TIME设置的时间单位是ms,默认是30s
- uint16 ADV_TIMEOUT = 20;
- GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT, ADV_TIMEOUT );//设置的单位是s,不设置的话,默认是180s