2541不定时停止广播现象
大家好,我用的是从机的程序。
其中我是这样配置的,协议栈用的是1.4.0的
#define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_GENERAL
uint16 gapRole_AdvertOffTime = 0;
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );
为什么模块会不定时的停止广播?这里先谢过各位大牛的指点了。
若是要保持无限广播的话,可以先设置TGAP_GEN_DISC_ADV_MIN = 0。GAP_SetParamValue(TGAP_GEN_DISC_ADV_MIN,0).再使能广播。
另外可以参考论坛相关帖子 http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/p/62121/154912.aspx
学习了。
谢谢 Susan Yang ,我试一下
多谢指导,我是想有广播间隔,但是不是广播一段时间后就停止广播的
那您可以先设置你每次的广播时间,TGAP_GEN_DISC_ADV_MIN = 10000。GAP_SetParamValue(TGAP_GEN_DISC_ADV_MIN,10000)。
然后再设置关闭广播的持续时间,如20秒:
gapRole_AdvertOffTime = 20000。
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );
Susan Yang 谢谢你耐心的解答。
我还有一个问题想问您一下,在从机程序中有这样一段说明
// Set advertising interval
{
uint16 advInt = DEFAULT_ADVERTISING_INTERVAL;
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advInt );
}
这不是修改广播间隔吗?
TGAP_GEN_DISC_ADV_MIN 和 TGAP_GEN_DISC_ADV_INT_MIN两者有什么关系。
或者说我要周期性广播按您上面说的方法没错可以。
是不是这样修改也可以
1. // What is the advertising interval when device is discoverable (units of 625us, 160=100ms)
#define DEFAULT_ADVERTISING_INTERVAL 160
2. #define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_GENERAL
3.
// Set advertising interval
{
uint16 advInt = DEFAULT_ADVERTISING_INTERVAL;
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advInt );
}
这样是不是可以无限广播且广播间隔为100ms
keyfob有这样一段解释
// Use limited discoverable mode to advertise for 30.72s, and then stop, or
// use general discoverable mode to advertise indefinitely
#define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_LIMITED
//#define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_GENERAL
这是我自己总结的广播相关的一些配置,可以参考一下。
广播可以设置为自动广播和手动广播。
1、广播相关参数:
(1)默认广播发送时间间隔
// What is the advertising interval when device is discoverable (units of 625us, 640=400ms)
#define DEFAULT_ADVERTISING_INTERVAL 640
(2)设备可被发现模式
// Limited discoverable mode advertises for 30.72s, and then stops
// General discoverable mode advertises indefinitely
#define DEFAULT_DISCOVERABLE_MODE
limited mode:GAP_ADTYPE_FLAGS_LIMITED 规定时间内发送广播,然后停止发送
general mode: GAP_ADTYPE_FLAGS_GENERAL 循环发送广播
(3)广播使能
uint8 initial_advertising_enable = TRUE or FALSE
(4)广播停止时间
// By setting this to zero, the device will go into the waiting state after
// being discoverable for 30.72 second, and will not being advertising again
// until the enabler is set back to TRUE
uint16 gapRole_AdvertOffTime = 0 or others
2、参数设置
(1)广播使能
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );
(2)广播停止时间设置
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );
(3)设置广播相关时间
uint16 advInt = DEFAULT_ADVERTISING_INTERVAL;
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advInt );
//set the advertising time for each
GAP_SetParamValue(TGAP_GEN_DISC_ADV_MIN, 1000);
3、几种广播模式相关参数设置:
(1)单次限时广播
a. 设置广播模式为限制广播
#define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_LIMITED
b. 广播停止时间设置
uint16 gapRole_AdvertOffTime = 0;
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );
c. 广播时间设置
uint16 advInt = DEFAULT_ADVERTISING_INTERVAL;
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt );
d. 广播持续时间设置
GAP_SetParamValue(TGAP_LIM_ADV_TIMEOUT, 3); //3s
e. 广播使能
uint8 initial_advertising_enable = TRUE;
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );
(2)手动循环广播
a ~ d设置与单次限时广播时间相同
e. 通过添加一个定时器来定时启动广播:
广播使能
uint8 initial_advertising_enable = TRUE;
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );
(3)自动循环广播
a. 设置广播模式为通用广播
#define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_GENERAL
b. 广播停止时间
uint16 gapRole_AdvertOffTime = 4000; //4s
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );
c. 广播时间设置
uint16 advInt = DEFAULT_ADVERTISING_INTERVAL;
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advInt );
d. 广播持续时间设置
GAP_SetParamValue(TGAP_GEN_DISC_ADV_MIN, 1000);
e.广播使能
uint8 initial_advertising_enable = TRUE;
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &initial_advertising_enable );
*注: 设置广播持续时间为0时,会持续广播,这时候设置广播停止时间无效,即GAPROLE_ADVERT_OFF_TIME参数设置无效果。
谢谢 bo lai